[论文解读] SAVIOR: Towards Bug-Driven Hybrid Testing
SAVIOR 是一种新颖的混合软件测试框架,通过优先对漏洞潜在性更高的分支进行 concolic 执行,并利用 SMT 约束验证执行路径上的所有候选漏洞,实现了从以覆盖率为导向到以漏洞为导向的测试范式转变。与 Driller 和 QSYM 相比,它在 24 小时内检测漏洞的速度分别快了 43.4% 和 44.3%,并分别多发现了 88 个和 76 个安全违规。
Hybrid testing combines fuzz testing and concolic execution. It leverages fuzz testing to test easy-to-reach code regions and uses concolic execution to explore code blocks guarded by complex branch conditions. However, its code coverage-centric design is inefficient in vulnerability detection. First, it blindly selects seeds for concolic execution and aims to explore new code continuously. However, as statistics show, a large portion of the explored code is often bug-free. Therefore, giving equal attention to every part of the code during hybrid testing is a non-optimal strategy. It slows down the detection of real vulnerabilities by over 43%. Second, classic hybrid testing quickly moves on after reaching a chunk of code, rather than examining the hidden defects inside. It may frequently miss subtle vulnerabilities despite that it has already explored the vulnerable code paths. We propose SAVIOR, a new hybrid testing framework pioneering a bug-driven principle. Unlike the existing hybrid testing tools, SAVIOR prioritizes the concolic execution of the seeds that are likely to uncover more vulnerabilities. Moreover, SAVIOR verifies all vulnerable program locations along the executing program path. By modeling faulty situations using SMT constraints, SAVIOR reasons the feasibility of vulnerabilities and generates concrete test cases as proofs. Our evaluation shows that the bug-driven approach outperforms mainstream automated testing techniques, including state-of-the-art hybrid testing systems driven by code coverage. On average, SAVIOR detects vulnerabilities 43.4% faster than DRILLER and 44.3% faster than QSYM, leading to the discovery of 88 and 76 more uniquebugs,respectively.Accordingtotheevaluationon11 well fuzzed benchmark programs, within the first 24 hours, SAVIOR triggers 481 UBSAN violations, among which 243 are real bugs.
研究动机与目标
- 为解决尽管代码覆盖率高但传统覆盖率驱动的混合测试在检测真实漏洞方面效率低下的问题。
- 通过优先选择具有更高可利用性潜力的种子和路径,减少可利用漏洞的发现延迟。
- 通过使用形式化证明验证执行路径上所有潜在漏洞候选,提升检测的准确性。
- 在漏洞发现的速度和完整性方面,超越现有的混合测试工具。
提出的方法
- SAVIOR 采用以漏洞为导向的优先级策略,根据分支条件暴露漏洞的潜力对其进行排序,引导 concolic 执行聚焦于高风险路径。
- 在 concolic 执行过程中,利用 SMT 约束对执行路径上的所有潜在漏洞进行建模与验证,证明其可行性或不存在性。
- 框架根据种子触发可利用缺陷的可能性动态选择用于模糊测试的种子,而非仅依赖代码覆盖率。
- 通过集成漏洞标签与符号执行,检查所有候选故障,实现对真实安全违规的精确识别。
- SAVIOR 在反馈驱动的循环中结合模糊测试与 concolic 执行,已验证的漏洞引导进一步的探索。
- 通过插入 UBSan 风格检查与漏洞标签,对程序进行插桩,实现在执行过程中对潜在缺陷的细粒度追踪。
实验结果
研究问题
- RQ1以漏洞为导向的方法是否能在漏洞检测效率上超越以覆盖率为导向的混合测试?
- RQ2与 Driller 和 QSYM 等最先进的工具相比,SAVIOR 在识别可利用漏洞方面的有效性如何?
- RQ3通过漏洞引导的验证,能在多大程度上减少误报并提升检测准确性?
- RQ4优先处理高潜力分支对真实安全违规的检测时间有何影响?
- RQ5通过 SMT 约束进行形式化验证,能否提升混合测试中漏洞检测的可靠性?
主要发现
- 在相同的 24 小时测试窗口内,SAVIOR 平均比 Driller 快 43.4% 检测漏洞,比 QSYM 快 44.3%。
- 在 11 个知名模糊测试基准程序上,24 小时内 SAVIOR 比 Driller 多发现 88 个安全违规,比 QSYM 多发现 76 个。
- 该框架在首 24 小时内识别出 481 个独特的安全违规,展现出卓越的覆盖范围与检测速度。
- 通过验证执行路径上所有候选漏洞,SAVIOR 有效减少了误报,并增强了报告结果的可信度。
- 漏洞引导的验证技术成功利用 SMT 约束证明了漏洞的可行性或不存在性,显著提升了检测的可靠性。
- 评估结果证实,优先处理高潜力路径能显著缩短检测时间,且不以牺牲覆盖率为代价。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。