Honggfuzz
Um fuzzer evolucionário, orientado a segurança e dirigido por feedback.
O Honggfuzz é um fuzzer de uso geral que usa cobertura de código (baseada em software e hardware) para encontrar bugs. Ele é multiprocesso, multithread e suporta fuzzing persistente para velocidade extrema.
Principais Recursos
- Rápido: Motor multiprocesso e multithread, desbloqueando todo o potencial da CPU.
- Fuzzing Persistente: Testa APIs diretamente no processo com velocidades de iteração de até 1M/seg.
- Dirigido por Feedback: Usa cobertura de código por hardware (Intel BTS/PT) e software para evoluir entradas.
- Fácil: Pode começar com um corpus vazio e construir automaticamente um conjunto de entradas válido.
- Monitoramento Profundo: Usa APIs de baixo nível (
ptrace) para detectar sinais sequestrados e crashes ocultos.
- Ampla Compatibilidade: Linux, macOS, Android, NetBSD, FreeBSD e Windows (Cygwin).
Instalação
Dependências
Linux (Ubuntu/Debian)
sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang
macOS
Requer Xcode (10.8+) e libblocksruntime.
Compilação
make
# Compilation wrappers are created in hfuzz_cc/
Uso
1. Compilar o Alvo
Use os wrappers de compilação fornecidos para adicionar instrumentação automaticamente:
# 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. Executar o Fuzzer
Aponte-o para um diretório de corpus de entrada (pode estar vazio) e para o seu binário:
# Basic run
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# Persistent mode (faster)
./honggfuzz -P -i input_dir/ -- ./my_target
Nota: ___FILE___ é um espaço reservado para o nome do arquivo de entrada gerado pelo honggfuzz.
Para exemplos avançados (Apache, OpenSSL, BIND, etc.), consulte o diretório examples/.
Consulte USAGE.md para opções detalhadas.
Troféus
O Honggfuzz descobriu grandes vulnerabilidades de segurança em softwares críticos.
HTTP e Servidores
- Apache HTTPD:
- CVE-2017-7659 (crash remoto no mod_http2)
- CVE-2017-9789 (uso após liberação)
- CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
- OpenSSH: Crash remoto pré-autenticação (commit 28652bca)
- BIND: Múltiplos bugs
- NGINX Unit: Loop infinito
- ProFTPD: CVE-2019-18217 (DoS)
- Samba: CVE-2019-14907, CVE-2020-10745, CVE-2021-20277
Criptografia e SSL
- OpenSSL:
- CVE-2016-6309 (Crítico, RCE Potencial)
- CVE-2015-1789, CVE-2016-7054, CVE-2017-3731
- LibreSSL: Múltiplos crashes e liberações inválidas
- BoringSSL: Uso de memória não inicializada
- Crypto++: CVE-2016-9939 (DoS Remoto)
Linguagens e Interpretadores
- PHP: Bugs WDDX, crashes genéricos de interpretador
- Python/Ruby: Bugs de interpretador
- Rust: Problemas de pânico/segurança em
regex, h2, sleep-parser, lewton
- Perl: Múltiplos crashes de interpretador
- FreeType 2: CVE-2010-2497 até CVE-2010-2527 (7+ CVEs)
- LibTIFF: Múltiplos bugs
- LibJPEG/Turbo: Múltiplos bugs
- VLC: RCE por double-free
- Adobe Flash: CVE-2015-0316
- ImageIO (iOS/macOS): Múltiplos problemas de segurança (Project Zero)
- LibreOffice: Corrupção de memória
Sistema e Utilitários
- Systemd: Testado pelo honggfuzz
- fwupd: 17+ bugs encontrados
- TCPDump: Múltiplos bugs
- Rsyslog: Múltiplos bugs
(Consulte OSS-Fuzz para centenas de outros)
Projetos que usam Honggfuzz
- Google OSS-Fuzz: Fuzzing contínuo para software de código aberto.
- Android: Usado pela equipe de Segurança do Android.
- Rust: crate
honggfuzz-rs para fuzzing de código Rust.
- Bitcoin Core: Infraestrutura de fuzzing.
- Apache HTTP Server: Fuzzing em CI.
- Systemd: Fuzzing em CI.
- Cifasis QuickFuzz
- Mozilla FuzzOS
Licença
Licença Apache 2.0.
Este NÃO é um produto oficial do Google