Назад к обновлениям
New releaseAug 10, 2026

LibAFL v0.16.0

Продвинутая библиотека для фаззинга - Соберите свой фаззер на Rust! Масштабируется на несколько ядер и машин. Для Windows, Android, MacOS, Linux, no_std, ...

Поделиться

LibAFL, библиотека для фаззинга

Логотип LibAFL

Продвинутая библиотека для фаззинга — собирайте собственные фаззеры и расширяйте их возможности с помощью Rust.

LibAFL — это набор переиспользуемых компонентов фаззеров, написанный на Rust, который предоставляет многие преимущества готового фаззера, оставаясь при этом полностью настраиваемым. Некоторые ключевые особенности включают:

  • fast: мы делаем всё возможное на этапе компиляции, сводя к минимуму накладные расходы во время выполнения. Пользователи достигают 120k execs/sec в режиме frida на телефоне (используя все ядра).
  • scalable: Low Level Message Passing (сокращённо LLMP) позволяет LibAFL масштабироваться почти линейно на ядрах и через TCP на множество машин.
  • adaptable: вы можете заменить любую часть LibAFL. Например, BytesInput — это лишь одна из возможных форм входных данных: не стесняйтесь добавлять входные данные на основе AST для структурированного фаззинга и многое другое.
  • multi platform: LibAFL работает на Windows, macOS, iOS, Linux, Android и других платформах. LibAFL может быть собран в режиме no_std для внедрения в редкие цели, такие как встраиваемые устройства и гипервизоры.
  • bring your own target: мы поддерживаем режимы только с бинарными файлами, такие как Frida-Mode, а также несколько этапов компиляции для инструментирования на основе исходного кода. Конечно, легко добавить пользовательские бэкенды инструментирования.

Основные концепции

LibAFL быстрый, кроссплатформенный, совместимый с no_std и масштабируется на ядра и машины. Он предлагает основной крейт, предоставляющий строительные блоки для пользовательских фаззеров: libafl, библиотеку, содержащую общий код, который может использоваться для инструментирования целей: libafl_targets, и библиотеку, предоставляющую средства для обёртывания компиляторов: libafl_cc. Он предлагает интеграции с популярными фреймворками инструментирования. На данный момент поддерживаются следующие бэкенды:

Сборка и установка

Установка зависимостей

  • Язык разработки Rust
    • Мы настоятельно рекомендуем не использовать, например, пакет из вашего дистрибутива Linux, так как он, скорее всего, устарел. Вместо этого установите Rust напрямую, инструкции можно найти здесь.

    • Минимальная поддерживаемая версия Rust определена. Вы всегда можете проверить текущую требуемую версию в Cargo.toml LibAFL:

      rustup update stable
      
  • Инструменты LLVM
    • Инструменты LLVM (включая clang, clang++) необходимы (новее LLVM 15.0.0 до LLVM 18.1.3). Если вы используете Debian/Ubuntu, мы снова настоятельно рекомендуем установить пакет отсюда
  • Just:

Клонирование репозитория LibAFL

git clone https://github.com/AFLplusplus/LibAFL

Сборка библиотеки с помощью

cargo build --release

Сборка документации API с помощью

cargo doc

Просмотр книги LibAFL (в разработке!) с помощью (требуется mdbook)

cd docs && mdbook serve

Начало работы

Мы собрали все примеры фаззеров в ./fuzzers. Обязательно прочитайте их документацию (и исходный код) — это естественный способ начать работу!

just run

Вы можете запустить каждый пример фаззера с помощью следующей команды, если в каталоге фаззера есть файл Justfile. Наиболее протестированный фаззер — ./fuzzers/inprocess/libfuzzer_libpng, многопоточный фаззер, похожий на libfuzzer, использующий LibAFL для обвязки libpng.

Ресурсы

Авторы

LibAFL написан и поддерживается

Вклад в развитие

Пожалуйста, ознакомьтесь с CONTRIBUTING.md для получения руководства по внесению вклада.

Отладка

Ваш фаззер работает не так, как ожидалось? Попробуйте прочитать DEBUGGING.md, чтобы понять, как отлаживать ваши проблемы.

Цитирование

Если вы используете LibAFL в своей академической работе, пожалуйста, процитируйте следующую статью:

@inproceedings{libafl,
 author       = {Andrea Fioraldi and Dominik Maier and Dongjia Zhang and Davide Balzarotti},
 title        = {{LibAFL: A Framework to Build Modular and Reusable Fuzzers}},
 booktitle    = {Proceedings of the 29th ACM conference on Computer and communications security (CCS)},
 series       = {CCS '22},
 year         = {2022},
 month        = {November},
 location     = {Los Angeles, U.S.A.},
 publisher    = {ACM},
}

Лицензия

Лицензировано на условиях Apache License, Version 2.0 или лицензии MIT по вашему выбору.
Если явно не указано иное, любой вклад, намеренно предоставленный вами для включения в этот крейт, как определено в лицензии Apache-2.0, будет двойным лицензирован, как указано выше, без каких-либо дополнительных условий.

Категории