Zurück zu den Updates
New releaseAug 10, 2026

LibAFL v0.16.0

Erweiterte Fuzzing-Bibliothek - Stecken Sie Ihren Fuzzer in Rust zusammen! Skaliert über Kerne und Maschinen hinweg. Für Windows, Android, macOS, Linux, no_std, ...

Teilen

LibAFL, die Fuzzer-Bibliothek

LibAFL logo

Erweiterte 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.

Kernkonzepte

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:

Bauen und Installieren

Abhängigkeiten installieren

  • Die Rust-Entwicklungssprache
    • Wir 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
      
  • LLVM-Werkzeuge
    • Die LLVM-Werkzeuge (einschließlich clang, clang++) werden benötigt (neuer als LLVM 15.0.0 bis LLVM 18.1.3). Wenn Sie Debian/Ubuntu verwenden, empfehlen wir auch hier dringend, das Paket von hier zu installieren.
  • Just:

Klonen Sie das LibAFL-Repository mit

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

Bauen Sie die Bibliothek mit

cargo build --release

Bauen Sie die API-Dokumentation mit

cargo doc

Durchsuchen Sie das LibAFL-Buch (WIP!) mit (erfordert mdbook)

cd docs && mdbook serve

Erste Schritte

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.

Ressourcen

Mitwirkende

LibAFL wird geschrieben und gewartet von

Beitragen

Bitte lesen Sie CONTRIBUTING.md für die Richtlinien zum Beitragen.

Debugging

Funktioniert Ihr Fuzzer nicht wie erwartet? Lesen Sie DEBUGGING.md, um zu verstehen, wie Sie Ihre Probleme debuggen können.

Zitieren

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},
}

Lizenz

Lizenziert unter entweder der Apache License, Version 2.0 oder der MIT-Lizenz, je nach Ihrer Wahl.
Sofern Sie nicht ausdrücklich etwas anderes angeben, wird jeder von Ihnen absichtlich zur Aufnahme in diese Crate eingereichte Beitrag, wie in der Apache-2.0-Lizenz definiert, wie oben dual lizenziert, ohne zusätzliche Bedingungen.

Kategorien