FuzzCoder: Byte-level Fuzzing Test via Large Language Model
作者: 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.CL
发布日期: 2024-09-03
备注: 11 pages
💡 一句话要点
提出FuzzCoder,利用微调大语言模型指导字节级模糊测试,提升漏洞发现效率。
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 模糊测试 大语言模型 漏洞挖掘 程序分析 软件安全
📋 核心要点
- 现有模糊测试方法依赖于随机突变,效率低下,难以发现深层漏洞。
- FuzzCoder利用大语言模型学习历史攻击数据,预测突变位置和策略,指导模糊测试。
- 实验表明,FuzzCoder显著提升了有效突变比例和崩溃数量,适用于多种输入格式。
📝 摘要(中文)
模糊测试是一种重要的动态程序分析技术,旨在发现复杂软件中的漏洞。它通过向目标程序提供精心设计的恶意输入,以引发崩溃、缓冲区溢出、内存错误和异常。高效地生成恶意输入是一个具有挑战性的开放问题,目前最好的方法通常是对预先存在的有效输入进行均匀随机突变。本文提出采用微调的大语言模型(FuzzCoder)来学习成功攻击中的输入文件模式,从而指导未来的模糊测试探索。具体而言,我们开发了一个框架,利用代码LLM来指导模糊测试中输入的突变过程。突变过程被形式化为序列到序列的建模,其中LLM接收一个字节序列,然后输出突变的字节序列。FuzzCoder在创建的指令数据集(Fuzz-Instruct)上进行微调,该数据集收集了启发式模糊测试工具的成功模糊测试历史。FuzzCoder可以预测输入文件中突变位置和策略位置,以触发程序的异常行为。实验结果表明,基于AFL(American Fuzzy Lop)的FuzzCoder在有效突变比例(EPM)和崩溃数量(NC)方面,对包括ELF、JPG、MP3和XML在内的各种输入格式都获得了显著的改进。
🔬 方法详解
问题定义:现有的模糊测试方法,特别是基于突变的模糊测试,通常采用随机或启发式的突变策略。这些策略效率较低,难以生成能够触发程序深层漏洞的恶意输入。因此,如何更有效地指导模糊测试过程,提高漏洞发现的效率,是一个亟待解决的问题。
核心思路:FuzzCoder的核心思路是利用大语言模型(LLM)学习历史成功模糊测试的经验,从而预测输入文件中哪些位置以及如何进行突变,更有可能触发程序的异常行为。通过将模糊测试的突变过程建模为序列到序列的问题,LLM可以根据输入的字节序列生成突变的字节序列,从而指导模糊测试的探索方向。
技术框架:FuzzCoder的整体框架包括以下几个主要阶段:1) 使用传统的模糊测试工具(如AFL)进行初始模糊测试,并记录成功的攻击历史。2) 构建指令数据集(Fuzz-Instruct),将成功的攻击历史转化为LLM可以学习的指令数据。3) 使用Fuzz-Instruct数据集对LLM进行微调,得到FuzzCoder模型。4) 在后续的模糊测试过程中,FuzzCoder模型根据当前的输入文件,预测突变位置和策略,生成新的输入,并提交给目标程序进行测试。
关键创新:FuzzCoder最重要的技术创新点在于将大语言模型引入到模糊测试的突变过程中,利用LLM强大的学习和预测能力,指导模糊测试的探索方向。与传统的随机或启发式突变策略相比,FuzzCoder能够更有效地利用历史攻击信息,生成更有可能触发漏洞的输入。
关键设计:FuzzCoder的关键设计包括:1) Fuzz-Instruct数据集的构建,需要将成功的攻击历史转化为LLM可以理解的指令形式。2) LLM的选择和微调策略,需要选择合适的LLM,并采用合适的微调方法,以获得最佳的预测性能。3) 突变位置和策略的预测,需要设计合适的模型结构和损失函数,以准确预测输入文件中哪些位置以及如何进行突变。
🖼️ 关键图片
📊 实验亮点
实验结果表明,基于AFL的FuzzCoder在多种输入格式(ELF、JPG、MP3、XML)上均取得了显著的改进。在有效突变比例(EPM)和崩溃数量(NC)方面,FuzzCoder相比于原始AFL有显著提升,证明了其在指导模糊测试方面的有效性。具体提升幅度未知,需查阅原文。
🎯 应用场景
FuzzCoder可应用于各种软件的漏洞挖掘,尤其适用于处理复杂输入格式的程序。通过提高模糊测试的效率,可以更早地发现和修复软件漏洞,降低安全风险。该研究成果对提升软件安全性和可靠性具有重要意义,未来可应用于自动化漏洞挖掘平台和安全测试工具。
📄 摘要(原文)
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.