Skip to content

Graph Is the Verifier:用代码属性图为漏洞检测强化学习提供证据锚定奖励 ​

摘要 ​

VulAgentRL 研究的是漏洞分类中的证据验证问题:作者在真实 CVE 样本中发现 71.7% 的脆弱函数需要函数外证据才能正确分类,因此让 Qwen2.5-Coder-7B Agent 查询 Joern 代码属性图(Code Property Graph),并用实际查询到的图节点而非另一个 LLM Judge 给 evidence-grounding reward。

在仓库级隔离的 PrimeVul 测试上,完整模型达到 0.633 accuracy 和 0.378 pairwise-correct(同一函数的漏洞版与修复版必须同时判断正确);Claude Opus 4.7 基线分别为 0.621 和 0.273。TitanVul 跨仓库 OOD 上为 0.570 accuracy、0.302 pairwise-correct。作者的消融显示,加入可核验图节点奖励带来最大一段增益,并把平均工具调用次数从 SFT 阶段的 7.62 降至 4.26。

方法的独特价值 ​

VulAgentRL 的独特价值在于用工具产生的结构化事实(代码属性图查询结果)替代另一个 LLM 作为奖励信号来源,使强化学习训练不再依赖“用一个可能同样出错的模型去判断另一个模型是否正确”,而是依赖可核验的程序结构证据。

适用范围 ​

结果仅覆盖论文选定的 C/C++ 函数级漏洞分类任务、特定数据清洗流程和 7B 参数规模的训练配置;不能直接外推到其他编程语言、函数间/跨文件复杂依赖场景,或未经同等数据清洗的漏洞数据集。

方法与实施流程 ​

训练流程分两阶段:先用 SFT(监督微调)让 Agent 学会调用 Joern 查询代码属性图获取函数外证据,再用强化学习阶段引入 evidence-grounding reward——奖励来自 Agent 实际查询到的图节点内容,而不是另一个 LLM Judge 对推理文本的打分。评测覆盖两个基准:PrimeVul(仓库级隔离测试)和 TitanVul(跨仓库 OOD 测试),并与 Claude Opus 4.7 作为基线比较。

质量控制 ​

核心指标包括 accuracy(分类准确率)和 pairwise-correct(同一函数的漏洞版本与修复版本必须同时判断正确,用于抑制“猜漏洞”式的捷径学习)。消融实验单独比较有无 evidence-grounding reward 的效果,以及训练阶段前后平均工具调用次数的变化(SFT 阶段 7.62 次降至强化学习后 4.26 次)。

局限与待验证问题 ​

  • 证据等级为中等:论文提供完整训练方法和两个基准的对照结果,但仅覆盖 C/C++ 函数级任务、单一 7B 模型规模,前沿模型(Claude Opus 4.7)比较数据来自作者论文,本站未独立复现。
  • 71.7% 的脆弱函数需要函数外证据这一比例是否在其他语言或代码库中同样成立,需要更多数据集验证。
  • 结果依赖 Joern 代码属性图的解析质量;解析失败或图查询不完整的函数如何影响奖励信号的准确性,论文未充分讨论。
  • 未验证该方法是否能扩展到需要跨文件、跨服务的复杂漏洞(如需要追踪网络调用链的漏洞)。

参考链接 ​