Fuzz testing is one of the most effective techniques to find vulnerabilities, bugs or crashes in software, through the generation of test cases with a degree of randomness, that are not immediately rejected by the system under test and create unexpected behavior deeper in the program, uncovering corner cases that have not been properly dealt with. For fuzz testing to be effective, either a formal specification of the target format is required, or at least a collection of diversified examples that leverage as many features of the software under test as possible, called seed corpus. However, optimal seed corpora are scarcely available even for well-known file formats, and there is no consensus on what are the most effective methods for seed collection. In this work, we propose a simplified approach with respect to the state of the art to automatically generate seeds for fuzzing through instrumentation and manipulation of generator programs, named fuzzerino. We compare and evaluate different seed collection methods, including our seed generation approach. In particular, we compare the code coverage of 8 different PNG image libraries and parsers when they are ran on seed corpora collected from different sources and with different techniques. The results show that the seed corpora generated with fuzzerino improve the code coverage of the parsers, introducing new coverage with respect to the collected datasets. Moreover, the seeds generated with fuzzerino revealed 6 new bugs in PNG libraries and parsers on their own, without running traditional fuzzing campaigns starting from the generated seeds.

Il fuzz testing è una delle tecniche più efficaci per individuare vulnerabilità, bug o crash nel software, attraverso la generazione di casi di test con un livello di aleatorietà, i quali non vengono immediatamente rifiutati dal sistema oggetto di test e provocano in esso comportamenti inaspettati, rivelando casi limite che non vengono gestiti in modo appropriato. Perché il fuzz testing sia efficace, è richiesta una specifica formale del formato testato, o almeno una raccolta di casi di test diversificati, che facciano leva sul maggior numero possibile di funzionalità del software testato. Tuttavia, la disponibilità di raccolte di casi di test ottimali è scarsa anche per formati di file ben noti, e non esiste un consenso su quali siano i metodi più efficaci per la raccolta di casi di test. In questo lavoro, proponiamo un approccio semplificato rispetto allo stato dell'arte per generare automaticamente casi di test per fuzz testing, attraverso l'instrumentazione e la manipolazione di programmi generatori, chiamato fuzzerino. Inoltre, confrontiamo e valutiamo l'efficacia di diversi metodi per la raccolta di casi di test, compreso il metodo da noi sviluppato. In particolare, confrontiamo la copertura del codice di 8 diverse librerie e parser di immagini PNG, quando vengono eseguiti su casi di test raccolti da diverse fonti e con diverse tecniche. I risultati mostrano che i casi di test generati con fuzzerino migliorano la copertura del codice dei parser, coprendo porzioni del codice precedentemente inesplorate. Inoltre, i casi di test generati da fuzzerino hanno rivelato 6 nuovi bug in librerie e parser di immagini PNG da soli, senza effettuare campagne di fuzzing tradizionali a partire dai casi di test generati.

Fuzzerino : towards effective seed generation for fuzz testing

FERRI, MICHELE
2018/2019

Abstract

Fuzz testing is one of the most effective techniques to find vulnerabilities, bugs or crashes in software, through the generation of test cases with a degree of randomness, that are not immediately rejected by the system under test and create unexpected behavior deeper in the program, uncovering corner cases that have not been properly dealt with. For fuzz testing to be effective, either a formal specification of the target format is required, or at least a collection of diversified examples that leverage as many features of the software under test as possible, called seed corpus. However, optimal seed corpora are scarcely available even for well-known file formats, and there is no consensus on what are the most effective methods for seed collection. In this work, we propose a simplified approach with respect to the state of the art to automatically generate seeds for fuzzing through instrumentation and manipulation of generator programs, named fuzzerino. We compare and evaluate different seed collection methods, including our seed generation approach. In particular, we compare the code coverage of 8 different PNG image libraries and parsers when they are ran on seed corpora collected from different sources and with different techniques. The results show that the seed corpora generated with fuzzerino improve the code coverage of the parsers, introducing new coverage with respect to the collected datasets. Moreover, the seeds generated with fuzzerino revealed 6 new bugs in PNG libraries and parsers on their own, without running traditional fuzzing campaigns starting from the generated seeds.
QUARTA, DAVIDE
ING - Scuola di Ingegneria Industriale e dell'Informazione
3-ott-2019
2018/2019
Il fuzz testing è una delle tecniche più efficaci per individuare vulnerabilità, bug o crash nel software, attraverso la generazione di casi di test con un livello di aleatorietà, i quali non vengono immediatamente rifiutati dal sistema oggetto di test e provocano in esso comportamenti inaspettati, rivelando casi limite che non vengono gestiti in modo appropriato. Perché il fuzz testing sia efficace, è richiesta una specifica formale del formato testato, o almeno una raccolta di casi di test diversificati, che facciano leva sul maggior numero possibile di funzionalità del software testato. Tuttavia, la disponibilità di raccolte di casi di test ottimali è scarsa anche per formati di file ben noti, e non esiste un consenso su quali siano i metodi più efficaci per la raccolta di casi di test. In questo lavoro, proponiamo un approccio semplificato rispetto allo stato dell'arte per generare automaticamente casi di test per fuzz testing, attraverso l'instrumentazione e la manipolazione di programmi generatori, chiamato fuzzerino. Inoltre, confrontiamo e valutiamo l'efficacia di diversi metodi per la raccolta di casi di test, compreso il metodo da noi sviluppato. In particolare, confrontiamo la copertura del codice di 8 diverse librerie e parser di immagini PNG, quando vengono eseguiti su casi di test raccolti da diverse fonti e con diverse tecniche. I risultati mostrano che i casi di test generati con fuzzerino migliorano la copertura del codice dei parser, coprendo porzioni del codice precedentemente inesplorate. Inoltre, i casi di test generati da fuzzerino hanno rivelato 6 nuovi bug in librerie e parser di immagini PNG da soli, senza effettuare campagne di fuzzing tradizionali a partire dai casi di test generati.
Tesi di laurea Magistrale
File allegati
File Dimensione Formato  
master-thesis.pdf

non accessibile

Descrizione: Thesis text - final
Dimensione 1.26 MB
Formato Adobe PDF
1.26 MB Adobe PDF   Visualizza/Apri

I documenti in POLITesi sono protetti da copyright e tutti i diritti sono riservati, salvo diversa indicazione.

Utilizza questo identificativo per citare o creare un link a questo documento: https://hdl.handle.net/10589/149872