Fuzzing mit libFuzzer
Finden Sie Abstürze in Grenzfällen, indem Sie Ihren Code mit libFuzzer fuzzing-Tests unterziehen.
Fuzzing mit libFuzzer ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Fuzzing?
Fuzzing erzeugt zufällige Eingaben, um Abstürze, Hänger und Sicherheitsfehler zu finden. Moderne Fuzzer verwenden Coverage-Feedback, um Eingaben weiterzuentwickeln, die neue Codepfade erkunden.
libFuzzer
libFuzzer ist Teil von LLVM und lässt sich in Sanitizer integrieren. Schreiben Sie eine einzelne Funktion, die einen Einstiegspunkt fuzzed; das Framework übernimmt die Erzeugung der Eingaben.
Ein Fuzz-Target schreiben
Die Signatur ist festgelegt: Nehmen Sie ein Byte-Array entgegen und geben Sie 0 zurück.
#include <cstdint>
#include <cstddef>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
parse_input(reinterpret_cast<const char*>(data), size);
return 0;
}Für libFuzzer kompilieren
Verwenden Sie Clang mit der Kombination -fsanitize=fuzzer,address. Linken Sie direkt – ein main ist nicht erforderlich.
clang++ -g -O1 -fsanitize=fuzzer,address fuzz.cpp parser.cpp -o fuzz_target
./fuzz_targetCoverage-gesteuerte Mutation
libFuzzer verfolgt, welche Codepfade jede Eingabe ausführt. Vielversprechende Eingaben werden mutiert, um tiefere Pfade zu erkunden – deutlich effizienter als eine blinde zufällige Erzeugung.
Ein Corpus
Starten Sie den Fuzzer mit einem Verzeichnis bekannter interessanter Eingaben. Der Fuzzer entwickelt daraus durch Mutation neue Eingaben.
./fuzz_target corpus/Dictionary-Dateien
Stellen Sie ein Dictionary häufig verwendeter Tokens bereit, um die Erkundung von Eingaben mit einer bestimmten Grammatik zu beschleunigen (HTML, JSON, Protokollnachrichten).
Mit Sanitizern kombinieren
Wenn Sie den Code unter AddressSanitizer ausführen, werden unbemerkte Speicherbeschädigungen in sofortige Abstürze umgewandelt, die der Fuzzer erkennen kann.
Leistung
Ein einzelner Kern kann bei kleinen Targets mehrere zehntausend Ausführungen pro Sekunde schaffen. Lassen Sie den Fuzzer stunden- oder tagelang laufen, beispielsweise im Hintergrund der CI.
Abstürze reproduzieren
Wenn libFuzzer einen Absturz findet, speichert es die Eingabe auf der Festplatte. Spielen Sie sie später zur Fehlersuche erneut ab.
./fuzz_target crash-abc123OSS-Fuzz
Googles OSS-Fuzz führt kontinuierlich Fuzzer für Open-Source-Projekte aus und meldet Fehler. Viele bekannte Bibliotheken sind darin integriert.
AFL und Honggfuzz
Es gibt weitere Fuzzer:
- AFL/AFL++ – prozessbasiert, mit Beschleunigung durch einen Fork-Server
- Honggfuzz – unterstützt Netzwerkprotokolle
libFuzzer lässt sich am einfachsten in C++ integrieren.
Wann sollte man fuzzing einsetzen?
Fuzzing eignet sich für jeden Code, der nicht vertrauenswürdige Eingaben verarbeitet:
- Parser (JSON, XML, protobuf)
- Decoder (Bild, Audio, Video)
- Handler für Netzwerkprotokolle
- Alles, was externe Daten liest
Kurzer Check
Warum ist coverage-gesteuertes Fuzzing effektiver als rein zufälliges Fuzzing?
Zusammenfassung
libFuzzer ist ein in Clang integrierter, coverage-gesteuerter Fuzzer. Schreiben Sie einen kleinen LLVMFuzzerTestOneInput-Einstiegspunkt, erstellen Sie ihn mit -fsanitize=fuzzer,address und lassen Sie ihn nach Abstürzen suchen. Kombinieren Sie Fuzzer mit Sanitizern und Corpora; fuzzed werden sollte jeder Code, der nicht vertrauenswürdige Eingaben verarbeitet.
Häufig gestellte Fragen
Ist die Lektion „Fuzzing mit libFuzzer“ kostenlos?
Ja — der vollständige Text von „Fuzzing mit libFuzzer“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Fuzzing mit libFuzzer“?
Finden Sie Abstürze in Grenzfällen, indem Sie Ihren Code mit libFuzzer fuzzing-Tests unterziehen. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Fuzzing mit libFuzzer“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Statische Analysetools: clang-tidy, cppcheck
- Sanitizer: Address-, Thread- und UB-Sanitizer
- Fuzzing mit libFuzzer
- Continuous Integration für C++-Projekte