" 在软件漏洞检测领域,"是否存在漏洞"只是第一步,更关键的问题是:漏洞究竟位于哪里?尤其是在二进制程序分析中,由于缺乏源代码语义信息,漏洞定位面临更大挑战:指令级语义复杂,难以直接建模;控制流与数据流交织,定位粒度粗糙;传统方法往往只能做到函数级或基本块级检测。
针对上述问题,论文提出:VULOC,一种基于汇编代码切片的漏洞定位框架,实现细粒度漏洞位置识别。"
- 📄 论文标题:VULOC: Vulnerability location framework based on assembly code slicing
📅 发表时间:The Journal of Systems & Software,2025
🏫 作者单位:武汉大学、武汉纺织大学
01---方法介绍
图1是一个"数组越界"的例子。论文的研究动机如下:
- 变量命名不影响汇编语义:源代码中变量名改变可能导致基于源码的模型失效(如图1(a)→(b)),但汇编代码行为不变(图1(c))。因此,采用汇编级别分析可避免变量名等表面特征的干扰。
2.内存大小在汇编中显式表达:源码中分配内存大小需计算得出、较为隐式(图1(d)),易被模型误判;而汇编中直接通过指令显式给出(图1(e)),有利于神经网络识别内存操作相关漏洞。
3.漏洞在汇编中呈现为多条指令:汇编将一行源码扩展为多条指令,通过建立汇编到源码的行号映射,可将模型在汇编上的预测结果映射回源码,实现细粒度漏洞定位。

图1. 使用汇编代码的动机
VULOC的核心思想是:通过程序切片提取"与漏洞相关的关键指令子图",并在此基础上进行精准定位。整体流程可以概括为4步:
① 程序切片生成
围绕潜在敏感操作构建依赖切片;
② 汇编语义建模
编码指令及其上下文关系;
③ 漏洞打分
预测每条指令的漏洞概率;
④ 精确定位
输出最可能存在漏洞的代码位置。

图2. VULOC模型架构
小结:通过 slicing 将"无关代码"剔除,使模型专注于真正相关的执行路径。
02---关键机制
-
汇编级程序切片
直接在二进制层面提取漏洞相关上下文;
-
细粒度定位能力
从函数级提升至指令级;
-
结构感知表示
融合数据流与控制流信息;
-
高可解释性
定位结果可直接映射到具体指令。
| 模块 | 设计思路 | 作用 |
|---|---|---|
| 汇编切片构建 | 基于数据流与控制流依赖提取关键指令子图 | 缩小分析范围,突出漏洞相关上下文 |
| 特征表示学习 | 将指令序列与依赖关系编码为向量表示 | 捕获底层语义信息 |
| 漏洞评分机制 | 对切片中每条指令进行风险打分 | 实现细粒度定位(statement-level) |
| 位置聚合策略 | 融合多条高风险指令形成漏洞区域 | 提升定位稳定性与可解释性 |
小结:VULOC 将"函数级检测"细化为"指令级定位",实现从检测到解释的跃迁。
03---实验结果
实验使用2个数据集来验证方法的有效性,包括:Juliet Test Suite for C/C++ 1.3 和NVD-SARD。数据集中的漏洞被细分为18个不同的CWE ID,以及7种不同的漏洞类型(缓冲区溢出、整数溢出、内存泄漏、释放后使用、未初始化变量、空指针解引用和死代码)。主要实验结果如下。
(1)评估VULOC的漏洞检测和定位能力,结果见表1-2。
-
Juliet:FNR提高了6.6%,输出漏洞行的平均数量从5.2提升到1.0,平均漏洞距离减少到0.78。
-
NVD-SARD:AD降至1.41行,同时VL最小为1.0。
表1. VULOC与SoTA方法在Juliet测试套件数据集上的漏洞检测能力比较。

表2. VULOC与SoTA方法在NVD-SARD数据集上的漏洞检测能力比较。

(2)VULOC在现实世界项目中的有效性结果见表3。VULOC在参与测试的100个程序中检测到83个漏洞。
表3. VULOC在实际软件产品中检测到或遗漏的一部分漏洞。

小结:VULOC通过执行汇编代码切片技术,利用汇编代码和源代码行号之间的映射关系以及所提出的BLSTM-LOC模型,提高了漏洞检测的粒度和准确性。
📌 总结
VULOC代表了一类重要趋势------漏洞检测正从"发现问题"走向"精准定位问题"。通过切片 + 细粒度建模,使漏洞定位从"粗粒度判断"迈向"精准命中"。
📣 欢迎留言讨论
-
你认为漏洞定位是否会成为下一阶段研究的核心问题?
-
相比直接检测漏洞,"精准定位"在实际安全工程中的价值是否更高?
📌 点赞 + 收藏 + 分享,你的支持,是我们持续解析高水平软件安全论文的最大动力!