“ 近年来,针对基于深度学习的软件漏洞检测,一个现实而棘手的问题逐渐显现出来:模型往往“知道有漏洞”,却并不真正“理解漏洞”。大量方法将漏洞检测视为一个标准的分类问题,通过学习代码特征直接输出“有 / 无漏洞”的判断。这类方法在同分布数据上表现良好,但在跨项目、跨版本、跨漏洞模式场景下,泛化能力往往不足。
针对这一问题,论文提出 DeepVulMatch,从“分类”转向“匹配”,通过学习潜在漏洞表示,在代码之间进行语义层面的漏洞匹配,并同时支持函数级与语句级的双粒度检测。 ”
📄论文标题:DeepVulMatch: Learning and Matching Latent Vulnerability Representations for Dual-Granularity Vulnerability Detection
📅发表时间:IEEE TRANSACTIONS ON RELIABILITY , 2025
🏫作者单位:墨尔本大学、莫纳什大学
💡开源代码:https://github.com/awsm-research/DeepVulMatch
01—方法介绍
如图1所示,每个函数都包含一条具有相似漏洞范围的漏洞代码行。这表明,即使两个函数包含相同的CWE-787越界写入漏洞,特定的易受攻击代码行也可能以不同的方式编写,并位于代码的不同部分。因此,对于深度学习(DL)模型而言,识别代码行级别的漏洞具有挑战性。
图 1. 在这两个函数中,CWE-787(越界写入)漏洞是由不恰当的数据类型赋值触发的。
DeepVulMatch 的核心思想可以概括为一句话:漏洞并不是孤立存在的标签,而是一类可复用、可匹配的语义模式。为此,论文不再直接预测“是否有漏洞”,而是引入潜在漏洞表示,并通过匹配机制判断代码是否与已知漏洞模式相似。
整体流程可概括为三步:
① 漏洞表示学习
从已知漏洞代码中学习通用的潜在漏洞向量表示。
② 双粒度建模
同时构建函数级与语句级代码表示。
③ 相似度匹配
通过表示匹配判断目标代码是否包含漏洞模式。
图 2. DEEPVULMATCH的处理框架
小结:DeepVulMatch关注的不是“像不像漏洞代码”,而是“是否匹配某类漏洞语义”。
02—关键机制
- 从分类到匹配,将漏洞检测转化为漏洞语义匹配问题。
- 潜在漏洞表示,显式建模漏洞的可复用语义特征。
- 双粒度检测,统一支持函数级判断与语句级分析。
- 更强泛化能力,缓解对数据分布与项目背景的依赖。
模块 | 设计思路 | 作用 |
|---|---|---|
潜在漏洞表示 | 从漏洞样本中学习抽象语义 | 刻画漏洞共性特征 |
函数级建模 | 捕获整体逻辑与调用关系 | 实现粗粒度漏洞检测 |
语句级建模 | 关注关键操作与局部语义 | 实现细粒度定位 |
匹配机制 | 基于表示相似度进行判断 | 提升泛化与跨项目能力 |
小结:匹配机制是 DeepVulMatch 区别于传统分类方法的关键。
03—实验结果
为了识别函数级和行级的漏洞,实验选择了Big-Vul数据集和D2A数据集,因为它们是两个最大的带有行级漏洞标签的漏洞数据集。
(1)表1展示了DEEP-VULMATCH方法与其他12种基线方法在函数和行级方面的实验结果。DEEP-VULMATCH取得了82%的行级F1分数,相较于最佳基线方法VELVET提高了32%。
表1. 在BIG-VUL和D2A数据集上,DEEPVULMATCH与12种基线方法的比较(%)
(2)表2展示了DEEPVULMATCH方法与几种基线方法的训练时间。DEEPVULMATCH在保持与基于Transformer的模型相当的训练时间的同时,在行级漏洞检测方面表现出显著的性能提升。
表2. 训练DEEPVULMATCH和基线方法的训练时间
小结:DEEPVULMATCH从训练数据中收集漏洞模式,并使用最优传输(OT)和向量量化(VQ)从模式集合中学习一个更紧凑的漏洞码本。在推理过程中,码本会匹配所有学习到的模式,并检测给定程序中的潜在漏洞。
📌 总结
DeepVulMatch 为漏洞检测提供了一种新的建模范式:不再执着于标签预测,而是让模型理解并复用漏洞语义。
通过潜在漏洞表示与双粒度匹配机制,该方法在检测性能、泛化能力与定位能力之间取得了更好的平衡,也为后续漏洞模式迁移与解释性分析提供了良好基础。
📣 欢迎留言讨论
你认为“匹配式漏洞检测”是否比传统分类方法更具工程价值?
在真实漏洞库持续演化的场景下,潜在漏洞表示应如何维护与更新?
📌 点赞 + 收藏 + 分享,你的支持,是我们持续解析高水平软件安全论文的最大动力!