
Erweiterte Fuzzing-Bibliothek - Stecken Sie Ihren Fuzzer in Rust zusammen! Skaliert über Kerne und Maschinen hinweg. Für Windows, Android, macOS, Linux, no_std, ...
LibAFL, die Fuzzer-BibliothekErweiterte Fuzzing-Bibliothek – Setzen Sie Ihre eigenen Fuzzer zusammen und erweitern Sie ihre Funktionen mit Rust.
LibAFL ist eine Sammlung wiederverwendbarer Fuzzer-Komponenten, geschrieben in Rust. Es bietet Ihnen viele Vorteile eines vorgefertigten Fuzzers, ist aber gleichzeitig vollständig anpassbar.
Einige derzeitige Highlights sind:
schnell: Wir tun alles, was wir zur Kompilierzeit können, um den Laufzeit-Overhead minimal zu halten. Benutzer erreichen 120k Execs/Sek. im Frida-Modus auf einem Telefon (alle Kerne).skalierbar: Low Level Message Passing, kurz LLMP, ermöglicht LibAFL, nahezu linear über Kerne und über TCP auf mehrere Maschinen zu skalieren.anpassbar: Sie können jeden Teil von LibAFL ersetzen. Zum Beispiel ist BytesInput nur eine mögliche Form von Eingabe: Sie können gerne eine AST-basierte Eingabe für strukturiertes Fuzzing hinzufügen und mehr.plattformübergreifend: LibAFL läuft unter Windows, macOS, iOS, Linux und Android und mehr. LibAFL kann im no_std-Modus erstellt werden, um LibAFL in obskure Ziele wie eingebettete Geräte und Hypervisoren zu injizieren.eigenes Ziel mitbringen: Wir unterstützen reine Binärmodi wie den Frida-Modus sowie mehrere Kompilierdurchgänge für quellbasierte Instrumentierung. Natürlich ist es einfach, benutzerdefinierte Instrumentierungs-Backends hinzuzufügen.LibAFL ist schnell, plattformübergreifend, mit no_std kompatibel und skaliert über Kerne und Maschinen. Es bietet eine Haupt-Crate, die Bausteine für benutzerdefinierte Fuzzer bereitstellt, libafl, eine Bibliothek, die allgemeinen Code für die Zielinstrumentierung enthält, libafl_targets, und eine Bibliothek, die Werkzeuge zum Einwickeln von Compilern bereitstellt, libafl_cc. Es bietet Integrationen mit gängigen Instrumentierungs-Frameworks. Derzeit werden folgende Backends unterstützt:
SanitizerCoverage, in libafl_targetsFrida, in libafl_fridaQEMU im Benutzermodus und Systemmodus, einschließlich Hooks für Emulation, in libafl_qemuTinyInst, in libafl_tinyinst von elbiazoWir empfehlen dringend, nicht z.B. das Paket Ihrer Linux-Distribution zu verwenden, da dieses wahrscheinlich veraltet ist. Installieren Sie Rust daher direkt; Anweisungen finden Sie hier.
Die minimal unterstützte Rust-Version ist definiert. Sie können die aktuell benötigte Version in LibAFLs Cargo.toml überprüfen:
Wenn Ihre installierte Rust-Version älter ist als die in Cargo.toml aufgeführte, aktualisieren Sie auf die neueste stabile Toolchain:
rustup update stable
fuzzers/-Verzeichnis zu bauen. Installationsanweisungen für Ihre Umgebung finden Sie im Just Programmer's Manual.LibAFL-Repository mitgit clone https://github.com/AFLplusplus/LibAFL
cargo build --release
cargo doc
LibAFL-Buch (WIP!) mit (erfordert mdbook)cd docs && mdbook serve
Wir sammeln alle Beispiel-Fuzzer in ./fuzzers. Lesen Sie unbedingt deren Dokumentation (und Quellcode), das ist der natürliche Weg, um loszulegen!
just run
Sie können jeden Beispiel-Fuzzer mit dem folgenden Befehl ausführen, solange das Fuzzer-Verzeichnis eine Justfile-Datei enthält. Der am besten getestete Fuzzer ist ./fuzzers/inprocess/libfuzzer_libpng, ein Multicore-Fuzzer ähnlich wie libfuzzer, der LibAFL für ein libpng-Harness verwendet.
LibAFL-Buch (WIP) online oder im Repositorylibaf_qemu, Hacking TMNF – Fuzzing the game server, von RickdeJager.LibAFL wird geschrieben und gewartet von
Bitte lesen Sie CONTRIBUTING.md für die Richtlinien zum Beitragen.
Funktioniert Ihr Fuzzer nicht wie erwartet? Lesen Sie DEBUGGING.md, um zu verstehen, wie Sie Ihre Probleme debuggen können.
Wenn Sie LibAFL für Ihre akademische Arbeit verwenden, zitieren Sie bitte das folgende Paper:
@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},
}