[论文解读] Static Exploration of Taint-Style Vulnerabilities Found by Fuzzing
本文提出一种混合静态分析技术,利用模糊测试工具发现的崩溃生成漏洞模板,再通过静态模板匹配在代码库中发现重复出现的传播型漏洞。通过基于未测试代码覆盖率对匹配结果进行排序,该方法识别出此前未被发现的缺陷——在无现有测试框架的情况下,成功在 Open vSwitch 中发现了一个新的潜在漏洞。
Taint-style vulnerabilities comprise a majority of fuzzer discovered program faults. These vulnerabilities usually manifest as memory access violations caused by tainted program input. Although fuzzers have helped uncover a majority of taint-style vulnerabilities in software to date, they are limited by (i) extent of test coverage; and (ii) the availability of fuzzable test cases. Therefore, fuzzing alone cannot provide a high assurance that all taint-style vulnerabilities have been uncovered. In this paper, we use static template matching to find recurrences of fuzzer-discovered vulnerabilities. To compensate for the inherent incompleteness of template matching, we implement a simple yet effective match-ranking algorithm that uses test coverage data to focus attention on those matches that comprise untested code. We prototype our approach using the Clang/LLVM compiler toolchain and use it in conjunction with afl-fuzz, a modern coverage-guided fuzzer. Using a case study carried out on the Open vSwitch codebase, we show that our prototype uncovers corner cases in modules that lack a fuzzable test harness. Our work demonstrates that static analysis can effectively complement fuzz testing, and is a useful addition to the security assessment tool-set. Furthermore, our techniques hold promise for increasing the effectiveness of program analysis and testing, and serve as a building block for a hybrid vulnerability discovery framework.
研究动机与目标
- 解决模糊测试在实现完整测试覆盖率以及在无测试框架的代码中发现漏洞方面的局限性。
- 通过自动识别传播型缺陷的重复模式,减少漏洞审计中的手动工作量。
- 通过聚焦于模糊测试覆盖率低或无覆盖的代码区域,提高静态分析的精确度,减少误报。
- 通过复用模糊测试发现的崩溃模式作为模板,实现在开发早期阶段检测漏洞。
提出的方法
- 使用基于覆盖率引导的模糊测试工具(afl-fuzz)在可测试的代码段中发现初始程序崩溃。
- 通过地址消毒剂(AddressSanitizer)或执行切片技术进行故障定位,隔离崩溃的根本原因,并提取脆弱代码的语法和语义特征。
- 从定位到的故障代码中自动生成漏洞模板,编码其结构特征与语义特征。
- 在代码库中执行静态模板匹配,识别相同漏洞模式的重复实例。
- 基于模糊测试覆盖率数据对匹配结果进行排序,优先处理包含未测试代码路径的匹配项。
- 将该流水线集成至 Clang/LLVM 工具链中,支持静态分析与代码插桩,实现对大型 C 代码库的可扩展分析。
实验结果
研究问题
- RQ1静态分析能否有效发现因测试覆盖率有限而被模糊测试遗漏的传播型漏洞?
- RQ2模糊测试发现的崩溃是否可被可靠地转化为可复用的漏洞模板,以用于更大范围的代码库扫描?
- RQ3通过未测试代码覆盖率对模板匹配结果进行排序,是否相比简单模式匹配能提高漏洞发现的精确度?
- RQ4该方法能否在缺乏测试框架的代码模块(如异步或有状态 API)中检测到漏洞?
- RQ5该方法在不同版本的同一软件中检测重复漏洞的适用范围有多大?
主要发现
- 该原型成功在 Open vSwitch 的一个缺乏测试框架的模块中,发现了一个此前未知的潜在传播型漏洞。
- 通过复用从旧版本已知漏洞中提取的模板,该方法在 Open vSwitch 后续版本中检测到了重复出现的漏洞。
- 结合覆盖率的模板匹配显著减少了噪声,优先识别出未被测试覆盖的代码区域中的匹配项。
- 该方法实现了高精确度,且误报极少,因为排序机制将注意力集中于模糊测试尚未执行的代码路径。
- 整个流水线(包括故障定位与模板生成)运行效率高,运行时开销可忽略不计。
- 开源的原型支持独立评估,并可集成至现有的软件安全评估工作流中。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。