欢迎光临
我们一直在努力

用“试错”学会找漏洞:强化学习如何提升细粒度漏洞检测

“ 在真实安全分析与修复场景中,“是否存在漏洞”只是第一步,开发者更关心的是:漏洞究竟出现在哪一行、哪一个操作、哪一个关键语句上。然而,大量现有方法仍停留在函数级或代码片段级预测,即便模型判断“有漏洞”,也难以精确定位问题根源,导致人工审计成本居高不下。

针对这一痛点,研究者提出了一种新的视角:将细粒度漏洞检测视为一个“决策过程”,并引入强化学习来逐步学习如何定位漏洞 。”

  • 📄 论文标题:Enhancing Fine-Grained Vulnerability Detection With Reinforcement Learning

  • 📅 发表时间:IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, 2025

  • 🏫 作者单位:哈尔滨工业大学、新加坡管理大学

  • 💡开源代码:https://github.com/YuanJiangGit/RLFD.git

01—方法介绍

图1展示了来自ssdp-responder项目的一个CWE-119缓冲区溢出漏洞的代码片段实例。该漏洞记录在CVE-2019-14323下,涉及网络应用程序中因不当处理接收数据而导致的缓冲区溢出。所提出的基于强化学习的方法成功检测到了漏洞代码行。

图片

图 1.  来自ssdp-responder项目的缓冲区溢出漏洞代码片段

论文的核心思想是:漏洞定位不是一次性分类,而是一个逐步逼近的过程。模型需要在代码中不断“做选择”,逐步缩小关注范围,最终锁定真正的漏洞位置。为此,作者将细粒度漏洞检测建模为一个强化学习问题,整体流程可概括为三步:

① 状态建模

将当前代码上下文(如语句、AST/CFG 特征)作为环境状态。

② 动作选择

智能体在代码中选择下一个关注的语句或位置。

③ 奖励反馈

根据是否更接近真实漏洞位置,给予正向或负向奖励。

图片

图 2.  将强化学习应用于细粒度级别的漏洞检测和太空入侵者游戏时的对比 

图片

图 3.  RLFD整体流程 

小结:与“直接猜答案”不同,该方法强调“一步步逼近漏洞”。

02—关键机制

  • 细粒度视角转变,从粗粒度分类走向逐语句级决策。
  • 强化学习引入,将漏洞定位建模为序列决策问题。
  • 显式反馈机制,通过奖励函数直接优化定位精度。
  • 更强可解释性,定位路径可反映模型的“思考过程”。
  • 模块

    设计思路

    作用

    状态表示

    融合语法与语义特征

    刻画当前代码上下文

    动作空间

    在代码结构中选择下一步位置

    逐步缩小漏洞搜索范围

    奖励函数

    与真实漏洞位置距离相关

    引导模型学习有效决策

    强化学习策略

    策略梯度 / Q-learning 等

    优化细粒度定位能力

    小结:强化学习的关键作用,在于“把定位过程本身学出来”。

    03—实验结果

    知名数据集如Devign和Reveal,仅提供函数级标签,这限制了它们在需要详细行级评估的方法中的应用。因此,big_vul数据集是评估该方法有效性的最合适选择。主要实验结果如下。


    (1)表1展示了在big_vul测试数据集上的实验结果。由于这些基于GNN的基线和LineVul将细粒度漏洞检测视为一个排序问题,作者通过选择排名最高的语句(其数量与真实漏洞语句的数量相匹配)并将其作为预测的漏洞行,来计算它们的交并比(IoU)。

    表1. 与其他基于GNN-解释和基于Transformer的细粒度漏洞检测方法的比较

    图片

    图4展示了RLFD在big_vul数据集中14种最常见且最危险的CWE类型中的表现。

    图4. 提出的RLFD方法在big_vul数据集中14种最常见且最危险的CWE类型漏洞检测方面的表现

    图片

    (2)表2展示了RLFD在所有评估指标上均优于最先进的基于LLM的细粒度漏洞检测方法。

    表2. 与基于大型语言模型(LLM)的微调式漏洞检测方法的比较

    图片

    (3)实验评估了RLFD方法在检测真实世界软件项目中的漏洞方面的泛化能力,对2021年4月发布的Linux Kernel 5.12版本进行了案例研究。选择这个版本是因为它是在big_vul数据集收集之后发布的,从而确保训练数据与目标项目之间不存在重叠。

    表3. 使用RFLD检测Linux内核5.12中的漏洞代码行

    图片

    小结:RLFD将检测任务重新定义为一种序列决策过程,然后利用强化学习从代码片段中自动学习与漏洞相关的结构。(1)与最先进的基于Transformer的模型StagedVulBERT相比,在IoU上提高了3.4%,在Top-5%准确率和Top-10%准确率上分别提高了2.7%和1.5%。(2)RLFD通过扫描Linux Kernel 5.12,成功发现了31个语句级别的真实漏洞。

    📌 总结

    本文从方法论层面重新思考了细粒度漏洞检测问题。通过引入强化学习,研究者不再强迫模型“一步到位”,而是让其学会如何在代码中逐步搜索、定位漏洞。

    这一工作表明,未来漏洞检测的重要方向之一,或许正是:从静态判断,走向过程化、决策化的漏洞理解。 

    📣 欢迎留言讨论

    • 你认为强化学习是否适合大规模工业级漏洞检测?

    • 在真实项目中,细粒度定位与分析成本应如何权衡?

    📌 点赞 + 收藏 + 分享,你的支持,是我们持续解析高水平软件安全论文的最大动力!

    赞(0)
    未经允许不得转载:171主机测评 » 用“试错”学会找漏洞:强化学习如何提升细粒度漏洞检测
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址