Il Fuzzing (o Fuzz Testing) è una tecnica di test di sicurezza automatizzata che consiste nel fornire dati di input non validi, inaspettati o casuali a un programma per vedere come reagisce. L'obiettivo è provocare un crash, un blocco o un comportamento anomalo che potrebbe rivelare una vulnerabilità di sicurezza, specialmente legata alla gestione della memoria.
Come Funziona un Fuzzer?
Un "fuzzer" è lo strumento che esegue il fuzzing. Nella sua forma più semplice, un fuzzer fa tre cose:
- Genera Input: Crea un input potenzialmente problematico. Può essere completamente casuale (dumb fuzzing) o più intelligente. I fuzzer moderni sono "coverage-guided": partono da un set di input validi e li "mutano" in modo intelligente, cercando di esplorare nuove parti del codice del programma.
- Invia l'Input al Programma Target: Esegue il programma passandogli l'input generato.
- Monitora il Comportamento: Controlla se il programma va in crash. Se si verifica un crash, salva l'input che lo ha causato ("crashing input") per un'analisi successiva da parte di un essere umano.
Questo processo viene ripetuto migliaia o milioni di volte al secondo.
Quali Bug Trova il Fuzzing?
Il fuzzing è eccezionalmente efficace nel trovare vulnerabilità legate alla sicurezza della memoria in linguaggi come C e C++, come:
- Buffer Overflow: Quando si scrive più dati in un buffer di memoria di quanti ne possa contenere, sovrascrivendo aree di memoria adiacenti. Questa è una delle vulnerabilità più classiche e pericolose.
- Null Pointer Dereference: Quando il programma cerca di accedere a una porzione di memoria tramite un puntatore nullo.
- Use-After-Free: Quando il programma cerca di usare una porzione di memoria dopo che è già stata liberata.
Questi tipi di bug possono spesso essere sfruttati da un aggressore per eseguire codice arbitrario. Il fuzzing è anche utile per trovare bug di logica e vulnerabilità come l'SQL Injection in parser complessi.
Progetti come AFL (American Fuzzy Lop) e libFuzzer (integrato nel compilatore Clang) sono strumenti di fuzzing potentissimi che hanno scoperto migliaia di vulnerabilità in software open-source critici. Google esegue costantemente il fuzzing sui suoi software (come Chrome) tramite il progetto OSS-Fuzz, rendendo il web un posto più sicuro.
Hai bisogno di una soluzione su misura?
Dalla Web App al gestionale custom, trasformiamo le tue idee in software performante. Contattaci per una consulenza gratuita.
Richiedi una consulenza