VDExplainer:让漏洞检测模型“说清楚”,逐语句解释漏洞从何而来

“ 近年来,深度学习在漏洞检测任务中取得了显著进展,然而,一个始终困扰学术界与工业界的问题是:模型为什么认为这段代码有漏洞?漏洞究竟体现在哪些语句上?多数现有方法仍停留在“给结论”的阶段,缺乏细粒度、可理解的解释机制。

针对这一问题,研究者提出了VDExplainer,一种面向漏洞检测的语句级解释框架,通过序列决策与概率采样机制,让模型逐步“选出”真正导致漏洞的关键语句。 ”

  • 📄 论文标题:VDExplainer: Sequential Decision-Making and Probability Sampling Guided Statement-Level Explanation for Vulnerability Detection

  • 📅 发表时间:Computers & Security, 2025

  • 🏫 作者单位:哈尔滨工业大学

  • 💡开源代码:https://figshare.com/s/9f6a9f553a9dc30029c9.

01—方法介绍

图1给出了NVD编号153804的漏洞代码示例(源自OpenSSL)。程序在读取128字节数据时未保证字符串空终止,随后在第34行通过 strcpy 复制到同样大小的缓冲区,可能越界读取并引发缓冲区溢出。该漏洞并非由单一语句造成,而是与 stonesoup_buffer 和 stonesoup_input_buf 相关的一组语句在定义、初始化、文件读取和字符串复制等上下文中共同作用的结果。

由此可得两点结论:(1)明确标注与漏洞相关的语句有助于开发人员快速定位和修复漏洞;(2)漏洞模式并非单一语句,而是由易损语句及其上下文共同构成,漏洞分析需整体考察相关代码。

图片

图 1.   动机示例。

VDExplainer 的核心思想是:漏洞解释本身就是一个“选择过程”,模型需要从大量语句中逐步筛选出真正有贡献的部分。

为此,论文将漏洞解释建模为一个序列决策问题,整体流程可概括为三步:

① 语句级表示建模

为代码中的每条语句构建语义表示。

② 序列决策解释

模型逐步决定“是否保留”当前语句作为漏洞解释的一部分。

③ 概率采样引导

通过采样策略探索不同语句组合,避免贪心选择带来的偏差。

图片

图 1.   VDExplainer的处理框架 

小结:VDExplainer 关注的不是“一次性指出答案”,而是“解释是如何一步步形成的”。

02—关键机制

  1. 语句级漏洞解释,比函数级、片段级解释更精细。
  2. 序列决策建模,将解释过程显式建模为决策序列。
  3. 概率采样机制,提升解释多样性与鲁棒性。
  4. 检测-解释一致性,确保解释真正支撑模型预测。

                      模块

                      设计思路

                      作用

                      语句级编码

                      建模单条语句语义

                      作为解释决策的基本单元

                      序列决策模型

                      逐步选择关键语句

                      构建漏洞解释路径

                      概率采样策略

                      在候选语句间随机探索

                      避免局部最优解释

                      解释一致性约束

                      解释需支持检测结果

                      保证解释有效性

                      小结:解释不是事后附加,而是与检测过程紧密耦合。

                      03—实验结果

                      实验在两个数据集上进行了VDEplainer评估:Big-Vul和作者自己构建的一个切片级半合成数据集,其中包括合成代码和真实项目代码,主要来源于(NVD,2025)和(CVE, 2025)。主要实验结果如下。

                      其中评价指标有:(1)Fidelity (FD),保真度越高,所提取的漏洞模式就越重要(2)K-Accuracy(A(k)),K-Accuracy用于衡量在包含k个语句的漏洞模式中,至少出现一个实际漏洞语句的样本百分比。(3)Line Coverage(LC),衡量预测漏洞模式中的易受攻击语句数量与实际易受攻击语句数量之间的比率。


                      (1)如表1所示,LineVul和VulBERTa-CNN在半合成数据集和Big-Vul数据集上取得了良好的检测结果。表2和表3总结了使用不同的解释方法对Big-Vul和半合成数据集上的LineVul和VulBERTa-CNN的影响。

                      表1. 需要解释的基于预训练模型的漏洞检测模型的检测结果(指标单位:%)

                      图片

                      表2. 在Big-Vul数据集上,对两个基于预训练模型的模型采用不同解释方法的结果

                      图片

                      表3. 在半合成数据集上,对两个基于预训练模型的模型采用不同解释方法的结果

                      图片

                      (2)实验还考虑了解释基于深度学习的方法,模型见表4。解释结果如表5所示。

                      表4. 需要解释的基于深度学习的漏洞检测模型的检测结果(指标单位:%)。

                      图片

                      表5. 在半合成数据集上,对三个需要解释的深度学习模型采用不同解释方法的结果。

                      图片

                      小结:系统评估VDExplainer的实验结果表明:生成的解释在语句级定位准确率上显著优于主流可解释方法;解释结果更贴近真实漏洞触发逻辑;在不明显牺牲检测性能的前提下,显著提升模型可解释性。

                      📌 总结

                      VDExplainer 从方法论层面重新审视了漏洞检测中的“解释”问题。通过将解释建模为序列决策过程,该方法让模型能够明确回答:哪些语句导致了漏洞判断,以及它们是如何共同作用的。

                      这一工作表明,未来漏洞检测模型的重要竞争力之一,可能不再只是“检得准”,而是能否把漏洞讲清楚。 

                      📣 欢迎留言讨论

                      • 你认为语句级解释是否是漏洞检测可解释性的理想粒度?

                      • 在工程实践中,解释质量与推理成本应如何平衡?

                      📌 点赞 + 收藏 + 分享,你的支持,是我们持续解析高水平软件安全论文的最大动力!

                      评论
                      添加红包

                      请填写红包祝福语或标题

                      红包个数最小为10个

                      红包金额最低5元

                      当前余额3.43前往充值 >
                      需支付:10.00
                      成就一亿技术人!
                      领取后你会自动成为博主和红包主的粉丝 规则
                      hope_wisdom
                      发出的红包
                      实付
                      使用余额支付
                      点击重新获取
                      扫码支付
                      钱包余额 0

                      抵扣说明:

                      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                      余额充值