SNIPTEST: Fuzzing Multi-Level Code Slices for Validating Vulnerabilities
本文由 paper-daily 使用 DeepSeek 自动生成,仅供快速了解论文;关键结论请以原文为准。
论文原文 · PDF · 源文件
SNIPTEST通过逐层代码切片和定向模糊测试,高效验证静态分析警告,实现自动化漏洞分流。
基本信息
| 属性 | 内容 |
|---|
| 作者 | Aniruddhan Murali, Nobble Saji Mathews, Mahmoud Alfadel, Meng Xu, Meiyappan Nagappan |
| 来源 | arXiv:2608.17396 |
| 发布日期 | 2026-08-18 |
| 抓取领域 | 软件工程 · 分析/测试/合成 |
| 学科方向 | 软件工程 |
| arXiv 分类 | cs.SE |
| 适用层次 | 进阶 |
| 标签 | 代码切片, 定向模糊测试, 警告分流, 漏洞验证, 静态分析 |
| PDF | 在线阅读 |
| 代码仓库 | 暂无 |
问题的初衷(Why - 为什么要做这个研究)
【问题的初衷】现代软件系统日益复杂,静态分析工具(Static Analysis Tools)被广泛用于识别潜在漏洞代码,通过发出警告(Warning)来提示开发者。然而,这些警告往往需要人工检查以确认报告的问题是否真实存在,这一过程既耗时又容易出错。定向模糊测试(Directed Fuzzing)作为一种自动化验证警告的技术应运而生,它通过引导模糊测试器(Fuzzer)向目标代码位置生成输入,以触发潜在漏洞。然而,针对每个警告在整个项目上应用定向模糊测试在计算上是不可行的,通常需要数天的执行时间,且只能获得代码覆盖率(Code Coverage)的微小提升。这种全项目级别的模糊测试方法效率极低,无法满足实际开发中对警告进行快速、准确分类的需求。因此,亟需一种更高效的执行型警告分流(Warning Triage)框架,能够在可接受的时间成本内,为静态分析警告提供可靠的验证证据,从而减少人工审查负担,提升软件安全分析的自动化水平。
问题的解决(What - 提出了什么方案)
【问题的解决】SNIPTEST提出了一种基于执行(Execution-Based)的警告分流框架,其核心思路是生成并模糊测试围绕静态分析警告的编译后代码切片(Compiled Code Slices),而非在整个程序上运行模糊测试。该方法不试图证明漏洞在完整程序中的可利用性,而是通过逐步扩展切片执行上下文(Sliced Execution Contexts),提供关于警告行为方式的证据。SNIPTEST采用逐层切片策略(Layer-by-Layer Slicing Strategy),围绕目标位置增量扩展上下文,以越来越高的精度验证潜在漏洞。这种方法的本质区别在于,它将警告验证问题从全程序范围缩小到局部代码切片,大幅降低了计算复杂度,同时通过多层级切片提供了由粗到细的验证证据,使得警告分类(True Positive vs. False Positive)更加可靠和高效。
技术方法详解(How - 怎么实现的)
【技术方法详解】
- 代码切片生成(Code Slice Generation):SNIPTEST首先从静态分析警告中提取目标位置(Target Location),包括文件、函数和行号。然后,它基于程序依赖图(Program Dependency Graph, PDG)执行程序切片(Program Slicing),生成包含目标位置的最小可编译代码切片。
- 逐层上下文扩展(Layer-by-Layer Context Expansion):框架采用分层策略,从最小切片(Level 1)开始,逐步向外扩展上下文(Level 2、Level 3),每一层都包含更多的相关代码,以提供更全面的执行环境。这种设计允许在保持效率的同时,逐步增加验证的精度。
- 编译与插桩(Compilation and Instrumentation):每个切片被编译为可执行二进制文件,并插入探针(Probe)以监控目标位置的行为,包括是否到达警告位置(Reachability)以及是否触发漏洞预言(Bug Oracle)。
- 定向模糊测试(Directed Fuzzing):对每个切片运行定向模糊测试,使用覆盖引导(Coverage-Guided)的模糊测试器(如LibFuzzer或AFL)生成输入,目标是到达目标位置并触发异常行为(如崩溃、断言失败等)。
- 证据聚合与分类(Evidence Aggregation and Classification):收集所有切片级别的模糊测试结果,包括是否到达目标、是否触发预言、以及触发时的调用栈(Call Stack)。基于这些证据,SNIPTEST将警告分类为“可能的真阳性(Possible True Positive, PTP)”或“可能的假阳性(Possible False Positive, PFP)”,并输出相应的证据报告。
系统架构图
方法流程图
核心公式与算法