AFL++

Exploitation v5.02c · 29.06.2026 активный

Продвинутый фаззер для поиска уязвимостей в бинарных программах методом покрытия кода. Форк и улучшение AFL: QEMU-режим (без исходников), persistent mode, laf-intel, CmpLog, MOpt мутации, параллельный фаззинг. Один из главных инструментов в vulnerability research и bug bounty.

v5.02c
29.06.2026 current
Добавлен 07.07.2026 · Обновлён 07.07.2026 · Exploitation
Установка
# Ubuntu/Kali:
sudo apt install afl++

# Или из исходников (для последних фич):
git clone https://github.com/AFLplusplus/AFLplusplus
cd AFLplusplus
make distrib
sudo make install

# Компиляция цели с инструментацией:
CC=afl-clang-fast ./configure
make

# Запуск фаззинга:
afl-fuzz -i input/ -o output/ -- ./target_binary @@

# QEMU-режим (без исходников):
afl-fuzz -i input/ -o output/ -Q -- ./target_binary @@
переведено ИИ

American Fuzzy Lop плюс плюс (AFL++)

логотип AFL++

Версия релиза: 5.02c

Версия в GitHub: 5.02c

Репозиторий: https://github.com/AFLplusplus/AFLplusplus

AFL++ поддерживается:

Первоначально разработан Михалом "lcamtuf" Залевски.

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

AFL++ лицензируется по AGPL-3.0-or-later, и также содержит файлы под лицензией Apache-2.0. Всё, что компилируется в fuzzing-харнес, является и останется лицензированным по 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

Пошаговый быстрый старт:

  1. Скомпилируйте программу или библиотеку для фаззинга с помощью afl-cc. Типичный способ сделать это:

CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared make clean all

  1. Получите небольшой, но валидный входной файл, который имеет смысл для программы. При фаззинге громких синтаксисов (SQL, HTTP и т.д.) также создайте словарь, как описано в dictionaries/README.md.

  2. Если программа читает из stdin, запустите afl-fuzz следующим образом:

./afl-fuzz -i seeds_dir -o output_dir -- \ /path/to/tested/program [...аргументы командной строки программы...]

Чтобы добавить словарь, добавьте -x /path/to/dictionary.txt к afl-fuzz.

Если программа берет входные данные из файла, вы можете поставить @@ в командной строке программы; AFL++ подставит автоматически сгенерированное имя файла.

  1. Изучите всё, что показано красным цветом в интерфейсе фаззера, немедленно обратившись к docs/afl-fuzz_approach.md#understanding-the-status-screen.

  2. Вы найдете найденные падения (crashes) и зависания (hangs) в подкаталогах crashes/ и hangs/ в директории -o output_dir. Вы можете воспроизвести падения, подавая их на вход цели, например, если ваша цель использует stdin:

cat output_dir/crashes/id:000000,* | /path/to/tested/program [...аргументы командной строки программы...]

Вы можете генерировать core-файлы или использовать gdb напрямую для расследования падений.

  1. Для анализа покрытия вашего фаззинга мы рекомендуем наши партнёрские инструменты cov-analysis (отчёты о покрытии на основе исходного кода из корпуса фаззинга) и fuzz-reachability (статический анализ того, какие функции может достичь харнес, чтобы отличить действенное покрытие от мёртвого кода и генерировать белые списки инструментации).

  2. Мы не можем достаточно подчеркнуть это - если вы хотите фаззить эффективно, прочитайте документ docs/fuzzing_in_depth.md!

Контакты

Вопросы? Проблемы? Отчёты об ошибках?

  • Контрибьюторам можно написать через (например, создав issue): https://github.com/AFLplusplus/AFLplusplus.
  • Посмотрите наш FAQ. Если вы найдете интересный или важный вопрос, которого нет, отправьте его через https://github.com/AFLplusplus/AFLplusplus/discussions.
  • Лучше всего: присоединяйтесь к серверу Fuzzing Zulip.
  • Существует (не очень используемый) список рассылки для проекта AFL/AFL++ (просмотр архива). Чтобы сравнить заметки с другими пользователями или получать уведомления о крупных новых функциях, отправьте письмо на afl-users+subscribe@googlegroups.com, но учтите, что это не управляется нами.

Ветки

Существуют следующие ветки:

  • release: последний релиз
  • stable: стабильное состояние AFL++ — синхронизируется с dev время от времени, когда мы удовлетворены её стабильностью. Это ветка по умолчанию.
  • dev: состояние разработки AFL++ — передний край, и вы можете поймать чекаут, который не компилируется или содержит ошибку. Мы принимаем PR (pull requests) только для ветки 'dev'!
  • (любая другая): экспериментальные ветки для работы над конкретными функциями или тестирования новой функциональности или изменений.

Ищется помощь

Посмотрите наш список issues с тегом "help wanted". Это может быть ваш способ поддержать и внести вклад в AFL++ — расширить его чтобы сделать что-то крутое. Если у вас есть другие идеи — просто создайте issue и предложите!

Для всех, кто хочет внести вклад (и отправлять pull requests), пожалуйста, прочтите наши руководство по контрибьюции перед отправкой.

Комментарии
Войдите, чтобы оставить комментарий