
Biblioteca avanzada de fuzzing - ¡Conecta tu Fuzzer en Rust! Escala entre núcleos y máquinas. Para Windows, Android, MacOS, Linux, no_std, ...
LibAFL, la biblioteca de fuzzingBiblioteca avanzada de fuzzing: ensamble sus propios fuzzers y amplíe sus funcionalidades usando Rust.
LibAFL es una colección de piezas reutilizables de fuzzers, escrita en Rust, que le brinda muchos de los beneficios de un fuzzer comercial, siendo completamente personalizable.
Algunas características destacadas incluyen actualmente:
fast: Hacemos todo lo posible en tiempo de compilación, minimizando la sobrecarga en tiempo de ejecución. Los usuarios alcanzan 120k ejecuciones/seg en modo frida en un teléfono (usando todos los núcleos).scalable: El paso de mensajes de bajo nivel, o LLMP para abreviar, permite que LibAFL escale casi linealmente entre núcleos, y a través de TCP a múltiples máquinas.adaptable: Puede reemplazar cada parte de LibAFL. Por ejemplo, BytesInput es solo un posible formulario de entrada: siéntase libre de agregar una entrada basada en AST para fuzzing estructurado, y más.multi plataforma: LibAFL funciona en Windows, macOS, iOS, Linux y Android, y más. LibAFL se puede compilar en modo no_std para inyectar LibAFL en objetivos oscuros como dispositivos embebidos e hipervisores.traiga su propio objetivo: Admitimos modos solo binarios, como el modo Frida, así como múltiples pasos de compilación para instrumentación basada en código fuente. Por supuesto, es fácil agregar backends de instrumentación personalizados.LibAFL es rápido, multiplataforma, compatible con no_std y escala entre núcleos y máquinas. Ofrece un crate principal que proporciona bloques de construcción para fuzzers personalizados, libafl, una biblioteca que contiene código común que se puede usar para la instrumentación de objetivos, libafl_targets, y una biblioteca que proporciona facilidades para envolver compiladores, libafl_cc. Ofrece integraciones con marcos de instrumentación populares. Actualmente, los backends compatibles son:
SanitizerCoverage, en libafl_targetsFrida, en libafl_fridaQEMU modo usuario y modo sistema, incluidos hooks para emulación, en libafl_qemuTinyInst, en libafl_tinyinst por elbiazoRecomendamos encarecidamente no usar, por ejemplo, el paquete de su distribución Linux, ya que probablemente esté desactualizado. Por lo tanto, instale Rust directamente, las instrucciones se pueden encontrar aquí.
La versión mínima de Rust compatible está definida. Siempre puede verificar la versión requerida actualmente en el Cargo.toml de LibAFL:
Si su versión instalada de Rust es anterior a la que aparece en Cargo.toml, actualice al último toolchain estable:
rustup update stable
fuzzers/. Puede encontrar instrucciones para instalarlo en su entorno en el Manual del programador de Just.LibAFL congit clone https://github.com/AFLplusplus/LibAFL
cargo build --release
cargo doc
LibAFL (¡en proceso!) con (requiere mdbook)cd docs && mdbook serve
Recopilamos todos los fuzzers de ejemplo en ./fuzzers.
Asegúrese de leer su documentación (y código fuente), ¡esta es la forma natural de empezar!
just run
Puede ejecutar cada fuzzer de ejemplo con este comando, siempre que el directorio del fuzzer tenga un archivo Justfile. El fuzzer mejor probado es ./fuzzers/inprocess/libfuzzer_libpng, un fuzzer multinúcleo similar a libfuzzer que usa LibAFL para un harness de libpng.
LibAFL (en proceso) en línea o en el repositoriolibaf_qemu, Hacking TMNF - Fuzzing del servidor del juego, por RickdeJager.LibAFL está escrito y mantenido por
Consulte CONTRIBUTING.md para la guía de contribución.
¿Su fuzzer no funciona como esperaba? Intente leer DEBUGGING.md para entender cómo depurar sus problemas.
Si usa LibAFL para su trabajo académico, cite el siguiente artículo:
@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},
}