基于 LLM 的代码漏洞修复中的指标失效:一项实证研究与变更感知筛选器
Metrics Failure in LLM-Based Code Vulnerability Repair: An Empirical Study and a Change-Aware Screen
精选理由
揭示漏洞修复评测指标的陷阱,帮助构建更可靠的变更感知与执行验证方案。
AI 摘要
大型语言模型(LLMs)正越来越多地应用于 C/C++ 安全漏洞的自动修复,而编译率是广泛报告的一种进展代理指标:即生成的补丁是否能够编译。我们认为,对于单函数漏洞修复而言,编译率在科学上是不可靠的指标;为此,我们针对 Big-Vul 中的 203 个易受攻击函数开展了五项受控实验,使用了三个开源代码 LLM(参数量从 350M 到 6.7B)和三种提示策略。实验表明,编译率:(i)几乎不会对显著改进生成代码的干预作出响应;(ii)主要受评测框架和数据集伪影影响,而非模型质量影响,其中约 64% 的编译失败无法归因于模型,且这一比例在不同模型间几乎不变;(iii)在仅改变一个编译器标准标志的情况下,即使补丁完全相同,编译率也会变化 1.8 至 2.7 倍,且没有出现回归;(iv)对三个模型的排序与参考相似度指标给出的排序完全相反;(v)当编译率被用作优化目标时,会奖励非修复结果,因为编译器反馈循环提高了编译率,却降低了与人工修复的相似度;人工检查发现,新近通过编译的输出中包含基于删除和占位符形式的非修复结果。自然的替代指标——针对整个函数的 CodeBLEU——同样失效:未作任何修改的易受攻击输入副本,其得分超过了所有模型。我们还考察了 diff_F1,这是一种变更感知筛选指标,仅对被编辑区域进行评分。对于不产生任何变化的结果,它恰好给出零分;对于我们观察到的部分基于删除、用于钻指标空子的补丁,它虽然并非全部都如此,但会给出接近于零的分数;与此同时,它仍会对真正的部分编辑给予评分,因此可以在更深入的、基于执行的分析之前,作为一种低成本筛选手段。它并不是修复质量指标,我们也报告了其不足之处。我们的研究结果表明,应对基于 LLM 的漏洞修复采用变更感知、以执行为依据的评测方法。