Kraken Academy

Регистрация Войти

aflplusplus

aflplusplus

Категория: фаззинг

AFL++ — это фреймворк для фаззинга, который работает путём автоматического генерации и отправки случайных, мутационных, или специально созданных данных в тестируемое приложение с целью выявления потенциальных уязвимостей, таких как переполнение буфера, ошибки сегментации, утечки памяти и другие баги. AFL++ значительно расширяет возможности оригинального AFL, добавляя новые функции, улучшенные алгоритмы мутаций и поддержку различных типов бинарных файлов.

Принцип работы:

  1. Инструментирование кода: AFL++ сначала инструментирует тестируемое приложение, добавляя в него дополнительный код, который помогает отслеживать выполнение программы и её реакции на различные входные данные.
  2. Генерация тестов: Затем инструмент генерирует множество различных вариантов входных данных, мутируя их с целью обнаружения уязвимостей.
  3. Анализ выполнения: AFL++ запускает тестируемое приложение с этими входными данными и анализирует его поведение, регистрируя любые аномалии, сбои или неожиданное поведение.
  4. Отчет об уязвимостях: Если обнаруживаются ошибки или сбои, AFL++ сохраняет входные данные, вызвавшие проблему, что помогает в дальнейшем анализе и устранении уязвимостей.

Примеры использования:

Базовый запуск фаззинга:

Чтобы начать фаззинг простого приложения с использованием AFL++, вы сначала должны скомпилировать его с инструментированием, а затем запустить фаззинг:

afl-clang-fast -o test_program test_program.c
afl-fuzz -i input_dir -o output_dir ./test_program

Здесь afl-clang-fast используется для компиляции программы test_program.c с инструментированием, а afl-fuzz запускает процесс фаззинга, используя входные данные из каталога input_dir и сохраняя результаты в output_dir.

Запуск фаззинга с использованием нескольких воркеров:

Для параллельного фаззинга с несколькими процессами вы можете запустить AFL++ с несколькими воркерами:

afl-fuzz -i input_dir -o output_dir -M main ./test_program
afl-fuzz -i input_dir -o output_dir -S secondary1 ./test_program

Здесь -M main запускает основной воркер, а -S secondary1 — вторичный, что позволяет ускорить процесс фаззинга.

Фаззинг бинарных файлов:

Если у вас есть бинарный файл, который вы хотите протестировать на наличие уязвимостей, можно использовать afl-qemu-trace, который позволяет фаззить бинарные файлы без исходного кода:

afl-fuzz -Q -i input_dir -o output_dir ./binary_file

Здесь -Q включает режим QEMU, который позволяет фаззить бинарные файлы без исходного кода.

Анализ результатов:

После завершения фаззинга вы можете проанализировать результаты, чтобы увидеть, какие входные данные вызвали сбои или ошибки:

afl-plot output_dir ./plot_output

Этот пример генерирует графическое представление процесса фаззинга, что помогает визуализировать его результаты.

Примечания:

Заключение:

AFL++ — это мощный и гибкий инструмент для фаззинга, который помогает выявлять уязвимости в программном обеспечении путём автоматического тестирования с использованием случайных и мутированных входных данных. Этот инструмент значительно расширяет возможности оригинального AFL, добавляя новые функции и улучшения, что делает его незаменимым для специалистов по безопасности и разработчиков, занимающихся тестированием и обеспечением безопасности приложений.