[论文解读] Angora: Efficient Fuzzing by Principled Search
Angora 是一种高性能的基于变异的模糊测试工具,通过在不使用符号执行的情况下求解路径约束,实现了更高的分支覆盖率。它结合了可扩展的字节级污点追踪、上下文敏感的分支计数、基于梯度下降的搜索策略、类型/形状推断以及输入长度探索等技术。与现有最先进工具相比,Angora 在漏洞发现方面表现更优,在 LAVA-M 中发现了 103 个此前未被检测到的漏洞,在八个成熟开源程序中发现了 175 个新漏洞。
Fuzzing is a popular technique for finding software bugs. However, the performance of the state-of-the-art fuzzers leaves a lot to be desired. Fuzzers based on symbolic execution produce quality inputs but run slow, while fuzzers based on random mutation run fast but have difficulty producing quality inputs. We propose Angora, a new mutation-based fuzzer that outperforms the state-of-the-art fuzzers by a wide margin. The main goal of Angora is to increase branch coverage by solving path constraints without symbolic execution. To solve path constraints efficiently, we introduce several key techniques: scalable byte-level taint tracking, context-sensitive branch count, search based on gradient descent, and input length exploration. On the LAVA-M data set, Angora found almost all the injected bugs, found more bugs than any other fuzzer that we compared with, and found eight times as many bugs as the second-best fuzzer in the program who. Angora also found 103 bugs that the LAVA authors injected but could not trigger. We also tested Angora on eight popular, mature open source programs. Angora found 6, 52, 29, 40 and 48 new bugs in file, jhead, nm, objdump and size, respectively. We measured the coverage of Angora and evaluated how its key techniques contribute to its impressive performance.
研究动机与目标
- 为解决覆盖率引导模糊测试中的可扩展性与有效性差距,实现在不依赖符号执行的前提下高效求解约束。
- 通过在字节级别实现上下文敏感的污点追踪,提升分支覆盖率。
- 开发一种基于梯度下降的搜索策略,以有原则的方式高效满足复杂路径约束,避免符号执行带来的性能瓶颈。
- 实现输入长度的自动适应,以触发依赖于输入大小的路径条件。
- 在合成基准(LAVA-M)和真实世界开源软件上评估模糊测试工具,证明其在漏洞发现方面的优越性。
提出的方法
- 采用可扩展的字节级污点追踪技术,识别影响特定条件分支的输入字节,从而将搜索空间缩小至相关字节。
- 利用上下文敏感的分支计数技术,区分程序执行的不同上下文,提升状态覆盖的准确性。
- 应用基于梯度下降的搜索策略,有原则地变异输入字节以满足路径约束,替代计算开销较大的符号执行。
- 通过推断数据类型和结构(例如,4 字节序列推断为 32 位整数)来指导变异,提升搜索效率。
- 通过动态探测输入长度是否影响路径约束,适时增加输入大小,实现输入长度的探索。
- 将所有技术整合为一个基于变异的模糊测试工具,在保持低运行时开销的同时最大化代码覆盖率。
实验结果
研究问题
- RQ1基于变异的模糊测试工具是否能在不依赖符号执行的情况下实现高分支覆盖率?
- RQ2与上下文无关的方法相比,上下文敏感的分支计数在提升状态探索效率方面有多有效?
- RQ3基于梯度下降的搜索策略是否能高效满足符号执行难以处理的复杂路径约束?
- RQ4类型/形状推断与输入长度自适应在多大程度上提升了模糊测试的有效性?
- RQ5在真实世界漏洞发现任务中,所提出的模糊测试工具与现有最先进工具相比表现如何?
主要发现
- 在 LAVA-M 基准测试中,Angora 在 'who' 程序中发现了 1,541 个漏洞,是第二名工具 Steelix 的八倍。
- Angora 发现了 LAVA-M 数据集中由作者注入但此前所有工具均无法触发的 103 个漏洞。
- 在八个成熟开源程序中,Angora 在 'file' 中发现 6 个新漏洞,在 'jhead' 中发现 52 个,在 'nm' 中发现 29 个,在 'objdump' 中发现 40 个,在 'size' 中发现 48 个。
- 在所有基准测试中,Angora 的代码覆盖率显著高于 AFL、VUzzer、Steelix 等现有最先进工具。
- 消融实验表明,每一项关键技术(尤其是梯度下降和字节级污点追踪)均对性能提升有显著贡献。
- 上下文敏感的覆盖率、污点追踪与输入长度自适应的结合,使 Angora 能够探索比现有工具更深、更丰富的程序状态。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。