logo

百度安全重新定义Fuzzing 技术

作者:沙与沫2021.03.19 15:50浏览量:329

简介: 百度安全把我们在Fuzzing方面的新技术统称百中术。

百度安全长期关注软件安全技术研究。 Fuzzing是当下最常用的软件漏洞自动化发现技术。百度安全持续对Fuzzing 技术进行研究,与合作团队针对不同场景推出了一系列围绕Fuzzing的技术方案。 百度安全把我们在Fuzzing方面的新技术统称百中术 (源于我们对漏洞发现的期望:“百Fuzz百中”)。百度安全计划对相关技术进行系列介绍,相应的技术细节及成果也预计会在近期的工业和学术会议中亮相。

混合模糊测试(Hybrid Fuzzing)的应用

混合模糊测试(Hybrid Fuzzing)作为一种有效地漏洞发掘技术,已经被广泛地应用到学术界和工业界。
Hybrid Fuzzing 本质上是灰盒模糊测试和符号执行相结合的一种漏洞发掘方法。单纯的Fuzzing技术,例如AFL 这类灰盒模糊测试,是采用有反馈的随机种子生成方式来产生输入样本进行测试。但是这类Fuzzing手段很难产生有效的输入样本触发复杂的路径分支。符号执行是采集执行路径的相关指令,将其转化为可以解的条件约束(constraints)。这样,对于复杂的路径分支,符号执行可以得到触发该路径的所有constraints,通过约束求解的方法破解出一个有效的输入来触发该路径。Hybrid Fuzzing 就是将Fuzzing和符号执行同时应用到同一个被测程序的方法。
目前流行的混合模糊测试系统是依赖于模糊测试为主导,符号执行辅助的测试模式。以著名的自动化攻防比赛DARPA CGC为例,决赛战队基本都采用了以Fuzzing为主导的混合模糊测试系统。这类系统利用高效地模糊执行进行路径探索。当遇到复杂的Fuzzing长时间无法覆盖的路径分支时,再利用准确但费时的符号执行进行破解。

重新思考Hybrid Fuzzing的架构

从CGC比赛到现在已经五年过去了。随着新兴的高效符号执行方法的出现,传统的以Fuzzing为主导的混合测试的方法也许已经不再是最佳方案。百度安全和UC Riverside联合研究发现新兴的符号执行方法的执行效率已经大幅度提高,不再成为混合模糊测试的瓶颈。相反,新兴的符号执行方法在执行效率上已经可以与模糊测试并驾齐驱,进行路径探索。
新兴的符号执行有哪些呢?根据符号执行中生成constraints的方法,符号执行可以分为 IR-level,Instruction-level 以及compilation based。对于IR-level来说,混合测试的符号执行部分将机器指令转化为IR中间语言 (例如 llvm bc),然后在IR上进行constraints的计算和求解。这是相对传统的符号执行。Instruction level符号执行是直接在机器指令上进行constraint的采集和求解,这样极大减少转化时间,但是增加了采集和求解constraints的难度。基于编译器的(Compilation-based)符号执行是新兴的一种符号执行方法。它直接将constraints的采集和求解逻辑在编译过程中加固到源代码中,这样极大简化了求解的难度,并且节省了转化的时间。


图1. CocoFuzz的体系结构图
符号执行技术的性能提升,让我们有机会重新审视Hybrid Fuzzing的架构设计。符号执行不再需要作为一个辅助角色,反而可以成为Hybrid Fuzzing的核心驱动。
基于这个思路百度安全和UC Riverside近期联合提出了一种新型架构的混合模糊测试的方法CocoFuzz。它是一种以符号执行为驱动的混合模糊执行方法。这个技术重构了现有的混合模糊测试的方法,并且添加了适用于新设计体系的种子变异选取策略。方法已经在标准测试数据集和真实用例上通过测试。实验结果证明该方法在路径探索覆盖率上的性能超出目前已有的混合模糊测试的方法。

Hybrid Fuzzing部分实验结果

为了展示新配置策略的功效,我们对比了两个不同类型的Hybrid Fuzzing系统:QSYM 作为传统以Fuzzing为中心的代表,CocoFuzz 作为以符号执行为中心的代表。这里我们用几个常见工具程序作为Fuzz目标时,程序被测的覆盖率随着时间增长的趋势。以符号执行为代表的 CocoFuzz 在多数配置情况下明显优于传统Hybrid Fuzzing的代表QSYM。更多实验评价以及在真实系统中的评价将在后续的论文中发布。


表1. 实验配置说明 UF = universal flipping (i.e., flipping every symbolic branch). PP = path-prefix-based branch flipping. FSQ = fuzzer’s seed queue. ECQ = edge-coverage queue. PCQ = path-coverage queue. FIFO = first in first out.


图2. 对于几个简单应用的覆盖率比较

小结

百度安全长期关注软件安全技术。这一次 Hybrid Fuzzing的工作是和UC Riverside 团队第二次在软件安全领域共同推动安全技术。我们在Fuzzing 领域的工作不局限于与符号执行的结合,还包括与其它程序分析技术的融合,以及在AI领域对Fuzzing的应用。百度安全会在近期介绍这几方面的工作。

相关文章推荐

发表评论