
Libreria di Fuzzing Avanzata - Incastra il tuo Fuzzer insieme in Rust! Scala su core e macchine. Per Windows, Android, MacOS, Linux, no_std, ...
LibAFL, la libreria per fuzzingLibreria Avanzata per Fuzzing - Combina i tuoi fuzzer e estendi le loro funzionalità usando Rust.
LibAFL è una collezione di componenti riutilizzabili di fuzzer, scritta in Rust, che ti offre molti dei vantaggi di un fuzzer già pronto, pur essendo completamente personalizzabile.
Alcune delle caratteristiche principali attualmente includono:
fast: Facciamo tutto il possibile in fase di compilazione, mantenendo il sovraccarico a runtime minimo. Gli utenti raggiungono 120k esecuzioni/sec in modalità Frida su un telefono (usando tutti i core).scalable: Low Level Message Passing, LLMP in breve, consente a LibAFL di scalare quasi linearmente su più core e, via TCP, su più macchine.adaptable: Puoi sostituire ogni parte di LibAFL. Ad esempio, BytesInput è solo una possibile forma di input: sentiti libero di aggiungere un input basato su AST per fuzzing strutturato e altro.multi platform: LibAFL funziona su Windows, macOS, iOS, Linux e Android, e altro. LibAFL può essere compilato in modalità no_std per iniettare LibAFL in target oscuri come dispositivi embedded e hypervisor.bring your own target: Supportiamo modalità solo binario, come Frida-Mode, e anche molteplici passaggi di compilazione per strumentazione basata su codice sorgente. Ovviamente è facile aggiungere backend di strumentazione personalizzati.LibAFL è veloce, multipiattaforma, compatibile con no_std e scala su core e macchine. Offre un crate principale che fornisce componenti di base per fuzzer personalizzati, libafl, una libreria contenente codice comune che può essere usata per la strumentazione dei target, libafl_targets, e una libreria che fornisce strumenti per avvolgere compilatori, libafl_cc. Offre integrazioni con framework di strumentazione popolari. Al momento, i backend supportati sono:
SanitizerCoverage, in libafl_targetsFrida, in libafl_fridaQEMU user-mode e system mode, inclusi hook per emulazione, in libafl_qemuTinyInst, in libafl_tinyinst by elbiazoTi consigliamo vivamente di non usare ad esempio il pacchetto della tua distribuzione Linux poiché probabilmente è obsoleto. Piuttosto installa Rust direttamente, le istruzioni si trovano qui.
La versione minima supportata di Rust è definita. Puoi sempre controllare la versione attualmente richiesta nel Cargo.toml di LibAFL:
Se la versione di Rust installata è più vecchia di quella elencata in Cargo.toml, aggiorna all'ultima toolchain stabile:
rustup update stable
fuzzers/. Puoi trovare le istruzioni per installarlo nel tuo ambiente nel Manuale del Programmatore di Just.LibAFL congit clone https://github.com/AFLplusplus/LibAFL
cargo build --release
cargo doc
LibAFL (WIP!) con (richiede mdbook)cd docs && mdbook serve
Raccogliamo tutti i fuzzer di esempio in ./fuzzers. Assicurati di leggere la loro documentazione (e il codice sorgente), questo è il modo naturale per iniziare!
just run
Puoi eseguire ogni fuzzer di esempio con questo comando, purché la directory del fuzzer abbia un file Justfile. Il fuzzer più testato è ./fuzzers/inprocess/libfuzzer_libpng, un fuzzer multicore simile a libfuzzer che usa LibAFL per un harness libpng.
LibAFL (WIP) online o nel repolibaf_qemu, Hacking TMNF - Fuzzing the game server, di RickdeJager.LibAFL è scritto e mantenuto da
Per favore consulta CONTRIBUTING.md per le linee guida su come contribuire.
Il tuo fuzzer non funziona come previsto? Prova a leggere DEBUGGING.md per capire come fare debug dei tuoi problemi.
Se usi LibAFL per il tuo lavoro accademico, per favore cita il seguente articolo:
@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},
}