跳转至

Boosting Vulnerability Detection of LLMs via Curriculum Preference Optimization with Synthetic Reasoning Data

会议: ACL 2025
arXiv: 2506.07390
代码: https://github.com/Xin-Cheng-Wen/PO4Vul
领域: LLM对齐 / 代码安全
关键词: 漏洞检测, 偏好优化, 推理数据合成, 课程学习, 三元组SFT

一句话总结

提出 ReVD 框架,通过双向漏洞推理数据合成 + 三元组 SFT(同时学习漏洞代码/修复代码/代码差异的推理)+ 课程化在线偏好优化(COPO),将 LLM 的漏洞检测准确率提升 12-23%,在 PrimeVul 和 SVEN 上达到 SOTA。

研究背景与动机

  1. 领域现状:LLM 在代码相关任务上表现出色,但在软件漏洞检测上仍然有限。CodeBERT/UniXcoder 等 CodePTM 通过微调做漏洞检测,但效果仍不足。
  2. 现有痛点:(a) 缺乏漏洞推理数据——现有数据只有代码标签没有"为什么是漏洞"的推理过程;(b) 模型学的是语义表示而非漏洞模式——漏洞代码和修复代码语义高度相似(GPT-4 在 78.6% 的配对上无法区分)。
  3. 核心矛盾:漏洞修复通常只涉及微小的代码变更(调整缓存大小、添加安全检查等),导致漏洞代码和修复代码几乎同义,LLM 基于语义的理解无法捕捉关键差异。
  4. 本文要解决什么? 让 LLM 学习漏洞的推理模式(为什么有漏洞、怎么修复)而非仅语义表示。
  5. 切入角度:合成推理数据+三元组对比学习+课程化偏好优化。
  6. 核心 idea 一句话:用合成推理数据教 LLM "为什么有漏洞",用三元组损失区分漏洞和修复代码,用课程偏好优化聚焦薄弱漏洞类型。

方法详解

整体框架

三模块流水线:BVD 数据合成 → T-SFT 三元组微调 → COPO 课程偏好优化

关键设计

  1. BVD(双向漏洞数据生成):
  2. 前向推理:分析漏洞代码 → 生成"为什么这段代码有漏洞"的推理链
  3. 后向推理:分析修复代码 → 生成"修复了什么、为什么这样修复"
  4. 利用 CVE/CWE 信息辅助推理,生成 28K 高质量推理数据

  5. T-SFT(三元组SFT):

  6. 三路损失:预代码推理 + 后代码推理 + 代码差异推理
  7. \(\mathcal{L} = \ell(pre\_code) + \ell(post\_code) + \ell(code\_diff)\)
  8. 让模型同时学"漏洞模式"、"修复模式"和"差异模式"

  9. COPO(课程在线偏好优化):

  10. 实例级课程:按漏洞类型准确率加权采样——越差的类型越多采样
  11. 任务级课程:将每条数据分解为 3 个渐进任务(定位漏洞行→分析触发路径→解释根因)
  12. IPO 优化避免在有限漏洞数据上过拟合

实验关键数据

主实验(PrimeVul + SVEN 数据集)

方法 PrimeVul Acc PrimeVul F1 SVEN VP-Score
CodeBERT 基线 基线 基线
GPT-4 (零样本) 较低 较低 较低
ReVD +12-23% +10.3% +18.15%

关键发现

  • ReVD 全面超越 9 个基线(CodePTM + LLM),在准确率上提升 12-23%
  • GPT-4 在 78.6% 的漏洞/修复配对上判断一致——验证了语义相似性是核心挑战
  • 课程优化的渐进式训练比一次性训练效果好——弱类型漏洞的检测显著提升
  • 推理数据对vu检测至关重要——无推理数据的微调效果大幅下降

亮点与洞察

  • 双向推理数据合成将隐式的修复逻辑显式化,让 LLM 学到"为什么"而非"像什么"
  • 三元组损失巧妙利用了漏洞检测的独特结构(代码-修复-差异三角关系)
  • 课程化偏好优化解决了漏洞类型不平衡问题——聚焦薄弱环节

局限性 / 可改进方向

  • 推理数据由 LLM 合成,质量依赖于模型对漏洞的理解
  • 仅测试 C/C++ 代码,未验证多语言适用性
  • COPO 的课程设计依赖 CWE 分类,对新型漏洞可能不够灵活

相关工作与启发

  • vs CodeBERT/UniXcoder:CodePTM 只学语义表示,ReVD 学漏洞推理模式——突破了"语义相似但安全性不同"的困境
  • vs GPT-4 零样本:即使是最强商用模型也无法区分微妙漏洞,需要专门训练
  • 对代码安全领域的 LLM 应用有重要推进

评分

  • 新颖性: ⭐⭐⭐⭐ 推理数据合成+三元组SFT+课程PO的组合新颖且针对性强
  • 实验充分度: ⭐⭐⭐⭐ 9 个基线对比,两个数据集,消融完整
  • 写作质量: ⭐⭐⭐⭐ 问题motivation清晰(GPT-4 的 78.6% 失败率很有说服力)
  • 价值: ⭐⭐⭐⭐⭐ 首个漏洞推理数据集+框架,对代码安全 LLM 有直接实用价值