Fuzzing

Il fuzzing è una tecnica di testing di sicurezza che consiste nell'inviare input casuali, non validi o malformati a un'applicazione per identificare dei bug, crash o comportamenti anomali. Questo approccio automatizzato ha come obiettivo trovare difetti di sicurezza sfruttando particolari input non previsti, che in mancanza di una adeguata gestione da parte del programma, possono indurre in comportamenti inaspettati.

La generazione degli input può avvenire in modo completamente casuale o basarsi su algoritmi predefiniti per coprire casi di test specifici e per migliorare la qualità dell'analisi. Ad esempio, una tecnica comune nei fuzzer è la mutazione, che consiste nel modificare leggermente gli input validi o già utilizzati per creare nuove varianti, con l'obiettivo di deviare dagli input attesi e innescare l'eventuale bug. I fuzzer più avanzati utilizzano la copertura per migliorare l'efficacia dei test: durante l'esecuzione analizzano il programma e registrano quali strade sono state prese dal flusso di esecuzione, e cercano di generare nuovi input in modo da massimizzare la copertura del programma. L'idea è che se un bug si nasconde "dietro" molti controlli, questo tipo di tecnica dovrebbe riuscire a generare un input che superi quei controlli e rediriga il flusso di esecuzione verso il codice che contiene tale bug.

Strumenti come aflplusplus oppure libFuzzer possono essere usati per eseguire fuzzing di applicazioni eseguibili. Molti progetti open-source sono analizzati in modo continuo da Google nel suo progetto OSS-fuzz.