ChatPaper.aiChatPaper

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.
PDF453February 7, 2026