ChatPaper.aiChatPaper

FuzzCoder: Pruebas de fuzzing a nivel de byte mediante modelos de lenguaje grande

FuzzCoder: Byte-level Fuzzing Test via Large Language Model

September 3, 2024
Autores: 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

Resumen

El fuzzing es una importante técnica de análisis dinámico de programas diseñada para encontrar vulnerabilidades en software complejo. El fuzzing implica presentar a un programa objetivo entradas maliciosas elaboradas para provocar caídas, desbordamientos de búfer, errores de memoria y excepciones. Crear entradas maliciosas de manera eficiente es un problema abierto difícil, y los mejores enfoques suelen aplicar mutaciones aleatorias uniformes a entradas válidas preexistentes. En este trabajo, proponemos adoptar modelos de lenguaje grandes ajustados (FuzzCoder) para aprender patrones en los archivos de entrada a partir de ataques exitosos y guiar futuras exploraciones de fuzzing. Específicamente, desarrollamos un marco para aprovechar los LLM de código y guiar el proceso de mutación de entradas en el fuzzing. El proceso de mutación se formula como un modelado secuencia a secuencia, donde el LLM recibe una secuencia de bytes y luego genera la secuencia de bytes mutada. FuzzCoder se ajusta en el conjunto de datos de instrucciones creado (Fuzz-Instruct), donde se recopila el historial de fuzzing exitoso a partir de una herramienta heurística de fuzzing. FuzzCoder puede predecir ubicaciones de mutación y estrategias en archivos de entrada para desencadenar comportamientos anómalos del programa. Los resultados experimentales muestran que FuzzCoder, basado en AFL (American Fuzzy Lop), obtiene mejoras significativas en términos de la proporción efectiva de mutación (EPM) y el número de caídas (NC) para varios formatos de entrada, incluyendo ELF, JPG, MP3 y 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.
PDF453November 14, 2024