FuzzCoder: Test di Fuzzing a Livello di Byte tramite Modelli Linguistici di Grande Dimensioni
FuzzCoder: Byte-level Fuzzing Test via Large Language Model
September 3, 2024
Autori: Liqun Yang, Jian Yang, Chaoren Wei, Guanglin Niu, Ge Zhang, Yunli Wang, Linzheng ChaI, Wanxu Xia, Hongcheng Guo, Shun Zhang, Jiaheng Liu, Yuwei Yin, Junran Peng, Jiaxin Ma, Liang Sun, Zhoujun Li
cs.AI
Abstract
Il fuzzing è un'importante tecnica di analisi dinamica dei programmi progettata per individuare vulnerabilità in software complessi. Questo metodo consiste nel sottoporre un programma target a input malevoli appositamente elaborati per provocare crash, overflow del buffer, errori di memoria ed eccezioni. La generazione efficiente di input malevoli rimane un problema aperto e complesso, e gli approcci migliori applicano generalmente mutazioni casuali uniformi a input validi preesistenti. In questo lavoro proponiamo l'utilizzo di grandi modelli linguistici messi a punto (FuzzCoder) per apprendere i pattern presenti nei file di input provenienti da attacchi riusciti, con l'obiettivo di guidare le future esplorazioni di fuzzing. Nello specifico, abbiamo sviluppato un framework che sfrutta i LLM per codice per guidare il processo di mutazione degli input durante il fuzzing. Il processo di mutazione viene formulato come modellazione sequenza-sequenza, dove il LLM riceve una sequenza di byte e restituisce la sequenza di byte mutata. FuzzCoder è stato messo a punto su un dataset di istruzioni creato appositamente (Fuzz-Instruct), che raccoglie la cronologia di fuzzing riusciti provenienti da strumenti euristici di fuzzing. FuzzCoder è in grado di prevedere le posizioni e le strategie di mutazione nei file di input per innescare comportamenti anomali del programma. I risultati sperimentali dimostrano che FuzzCoder, basato su AFL (American Fuzzy Lop), ottiene miglioramenti significativi in termini di proporzione efficace di mutazione (EPM) e numero di crash (NC) per vari formati di input tra cui ELF, JPG, MP3 e XML.
English
Fuzzing is an important dynamic program analysis technique designed for
finding vulnerabilities in complex software. Fuzzing involves presenting a
target program with crafted malicious input to cause crashes, buffer overflows,
memory errors, and exceptions. Crafting malicious inputs in an efficient manner
is a difficult open problem and the best approaches often apply uniform random
mutations to pre-existing valid inputs. In this work, we propose to adopt
fine-tuned large language models (FuzzCoder) to learn patterns in the input
files from successful attacks to guide future fuzzing explorations.
Specifically, we develop a framework to leverage the code LLMs to guide the
mutation process of inputs in fuzzing. The mutation process is formulated as
the sequence-to-sequence modeling, where LLM receives a sequence of bytes and
then outputs the mutated byte sequence. FuzzCoder is fine-tuned on the created
instruction dataset (Fuzz-Instruct), where the successful fuzzing history is
collected from the heuristic fuzzing tool. FuzzCoder can predict mutation
locations and strategies locations in input files to trigger abnormal behaviors
of the program. Experimental results show that FuzzCoder based on AFL (American
Fuzzy Lop) gain significant improvements in terms of effective proportion of
mutation (EPM) and number of crashes (NC) for various input formats including
ELF, JPG, MP3, and XML.