
Продвинутая библиотека для фаззинга - Соберите свой фаззер на Rust! Масштабируется на несколько ядер и машин. Для Windows, Android, MacOS, Linux, no_std, ...
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. Он предлагает интеграции с популярными фреймворками инструментирования. На данный момент поддерживаются следующие бэкенды:
SanitizerCoverage, в libafl_targetsFrida, в libafl_fridaQEMU в пользовательском и системном режиме, включая хуки для эмуляции, в libafl_qemuTinyInst, в libafl_tinyinst от elbiazoМы настоятельно рекомендуем не использовать, например, пакет из вашего дистрибутива Linux, так как он, скорее всего, устарел. Вместо этого установите Rust напрямую, инструкции можно найти здесь.
Минимальная поддерживаемая версия Rust определена. Вы всегда можете проверить текущую требуемую версию в Cargo.toml LibAFL:
rustup update stable
fuzzers/. Инструкции по установке в вашем окружении можно найти в руководстве программиста Just.LibAFLgit clone https://github.com/AFLplusplus/LibAFL
cargo build --release
cargo doc
LibAFL (в разработке!) с помощью (требуется mdbook)cd docs && mdbook serve
Мы собрали все примеры фаззеров в ./fuzzers. Обязательно прочитайте их документацию (и исходный код) — это естественный способ начать работу!
just run
Вы можете запустить каждый пример фаззера с помощью следующей команды, если в каталоге фаззера есть файл Justfile. Наиболее протестированный фаззер — ./fuzzers/inprocess/libfuzzer_libpng, многопоточный фаззер, похожий на libfuzzer, использующий LibAFL для обвязки libpng.
LibAFL (в разработке) онлайн или в репозиторииlibaf_qemu: Hacking TMNF - Fuzzing the game server, от RickdeJagerLibAFL написан и поддерживается
Пожалуйста, ознакомьтесь с 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},
}