
AFLplusplus v5.03c
AFL++ ist ein hochmoderner Fuzzer und die Nummer 1 in Benchmarks. Ursprünglich basierte er auf AFL. Heute kommt er mit qemu 5.1, kollisionsfreier Coverage, verbessertem laf-intel & redqueen, AFLfast++ Power Schedules, MOpt-Mutatoren, unicorn_mode und vielem mehr!
American Fuzzy Lop plus plus (AFL++)
Release-Version: 5.03c
GitHub-Version: 5.04a
Repository: https://github.com/AFLplusplus/AFLplusplus
AFL++ wird gepflegt von:
- Marc "van Hauser" Heuse [email protected]
- Dominik Maier [email protected]
- Andrea Fioraldi [email protected]
- Heiko "hexcoder-" Eissfeldt [email protected]
- frida_mode wird von @Worksbutnottested gepflegt
Ursprünglich entwickelt von Michal "lcamtuf" Zalewski.
AFL++ ist ein überlegener Fork von Googles AFL – mehr Geschwindigkeit, mehr und bessere Mutationen, mehr und bessere Instrumentierung, Unterstützung für benutzerdefinierte Module usw.
AFL++ ist unter der AGPL-3.0-or-later lizenziert und enthält außerdem Dateien unter der Apache-2.0-Lizenz.
Alles, was in ein Fuzzing-Harness kompiliert wird, ist und bleibt unter Apache 2.0 lizenziert.
Jede Datei gibt ihre eigene Lizenz in ihrem SPDX-License-Identifier-Header an – das
ist die Lizenz, die Sie für diese Datei befolgen müssen.
Eine optionale kommerzielle Lizenz ist für Organisationen verfügbar, die
die AGPL nicht verwenden können (erhältlich durch eine Spende an einen guten Zweck – das Projekt und seine
Maintainer erhalten kein Geld).
Siehe LICENSING.md für eine allgemein verständliche Übersicht und den
Lizenzabschnitt unten für Details.
Erste Schritte
Hier sind einige Informationen, um Ihnen den Einstieg zu erleichtern:
- Für einen Überblick über die AFL++-Dokumentation und einen sehr hilfreichen grafischen Leitfaden besuchen Sie bitte docs/README.md.
- Um mit den Tutorials zu beginnen, gehen Sie zu docs/tutorials.md.
- Für Releases siehe den
Releases-Tab und
Branches. Die besten Branches, die Sie verwenden sollten, sind jedoch
stableoderdev– je nach Ihrer Risikobereitschaft. Werfen Sie auch einen Blick auf die Liste der wichtigen Änderungen in AFL++ und die Liste der Features. - Wenn Sie AFL++ für Ihre akademische Arbeit verwenden möchten, sehen Sie sich die Papers-Seite auf der Website an.
- Um unsere Arbeit zu zitieren, sehen Sie sich den Abschnitt Zitieren an.
- Für Vergleiche verwenden Sie das
aflplusplus-Setup von fuzzbench oder verwenden Sieafl-clang-fastmitAFL_LLVM_CMPLOG=1. Die Standardkonfiguration vonaflplusplusfinden Sie auf Googles fuzzbench.
AFL++ bauen und installieren
Um AFL++ einfach mit allem kompiliert verfügbar zu haben, ziehen Sie das Image direkt von Docker Hub (verfügbar für x86_64 und arm64):
docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus
Dieses Image wird automatisch veröffentlicht, wenn ein Push in den Stable-Branch erfolgt
(siehe Branches). Wenn Sie den obigen Befehl verwenden, finden Sie Ihren
Zielquellcode in /src im Container.
Hinweis: Sie können auch aflplusplus/aflplusplus:dev pullen, was dem aktuellsten
Entwicklungsstand von AFL++ entspricht.
Um AFL++ selbst zu bauen – was wir empfehlen – fahren Sie fort mit docs/INSTALL.md.
Schnellstart: Fuzzing mit AFL++
HINWEIS: Bevor Sie beginnen, lesen Sie bitte über die allgemeinen Risiken des Fuzzings.
Dies ist ein Schnellstart für das Fuzzing von Zielen, deren Quellcode verfügbar ist. Um den Prozess im Detail zu erfahren, siehe docs/fuzzing_in_depth.md.
Um mehr über das Fuzzing anderer Ziele zu erfahren, siehe:
- Nur-Binär-Ziele: docs/fuzzing_binary-only_targets.md
- Netzwerkdienste: docs/best_practices.md#fuzzing-a-network-service
- GUI-Programme: docs/best_practices.md#fuzzing-a-gui-program
Schritt-für-Schritt-Schnellstart:
-
Kompilieren Sie das Programm oder die Bibliothek, die gefuzzt werden soll, mit
afl-cc. Eine übliche Vorgehensweise wäre:CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared make clean all -
Besorge eine kleine, aber gültige Eingabedatei, die für das Programm sinnvoll ist. Beim Fuzzing ausführlicher Syntax (SQL, HTTP usw.) erstelle zusätzlich ein Wörterbuch wie in dictionaries/README.md beschrieben.
-
Wenn das Programm von stdin liest, führe
afl-fuzzwie folgt aus:./afl-fuzz -i seeds_dir -o output_dir -- \ /path/to/tested/program [...program's cmdline...]Um ein Wörterbuch hinzuzufügen, fügen Sie
-x /path/to/dictionary.txtzu afl-fuzz hinzu.Wenn das Programm Eingaben aus einer Datei liest, können Sie
@@in die Kommandozeile des Programms einfügen; AFL++ setzt dort einen automatisch generierten Dateinamen für Sie ein. -
Untersuchen Sie alles, was in der Fuzzer-UI rot angezeigt wird, indem Sie umgehend docs/afl-fuzz_approach.md#understanding-the-status-screen konsultieren.
-
Gefundene Abstürze und Hänger finden Sie in den Unterverzeichnissen
crashes/undhangs/im Verzeichnis-o output_dir. Sie können die Abstürze erneut ausführen, indem Sie sie dem Ziel zuführen, z. B. wenn Ihr Ziel stdin verwendet:cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]Sie können Cores generieren oder gdb direkt verwenden, um die Abstürze weiter zu verfolgen.
-
Für die Coverage-Analyse Ihres Fuzzings empfehlen wir unsere Partner-Tools cov-analysis (quellcodebasierte Coverage-Berichte aus einem Fuzzing-Korpus) und fuzz-reachability (statische Analyse, welche Funktionen ein Harness erreichen kann, um handlungsrelevante Coverage- Lücken von totem Code zu unterscheiden und Instrumentierungs-Allowlists zu generieren)
-
Wir können das nicht oft genug betonen – wenn Sie effektiv fuzzen wollen, lesen Sie das Dokument docs/fuzzing_in_depth.md!
Kontakt
Fragen? Bedenken? Fehlerberichte?
- Die Mitwirkenden sind erreichbar über (z. B. durch Erstellen eines Issues – aber nur für AFL++-Defekte!): https://github.com/AFLplusplus/AFLplusplus.
- Werfen Sie einen Blick auf unsere FAQ und Best Practices.
- Am besten: Treten Sie dem Fuzzing Zulip-Server bei!
Branches
Die folgenden Branches existieren: