来源笔记
VulWeaver: Weaving Broken Semantics for Grounded Vulnerability Detection
摘要
VulWeaver 是一个基于 LLM 的漏洞检测器,先修复静态分析里被打断的语义,再让模型判断代码。它把增强的依赖图、更广的上下文提取和基于指南的提示结合起来,以提高准确率并减少脆弱的模式匹配。
问题
- 源代码漏洞检测会在静态分析构建不完整或带噪声的调用、控制流和数据依赖图时丢失真实语义,尤其是在反射、多态和全局定义附近。
- 许多学习方法和 LLM 系统只分析局部或单向切片,因此会漏掉跨过程和隐式上下文,例如净化器定义或全局配置。
- 直接的思维链提示容易抓住变量名和其他词汇线索,而不是程序行为,这会降低它在补丁代码和对抗性重命名场景中的可靠性。
方法
- VulWeaver 从 Joern 输出构建统一依赖图,在语句级合并调用、控制流和数据依赖关系。
- 然后它用一种神经符号方法增强这张图:确定性规则加上 LLM 推理,用来修复缺失或多余的语义,并明确处理 Java 的多态调用和反射调用,同时用 Tree-sitter 解析并加入全局节点。
- 在增强图的基础上,它为每个敏感 API 调用提取完整的漏洞上下文,把显式切片和普通切片会漏掉的隐式上下文结合起来,例如使用、定义和声明信息。
- 它把敏感 API 映射到漏洞类型,并使用带有专家编写的、按 CWE 细分的推理指南的元提示,让 LLM 按固定流程分析提取到的上下文。
- 它发起多次 LLM 查询并用多数投票稳定预测;知识库覆盖 102 种 CWE 类型。
结果
- 在 PrimeVul4J 上,VulWeaver 的精确率为 0.81,召回率为 0.70,F1 为 0.75。
- 在同一数据集上,它的 F1 比最佳的基于学习方法、基于 LLM 和基于代理的基线分别高 23%、15% 和 60%。
- 它的 VP-S 得分是 0.58,比最佳基线高 164%,说明它更能区分有漏洞代码和已修补代码。
- 在只做少量适配的 C/C++ PrimeVul 上,它达到 F1 0.78,并且仍然优于所有基线。
- 在一项针对对抗性标识符重命名的鲁棒性研究中,标准 CoT 提示在五个 LLM 上的 F1 下降了 11% 到 39%,VP-S 下降了 44% 到 1,050%;元提示把 F1 下降控制在 0% 到 6%,VP-S 下降控制在 16% 以内。
- 在真实使用中,VulWeaver 在 9 个 Java 项目中发现了 26 个真实漏洞,其中 15 个得到开发者确认,5 个分配了 CVE 编号;一次工业部署发现了 40 个已确认漏洞。