1. 引言
研究背景:软件漏洞的出现可能会带来严重的安全隐患,因此对程序进行安全测试非常重要。在程序的数千行代码中,新提交的代码更容易引入漏洞,因为这些代码通常是为了功能升级或 bug 修复而添加的。现有的基于覆盖率的模糊测试方法虽然在发现真实世界软件系统中的安全漏洞方面已经证明是高度有效的,但在识别提交引入的漏洞方面却缺乏效率,因为它们对代码的所有部分都同等对待,而没有专门针对提交的变更进行测试。相比之下,有针对性的模糊测试更适合提交测试场景,因为它可以将提交的变更点作为目标进行测试。
研究意义:现有的有针对性的模糊测试方法仍然存在一些问题:首先,它们主要关注快速到达目标(变更点),而没有引导模糊器对受影响的代码进行彻底测试,因此可能无法发现变更点远离崩溃点的新引入漏洞;(2)其次,提交通常修改多个地方,导致存在多个目标,但现有方法可能会忽略某些目标,影响对每个目标的彻底测试。
研究内容:论文提出了一种名为 WAFLGO 的有针对性的模糊测试方法,通过关键代码引导的输入生成策略和新的距离度量,实现对提交引入的漏洞进行有效发现。WAFLGO 可以充分探索受影响的代码,并对所有变更点进行彻底检查,从而更好地支持提交测试场景下的漏洞发现。该研究对于提高软件安全性测试的效率和有效性具有重要意义。
2. 研究方法
静态分析:使用 SVF 框架构建了程序的 Inter-Procedural Control Flow Graph (ICFG) 和 Inter-Procedural Static Value-Flow Graph (SVFG)。通过数据流分析,识别出两类关键代码:路径前缀代码和数据后缀代码。
动态模糊测试:提出了一种新的多目标距离度量,将多个变更点合并为函数级别的目标,并计算每个目标的距离。设计了一种关键代码引导的输入生成策略,包括目标边选择和变异掩码。采用了优先级队列和自适应能量分配的种子选择和调度机制。
3. 实验结果
从真实世界的项目中收集含有已知bug的提交作为测试集。实现了WAFLGO的原型系统,包括静态分析模块和动态模糊测试模块。将WAFLGO与8种最新的模糊测试工具进行了对比评估,测量其发现bug的效率。在最近50个提交中,使用WAFLGO发现了7个新的漏洞,包括4个CVE。
总结来说,这篇论文提出了一种针对提交引入漏洞的新型模糊测试方法 WAFLGO,通过静态分析识别关键代码,并在动态模糊测试中采用针对性的输入生成策略,显著提升了发现新引入漏洞的效率。论文覆盖了完整的研究流程,包括思路、方法和实验设计,为该领域的研究提供了有价值的参考。
4. 研究总结
研究创新:提出了一种针对有缺陷提交的模糊测试方法,不仅关注更改点本身,还考虑更改点对整个程序的影响。引入了"关键代码"概念,包括路径前缀代码和数据后缀代码,并设计了相应的输入生成策略,从而更好地覆盖受影响的代码区域。提出了一种轻量级的多目标距离度量,可以更好地处理存在多个更改点的场景。
研究不足:在到达目标更改点方面仍然存在挑战,WAFLGO 有时无法高效地生成满足复杂路径约束的输入。可以考虑结合静态分析技术来解决这个问题。WAFLGO 目前主要基于数据依赖来识别受影响的代码,但没有利用语义信息,如区分不同重要性的变量。可以进一步提升受影响代码的识别精度。WAFLGO 在某些情况下需要较长时间(超过12小时)才能发现漏洞,这可能无法满足实际的持续集成/部署场景下的需求。可以考虑采用增量测试等方法来提高效率。
研究展望:继续探索如何更好地解决到达目标更改点的问题,如结合符号执行等技术。研究如何利用语义信息来更精确地识别受影响的代码区域,提高漏洞发现的效果。设计增量测试的方法,充分利用历史测试数据,提高WAFLGO在持续集成/部署场景下的适用性。