【论文速读】|基于大型语言模型的上下文增强漏洞检测

【论文速读】|基于大型语言模型的上下文增强漏洞检测

原创 知识分享者 安全极客 2025-05-27 08:35

原文标题:Context-Enhanced Vulnerability Detection Based on Large Language Model

原文作者:Yixin Yang, Bowen Xu, Xiang Gao, Hailong Sun

作者单位:北京航空航天大学复杂与关键软件环境国家重点实验室(CCSE),以及北航杭州创新研究院

关键词:漏洞检测、上下文增强、大型语言模型(LLMs)、静态分析、程序抽象

原文链接:https://arxiv.org/pdf/2504.16877

开源代码:暂无

论文要点

论文简介:本文提出了一种结合程序分析与大型语言模型(LLMs)的上下文增强型漏洞检测方法。传统检测方法常常局限于函数或文件级分析,缺乏足够的上下文信息,而仓库级分析又容易引入大量噪声与计算开销。为此,作者们设计了“原语API抽象”(Primitive API Abstraction)技术,基于程序控制流与数据流提取与漏洞相关的上下文信息,并通过不同层次的抽象粒度进行优化。实证评估表明,该方法能显著提升LLMs在漏洞检测任务中的准确率,尤其在复杂跨函数漏洞检测中优势明显。

研究目的:本研究旨在解决现有漏洞检测方法中普遍存在的上下文不足问题。传统方法在函数级或文件级别分析时难以捕捉漏洞成因,而仓库级分析又因噪声过大导致检测效率低下。本文希望通过在静态程序分析中引入适度抽象的上下文信息,帮助大型语言模型在漏洞检测中实现更高的准确率与泛化能力,尤其关注复杂的跨过程(inter-procedural)漏洞检测。

研究贡献:
– 提出了一种创新的漏洞上下文信息提取方法,基于控制流与数据流分析,抽象总结原语API调用,精准捕获漏洞根因;

  • 进行了一项系统性的实证研究,评估不同原语API抽象层次及不同Prompt策略对漏洞检测性能的影响;

  • 设计并实现了上下文增强型漏洞检测框架PacVD,验证了结合API抽象与Prompt工程能够大幅提升大型语言模型在漏洞检测领域的性能。

引言

在软件安全领域,内存安全漏洞(如缓冲区溢出、使用后释放、双重释放等)长期以来都是最常见且最危险的安全隐患。尽管已有大量针对漏洞的研究与防护措施,受限于诸如C、C++等内存不安全语言的广泛使用,这些漏洞仍然频繁出现在CVE通报中。

静态漏洞检测作为一种无需执行程序即可发现潜在缺陷的有效技术,近年来从规则驱动方法演变到机器学习、深度学习方法。尤其是大型语言模型(如GPT-4、CodeLLaMA、DeepSeek)展现了极强的代码理解能力。然而,现有模型常常受限于缺乏足够上下文信息的问题,无法准确推断出跨函数、跨文件的漏洞成因,导致误报率高、漏报严重。

为此,本文提出结合程序分析与原语API抽象的方法,精简并强化上下文信息输入,使大型语言模型能够在充分理解程序行为的基础上,提升漏洞检测的准确性和鲁棒性。

研究背景

内存安全漏洞,如缓冲区溢出、双重释放和使用后释放,长期以来在软件系统中广泛存在,并在近年来的CVE通报中频频出现。尽管新兴语言逐步引入内存安全特性,但由于大量遗留代码和对性能敏感的应用仍依赖C、C++等内存不安全语言,内存漏洞问题依然严峻。

传统静态漏洞检测方法主要包括基于规则的程序分析、基于特征的机器学习方法及基于深度学习的检测技术。虽然深度学习方法在语义特征提取方面取得了突破,但现有模型在检测复杂跨函数漏洞时,仍面临着上下文信息缺失的问题。函数级和文件级的检测方法通常仅依赖单一函数的修改,难以捕捉漏洞真正的成因;而仓库级方法虽然能提供更丰富的上下文,却引入了大量噪声和计算开销,导致检测效果下降。

近年来,大型语言模型(如GPT-4、LLaMA和DeepSeek)因其卓越的代码理解能力被引入漏洞检测领域。但研究发现,即使是能力强大的LLMs,在缺乏精准上下文信息的情况下,也难以准确推断漏洞根因,尤其是在需要跨函数推理的复杂场景中。因此,如何提取清晰、有效且低噪声的上下文信息,成为提升大型模型漏洞检测性能的关键挑战。

漏洞检测框架

