Honggfuzz
Un fuzzer evolutivo, orientato alla sicurezza e guidato dal feedback.
Honggfuzz è un fuzzer generico che utilizza la copertura del codice (basata su software e hardware) per trovare bug. È multi-processo, multi-thread e supporta il fuzzing persistente per una velocità estrema.
Caratteristiche principali
- Veloce: Motore multi-processo e multi-thread, che sblocca tutto il potenziale della CPU.
- Fuzzing persistente: Testa le API direttamente in-process con velocità di iterazione fino a 1M/sec.
- Guidato dal feedback: Utilizza la copertura del codice hardware (Intel BTS/PT) e software per evolvere gli input.
- Facile: Può iniziare con un corpus vuoto e costruire automaticamente un insieme di input validi.
- Monitoraggio profondo: Utilizza API di basso livello (
ptrace) per rilevare segnali dirottati e crash nascosti.
- Ampio supporto: Linux, macOS, Android, NetBSD, FreeBSD e Windows (Cygwin).
Installazione
Dipendenze
Linux (Ubuntu/Debian)
sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang
macOS
Richiede Xcode (10.8+) e libblocksruntime.
Compilazione
make
# Compilation wrappers are created in hfuzz_cc/
Utilizzo
1. Compila il target
Usa i wrapper del compilatore forniti per aggiungere automaticamente la strumentazione:
# 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. Esegui il fuzzer
Puntalo a una directory di corpus di input (può essere vuota) e al tuo binario:
# Basic run
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# Persistent mode (faster)
./honggfuzz -P -i input_dir/ -- ./my_target
Nota: ___FILE___ è un segnaposto per il nome del file di input generato da honggfuzz.
Per esempi avanzati (Apache, OpenSSL, BIND, ecc.), controlla la directory examples/.
Vedi USAGE.md per le opzioni dettagliate.
Trofei
Honggfuzz ha scoperto importanti vulnerabilità di sicurezza in software critici.
HTTP e server
- Apache HTTPD:
- CVE-2017-7659 (crash remoto in mod_http2)
- CVE-2017-9789 (Use-after-free)
- CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
- OpenSSH: Crash remoto pre-autenticazione (commit 28652bca)
- BIND: Più bug
- NGINX Unit: Loop infinito
- ProFTPD: CVE-2019-18217 (DoS)
- Samba: CVE-2019-14907, CVE-2020-10745, CVE-2021-20277
Crittografia e SSL
- OpenSSL:
- CVE-2016-6309 (Critico, potenziale RCE)
- CVE-2015-1789, CVE-2016-7054, CVE-2017-3731
- LibreSSL: Numerosi crash e free non validi
- BoringSSL: Uso di memoria non inizializzata
- Crypto++: CVE-2016-9939 (DoS remoto)
Linguaggi e interpreti
- PHP: Bug WDDX, crash generici dell'interprete
- Python/Ruby: Bug dell'interprete
- Rust: Panics/problemi di sicurezza in
regex, h2, sleep-parser, lewton
- Perl: Più crash dell'interprete
- FreeType 2: CVE-2010-2497 da CVE-2010-2527 (7+ CVE)
- LibTIFF: Più bug
- LibJPEG/Turbo: Più bug
- VLC: RCE double-free
- Adobe Flash: CVE-2015-0316
- ImageIO (iOS/macOS): Più problemi di sicurezza (Project Zero)
- LibreOffice: Corruzione della memoria
Sistema e utilità
- Systemd: Testato da honggfuzz
- fwupd: 17+ bug trovati
- TCPDump: Più bug
- Rsyslog: Più bug
(Vedi OSS-Fuzz per centinaia di altri)
Progetti che utilizzano Honggfuzz
- Google OSS-Fuzz: Fuzzing continuo per software open source.
- Android: Utilizzato dal team Android Security.
- Rust: crate
honggfuzz-rs per fare fuzzing su codice Rust.
- Bitcoin Core: Infrastruttura di fuzzing.
- Apache HTTP Server: Fuzzing CI.
- Systemd: Fuzzing CI.
- Cifasis QuickFuzz
- Mozilla FuzzOS
Licenza
Apache License 2.0.
Questo NON è un prodotto ufficiale Google