" 在现代模糊测试(Fuzzing)中,测试套件的质量往往直接决定了漏洞挖掘的深度与效率。然而,在真实工业代码中,API 使用方式复杂、多样且高度依赖上下文,人工编写 Harness 成本高昂,自动生成方法又常常缺乏对真实使用场景的理解。
为此,研究者提出了WildSync,一种通过恢复"野生代码(Wild Code)"中真实 API 使用模式,自动合成高质量 Fuzzing 测试套件 的新方法,为提升模糊测试覆盖率与实用性提供了新的思路。 "
- 📄 论文标题:WildSync: Automated Fuzzing Harness Synthesis via Wild API Usage Recovery
📅 发表时间: Proceedings of the ACM on Software Engineering, ISSTA, 2025
🏫 作者单位:达特茅斯学院、犹他大学
💡开源代码:
01---方法介绍
图1展示了调用vorbis库ov_time_seek的外部代码。基于已完成 OggVorbis_File初始化的测试框架,作者扩展其对ov_time_seek进行模糊测试,通过模糊输入填充双精度参数s,并覆盖其条件检查,以确保 API 调用正确且避免触发已知限制或冗余崩溃。

图 1. ov_time_seek 的外部使用。
WildSync 的核心思想是:与其从文档或头文件推测 API 如何使用,不如直接从真实世界代码中学习。整体流程分为四个关键阶段:
① 野生代码收集
从大规模开源项目中挖掘真实 API 调用实例;
② API 使用模式恢复
分析参数依赖、调用顺序与资源管理语义;
③ 依赖同步(Sync)建模
构建 API 之间的隐式依赖关系图;
④ 测试套件自动合成
生成可直接用于 Fuzzing 的测试驱动代码。

图 2. WildSync整体框架
小结:WildSync将真实世界代码作为"隐式规范",显著提升了测试套件的真实性与可执行性。
02---关键机制
- 以真实世界代码作为 API 规范来源,避免文档不完整或过时的问题。
- 依赖感知的测试套件合成,显式建模 API 调用间的顺序与状态约束。
- 高度自动化,显著降低人工参与成本,适配大规模库级 Fuzzing。
| 模块 | 实现方式 | 主要作用 |
|---|---|---|
| API 使用挖掘 | 静态分析真实项目中的 API 调用片段 | 获取高质量真实使用样本 |
| 参数与状态依赖分析 | 数据流与控制流联合分析 | 恢复 API 之间的隐式约束 |
| 使用模式同步(Sync) | 跨函数、跨文件依赖对齐 | 保证生成 Harness 的语义一致性 |
| 测试套件生成 | 模板化代码合成 + 自动填充参数 | 生成可直接执行的 Fuzzing 驱动 |
小结:WildSync 的关键在于"依赖同步",避免了传统自动测试套件中常见的无效调用与崩溃初始化问题。
03---实验结果
WildSync专注于为C风格库API生成测试框架,并利用OSS-Fuzz平台托管的现有库测试框架。实验保留了所有编译选项和初始模糊测试种子选择机制,仅对每个待测库的脚本进行微调以集成新测试框架。
表1显示了WildSync的有效性。第一部分展示了已纳入OSS-Fuzz库的覆盖率提升情况。第二部分手动测试环节呈现了从stretch版本开始测试的3个库的成果。作者基于开发者提供的示例代码手动创建初始测试框架,随后通过WildSync扩展了API覆盖范围。每个测试框架均使用libFuzzer进行24小时、5轮的模糊测试。UC = 总唯一崩溃次数,S = 虚假崩溃,N = 正常崩溃(含超时/内存不足),B = 经人工复核后确认为缺陷的崩溃。
表1. 采用WildSync技术合成的全新测试套件覆盖范围提升

小结**:基于现有测试框架,WildSync成功为27个库中的469个API合成了新的测试框架。结果是新增近2万行代码,覆盖了超过1300个新函数,显著提升了被测库的测试能力。**
📌 总结
WildSync 从"API 实际如何被使用"这一角度重新审视 Fuzzing 测试套件合成问题,为解决长期存在的自动化测试套件质量瓶颈提供了切实可行的方案。
该思路对库级模糊测试、API 安全评估以及自动化测试生成均具有重要启示意义。
📣 欢迎留言讨论
-
你认为未来Fuzzing的核心瓶颈在于输入生成,还是语义约束建模?
-
真实世界代码是否可以作为更多程序分析任务的"隐式真值"?
📌 点赞 + 收藏 + 分享,你的支持,是我们持续解析高水平软件安全论文的最大动力!