Honggfuzz
Un fuzzer evolutivo, impulsado por retroalimentación y orientado a la seguridad.
Honggfuzz es un fuzzer de propósito general que utiliza cobertura de código (basada en software y hardware) para encontrar errores. Es multiproceso, multihilo y admite fuzzing persistente para una velocidad extrema.
Características principales
- Rápido: Motor multiproceso y multihilo que desbloquea todo el potencial de la CPU.
- Fuzzing persistente: Prueba APIs directamente dentro del proceso con velocidades de iteración de hasta 1M/seg.
- Impulsado por retroalimentación: Utiliza cobertura de código por hardware (Intel BTS/PT) y software para evolucionar las entradas.
- Fácil: Puede comenzar con un corpus vacío y construir automáticamente un conjunto de entradas válidas.
- Monitoreo profundo: Utiliza APIs de bajo nivel (
ptrace) para detectar señales secuestradas y fallos ocultos.
- Amplia compatibilidad: Linux, macOS, Android, NetBSD, FreeBSD y Windows (Cygwin).
Instalación
Dependencias
Linux (Ubuntu/Debian)
sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang
macOS
Requiere Xcode (10.8+) y libblocksruntime.
Compilación
make
# Compilation wrappers are created in hfuzz_cc/
Uso
1. Compilar el objetivo
Utiliza los wrappers de compilación proporcionados para añadir instrumentación automáticamente:
# 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. Ejecutar el fuzzer
Apúntalo a un directorio de corpus de entrada (puede estar vacío) y a tu binario:
# Basic run
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# Persistent mode (faster)
./honggfuzz -P -i input_dir/ -- ./my_target
Nota: ___FILE___ es un marcador de posición para el nombre del archivo de entrada generado por honggfuzz.
Para ejemplos avanzados (Apache, OpenSSL, BIND, etc.), consulta el directorio examples/.
Consulta USAGE.md para ver las opciones detalladas.
Trofeos
Honggfuzz ha descubierto importantes vulnerabilidades de seguridad en software crítico.
HTTP y servidores
- Apache HTTPD:
- CVE-2017-7659 (fallo remoto de mod_http2)
- CVE-2017-9789 (use-after-free)
- CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
- OpenSSH: Fallo remoto previo a la autenticación (commit 28652bca)
- BIND: Múltiples errores
- NGINX Unit: Bucle infinito
- ProFTPD: CVE-2019-18217 (DoS)
- Samba: CVE-2019-14907, CVE-2020-10745, CVE-2021-20277
Criptografía y SSL
- OpenSSL:
- CVE-2016-6309 (Crítico, posible RCE)
- CVE-2015-1789, CVE-2016-7054, CVE-2017-3731
- LibreSSL: Múltiples fallos y liberaciones no válidas
- BoringSSL: Uso de memoria no inicializada
- Crypto++: CVE-2016-9939 (DoS remoto)
Lenguajes e intérpretes
- PHP: Errores de WDDX, fallos genéricos del intérprete
- Python/Ruby: Errores del intérprete
- Rust: Pánicos/problemas de seguridad en
regex, h2, sleep-parser, lewton
- Perl: Múltiples fallos del intérprete
- FreeType 2: CVE-2010-2497 a CVE-2010-2527 (7+ CVEs)
- LibTIFF: Múltiples errores
- LibJPEG/Turbo: Múltiples errores
- VLC: RCE por doble liberación
- Adobe Flash: CVE-2015-0316
- ImageIO (iOS/macOS): Múltiples problemas de seguridad (Project Zero)
- LibreOffice: Corrupción de memoria
Sistema y utilidades
- Systemd: Probado con honggfuzz
- fwupd: Más de 17 errores encontrados
- TCPDump: Múltiples errores
- Rsyslog: Múltiples errores
(Consulta OSS-Fuzz para cientos más)
Proyectos que usan Honggfuzz
- Google OSS-Fuzz: Fuzzing continuo para software de código abierto.
- Android: Usado por el equipo de seguridad de Android.
- Rust: crate
honggfuzz-rs para fuzzear código Rust.
- Bitcoin Core: Infraestructura de fuzzing.
- Apache HTTP Server: Fuzzing en CI.
- Systemd: Fuzzing en CI.
- Cifasis QuickFuzz
- Mozilla FuzzOS
Licencia
Apache License 2.0.
Este NO es un producto oficial de Google