FuzzCoder: фаззинг-тестирование на уровне байтов с помощью большой языковой модели
FuzzCoder: Byte-level Fuzzing Test via Large Language Model
September 3, 2024
Авторы: 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
Аннотация
Фаззинг — это важная методика динамического анализа программ, предназначенная для поиска уязвимостей в сложном программном обеспечении. Фаззинг предполагает подачу целевой программе специально сформированных вредоносных входных данных, чтобы вызвать сбои, переполнения буфера, ошибки памяти и исключения. Эффективное создание вредоносных входных данных является сложной нерешенной проблемой, и лучшие подходы часто применяют равномерные случайные мутации к уже существующим корректным входным данным. В данной работе мы предлагаем использовать тонко настроенные большие языковые модели (FuzzCoder) для изучения паттернов во входных файлах на основе успешных атак с целью направления будущих исследований в области фаззинга. В частности, мы разрабатываем framework, который использует код-ориентированные LLM для управления процессом мутации входных данных при фаззинге. Процесс мутации формулируется как моделирование последовательность-к-последовательности, где LLM получает последовательность байтов и выводит мутированную последовательность байтов. FuzzCoder дорабатывается на созданном наборе инструкций (Fuzz-Instruct), где история успешного фаззинга собирается с помощью эвристического инструмента фаззинга. FuzzCoder способен предсказывать местоположения мутаций и стратегии изменений во входных файлах для провоцирования аномального поведения программы. Результаты экспериментов показывают, что FuzzCoder на основе AFL (American Fuzzy Lop) демонстрирует значительное улучшение по показателям эффективной доли мутаций (EPM) и количества сбоев (NC) для различных форматов входных данных, включая ELF, JPG, MP3 и 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.