摘要
模糊测试技术可以有效地检测出漏洞。基于有向符号执行(DSE)模糊和有向灰盒模糊(DGF),能够快速有效地到达指定目标位置并扫描漏洞。本文介绍了有向模糊测试技术的理论知识,以及几种先进的模糊测试工具,阐述了它们的优点
内容
大多数定向模糊器都基于符号执行[8]。基于目标的定向模糊识别和模糊设定中的特定输入字节,以获得给定程序位置的特定值。它使用经典染色分析[9]来确定种子输入的某些部分,这些部分应优先考虑,以提高生成观察目标位置漏洞所需值的概率(例如,除法运算符分母中的零值[10]),这可以极大地减少搜索空间。它不需要重量级的符号执行和约束求解机制。但是,需要用户提供已到达目标位置的种子输入。DGF是一种基于GF的漏洞检测技术,它是一种实现或定位的技术,用户可以一次指定多个目标位置。同时,用户可以给出初始种子输入或空输入,并且可以模糊定向灰盒模糊器。
有向符号执行(DSE)
DSE将可达性问题转化为迭代约束求解问题。因为大多数路径都不可行,所以这些架构只能通过找到一条通向中间目标的可行路径来进行迭代。例如,补丁测试工具Katch[16]使用符号执行器KillE到达程序更改的一部分。KLEE[17]使用符号执行的方法,通过程序分析的权重分析和约束求解[18]系统地探索可用路径的状态空间。一旦确定了一条能够实际到达目标位置的可行路径,测试用例将作为相应路径约束的解决方案在后面生成。
DSE已用于到达程序中的危险位置、覆盖补丁中的更改、覆盖以前未覆盖的程序元素以增加覆盖范围、验证静态分析报告、突然检测和重现现场故障。
灰盒模糊
AFL易于扩展,Kelinci[24]是一种将AFL链接到插入指令的Java程序的工具。它不需要修改AFL,并且易于并行化。该工具实现了将AFL类型的模糊测试应用于Java程序的可能性,并可以证明其有效性。AFL从文件或标准输入’stdin’中获取输入程序,并进行了良好的模糊化,但网络上的程序不方便,需要辅助库的支持。CollAFL[25]使用应用程序作为输入,并使用三种模糊策略提供更准确的覆盖信息,以缓解路径冲突,提高发现新路径的速度。其中,三个是未接触过的邻居后代,优先被模糊化;未接触的相邻分支优先被模糊化;种子优先级模糊,具有更多访问内存操作。SAFL[26]基于KLEE和AFL生成种子,可以更早、更容易地探索更深的路径,并提出了一种算法,可以以更高的概率执行罕见或更深的路径。
有向灰盒模糊(DGF)
DGF将可达性问题映射为优化问题,并使用特定的元启发式算法计算生成种子到目标的最小距离。AFLGo是一个有向灰盒模糊器,是AFL的一个扩展。
DGF保留了GF的效率,因为所有程序分析都处于编译阶段。同时,DGF可以很容易地并行化,允许分配更多的计算能力,以便快速有效地检测漏洞。AFLGo只需几千行代码就可以轻松设置,并且可以与OSS Fuzz集成,以公开更多的安全关键程序和库。BuzzFuzz[29]只获取目标程序的染色数据,这是灰盒模糊器工作原理的一个很好的例子。与DSE相比,DGF不需要重量级符号执行、程序分析和约束求解。DGF实现的轻量级程序分析在编译时完成。
种子输入对于定向模糊非常重要。SeedFuzz[31]实现了一种种子选择方法,以覆盖更多关键程序并检测更多漏洞。SDFuzz[32]在二进制软件上搜索关键功能位置,使用染色分析将输入数据分类为安全相关数据和安全无关数据,最后更改安全相关数据以实现定向测试。TaintScope[33]是一种定向模糊工具,在二进制级别实现细粒度动态着色跟踪,识别输入中的关键操作,并识别潜在漏洞。此外,它还是一个支持校验和的模糊测试工具。
结论与展望
DSE和DGF都可以到达程序指定的位置。然而,DSE比DGF模糊有更多的重量级程序分析。在未来,有可能基于符号执行将定向白盒模糊和DGF集成,并利用符号执行的精确分析和灰盒模糊生成的多输入,综合定向模糊技术将能够利用它们的综合优势来缓解各自的弱点。同时,在选择执行测试用例时,您可以使用机器学习算法根据从过去经验中学习到的一些模型来确定测试用例的优缺点以及测试用例执行的优先级顺序。
然而,模糊测试也有一定的局限性。例如,访问控制漏洞,即模糊测试无法识别应用程序本身的权限。糟糕的设计逻辑,也就是说,模糊测试不能确定发现的问题是否是由安全问题引起的。后门,即模糊测试不识别它是否是后门功能。破坏,即SIGSEGV信号将导致模糊测试无法识别内存是否损坏。多阶段安全漏洞,即模糊测试对于识别单个漏洞非常有用,但对于由小漏洞链引起的漏洞却不是很有用。在未来,也许对于这些局限性,定向模糊技术可以给出答案。
目前,我们根据输入特征、变异策略、种子样本筛选和异常样本发现与分析定制模糊器,成本高昂。参考文献杨美芳将AFL、Peach和Honggfuzz等灰盒模糊器与可编程模糊测试框架集成到可编程模糊器中,以最低成本定制服务,并取得了一定的效果[34]。定向模糊技术仍然有很多应用空间**。在未来,探索如何将其应用于缺陷检测、确认和测试数据生成等领域将成为一个研究热点[35,36,37]。**