LLAMAFUZZ:通过对大模型进行微调让大模型获得生成以及变异结构化数据的能力,从而解决模糊测试中难以生成相关合法输入的问题。

概述

目标对象:开源库,结构化数据(如PNG)

贡献

  • 通过微调大模型可以实现对二进制数据和文本数据的变异策略加强。
  • 使用大模型(优于通用大模型以及专用大模型),可以学习结构化数据种子模版以及进行变异
  • 证明了这种方法的有效性

效果

优于AFL++,相比于当前的主流Fuzzer在benchmark上可以多发现41个漏洞,同时代码覆盖率提高了27.19%

论文里提到了Grammar-based fuzzing,其中输入格式由人工指定,变异策略分为三种:1)随机变异,随机选择一个非叶子节点(non-leaf non terminal node)为其添加子属性;2)随机递归展开,找到存在递归的规则并将其进行扩展;3)剪切,合并两个输入,确保语法正确

技术路线

  1. 训练数据收集(各种模糊测试数据,FuzzBench、AFL++)
  2. 使用结构化数据对来微调大模型
  3. 集成LLM进行fuzz(异步方法提高效率)

训练数据收集

基座:llama-2-7b-chat-hf

微调数据:真实的模糊测试数据

  1. 微调数据收集:从FuzzBench、AFL++中获取有价值的种子。标准:1)可以发现新的路径;2)hit-counts不同;3)触发crash
  2. 数据转换&预处理:将二进制输入文件转换为16进制hex表示。原因:1)适用于多种类型数据;2)易于LLM理解;3)相较于base64等编码方式,hex效率要高一些。

微调大模型