libfuzzer-workshop
Materialien des Workshops "Modernes Fuzzing von C/C++-Projekten".
Die erste Version des Workshops wurde auf der Sicherheitskonferenz ZeroNights'16
präsentiert.
Haftungsausschluss
Dieser Workshop wurde ursprünglich im Jahr 2016 entwickelt. Stand heute (2021 und später)
könnte die praktische Seite des Workshops möglicherweise nicht sofort funktionieren, da
libFuzzer im Laufe der Jahre stark weiterentwickelt wurde. Der theoretische Teil des Workshops
ist weiterhin gutes Lernmaterial, aber für die praktischen Lektionen wird empfohlen,
der neuesten Version des libFuzzer tutorial zu folgen.
Anforderungen
- 2-3 Stunden Ihrer Zeit
- Linux-basiertes Betriebssystem
- C/C++-Erfahrung (nichts Besonderes, aber Sie müssen in der Lage sein, C/C++-Code zu lesen,
zu schreiben und zu kompilieren)
- eine aktuelle Version des clang-Compilers. Distributionen aus
Paketmanagern sind zu alt und funktionieren höchstwahrscheinlich nicht (der Workshop
heißt doch „modern“, oder?), Sie haben zwei Optionen:
- das llvm-Repository auschecken und selbst bauen. Um es einfach zu machen,
können Sie das Skript checkout_build_install_llvm.sh verwenden, es wurde
auf einem sauberen Ubuntu 16.04 getestet
- eine VirtualBox VM mit funktionierender Umgebung ist verfügbar, Zugangsdaten:
fuzzer:zeronights
sudo apt-get install -y make autoconf automake libtool pkg-config zlib1g-dev
Fuzzing-Erfahrung ist nicht erforderlich.
Inhalt
- Eine Einführung in das Fuzz-Testing
- Ein Beispiel für traditionelles Fuzzing
- Coverage-gesteuertes Fuzzing
- Schreiben von Fuzzern (einfache Beispiele)
- Heartbleed finden (CVE-2014-0160)
- Den 100.000-Dollar-Bug von c-ares finden (CVE-2016-5180)
- Wie Sie Ihren Fuzzer verbessern können
- Fuzzing von libxml2: Lernen, wie man den Fuzzer verbessert und die Leistung analysiert
- Fuzzing von libpng: Die Bedeutung des Seed-Korpus und anderer Dinge verstehen
- Fuzzing von re2
- Fuzzing von pcre2
- Chromium-Integration & Hausaufgabe
Die meisten Beispiele stammen aus dem libFuzzer tutorial und der Fuzzer Test Suite.
Voraussetzungen
libFuzzer
libFuzzer zu bauen ist extrem einfach:
cd libFuzzer
Fuzzer/build.sh
Das libFuzzer-Repository befindet sich im compiler-rt-Projekt von LLVM.
Links