
AFLplusplus v5.03c
AFL++ — это современный фаззер, занимающий первое место в бенчмарках. Изначально он был основан на AFL. Сегодня он включает в себя qemu 5.1, покрытие без коллизий, улучшенные laf-intel и redqueen, расписания мощности AFLfast++, мутаторы MOpt, unicorn_mode и многое другое!
American Fuzzy Lop plus plus (AFL++)
Версия релиза: 5.03c
Версия GitHub: 5.03c
Репозиторий: https://github.com/AFLplusplus/AFLplusplus
AFL++ поддерживается:
- Marc "van Hauser" Heuse [email protected]
- Dominik Maier [email protected]
- Andrea Fioraldi [email protected]
- Heiko "hexcoder-" Eissfeldt [email protected]
- frida_mode поддерживается @Worksbutnottested
Изначально разработан Michal "lcamtuf" Zalewski.
AFL++ — это превосходный форк Google AFL — больше скорости, больше и лучше мутаций, больше и лучше инструментирования, поддержка пользовательских модулей и т.д.
AFL++ распространяется под лицензией AGPL-3.0-or-later, а также содержит файлы под лицензией Apache-2.0.
Всё, что компилируется в фаззинг-харнесс, лицензировано и останется лицензированным под Apache 2.0.
Каждый файл указывает свою собственную лицензию в заголовке SPDX-License-Identifier — именно
эту лицензию вы должны соблюдать для данного файла.
Доступна коммерческая лицензия для организаций, которые
не могут использовать AGPL (получается путём пожертвования на благое дело — проект и его
поддерживающие не получают денег).
См. LICENSING.md для обзора простым языком и
раздел «Лицензия» ниже для подробностей.
Начало работы
Вот некоторая информация, чтобы вы могли начать:
- Обзор документации AFL++ и очень полезное графическое руководство см. на docs/README.md.
- Чтобы начать с обучающих материалов, перейдите к docs/tutorials.md.
- О релизах см.
вкладку Releases и
ветки. Лучшими ветками для использования, однако, являются
stableилиdev— в зависимости от вашей готовности к риску. Также ознакомьтесь со списком важных изменений в AFL++ и списком возможностей. - Если вы хотите использовать AFL++ в своей академической работе, ознакомьтесь со страницей статей на сайте.
- Чтобы цитировать нашу работу, см. раздел Цитирование.
- Для сравнений используйте конфигурацию fuzzbench
aflplusplusилиafl-clang-fastсAFL_LLVM_CMPLOG=1. Вы можете найти конфигурацию по умолчаниюaflplusplusв Google fuzzbench.
Сборка и установка AFL++
Чтобы иметь AFL++ легко доступным со всем скомпилированным, загрузите образ напрямую из Docker Hub (доступен как для x86_64, так и для arm64):
docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus
Этот образ автоматически публикуется при пуше в ветку stable
(см. ветки). Если вы используете команду выше, вы найдёте исходный код
вашей цели в /src в контейнере.
Примечание: вы также можете использовать aflplusplus/aflplusplus:dev, который представляет собой самое актуальное
состояние разработки AFL++.
Чтобы собрать AFL++ самостоятельно — что мы рекомендуем — продолжите в docs/INSTALL.md.
Быстрый старт: Фаззинг с AFL++
ПРИМЕЧАНИЕ: Прежде чем начать, пожалуйста, прочитайте о рисках фаззинга, связанных со здравым смыслом.
Это быстрый старт для фаззинга целей с доступным исходным кодом. Чтобы подробно прочитать о процессе, см. docs/fuzzing_in_depth.md.
Чтобы узнать о фаззинге других целей, см.:
- Цели только в бинарном виде: docs/fuzzing_binary-only_targets.md
- Сетевые сервисы: docs/best_practices.md#fuzzing-a-network-service
- GUI-программы: docs/best_practices.md#fuzzing-a-gui-program
Пошаговый быстрый старт:
-
Скомпилируйте программу или библиотеку для фаззинга с помощью
afl-cc. Обычный способ сделать это:CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared make clean all -
Получите небольшой, но валидный входной файл, который имеет смысл для программы. При фаззинге многословного синтаксиса (SQL, HTTP и т.д.) также создайте словарь, как описано в dictionaries/README.md.
-
Если программа читает из stdin, запустите
afl-fuzzследующим образом:./afl-fuzz -i seeds_dir -o output_dir -- \ /path/to/tested/program [...аргументы командной строки программы...]Чтобы добавить словарь, добавьте
-x /path/to/dictionary.txtк afl-fuzz.Если программа принимает входные данные из файла, вы можете поместить
@@в командную строку программы; AFL++ автоматически подставит туда сгенерированное имя файла. -
Исследуйте всё, что показано красным в интерфейсе фаззера, незамедлительно обратившись к docs/afl-fuzz_approach.md#understanding-the-status-screen.
-
Вы найдёте обнаруженные краши и зависания в подкаталогах
crashes/иhangs/в каталоге-o output_dir. Вы можете воспроизвести краши, передав их цели, например, если ваша цель использует stdin:cat output_dir/crashes/id:000000,* | /path/to/tested/program [...аргументы командной строки программы...]Вы можете генерировать core-файлы или использовать gdb напрямую для анализа крашей.
-
Для анализа покрытия вашего фаззинга мы рекомендуем наши партнёрские инструменты cov-analysis (отчёты о покрытии на основе исходного кода из корпуса фаззинга) и fuzz-reachability (статический анализ того, какие функции может достичь харнесс, чтобы отличить действенные пробелы в покрытии от мёртвого кода и генерировать списки разрешений для инструментирования)
-
Мы не можем подчеркнуть это достаточно — если вы хотите эффективно фаззить, прочитайте документ docs/fuzzing_in_depth.md!
Контакты
Вопросы? Проблемы? Отчёты об ошибках?
- С участниками можно связаться через (например, создав issue — но только для дефектов AFL++!): https://github.com/AFLplusplus/AFLplusplus.
- Ознакомьтесь с нашим FAQ и лучшими практиками.
- Лучше всего: присоединяйтесь к Fuzzing Zulip server!
Ветки
Существуют следующие ветки: