软件漏洞的日益普遍持续对系统安全构成严重威胁,这凸显了对准确且可扩展的漏洞检测和分类技术的需求。

尽管预训练语言模型(PLM)在漏洞分析中展现出巨大潜力,但大多数现有方法并未明确指出输入代码的哪些部分更可能存在漏洞。因此,模型必须在没有任何重要部分提示的情况下推断令牌级别的相关性,这使得在训练过程中更难学习到易受攻击代码的特征。

为了解决这一局限性,我们提出了 LOSVER(行级可修改性信号引导的漏洞分析器),一个新颖的两阶段框架,通过融合行级可修改性信号来增强基于 PLM 的漏洞分析。
在第一阶段,LOSVER 定位可修改的行。这些代码片段由于不稳定或复杂性,在未来很可能被修改,而它们通常与漏洞相关联。
在第二阶段,模型为预测出的可修改行分配更高的重要性,从而使 PLM 在训练和推理过程中都能专注于潜在的易受攻击区域。

我们使用两个广泛使用的基准数据集对 LOSVER 进行了评估:用于函数级漏洞检测的 Devign,以及用于带通用缺陷枚举(CWE)ID 标签的函数级漏洞分类的 Big-Vul。实验结果表明,在 UniXcoder 基线模型之上应用 LOSVER 后,其在 Devign 上的检测准确率提升了约 4 个百分点,在 Big-Vul 上的 CWE ID 分类加权 F1 分数提升了超过 2 个点。这些结果证明,整合行级可修改性信号能显著增强基于 PLM 的软件漏洞分析在检测和分类任务中的有效性。


1. 令牌级别的相关性 (Token-level Relevance)

  • 核心概念:
    • 令牌 (Token): 在自然语言处理中,令牌指的是文本的基本单元,通常是一个词或一个子词。例如,句子 “I have a cat” 可以被分成四个令牌: “I”, “have”, “a”, “cat”。在代码中,令牌可以是关键字、变量名、运算符等。
    • 相关性 (Relevance): 指的是一个令牌对于特定任务的重要性或贡献程度。
    • 令牌级别的相关性: 指的是确定每个令牌对于完成特定任务(例如,漏洞检测)的重要性。
  • 在文中的含义: 现有的基于 PLM 的漏洞分析方法通常没有明确地告诉模型哪些代码令牌更可能与漏洞相关。模型需要自己从整个代码片段中推断出哪些令牌是重要的,哪些是不重要的。这使得模型难以学习到漏洞代码的特征,因为模型可能会被不相关的令牌分散注意力。

举例说明: 假设要判断一段代码是否存在缓冲区溢出漏洞。

  • 如果模型能够识别出 strcpy 函数(一个容易导致缓冲区溢出的函数)是一个重要的令牌,那么它就更容易判断代码是否存在漏洞。
  • 如果模型无法识别出 strcpy 函数的重要性,而是将注意力分散到其他不相关的令牌上(例如,注释、变量名),那么它就很难判断代码是否存在漏洞。

2. 行级可修改性信号 (Line-level Modifiability Signal)

  • 核心概念:
    • 可修改性 (Modifiability): 指的是代码行在未来被修改的可能性。
    • 信号 (Signal): 指的是一种指示或提示,用于提供关于可修改性的信息。
    • 行级可修改性信号: 指的是在代码行的级别上提供的、指示该行代码在未来被修改可能性的信息。
  • 如何判断代码行是否具有高可修改性:
    • 代码复杂性: 复杂的代码行通常更容易出错,也更容易被修改。
    • 代码不稳定性: 经常被修改的代码行可能存在设计缺陷或需要不断调整。
    • 代码依赖性: 依赖于其他代码行的代码行,当其他代码行发生变化时,也可能需要修改。
  • 在文中的含义: 论文提出了一种新的方法,通过分析代码的复杂性、稳定性和依赖性等因素,来预测哪些代码行在未来更可能被修改。这些可修改的行通常与漏洞相关联,因为它们更容易出错或存在设计缺陷。通过将这些行级可修改性信号提供给 PLM,可以引导模型更加关注潜在的漏洞区域,从而提高漏洞分析的准确性。

简单比喻: 就像在地图上标记出哪些路段经常发生交通事故(可修改性高的代码行),然后提醒司机在这些路段要格外小心,从而降低事故发生的概率。


http://example.com/posts/57.html
作者
司马吴空
发布于
2026年3月30日
许可协议