[Paper] HarnessAgent:利用工具增强的 LLM 流水线实现自动模糊测试 Harness 的规模化构建

发布: (2025年12月3日 GMT+8 11:55)
7 min read
原文: arXiv

Source: arXiv - 2512.03420v1

概览

本文介绍了 HarnessAgent,一个将大型语言模型(LLM)与传统软件工程工具相结合的自动化流水线,用于为开源项目中的数千个函数生成模糊测试 harness。通过解决缺失上下文问题并过滤掉“语法正确但语义无用”的代码,HarnessAgent 将 LLM 驱动的模糊测试从概念验证提升到可扩展、可投入生产的工作流。

主要贡献

  • 基于规则的编译错误缓解 – 一个轻量级的静态分析层,能够在错误阻止流水线之前检测并重写常见的构建时失败。
  • 符号检索混合工具池 – 集成了基于 clang 的索引器、语言服务器协议(LSP)以及全库 grep 工具,以 >90 % 的成功率定位目标函数的精确来源。
  • 增强的 harness 验证 – 多阶段检查器,能够发现“伪造”定义(例如仅满足 LLM 验证指标的占位桩),并提前予以拒绝。
  • 在 OSS‑Fuzz 上的实证评估 – 在 65 个 C 项目和 178 个 C++ 项目中共测试了 243 个目标函数,C 项目成功率为 87 %,C++ 项目为 81 %(比已有方法提升约 20 %)。
  • 真实世界的模糊测试影响 – >75 % 的生成 harness 在一小时的模糊测试运行中提升了目标函数的覆盖率,较基线提升 >10 %。

方法论

  1. 目标选择 – 从 OSS‑Fuzz 项目中抽样函数,重点关注缺乏现成 harness 的内部(非公开) API。
  2. 上下文丰富
    • 规则引擎 解析编译错误(缺失头文件、未定义符号、类型不匹配),并自动注入修复(如添加 #include、typedef 桩)。
    • 混合检索栈 进行查询:
      • Clangd/LSP 用于精确的 AST 级符号定位,
      • csearch/ctags 用于快速粗粒度匹配,
      • git‑grep 作为后备。
  3. LLM 提示 – 将丰富的上下文(函数签名、周边代码片段、使用示例)输入到最先进的 LLM(如 GPT‑4),生成 C/C++ 候选 harness。
  4. 验证流水线
    • 静态检查(使用 clang 编译,运行 clang‑tidy)。
    • 动态健全性 – 使用最小输入执行 harness,确保实际调用了目标函数。
    • 伪定义检测器 – 将生成的桩代码与检索到的符号进行比较,捕获仅满足表层指标的占位代码。
  5. 迭代细化 – 若任一检查失败,流水线回退并向 LLM 提供错误反馈,直至 harness 通过所有阶段或达到超时。

结果与发现

指标C 项目C++ 项目
三次尝试成功率(harness 编译并验证)87 %81 %
覆盖率提升(1 h 模糊测试后目标函数覆盖率 ≥1 % 增加)>75 % 的生成 harness>75 % 的生成 harness
源码检索命中率>90 %(对比 Fuzz Introspector 的 58 %)
总体相对提升+20 % 成功率,+10 % 覆盖率提升+20 % 成功率,+10 % 覆盖率提升

关键要点

  • 基于规则的错误修复器消除了大多数导致构建中断的错误,之前需要手动干预。
  • 多工具检索的组合显著降低了“缺失符号”失败率,这是内部函数常见的瓶颈。
  • 伪定义过滤器防止 LLM 利用验证指标进行投机,确保生成的 harness 真正可执行。

实际意义

  • 更快的安全测试流水线 – 团队可以自动为遗留代码库生成 harness,省去数周的手工工作,仅需数小时。
  • 更广泛的 OSS‑Fuzz 参与 – 以前缺少 harness 的项目现在可以自动上链,扩大持续模糊测试的覆盖面。
  • 开发者工具 – 规则引擎和混合检索栈可作为 IDE 插件复用,实时建议缺失的 include 或桩实现。
  • 成本降低 – 高质量的 harness 让模糊测试器更多地执行真实逻辑,而不是卡在死路上,提高漏洞发现的投资回报率。
  • LLM 安全 – 验证流水线展示了一种防止 LLM 输出表层正确性技巧的实用模式,可用于模糊测试之外的代码生成助手。

局限性与未来工作

  • 语言范围 – 当前实现仅面向 C 与 C++;若要扩展到 Rust、Go 或 Java,需要相应的检索与编译修复机制。
  • 对 LLM 的依赖 – 虽然流水线缓解了许多 LLM 的怪癖,但仍依赖强大的模型;使用体积更小的开源 LLM 时性能可能下降。
  • 动态分析深度 – 验证仅检查目标函数是否被调用,并未评估生成的输入是否真正探索了边界情况;下一步计划集成覆盖引导的输入合成。
  • 对数百万函数的可扩展性 – 本研究评估了 243 个函数;未来工作将对整个代码库进行压力测试,以评估运行时和资源占用。

总体而言,HarnessAgent 证明了传统工具与 LLM 的精心协同能够使自动化模糊测试 harness 生成成为现代软件开发的实用且可扩展的现实。

作者

  • Kang Yang
  • Yunhang Zhang
  • Zichuan Li
  • GuanHong Tao
  • Jun Xu
  • XiaoJing Liao

论文信息

  • arXiv ID: 2512.03420v1
  • 分类: cs.CR, cs.SE
  • 发布日期: 2025 年 12 月 3 日
  • PDF: Download PDF
Back to Blog

相关文章

阅读更多 »

[Paper] Kubernetes 配置缺陷

Kubernetes 是一种帮助快速部署软件的工具。不幸的是,配置 Kubernetes 容易出错。配置缺陷并不少见。