Il test fuzz, o fuzzing, è un metodo di controllo per vedere come un programma o un sistema per computer risponderà a vari input e informazioni, a volte casuali. Il processo prevede la generazione di alcuni tipi di dati, completamente casuali o casuali entro determinati vincoli, e quindi l’inserimento di tali dati nel programma per testare come gestisce le informazioni impreviste. La forma più elementare di test fuzz prevede l’invio di una sequenza casuale di pressioni di tasti o caratteri al programma e il controllo che li elabori correttamente. Una versione più complessa del test fuzz utilizza dati strutturati che vengono poi manipolati in modo casuale e inviati al programma. I dati possono raggiungere il programma come eventi di sistema, input da tastiera, segnali di rete fittizi o anche come file da caricare.
Ci sono varie parti di un programma per computer che possono essere testate con un generatore di fuzz. L’interfaccia utente grafica (GUI) può essere testata creando una sequenza di eventi casuali del mouse e della tastiera e verificando che la GUI sia in grado di gestire l’input senza arresti anomali, blocchi o esecuzione di un’attività imprevista. I protocolli di rete possono essere testati consentendo al generatore di fuzz di modificare casualmente parti di un pacchetto di dati valido e quindi garantendo che il protocollo possa continuare a funzionare dopo aver ricevuto dati non validi. È possibile verificare la capacità degli elementi di input di base di quasi tutti i programmi di resistere agli errori, come un input troppo lungo per il tipo di archiviazione, un input di tipo diverso da quello previsto e un input che è in qualche modo incompleto o errato.
L’industria della sicurezza informatica può utilizzare test fuzz per garantire che non esistano evidenti falle di sicurezza in determinati sistemi. Questo può essere fatto utilizzando un generatore di fuzz progettato per testare la sicurezza del computer. Questi programmi tenteranno di utilizzare parole chiave di sistema, password di amministratore predefinite note, funzioni all’interno delle librerie utilizzate dal programma e chiamate casuali alle funzioni di sistema per vedere come reagirà il programma.
I diversi tipi di test fuzz possono essere personalizzati per rientrare in determinati intervalli o anche per testare solo tipi specifici di input. Ciò significa che a un programma potrebbero essere inviati solo comandi validi, ma potrebbero essere in un ordine senza senso. Esistono programmi di test fuzz più complessi che possono prendere elementi del programma di destinazione e manipolarli per produrre situazioni che potrebbero essere sfruttate in modo dannoso. Ciò può includere la modifica dell’ordine dei processi generati, la modifica delle autorizzazioni o la modifica dei dati principali e dei file di libreria.
Il risultato finale del test fuzz è vedere se un programma è sicuro e si comporta come dovrebbe quando si trova di fronte a una situazione imprevista. Se utilizzato in combinazione con software di profilazione e analisi, può anche rilevare perdite di memoria in aree del programma come la gestione degli errori o colli di bottiglia delle prestazioni. In caso di sicurezza del computer, problemi pericolosi come overflow che possono compromettere un sistema possono essere rilevati con la corretta configurazione. Il test fuzz, tuttavia, non può essere utilizzato come unico metodo di test del software e deve essere parte di un processo più ampio di garanzia della qualità e ispezione del software.