
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.04a
Репозиторий: 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's AFL: больше скорости, больше и лучше мутаций, больше и лучше инструментирования, поддержка пользовательских модулей и т. д.
AFL++ распространяется под лицензией AGPL-3.0-or-later, а также содержит файлы под лицензией Apache-2.0.
Всё, что компилируется в harness для фаззинга, есть и останется под лицензией Apache 2.0.
Каждый файл указывает свою лицензию в заголовке SPDX-License-Identifier — именно
этой лицензии необходимо следовать для данного файла.
Для организаций, которые не могут использовать AGPL, доступна опциональная
коммерческая лицензия (получаемая путём пожертвования на доброе дело — проект и его
сопровождающие не получают денег).
См. LICENSING.md для обзора простым языком и
раздел License ниже для подробностей.
Начало работы
Вот немного информации для начала:
- Для обзора документации AFL++ и очень полезного графического руководства посетите docs/README.md.
- Чтобы начать работу с руководствами, перейдите в docs/tutorials.md.
- О релизах см.
вкладку Releases и
ветки. Однако лучшие ветки для использования —
stableилиdev— в зависимости от вашей склонности к риску. Также взгляните на список важных изменений в AFL++ и список возможностей. - Если вы хотите использовать AFL++ в своей академической работе, проверьте страницу публикаций на сайте.
- Чтобы цитировать нашу работу, смотрите раздел Cite.
- Для сравнений используйте конфигурацию
aflplusplusиз fuzzbench илиafl-clang-fastсAFL_LLVM_CMPLOG=1. Конфигурацию по умолчаниюaflplusplusможно найти на Google's fuzzbench.
Сборка и установка AFL++
Чтобы AFL++ был легко доступен со всем скомпилированным, загрузите образ напрямую из Docker Hub (доступен как для x86_64, так и для arm64):
docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus
Этот образ публикуется автоматически при пуше в стабильную ветку
(см. branches). Если вы используете команду выше, вы найдёте
исходный код вашей цели в /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 [...program's cmdline...]Чтобы добавить словарь, добавьте
-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 [...program's cmdline...]Вы можете генерировать коры или использовать gdb напрямую для последующего анализа крашей.
-
Для анализа покрытия вашего фаззинга мы рекомендуем наши партнёрские инструменты cov-analysis (отчёты о покрытии на основе исходного кода из корпуса фаззинга) и fuzz-reachability (статический анализ того, какие функции может достичь харнесс, чтобы отличить значимые пробелы в покрытии от мёртвого кода и сгенерировать списки разрешённой инструментации)
-
Мы не устанем это повторять — если вы хотите фаззить эффективно, прочитайте документ docs/fuzzing_in_depth.md!
Контакты
Вопросы? Замечания? Отчёты об ошибках?
- С участниками можно связаться (например, создав issue — но только для дефектов AFL++!): https://github.com/AFLplusplus/AFLplusplus.
- Загляните в наш FAQ и Best Practices.
- Лучше всего: присоединяйтесь к серверу Fuzzing Zulip!
Ветки
Существуют следующие ветки: