Fuzzing-101
Aufbau
- Übung 1: Xpdf, CVE-2019-13288, 120 Minuten, Afl-clang-fast, Afl-fuzz, GDB
- Übung 2: libexif, CVE-2009-3895, CVE-2012-2836, 6 Stunden, Afl-clang-lto, Fuzz-Bibliothek, Eclipse IDE
- Übung 3: TCPdump, CVE-2017-13028, 4 Stunden, ASan, Sanitizers
- Übung 4: LibTIFF, CVE-2016-9297, 3 Stunden, Code Coverage, LCOV
- Übung 5: Libxml2, CVE-2017-9048, 3 Stunden, Wörterbuch, grundlegende Parallelisierung, Fuzzing von Kommandozeilenargumenten
- Übung 6: GIMP, CVE-2016-4994, Bonus-Bug, 7 Stunden, persistentes Fuzzing, Fuzzing interaktiver Anwendungen
- Übung 7: VLC Media Player, CVE-2019-14776, 6 Stunden, partielle Instrumentierung, Fuzzing-Harness
- Übung 8: Adobe Reader, 8 Stunden, Fuzzing von Closed-Source-Anwendungen, QEMU-Instrumentierung
- Übung 9: 7-Zip, CVE-2016-2334, 8 Stunden, WinAFL, Fuzzing von Windows-Anwendungen
- Übung 10 (abschließende Herausforderung): Google Chrome / V8, CVE-2019-5847, 8 Stunden, Fuzzilli, Fuzzing von JavaScript-Engines
Änderungsprotokoll
-
- Februar 2022: Tippfehler bei
wget in Übung 5 korrigiert
-
- November 2021: Übung 3 aktualisiert und korrigiert
Für wen ist dieser Kurs?
- Für Menschen, die die Grundlagen des Fuzzing lernen möchten
- Für Menschen, die Schwachstellen in realen Softwareprojekten finden möchten
Voraussetzungen
- Ein Linux-System und Internetverbindung sind erforderlich
- Grundlegende Linux-Kenntnisse werden empfohlen
- Alle Übungen wurden unter Ubuntu 20.04.2 LTS getestet
- In diesem Kurs wird AFL++ verwendet, ein neuer Fork von AFL von Michał "lcamtuf" Zalewski
Was ist Fuzzing?
- Fuzz-Testing (oder Fuzzing): eine automatisierte Software-Testtechnik, bei der Programme mit zufälligen/manipulierten Eingaben versorgt und Ausnahmen/Abstürze überwacht werden
- AFL, libFuzzer und HonggFuzz sind Beispiele für erfolgreiche Fuzzer in realen Anwendungen
- Coverage-basierter evolutionärer Fuzzer: sammelt und vergleicht Code-Coverage-Daten, um Eingaben auszuwählen, die neue Ausführungspfade finden
Coverage-basierter evolutionärer Fuzzer
- Evolutionär: ein metaheuristischer Ansatz, der von evolutionären Algorithmen inspiriert ist und durch die Evolution und Mutation einer anfänglichen Teilmenge (Seeds) neue Abstürze findet
- Coverage-basiert: sammelt und vergleicht Code-Coverage-Daten, um Eingaben auszuwählen, die neue Ausführungspfade finden
Danksagung
- Personen, die geholfen haben: Xavier RENE-CORAIL, Alan Vivona, Jason White, Octavio Gianatiempo, van Hauser, Marc Poulhiès, Xu Hanyu, tclan126, epi052, Jeremias Gomes
Kontakt
- Wenn du Hilfe brauchst oder Vorschläge hast, tritt dem
#fuzzing-Kanal im GitHub Security Lab Slack bei
Zusammenfassung von GN⁺
- Dieser Kurs ist nützlich, um die Grundkonzepte des Fuzzing zu lernen und Schwachstellen in realer Software zu finden
- Mit Tools wie AFL++ lassen sich Fuzzing-Techniken anhand verschiedener Praxisfälle erlernen
- Fuzzing spielt eine wichtige Rolle bei der Verbesserung von Stabilität und Sicherheit von Software, und dieser Kurs bietet dafür einen praxisnahen Ansatz
- Ähnliche Tools mit vergleichbaren Funktionen sind libFuzzer und HonggFuzz
1 Kommentare
Hacker-News-Kommentare
Der verlinkte Artikel ist eine etwa 11-minütige Lektüre, und die Unterschiede zum Ansatz von golang sind interessant.
Es besteht Neugier auf Techniken, mit denen sich Fuzzing effektiver steuern lässt.
Es ist überraschend, dass Heartbleed nicht auf der Liste steht.
Eine Meinung bedankt sich fürs Teilen.