我们自豪地宣布,集成式模糊测试(ensemble fuzzing)现已正式集成至DeepState——我们基于模糊测试与符号执行的单元测试框架。该技术允许测试人员在单个测试活动中运行采用不同启发式策略的多个模糊测试器,同时保持跨模糊测试器队列的输入种子同步架构。
这个全新的集成式模糊测试器包含新的deepstate-ensembler工具,以及由全新开源的DeepState前端API/SDK驱动的多个知名模糊测试引擎。该SDK使开发者能够为DeepState集成前端执行器,并为我们的ensembler工具提供种子同步支持。
智能模糊测试器的认知误区
模糊测试器是安全研究人员工具箱中最有效的工具之一。近年来,为构建更好的启发式方法(即模糊测试器探索程序的策略),相关研究层出不穷。但一个不争的事实是:模糊测试器的启发式方法往往名不副实。当所谓的智能模糊测试器扩展到真实世界程序时,其性能常常不尽如人意,最终我们仍不得不回归AFL和LibFuzzer等"笨拙"的标准工具。
什么是集成式模糊测试?
集成式模糊测试的核心思想是:虽然特定启发式方法在某些情境下表现优异,但组合使用它们应能产生比单一策略模糊测试器更好的结果。我们的实现遵循EnFuzz论文中的架构:
给定一组预定义的多样化基础模糊测试器(各自具有本地种子队列),我们可以集成全局异步-本地同步(GALS)的种子同步机制,在执行周期内将有趣种子从本地队列提取到共享全局队列。因此,当某个基础模糊测试器的启发式方法无法提高覆盖率或发现有趣输入种子时,它可以在下一个执行周期从全局队列中获取其他模糊测试器的种子。
前端实现
由于DeepState已支持Eclipser作为后端,我们首先构建了前端API。开发者可通过该API为模糊测试后端编写前端包装器,其功能包括:协调运行模糊测试进程、执行编译时插桩、预处理/后处理以及种子同步。以下代码片段展示了AFL的前端包装器示例:
|
|
构建Ensembler
利用统一API,我们现在可以构建一个集成式模糊测试器,它能配置前端对象并并发执行模糊测试器,同时保持种子同步。该实现仅需约300行Python代码,核心逻辑包括:
- 通过各前端的compile()调用执行"集成编译"
- 通过run()启动并行模糊测试进程
- 按指定同步周期调用ensemble()实现rsync式种子同步
实战测试
我们使用TweetNaCl中的大数运算漏洞(进位传播错误)作为测试案例,基准测试结果显示:在真实漏洞发现场景中,Angora和Eclipser等"智能"模糊测试器性能下降,而集成式模糊测试器在两个测试案例中均表现良好。
未来方向
虽然当前基准测试不能断言集成式模糊测试是最佳策略,但值得注意的是:
- 有效集成可能取决于基础模糊测试器的选择
- 针对不同漏洞类别可能需要特定的模糊测试器调用顺序
- 需要更多样化的目标基准测试来验证通用性
(正文完)