FuzzCoder: Teste de Fuzzing em Nível de Byte via Modelo de Linguagem 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
Resumo
O Fuzzing é uma importante técnica de análise dinâmica de programas projetada para encontrar vulnerabilidades em softwares complexos. O Fuzzing envolve a apresentação de entradas maliciosas elaboradas a um programa alvo para causar falhas, estouros de buffer, erros de memória e exceções. A elaboração eficiente de entradas maliciosas é um problema aberto e difícil, e as melhores abordagens frequentemente aplicam mutações aleatórias uniformes a entradas válidas pré-existentes. Neste trabalho, propomos a adoção de grandes modelos de linguagem afinados (FuzzCoder) para aprender padrões nos arquivos de entrada a partir de ataques bem-sucedidos, com o objetivo de orientar futuras explorações de fuzzing. Especificamente, desenvolvemos uma estrutura para alavancar os LLMs de código a fim de orientar o processo de mutação de entradas no fuzzing. O processo de mutação é formulado como uma modelagem sequência a sequência, onde o LLM recebe uma sequência de bytes e, em seguida, gera a sequência de bytes mutada. O FuzzCoder é afinado no conjunto de dados de instruções criado (Fuzz-Instruct), onde o histórico de fuzzing bem-sucedido é coletado a partir de uma ferramenta de fuzzing heurística. O FuzzCoder pode prever locais de mutação e estratégias em arquivos de entrada para desencadear comportamentos anormais do programa. Resultados experimentais mostram que o FuzzCoder, baseado no AFL (American Fuzzy Lop), obtém melhorias significativas em termos de proporção efetiva de mutação (EPM) e número de falhas (NC) para vários formatos de entrada, incluindo 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.