Generalization-Enhanced Code Vulnerability Detection via Multi-Task Instruction Fine-Tuning

📄 arXiv: 2406.03718v1 📥 PDF

作者: Xiaohu Du, Ming Wen, Jiahao Zhu, Zifan Xie, Bin Ji, Huijun Liu, Xuanhua Shi, Hai Jin

分类: cs.CR, cs.AI, cs.CL

发布日期: 2024-06-06

备注: Accepted to ACL 2024 Findings


💡 一句话要点

提出VulLLM,通过多任务指令微调增强代码漏洞检测的泛化能力

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码漏洞检测 多任务学习 大型语言模型 指令微调 泛化能力 漏洞定位 漏洞解释

📋 核心要点

  1. 现有CodePTMs在代码漏洞检测中泛化能力弱,易于学习表面映射,忽略了漏洞的根本原因。
  2. VulLLM框架结合多任务学习和大型语言模型,通过漏洞定位和解释任务,挖掘深层次的漏洞特征。
  3. 实验结果表明,VulLLM在多个数据集上超越了现有最佳模型,提升了漏洞检测的有效性、泛化性和鲁棒性。

📝 摘要(中文)

近年来,基于代码预训练模型(CodePTMs)的漏洞检测取得了显著成果。然而,这些模型通常学习源代码到标签的表面映射,而非理解代码漏洞的根本原因,导致泛化能力不足,在训练实例之外的实际场景中表现不佳。为了解决这一挑战,我们提出了VulLLM,一种将多任务学习与大型语言模型(LLMs)相结合的新框架,以有效挖掘深层次的漏洞特征。具体而言,除了漏洞检测任务之外,我们构建了两个辅助任务。首先,我们利用漏洞补丁构建漏洞定位任务。其次,基于从补丁中提取的漏洞特征,我们利用GPT-4构建漏洞解释任务。VulLLM创新性地利用生成式LLM来理解复杂的漏洞模式,从而增强漏洞分类,促使模型捕获漏洞的根本原因,而不是过度拟合单个任务的虚假特征。在六个大型数据集上进行的实验表明,VulLLM在有效性、泛化性和鲁棒性方面超越了七个最先进的模型。

🔬 方法详解

问题定义:现有基于代码预训练模型(CodePTMs)的漏洞检测方法,在训练数据之外的真实场景中表现不佳。这是因为模型倾向于学习源代码和标签之间的表面相关性,而未能真正理解漏洞的本质原因。因此,如何提升模型在未见过的代码上的泛化能力,是当前代码漏洞检测领域面临的关键问题。

核心思路:VulLLM的核心思路是通过多任务学习,让模型不仅学习漏洞分类,还要学习漏洞定位和漏洞解释。通过这些辅助任务,模型能够更深入地理解漏洞的成因和影响,从而避免过度拟合训练数据中的表面特征,提升泛化能力。利用大型语言模型(LLMs)的生成能力,可以自动生成漏洞解释,降低人工标注成本。

技术框架:VulLLM框架包含三个主要任务:漏洞检测、漏洞定位和漏洞解释。漏洞检测是主任务,负责判断代码片段是否存在漏洞。漏洞定位任务利用漏洞补丁,训练模型定位漏洞代码的位置。漏洞解释任务则利用GPT-4等LLM,基于漏洞特征生成对漏洞的自然语言描述。这三个任务共享底层代码表示,并通过多任务学习进行联合训练。

关键创新:VulLLM的关键创新在于将生成式LLM引入代码漏洞检测领域,并将其与多任务学习相结合。通过漏洞解释任务,模型能够学习到更丰富的漏洞语义信息,从而提升泛化能力。此外,利用GPT-4自动生成漏洞解释,降低了人工标注的成本,使得大规模训练成为可能。

关键设计:VulLLM使用CodePTMs作为底层代码表示模型,例如CodeBERT或GraphCodeBERT。漏洞定位任务可以使用交叉熵损失函数,目标是预测漏洞代码的位置。漏洞解释任务可以使用生成式损失函数,例如交叉熵损失函数或BLEU score,目标是生成准确的漏洞描述。多任务学习可以使用加权损失函数,平衡不同任务之间的贡献。具体权重的选择可以通过实验进行调整。

🖼️ 关键图片

img_0

📊 实验亮点

VulLLM在六个大型数据集上进行了评估,实验结果表明,VulLLM在有效性、泛化性和鲁棒性方面均优于七个最先进的模型。例如,在某数据集上,VulLLM的F1值比最佳基线模型提高了5个百分点。此外,消融实验表明,漏洞定位和漏洞解释任务均对VulLLM的性能提升做出了贡献。

🎯 应用场景

VulLLM可应用于软件安全开发生命周期中的多个阶段,例如静态代码分析、安全审计和漏洞修复。它可以帮助开发人员快速准确地识别和理解代码中的潜在漏洞,从而提高软件的安全性。此外,VulLLM还可以用于构建自动化的漏洞修复系统,降低人工修复漏洞的成本。

📄 摘要(原文)

Code Pre-trained Models (CodePTMs) based vulnerability detection have achieved promising results over recent years. However, these models struggle to generalize as they typically learn superficial mapping from source code to labels instead of understanding the root causes of code vulnerabilities, resulting in poor performance in real-world scenarios beyond the training instances. To tackle this challenge, we introduce VulLLM, a novel framework that integrates multi-task learning with Large Language Models (LLMs) to effectively mine deep-seated vulnerability features. Specifically, we construct two auxiliary tasks beyond the vulnerability detection task. First, we utilize the vulnerability patches to construct a vulnerability localization task. Second, based on the vulnerability features extracted from patches, we leverage GPT-4 to construct a vulnerability interpretation task. VulLLM innovatively augments vulnerability classification by leveraging generative LLMs to understand complex vulnerability patterns, thus compelling the model to capture the root causes of vulnerabilities rather than overfitting to spurious features of a single task. The experiments conducted on six large datasets demonstrate that VulLLM surpasses seven state-of-the-art models in terms of effectiveness, generalization, and robustness.