ChatPaper.aiChatPaper

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.
PDF453November 14, 2024