PromeFuzz: A Knowledge-Driven Approach to Fuzzing HarnessGeneration with Large Language Models

一.简介:

  API 级模糊测试对现代软件愈发重要,为此我们提出PromeFuzz。我们方法的核心是:将项目相关的全部信息(包括源代码与 API 文档)转化为大模型能够高效利用的结构化知识,并通过增强 API 的语义约束与依赖关系,自动生成更高质量的模糊测试驱动,从而提升模糊测试效果。

  PromeFuzz 的核心在于改进 API 的调用约束,依托大模型生成严格满足三大要求的模糊测试驱动:①符合语法与初始化约束,确保可编译、可运行;②遵守 API 语义规则,保证函数组合、调用顺序与隐式约束正确;③能够有效探索程序状态空间,提升覆盖率与漏洞发现能力。

二.背景动机:

  第二章先讲 API 模糊测试与 Harness (驱动入口)的背景,举例子论述了之前的一些工具,在这方面都有一些不足,很多报错因素并不是因为fuzz,而是LLM本身存在的问题:传统与 LLM 方法不懂 API 约束、误报极高的问题,明确三大研究挑战,并引出 PromeFuzz 的整体解决思路。

  三个挑战:

  • 如何从代码 + 文档里有效抽取知识?
  • 如何用这些知识提升 Harness 质量,又不把 LLM 撑爆?
  • 如何系统修正 LLM 错误,减少幻觉、降低误报?

  解决思路:

  • 把代码元数据 + API 文档 + 真实调用关系变成结构化知识。
  • 用知识驱动 LLM 生成合规 Harness。
  • 加清洗、修复、反馈闭环,让生成越来越准。

  而我们的PromeFuzz 整个工作流程分为五个模块

  • Preprocessor 预处理模块:使用者api的调用序列,函数,依赖代码
  • Comprehender 理解模块:这些api通常怎么使用,配合什么使用
  • Scheduler 调度模块:通过上面的关系,按照相关性,生成我们api测试的组合(这种组合是可能性,可能测出新东西的组合)
  • Generator 生成模块:生成Fuzz Harness驱动(可以使用的)
  • Sanitizer 清洗模块:循环改错,看下哪里有问题,是什么方面的,应该怎么改

image

 

image

 自己总结一下流程图:

image

 第三章.详细设计

3.1知识库的建立

  包括preprocessorcomprehender.

  PromeFuzz 通过 { 从库源码、用户示例代码 和 API 文档(手册 / 注释) }  中提取并理解三类知识,来构建统一的 API 知识库。去理解:

  • 先理解 API 正确用法和各种API之间的相关性
  • 再用范围相关性圈定同一功能的 API
  • 用调用相关性看真实使用习惯
  • 用语义相关性补充功能相似度

3.2知识驱动生成

  scheduler  Generatorsanitizer

  先看哪些 API 关系近、经常一起用,再看测哪些能让代码覆盖变多,然后挑一组最值得测、最可能测出问题的 API,再把它们按正常使用顺序排好,方便后面直接生成能用的测试代码。

  内容很简单,主要在他代码是怎么写的。

第四章.实现

  PromeFuzz 是在 Clang/LLVM 和 LangChain 的基础上实现的,大概包含 9000 行 Python 代码和 900 行 C++ 代码。虽然 C++ 也能兼容,但是它主要还是用来测试 C 语言相关的库和 API。

  代码流程:

  PromeFuzz.py总命令入口,在cli文件夹里面有每个步骤(子模块)的详细组成

用户执行: ./PromeFuzz.py preprocess -D --config my.toml


if __name__ == "__main__" 触发

main()
├── setup_subcommands() # 动态导入 cli/preprocess.py 等
│ └── butler.add_command(preprocess) # 注册子命令

butler() [Click 处理参数]
├── setup_logger(True) # -D 开启 DEBUG
│ ├── 控制台: 彩色日志 + tqdm.write
│ └── 文件: logs/20260327..._preprocess_-D.log
├── load_config(Path("my.toml"), Path("libraries.toml"))
│ ├── 检查文件存在
│ ├── tomllib 解析 TOML → 字典
│ ├── 替换 {PROMEFUZZ_PATH} 变量
│ └── 存入 global_vars

Click 路由到 preprocess 子命令执行

后面:

  5.评估

  6.讨论假阳性和失败案例:论文分析假阳性和失败案例后得出,少量错误源于复杂依赖(理解错了api的信息或者关系)、严格调用顺序及 LLM 理解限制,但知识驱动设计已有效降低错误率,证明 PromeFuzz 思路可靠先进。

  7.对比

  8.总结:本文提出知识驱动的 PromeFuzz 方法,用于自动模糊测试线束生成;其通过集成代码元数据、文档及 API 相关性的结构化知识,让 LLM 生成语法正确且符合 API 隐式约束的控制,搭配自动编译修复、实时覆盖反馈和误报过滤消毒程序增强鲁棒性。经 22 个实际项目实验验证,PromeFuzz 性能优于 Prompt-Fuzz、CKGFuzzer 等先进工具及手工模糊测试工具,分支覆盖率分别比 PromptFuzz、CKGFuzzer、oss-fuzzgen、OSS-Fuzz 高 1.50 倍、3.88 倍、1.91 倍、1.40 倍,共发现 25 个未知漏洞(含 21 个开发者确认漏洞、3 个确认 CVEs),精度达 89.7%。