Salta ai contenuti

honggfuzz - Fuzzer Guidato da Feedback Orientato alla Sicurezza

honggfuzz - Fuzzer Guidato da Feedback Orientato alla Sicurezza Cheatsheet

honggfuzz è un fuzzer orientato alla sicurezza, guidato da feedback di Google. È noto per essere diretto di puntare a un target, per il solido fuzzing multi-processo e multi-thread fornito, e per supportare sia strumentazione del software che feedback di copertura basato su hardware (Intel BTS/PT) — quest”ultimo ti consente di fare fuzzing su binari che non puoi ricompilare. Ha un lungo track record di ricerca di vulnerabilità reali in software ampiamente utilizzato.

Il fuzzing può consumare grandi quantità di CPU e disco. Eseguilo su capacità dedicata e in un ambiente isolato.

Installazione

PiattaformaComando
Debian/Ubuntusudo apt install honggfuzz
Dal sorgentegit clone https://github.com/google/honggfuzz && make
macOSbrew install honggfuzz
Verificahonggfuzz --help

Due Modalità

ModalitàUsa
Basata su fileIl target legge un file/stdin; honggfuzz muta gli input
PersistenteIl target espone un punto di ingresso di fuzzing; molto più veloce

Fuzzing Basato su File

# Fuzz un programma che accetta un argomento di file
honggfuzz -i ./input_corpus -W ./workspace -- ./target ___FILE___
FlagScopo
-i DIRDirectory di corpus di input
-W DIRWorkspace (crash, statistiche)
-o DIRCorpus di output
___FILE___Placeholder sostituito con il file di input
-sAlimenta input via stdin
-t SECSTimeout per esecuzione
-n NNumero di thread di fuzzing concorrenti

Modalità Persistente (Veloce)

#include <stdint.h>
#include <stddef.h>

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    parse_input(data, size);   // la tua funzione target
    return 0;
}
# Compila con il wrapper clang di honggfuzz, poi fuzz
hfuzz-clang -fsanitize=address fuzz_target.c -o fuzz_target
honggfuzz -i corpus -P -- ./fuzz_target
ElementoNota
LLVMFuzzerTestOneInputStesso punto di ingresso di libFuzzer — i target sono portabili
-PAbilita modalità persistente
hfuzz-clang / hfuzz-gccWrapper del compilatore che aggiungono strumentazione

La modalità persistente evita l”avvio del processo per input, spesso dando 10–100 volte più esecuzioni al secondo.

Opzioni di Feedback di Copertura

MeccanismoFlag / requisito
Strumentazione del softwareCompila con hfuzz-clang (default, migliore)
Intel BTS--linux_perf_bts_edge (senza ricompilazione)
Intel PT--linux_perf_ipt_block (senza ricompilazione)
Conteggi di istruzione/branch--linux_perf_instr, --linux_perf_branch

Il feedback hardware è la via d”uscita per binari closed-source — ottieni guida di copertura senza accesso al codice sorgente.

Sanitizer

# Costruisci con ASan + UBSan per miglior rilevamento di crash
hfuzz-clang -fsanitize=address,undefined target.c -o target
SanitizerCattura
ASanBuffer overflow, use-after-free
UBSanComportamento non definito
MSanLetture non inizializzate
LeakSanitizerMemory leak

Monitoraggio e Output

VoceDove
Statistiche liveUI del terminale (exec/sec, copertura, crash)
CrashFile WORKSPACE/*.fuzz
ReportHONGGFUZZ.REPORT.TXT
Naming di crashInclude segnale e indirizzo di fallo
FlagEffetto
-N NFerma dopo N iterazioni
--exit_upon_crashFerma al primo crash
-vVerboso
-QSilenzioso

Workflow di Triage

# 1) Riproduci un crash
./target < WORKSPACE/SIGSEGV.PC.*.fuzz

# 2) Ottieni uno stack trace sotto un debugger
gdb --args ./target WORKSPACE/SIGSEGV.PC.*.fuzz

# 3) Minimizza l''input, poi archivia il bug con il reproducer

honggfuzz vs Altri Fuzzer

AspettohonggfuzzAFL++libFuzzerLibAFL
SetupMolto facileFacileFacile (in-process)Costruisci il tuo
Target closed-sourceSì (Intel PT/BTS)Modalità QEMUNo
Modalità persistenteNativo
Migliore perInizio veloce, feedback hardwareEcosistema ampioAPI di libreriaFuzzer custom

Confronta con AFL++ per l”ecosistema più ampio e LibAFL quando hai bisogno di costruire un fuzzer custom.

Risorse