跳到主要内容
返回时间线
arXiv来源发表:

漏洞检测模型在陌生项目上把半数补丁误报为漏洞,白化中间层距离提前标出危险区

核心概要

在严格配对的漏洞—补丁C/C++函数上,白化后的CodeBERT第三层嵌入配合最近邻距离,把陌生样本与熟悉样本分开,平均OOD AUROC达0.739,并显示跨项目迁移时补丁误报率最高达0.507。

Source-provided article image: Diagnosing Generalization Boundaries in AI-Based Vulnerability Detection via Calibrated Embedding Distances
Figure 4 · arXiv

深度剖析

漏洞检测模型的可靠性会随代码偏离训练分布而下降,而白化后的中间层嵌入距离可以把这种下降变成可读的连续信号。 此前的评测多依赖与训练集共享项目、编码风格和时间段的同分布测试集,高分掩盖了分布偏移下的退化。 在严格配对的漏洞—补丁数据集上,按距离把测试样本分成十等频区间后,准确率从最低距离区间的0.834降到最高区间的0.479,落差超过35个百分点,同时补丁误报率从0.167升到0.631。

做法是把编码器的中间层表示做白化,再用最近邻余弦距离衡量一个样本离训练分布有多远。 原始上下文嵌入存在各向异性,会挤在少数主导方向上,使表面语法和项目命名盖过修复本身的细微语义差异。 在CodeBERT第0至12层与多种距离设置的网格上,原始嵌入加余弦最近邻的最好平均OOD AUROC为0.710,白化后升到0.739;对角近似马氏距离基线最好只有0.547,且最近邻数取1时最强,随邻域扩大单调下降。

补丁被误报为漏洞,与它在嵌入空间里靠近漏洞训练邻域直接相关。 聚合指标只能反映整体正确率,无法说明误报为何集中出现在已修复代码上。 在仅含补丁样本的测试子集上,误报样本的前10个邻居中漏洞训练样本占比为51.1%,正确判为补丁的样本为46.0%,距离比值的AUROC为0.636;按邻近度分十档后,补丁误报率从最低档的9.4%升到最高档的58.8%。

启示与展望

这套诊断面向C与C++中七类内存和资源安全弱点,评测使用严格配对的漏洞—补丁函数,并保留项目、时间与补丁差异簇元数据以划分偏移组。距离分数来自冻结的中间层编码器表示,可在不更新梯度的情况下对既有扫描器做风险分层,把几何上远离或纠缠的函数交给人工复核。

配对设计排除了部署中常见的任意良性代码,而真实工具需要在不知道漏洞位置的前提下扫描完整函数,这里采用的是配对对齐的多块提取。补丁差异簇是修复类别的自动代理,而非人工校验的语义分类;源数据集可能含标签噪声或非安全重构。评测限于CodeBERT与Qwen2.5-Coder-7B,以及特定的留出项目与2024年时间截点。