摘要:混合测试结合了模糊测试和协同执行。它利用模糊测试来测试容易到达的代码区域,并使用concolic执行来探索由复杂分支条件保护的代码块。因此,与模糊测试或协同执行相比,混合测试能够深入到程序状态空间。最近,混合测试取得了重大进展。然而,其以代码覆盖率为中心的设计在漏洞检测方面效率低下。首先,它盲目地为concolic执行选择种子,并旨在不断探索新代码。然而,正如统计数据所显示的,大部分探索的代码通常都没有bug。因此,在混合测试期间对代码的每个部分给予同等关注是一种非最优策略。它将实际漏洞的检测速度降低了43%以上。第二,经典的混合测试在到达一段代码后会迅速进行,而不是检查其中隐藏的缺陷。尽管它已经探索了易受攻击的代码路径,但它可能经常漏掉细微的漏洞。
我们提出SAVIOR,这是一个新的混合测试框架,开创了bug驱动的原则。与现有的混合测试工具不同,SAVIOR优先考虑共同执行可能会发现更多漏洞的种子。此外,SAVIOR会验证执行程序路径上所有易受攻击的程序位置。通过使用SMT约束对故障情况进行建模,SAVIOR分析了漏洞的可行性,并生成了具体的测试用例作为证据。我们的评估表明,bug驱动的方法优于主流的自动化测试技术,包括由代码覆盖率驱动的最先进的混合测试系统。平均而言,SAVIOR检测漏洞的速度比DRILLER快43.4%,比QSYM快44.3%,分别发现了88个和76个独特的漏洞。根据对11个模糊的基准测试程序的评估,在最初的24小时内,SAVIOR触发了481个瑞银违规,其中243个是真正的bug。
I. INTRODUCTION
Bug 驱动的优先级划分: SAVIOR 不会在 concolic 执行中不加区别地运行所有种子,而是优先考虑那些更