# 面向软件漏洞检测的大语言模型:模型、方法、技术、数据集与评价指标研究综述
International Journal of Information Security(Springer) (CCF B 类)
⭐⭐⭐
发表时间:14 February 2025
原文链接:https://doi.org/10.1007/s10207-025-00992-7
# 摘要
大语言模型(LLMs)正成为软件漏洞检测和管理领域的变革性工具,通过提高准确性和效率,并与传统技术互补,但仍面临高质量数据集和伦理影响等挑战。
# 简介
- 问题背景: 软件应用中普遍存在的实现缺陷可能导致程序崩溃、数据损坏及可利用的安全漏洞。传统的漏洞检测方法,如静态分析和基于深度学习的方法,在准确性、误报率控制以及捕捉代码复杂性方面存在局限性。例如,2023年Verizon数据泄露报告显示,企业平均需要197天识别安全漏洞,69天进行遏制,这凸显了对高效自动化工具的迫切需求。(传统方法准确度和识别率低,耗时周期长)
- LLM的崛起: Transformer架构驱动的LLM在自然语言处理领域取得了突破性进展,并已展现出在软件漏洞检测方面超越传统方法的潜力。
- 研究目标: 本文旨在系统性地回答一系列研究问题,涵盖LLM在软件漏洞检测中的应用原因、角色、模型类型、性能比较、应用方式、微调技术、数据集、评估指标、面临挑战及增强策略,以填补现有研究空白,为未来研究提供基础性指导。
# 研究方法
- (文献收集全面且高质量)*本综述采用系统性文献回顾方法,通过关键词识别、多数据库搜索(Google Scholar, arXiv, IEEE, Science Direct, ACM Digital Library)、初步筛选、双盲评审及“滚雪球”技术,确保了文献收集的全面性和相关性。*最终,通过严格的纳入与排除标准,筛选出高质量的文献进行分析。
- 个人思考: 这种严谨的文献筛选流程是确保综述质量的关键。值得注意的是,研究团队还利用了Microsoft Copilot、ChatGPT 4.0和Gemini等AI工具辅助文献识别,这反映了AI在科研辅助方面的日益普及和效用。
# 背景
LLM概述: LLM是基于大规模文本数据训练的预训练语言模型(PLM),如GPT-4、BERT等,以其庞大的参数量、复杂的神经网络结构和卓越的语言理解与生成能力著称。
LLM分类:
- 仅编码器模型 (Encoder-only): 如BERT及其变体(CodeBERT, GraphCodeBERT),擅长理解输入序列并捕获上下文信息,适用于分类任务。(擅长做代码分类,理解代码)
- 编码器-解码器模型 (Encoder-decoder): 如T5、CodeT5,结合编码器理解输入和解码器生成输出,适用于摘要、翻译等任务。(代码总结,从一种格式转换为另一种,相当于翻译代码)
- 仅解码器模型 (Decoder-only): 如GPT系列、LLaMA,专注于序列令牌预测,擅长自由文本生成和下游任务。(代码生成,只要告诉它任务就能生成代码)
- 稀疏模型 (Sparse Model): 采用混合专家(MoE)等方法,通过激活部分参数实现高效处理,平衡计算效率与模型能力。(新技术、能够高效处理超长的代码任务)
与传统软件安全方法的比较:
论文通过详尽的表格(Table 1)对比了LLM与手动代码审查、渗透测试、DAST、SAST等方法的目的、代码表示、学习与适应性、泛化能力、反馈机制、覆盖范围、操作基础、适应性及主要用例。
- LLM优势: 强大的泛化能力(跨代码库、编程语言),基于统计分析和模式识别,高度适应和灵活,能提供解释和理由。
- 传统方法优势: 规则明确,在特定已知漏洞检测上精度高,如SAST在早期开发阶段检测结构性缺陷。
- 个人思考: LLM比较创新,有很好的可读性,而且有很好的泛化能力,传统方法比较专精,要结合两种方法去做,利用不同工具的互补性。混合策略可能会更好。
# LLM在软件开发生命周期 (SDLC) 中的应用
- 漏洞在SDLC的各个阶段都可能引入,但往往在后期才显现,导致修复成本高昂。LLM能够集成到SDLC的多个阶段,从早期的代码编写到后期的测试和维护,实现漏洞的早期发现和缓解。
- 我的思考: LLM主要能在开发、测试和维护这三个阶段帮上忙。可以在代码上线之前就发现问题,未雨绸缪,比起事后修复就好很多!
# 研究问题解答与深入分析
- RQ1 (为何使用LLM): LLM通过自动化、高精度、跨语言泛化能力以及对代码语义的深度理解,克服了传统方法的局限性,提升了漏洞检测效率。(自动化、精度高、泛化能力强)
- RQ2 (LLM的角色): LLM在漏洞检测、自动程序修复(APR)、日志威胁检测、网络钓鱼检测、安全测试、渗透测试、安全培训等多个环节发挥作用。(自动检测,实时监测,实时修复)
- RQ3 & RQ4 (LLM类型与性能): GPT系列、LLaMA、BERT、CodeBERT等多种LLM已被应用于漏洞检测。研究表明,LLM在某些场景下能显著超越传统方法,但其性能受模型架构、训练数据和任务复杂性影响,仍存在提升空间。(GPT比静态工具Synk发现的漏洞多4倍!!!但也不代表不会出错。)
- RQ5 (LLM的应用方式): LLM可集成到APR框架、作为代码分析器直接识别漏洞并提供修复建议,或通过专用框架(如VulDetect)进行漏洞检测。(和自动修复框架结合、直接当代码分析器、搞一些专门的框架)
- RQ6 & RQ7 (微调的影响与技术): 微调能显著提升LLM在漏洞检测和修复任务上的性能。参数高效微调(PEFT),如LoRA、Adapter、Prefix-tuning,因其计算效率高、能有效优化模型性能而备受关注。(微调就是定制化、、)
- RQ8 (数据集): LLM的训练和评估依赖于大规模通用代码数据集(如The Stack, GitHub Code)和专用漏洞数据集(如CVEfixes, Big-Vul, LineVul),后者对学习特定漏洞模式至关重要。(数据集越好才能越好)
- RQ9 (评估指标): 针对分类、推荐和生成任务,需采用F1-score、精确率、召回率、AUC-ROC、MRR、BLEU、CodeBLEU、Exact Match (EM) 和Pass@k等多样化指标进行综合评估。
- RQ10 (面临挑战): LLM在漏洞检测中面临多重挑战,包括安全风险(提示词注入、数据中毒)、性能问题(幻觉、代码生成质量不稳定、部署资源消耗)、评估难题(缺乏统一标准)以及伦理考量(隐私、过度依赖)。
- RQ11 (增强策略): 提升LLM效能需采取多方面策略,包括与现有工具集成、构建更大更优质的数据集、专注于特定漏洞类型、采用先进的预处理技术、优化提示工程、实现持续学习,并关注模型大小、数据质量、评估方法、可解释性和伦理问题。
# Thinking
未来的研究方向,我觉得应该是在人机协作的框架下,充分发挥LLM的优势,同时用各种技术手段去弥补它的不足。同时也必须知道它为什么抓这个bug,即可解释性。如果找bug纯靠LLM,而不知道为什么找,然后就考LLM自动修复,那可能会引入新bug,得不偿失。
# 名词解释
| 中文全称 | 中文简称 | 英文全称 | 英文缩写 |
|---|---|---|---|
| 应用程序编程接口 | API | Application Programming Interface | API |
| 程序自动修复 | APR | Automated Program Repair | APR |
| 来自变压器的双向编码器表示 | BERT | Bidirectional Encoder Representations from Transformers | BERT |
| 双语评价替补 | BLEU | Bilingual Evaluation Understudy | BLEU |
| 有界模型检查器 | BMC | Bounded Model Checker | BMC |
| 常见攻击模式的枚举与分类 | CAPEC | Common Attack Pattern Enumeration and Classification | CAPEC |
| 常见漏洞和暴露 | CVE | Common Vulnerabilities and Exposures | CVE |
| 常见弱点枚举 | CWE | Common Weakness Enumeration | CWE |
| 动态应用安全测试 | DAST | Dynamic Application Security Testing | DAST |
| 多样反事实解释 | DiCE | Diverse Counterfactual Explanations | DiCE |
| 深度学习 | DL | Deep Learning | DL |
| 图神经网络 | GNNs | Graph Neural Networks | GNNs |
| 交互式应用安全测试 | IAST | Interactive Application Security Testing | IAST |
| 大型语言模型 | 大语言模型 | Large Language Model | LLM |
| 长短时记忆 | LSTM | Long Short-Term Memory | LSTM |
| 宏数据细化 | MDR | Macro Data Refinement | MDR |
| 平均倒数排名 | MRR | Mean Reciprocal Rank | MRR |
| 多任务学习 | MTL | Multi-Task Learning | MTL |
| 美国国家标准与技术研究院 | NIST | National Institute of Standards and Technology | NIST |
| 自然语言处理 | NLP | Natural Language Processing | NLP |
| 神经机器翻译 | NMT | Neural Machine Translation | NMT |
| 国家漏洞数据库 | NVD | National Vulnerability Database | NVD |
| 程序依赖图 | PDG | Program Dependence Graph | PDG |
| 参数高效微调 | PEFT | Parameter-Efficient Fine-Tuning | PEFT |
| 个人信息 | 个人信息 | Personally Identifiable Information | PII |
| 从人类反馈中强化学习 | RLHF | Reinforcement Learning from Human Feedback | RLHF |
| 软件保障参考数据集 | SARD | Software Assurance Reference Dataset | SARD |
| 静态应用安全测试 | SAST | Static Application Security Testing | SAST |
| 软件开发生命周期 | SDLC | Software Development Life Cycle | SDLC |
| 软件工程 | SE | Software Engineering | SE |
| SHapley加性解释 | SHAP | SHapley Additive exPlanations | SHAP |
| 结构化查询语言 | SQL | Structured Query Language | SQL |
| 超级通用语言理解评价 | SuperGLUE | Super General Language Understanding Evaluation | SuperGLUE |