论文部分内容阅读
模糊测试技术(Fuzzing)是一种广泛应用于漏洞扫描的测试技术。然而,模糊测试技术在生成测试用例的过程中存在着较大的随机性和盲目性。定向灰盒Fuzzing技术是一种专注于定位到程序中指定目标位置的漏洞检测技术,它在检测能力(可能遗漏重要缺陷)和测试效率方面面临着巨大的挑战。目前定向灰盒Fuzzing技术存在两个挑战:(1)功率调度的不公平性;(2)路径探索的不全面性。定向灰盒模糊器AFLGo通过计算种子到目标位置的距离来实现定向性,然而它只为距离目标位置近的种子分配更多的能量,而忽略了距离目标位置远的种子,导致远离目标位置的漏洞难以暴露,远离目标位置的路径难以覆盖。本文提出了一种基于路径覆盖的Fuzzing策略,通过提取插桩反馈信息中的关键信息,计算种子的适应度,进一步引导种子的变异方向,做到对被测工程更加全面的覆盖且致力于挖掘潜在漏洞。具体地,针对路径探索不全面的问题,使用基于频度适应度、新分支适应度和不频繁分支适应度算法,筛选高质量的种子;针对功率调度片面性的问题,提出基于路径覆盖的功率调度算法,在“探索”阶段,提高对被测工程的代码覆盖率;在“利用”阶段,利用种子中的有效信息,对种子的能量进行全面地调节,提高种子的定向能力。本文将基于路径覆盖的Fuzzing策略与定向灰盒模糊器AFLGo结合,构建了定向灰盒模糊器PacoAFL。本文在一些典型的应用软件(如MJS、libxml2、lrzip和GNU Binutils)中完成模糊测试,在同样的实验条件下,与AFLGo和AFL进行比对。实验结果表明,基于路径覆盖的Fuzzing策略能够有效提升种子的探索能力,即代码覆盖率;分支覆盖率、行覆盖率和函数覆盖率相比于AFLGo和AFL均有了一定程度的提升。同时,在漏洞挖掘方面,PacoAFL相比于AFLGo和AFL均能够发现更多的漏洞。PacoAFL能够完成crash重建,在lrzip上,重现了CVE-2017-8846和CVE-2018-11496这两个漏洞的堆栈信息,进一步证明了PacoAFL的定向能力。