Honggfuzz
Ein sicherheitsorientierter, feedbackgesteuerter, evolutionärer Fuzzer.
Honggfuzz ist ein Allzweck-Fuzzer, der Codeabdeckung (software- und hardwarebasiert) nutzt, um Fehler zu finden. Er ist mehrprozessfähig, multithreaded und unterstützt persistentes Fuzzing für extreme Geschwindigkeit.
Hauptmerkmale
- Schnell: Mehrprozess- und Multithread-Engine, die das volle CPU-Potenzial ausschöpft.
- Persistentes Fuzzing: Teste APIs direkt prozessintern mit Iterationsgeschwindigkeiten bis zu 1 Mio./Sek.
- Feedbackgesteuert: Nutzt Hardware- (Intel BTS/PT) und Software-Codeabdeckung, um Eingaben weiterzuentwickeln.
- Einfach: Kann mit einem leeren Korpus starten und automatisch einen gültigen Eingabesatz aufbauen.
- Tiefes Monitoring: Nutzt Low-Level-APIs (
ptrace), um gekaperte Signale und versteckte Abstürze zu erkennen.
- Breite Unterstützung: Linux, macOS, Android, NetBSD, FreeBSD und Windows (Cygwin).
Installation
Abhängigkeiten
Linux (Ubuntu/Debian)
sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang
macOS
Erfordert Xcode (10.8+) und libblocksruntime.
Erstellen
make
# Compilation wrappers are created in hfuzz_cc/
Verwendung
1. Ziel kompilieren
Verwende die mitgelieferten Compiler-Wrapper, um automatisch Instrumentierung hinzuzufügen:
# C code
./hfuzz_cc/hfuzz-clang -o my_target my_target.c
# C++ code
./hfuzz_cc/hfuzz-clang++ -o my_target my_target.cpp
2. Fuzzer ausführen
Gib ein Eingabekorpus-Verzeichnis (kann leer sein) und deine Binärdatei an:
# Basic run
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# Persistent mode (faster)
./honggfuzz -P -i input_dir/ -- ./my_target
Hinweis: ___FILE___ ist ein Platzhalter für den von Honggfuzz generierten Eingabedateinamen.
Für fortgeschrittene Beispiele (Apache, OpenSSL, BIND usw.) siehe das Verzeichnis examples/.
Siehe USAGE.md für ausführliche Optionen.
Trophäen
Honggfuzz hat schwerwiegende Sicherheitslücken in kritischer Software entdeckt.
HTTP & Server
- Apache HTTPD:
- CVE-2017-7659 (mod_http2 remote crash)
- CVE-2017-9789 (Use-after-free)
- CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
- OpenSSH: Pre-Auth-Remote-Absturz (Commit 28652bca)
- BIND: Mehrere Bugs
- NGINX Unit: Endlosschleife
- ProFTPD: CVE-2019-18217 (DoS)
- Samba: CVE-2019-14907, CVE-2020-10745, CVE-2021-20277
Kryptografie & SSL
- OpenSSL:
- CVE-2016-6309 (Kritisch, potenzielle RCE)
- CVE-2015-1789, CVE-2016-7054, CVE-2017-3731
- LibreSSL: Mehrere Abstürze und ungültige Freigaben
- BoringSSL: Nutzung nicht initialisierten Speichers
- Crypto++: CVE-2016-9939 (Remote DoS)
Sprachen & Interpreter
- PHP: WDDX-Bugs, allgemeine Interpreter-Abstürze
- Python/Ruby: Interpreter-Bugs
- Rust: Paniken/Sicherheitsprobleme in
regex, h2, sleep-parser, lewton
- Perl: Mehrere Interpreter-Abstürze
- FreeType 2: CVE-2010-2497 bis CVE-2010-2527 (7+ CVEs)
- LibTIFF: Mehrere Bugs
- LibJPEG/Turbo: Mehrere Bugs
- VLC: Double-Free-RCE
- Adobe Flash: CVE-2015-0316
- ImageIO (iOS/macOS): Mehrere Sicherheitsprobleme (Project Zero)
- LibreOffice: Speicherkorruption
System & Werkzeuge
- Systemd: Von Honggfuzz getestet
- fwupd: 17+ Bugs gefunden
- TCPDump: Mehrere Bugs
- Rsyslog: Mehrere Bugs
(Siehe OSS-Fuzz für Hunderte weitere)
Projekte, die Honggfuzz verwenden
- Google OSS-Fuzz: Kontinuierliches Fuzzing für Open-Source-Software.
- Android: Wird vom Android-Sicherheitsteam verwendet.
- Rust:
honggfuzz-rs-Crate zum Fuzzing von Rust-Code.
- Bitcoin Core: Fuzzing-Infrastruktur.
- Apache HTTP Server: CI-Fuzzing.
- Systemd: CI-Fuzzing.
- Cifasis QuickFuzz
- Mozilla FuzzOS
Lizenz
Apache License 2.0.
Dies ist KEIN offizielles Google-Produkt.