跨过程语义补全:让漏洞检测真正“看懂”函数之间的关系
“ 在真实软件系统中,漏洞往往并非孤立存在于单个函数内部,而是隐藏在跨函数调用、参数传递与返回值依赖之中。然而,大量现有漏洞检测方法仍局限于过程内(Intra-procedural)分析,在函数边界处丢失关键语义信息,导致误报与漏报频发。
针对这一核心痛点,研究者提出:跨过程语义补全(Inter-procedural Semantic Completion)。该方法通过显式恢复函数间缺失的语义关联,使深度学习模型能够获得更完整、更连贯的程序语义表示,从而显著提升漏洞检测性能。”
📄 论文标题:Enhancing Vulnerability Detection via Inter-procedural Semantic Completion
📅 发表时间:International Symposium on Software Testing and Analysis(ISSTA), 2025
🏫 作者单位:南洋理工大学、北京大学
💡开源代码:https://sites.google.com/view/vulnsc-issta
01—方法介绍
如图1所示,Linux内核中一个真实存在的“双重释放”漏洞已在提交e07754e中修复。第12行调用put_device()函数,该函数调用vhost_vdpa_release_dev(),继而调用ida_simple_remove()并释放“v”。随后在第13行再次调用ida_simple_remove()释放“v”,导致双重释放。若忽略被调用函数put_device()和ida_simple_remove()的源代码,将难以识别该漏洞。忽视跨过程上下文可能降低识别跨越单个函数的复杂漏洞的能力。

图 1. Linux中一个提交ID为e07754e的“双重释放”漏洞
论文的核心思想是:在不引入高昂分析开销的前提下,补全跨函数调用链中的语义缺失。整体框架可概括为三步:
① 跨过程依赖识别
分析函数调用关系,定位参数传递、返回值使用等关键跨过程语义点。
② 语义补全建模
将被调用函数的关键信息映射回调用点,补全调用上下文中的语义空洞。
③ 漏洞检测学习
在增强后的代码表示上训练漏洞检测模型,实现更精准预测。

图 2. VulnSC整体流程
小结:与直接扩大调用图或堆叠复杂 GNN 不同,该方法聚焦于“补什么语义最关键”,强调有效性而非复杂度。
02—关键机制
- 显式跨过程语义补全,针对函数边界语义缺失问题提出直接解决方案。
- 轻量级设计,避免构建超大调用图,降低分析与推理成本。
- 模型无关性强,可与多种现有漏洞检测模型进行集成。
|
模块 |
设计思路 |
作用 |
|---|---|---|
|
跨过程语义定位 |
分析函数调用、参数与返回值依赖 |
识别过程边界处的语义断点 |
|
语义补全策略 |
将被调用函数的关键行为映射至调用点 |
恢复完整执行语义 |
|
增强代码表示 |
与原始代码特征进行融合 |
为漏洞检测提供更丰富上下文 |
|
漏洞预测模型 |
深度学习分类器 |
判断代码是否存在漏洞 |
小结:该机制的关键在于“语义补全而非语义替换”,既保持原有结构,又避免信息缺失。
03—实验结果
实验在两个主流漏洞数据集Devign和Big-Vul上验证了跨过程语义补全的有效性,主要实验结果如下。
(1)实验首先评估VulnSC生成的代码摘要质量。此项评估面临的关键挑战在于,研究中使用的Devign和Big-Vul数据集缺乏参考摘要。
表1. 代码摘要评估

(2)实验评估VulnSC在增强现有基于学习的漏洞检测方法方面的有效性。实验选取GPT-4o作为代表性大型语言模型,来展示VulnSC带来的检测性能提升。
表2. 与基线模型漏洞检测结果对比

小结:自动化指标与人工评估均证实,VulnSC通过运用不同大型语言模型及提示策略,可生成高质量摘要,有效充当漏洞检测的跨过程语义工具。此外,相较于现有的基于大型语言模型的漏洞检测方法,VulnSC 展现出显著优势,在准确率和F1分数两方面均表现更优。
📌 总结
该论文从程序分析视角出发,重新审视了漏洞检测中长期存在却被低估的问题——跨过程语义缺失。通过提出跨过程语义补全机制,为漏洞检测模型提供了更贴近真实执行逻辑的输入表示。这一工作表明,未来漏洞检测的突破点,或许不只在于更大的模型,而在于更“完整”的程序语义理解。
📣 欢迎留言讨论
-
你认为跨过程分析是否应成为漏洞检测模型的“标配”?
-
在工业级 CI/CD 场景中,语义补全方案是否具备足够的工程可落地性?
📌 点赞 + 收藏 + 分享,你的支持,是我们持续解析高水平软件安全论文的最大动力!
更多推荐




所有评论(0)