为解决现有方法在跨过程漏洞检测中存在的上下文缺失与噪声过多问题,本文提出了一个名为PacVD的上下文增强型漏洞检测框架。该框架以函数为基本分析单元,结合静态程序分析和大型语言模型推理,系统性提升漏洞检测的准确性与效率。

框架包括三个主要阶段:首先,在数据预处理阶段,针对待检测的目标函数,递归提取其三层调用深度内的所有相关函数,并基于静态分析构建控制流图(CFG)、数据流图(DFG)和调用关系图,形成统一的代码属性图(CPG)。

接着,在原语API抽象阶段,通过控制流和数据流分析,提取调用链中涉及资源管理的关键API操作(如malloc、free、open、close等)。依据调用的出现频率、控制分支条件及关键变量信息,按照不同粒度(A1到A4层次)进行抽象,既保留足够上下文信息,又有效抑制噪声。

最后,在基于LLMs的漏洞检测阶段,将抽象后的代码上下文信息与目标函数一同输入大型语言模型。通过应用不同的Prompt工程策略,如链式思考(CoT)、上下文学习(ICL)和少量样本学习(Few-shot Learning),引导模型深度理解程序逻辑,从而精准判定是否存在漏洞。

该框架兼顾了上下文信息的完整性与可控性,既能捕捉跨函数、跨文件的漏洞成因,又避免了传统仓库级方法带来的冗余与计算负担。

实证评估设计

为了全面验证所提出方法的有效性,本文围绕四个核心研究问题(RQs)展开实证评估:分别探讨不同API抽象层次对漏洞检测效果的影响、不同漏洞类型在抽象信息辅助下的检测表现、不同大型语言模型与Prompt策略的检测差异,以及新方法相较于传统基线方法的优劣。

实验采用了真实世界的C/C++漏洞数据集——NVD-New,该数据集源自16个开源项目,包含大量与内存安全相关的漏洞。通过筛选符合研究目标的样本,共获得623个样本,其中包含340个漏洞样本和283个非漏洞样本,涵盖资源泄露、越界访问、空指针引用等多种漏洞类型。

在对比实验中,本文设置了五种基线策略,包括全调用链分析、基于API的调用筛选、相似度筛选、随机筛选和分层筛选,以模拟不同粒度的上下文建模方式。各方法均结合不同Prompt工程技术,在ChatGPT-4o、DeepSeek系列与CodeLLaMA-34b等主流大模型上进行测试。

评估指标选用准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1分数(F1-score)及马修斯相关系数(MCC),以确保多角度衡量模型性能。所有实验在高性能GPU服务器上完成,统一使用静态分析工具Joern生成代码属性图,保障数据处理的一致性和实验结果的可重复性。

评估结果

实验证明,引入原语API抽象作为上下文信息,能显著提升大型语言模型在漏洞检测任务中的表现。整体来看,随着抽象层次从无(w/o)到API Level 3,模型的F1得分持续上升,其中API Level 3(具体分支信息加调用频次统计)达到最佳效果,而过度细化到Level 4反而引入噪声,略微降低了检测性能。

在不同漏洞类型上,API抽象带来的提升尤为明显。边界类漏洞(如缓冲区溢出CWE-787)在仅引入模糊分支信息(Level 1)时,检测性能已有大幅提高,F1分数接近100%;而资源管理类漏洞(如CWE-400、CWE-415)则在更高层次抽象(Level 3、Level 4)下表现最优,说明不同漏洞类型对上下文细节的依赖程度不同。

模型和Prompt策略也对最终效果有重要影响。DeepSeek-R1综合表现最好,在API Level 3结合链式思考(CoT)策略时,F1分数最高达69.09%。此外,链式思考(CoT)和上下文学习(ICL)策略在中高抽象层次下特别有效,显著增强了模型的推理能力。

与传统基线方法相比,PacVD在准确率、精确率和召回率等指标上均实现了大幅超越,验证了结合原语API抽象和Prompt优化能够切实提升大型语言模型的漏洞检测能力。

论文结论

本文深入剖析了大型语言模型在漏洞检测任务中受上下文信息缺失制约的核心问题,创新性地提出了原语API抽象与上下文增强的方法,极大提升了模型在复杂跨过程漏洞检测场景下的准确性与泛化能力。

实验证明,通过在适度抽象下提取关键上下文,结合合适的Prompt工程策略,能够显著提升包括ChatGPT-4o、DeepSeek、CodeLLaMA等主流模型的检测性能。

本研究为未来结合程序分析与大模型技术的智能漏洞检测系统奠定了坚实基础,也为大模型在代码理解与推理任务中的应用提供了新的方向。

图片