Cos'è il test Fuzz?

Il test fuzz, noto anche come test di fuzzing o di scimmia, è una tecnica utilizzata per testare software per vulnerabilità sconosciute. Il processo di test fuzz è automatizzato da un programma noto come fuzzer, che genera una grande quantità di dati da inviare al programma di destinazione come input. Se il programma di destinazione si blocca o si comporta in modo indesiderato, il fuzzer crea un registro dell'input che ha causato l'errore.

Gli hacker usano spesso i fuzzer per cercare vulnerabilità nel software, esaminandone i punti deboli che possono sfruttare. Gli sviluppatori di software possono utilizzare un fuzzer per anticipare e difendersi da questi tipi di attacchi.

Origine

Il primo fuzzer fu scritto all'inizio degli anni '80 dallo sviluppatore Steve Capps per testare la debolezza dei programmi per il computer Macintosh. Chiamò il suo programma "The Monkey", riferendosi al classico adagio di una scimmia che premeva tasti a caso su una macchina da scrivere per una quantità infinita di tempo. La teoria è che dato abbastanza tempo, la scimmia alla fine scriverà le opere complete di Shakespeare. Sebbene questo approccio al testing del software venga in genere definito "fuzzing", viene anche chiamato "test della scimmia" a causa del programma di Capps.

Elenco dei fuzzer

Le tecniche di fuzzing possono essere utilizzate per testare il software e esistono molti fuzzer per scopi specifici.

Quello che segue è un elenco di fuzzers, molti dei quali sono open-source e molti ancora in sviluppo attivo.

Nome fuzzer / URLDescrizione
Google SanitizersUn gruppo di quattro disinfettanti di dati sviluppati da Google, che utilizza la fuzzing per rilevare errori del programma:
  • AddressSanitizer, che rileva gli errori di indirizzo di memoria nei programmi C e C ++.
  • LeakSanitizer, che rileva perdite di memoria.
  • ThreadSanitizer, che rileva le condizioni di gara in C ++ e Go.
  • Memory Sanitizer, che rileva la memoria non inizializzata.
AFL-fuzzAmerican Fuzzy Lop, uno strumento che utilizza algoritmi genetici per testare la sicurezza dei programmi compilati.
BackfuzzUn toolkit di fuzzing del protocollo.
BrundleFuzzUn fuzzer distribuito per Windows e Linux.
CERT FOEFailure Observation Engine, uno strumento sviluppato da CERT che utilizza la mutazione mutazionale per rilevare vulnerabilità nei programmi Windows.
CERTfuzzIl codice sorgente di CERT FOE.
ChoronzonUn fuzzer evolutivo basato sulla conoscenza.
DiffyUno strumento sviluppato da Twitter per scoprire le vulnerabilità nei servizi web.
vertiginosoUna libreria fuzzing per Python
dfuzzerUno strumento fuzzing per testare processi che comunicano attraverso il meccanismo D-Bus IPC e RPC.
dotdotpwnUno strumento per testare le applicazioni Web per le vulnerabilità del percorso trasversale.
DranzerUn tester fuzz per i controlli ActiveX.
EMFFuzzerUn tester fuzz Enhanced Metafile.
sfruttabileUn'estensione per GDB (il debugger GNU) che analizza gli eseguibili di Linux e classifica i loro bug in base agli exploit noti. Originariamente sviluppato al CERT.
Go-fuzzUn fuzz tester per i programmi Go che popola i loro oggetti con valori casuali.
GRRConverte i file binari a 32 bit in 64 bit e li confonde come parte del processo.
honggfuzzFuzzer evolutivo e feedback-driven per hardware e software.
HTTP / 2 FuzzerUn fuzzer per applicazioni HTTP / 2, ancora disponibile per il download ma non più sviluppato attivamente.
HodorUn fuzzer "leggermente più che totalmente stupido" (forza bruta).
iFuzzerUn fuzzer scritto in Python che usa Mercurial e Valgrind.
KEMUfuzzerUn fuzzer per macchine virtuali in esecuzione su piattaforme di emulazione QEMU, VMware, VirtualBox o BHOCS.
KernelFuzzerUna fuzzer per chiamate di sistema del kernel
LibFuzzerUna libreria per test fuzz in-process, evolutivo, guidato dalla copertura.
NetzobUn fuzzer per i protocolli di comunicazione di reverse engineering.
Neural fuzzerUn fuzzer che utilizza l'apprendimento automatico (reti neurali) per eseguire i test.
IncuboUn fuzzer distribuito con strumenti di amministrazione basati sul web.
PathgrindAnalisi dinamica basata su percorso per applicazioni a 32 bit.
Perf-fuzzerUn fuzzer progettato specificamente per testare la chiamata di sistema perf_event_open () nel kernel di Linux.
PulsarUn fuzzer che "impara" i protocolli.
PyJFuzzUn fuzzer JSON Python.
QuickFuzzUn fuzzer di grammatica sperimentale scritto in Haskell.
RadamsaUn fuzzer per tutti gli usi.
lascivoUn semplice fuzzer Python che genera un input casuale per il programma testato.
sfuzzFuzz semplice. "Esattamente quello che sembra - un semplice fuzzer." Incluso come parte del set di strumenti Kali Linux.
SkipfishUno scanner di sicurezza per applicazioni Web sviluppato su Google.
syntribiosUn tester fuzz automatico per le API Web, scritto in Python e gestito da OpenStack Security Group.
TriforceAFLUn fuzzer a sistema completo che utilizza QEMU.
WapitiUno scanner di vulnerabilità delle applicazioni Web.
WfuzzUn fuzzer a forza bruta per applicazioni web.
zzufUn fuzzer di input dell'applicazione deterministico e trasparente che modifica casualmente i bit nelle operazioni di input di un file.

Quelle che seguono sono imbragature, o framework, che possono aiutarti a gestire il tuo test fuzz.

Fuzzing FrameworkDescrizione
CERT BFFIl BFF (Basic Fuzzing Framework), sviluppato da CERT, progettato per trovare vulnerabilità in applicazioni Windows, macOS e Linux.
FuzzFlowUn framework fuzzing in AngularJS.
FuzzinatorUn quadro per test fuzz casuali.
FuzzLabsUn framework per test fuzz generico.
MacininoUn automatismo / framework di test fuzz per testare i browser web.
GattinoUn framework di test fuzz scritto in Python.
ofuzzUn framework fuzzing scritto in OCaml.
NodefuzzUn framework di test fuzz per browser Web, scritto in nodejs.
PassiveFuzzFrameworkOSXUn fuzzer per testare le vulnerabilità nel kernel macOS.
Peach FuzzerUna piattaforma per test fuzz che può "testare praticamente qualsiasi sistema per vulnerabilità sconosciute".
RamFuzzUn fuzzer per testare i singoli parametri dei metodi dell'oggetto.
SulleyUn framework "completamente automatizzato e non assistito, in puro Python".
FunFuzzerImbracatura Python per motori JavaScript e renderer DOM, di Mozilla.

Bug, termini di programmazione, termini di sicurezza, test del software