随着软件系统日益复杂且无处不在,确保其安全性需要更先进的方法。传统的基于规则的静态代码分析工具(如HP Fortify或Snyk)虽在识别软件漏洞方面发挥了重要作用,但其规则驱动特性可能导致遗漏某些细微或不断演变的威胁[1-9]。以OpenAI的ChatGPT为代表的大型语言模型(LLMs)[10-29]为应对这一挑战提供了新途径。通过海量文本数据训练,LLMs已展现出理解和生成代码的潜力,表明其可能擅长定位并修复软件漏洞[10,16]。
近期研究揭示了LLMs在安全漏洞检测方面的能力,有时甚至超越传统方法[2,3]。例如,某LLM在单一代码库中识别出213个安全漏洞,凸显其作为安全工具的潜力[2]。此外,LLMs已被应用于多种编码场景——从可视化编程到Java函数开发,常显示出对代码生成与理解的精通[18,21]。更值得注意的是,LLMs展现出强大的适应性,能够应对代码演化、高性能计算及自协作代码生成等复杂挑战[25,26,27]。
在本文中,我们全面审视LLMs在识别与修复软件漏洞方面的表现。通过使用LLMs和传统代码分析工具对GitHub上大量代码库进行检测,我们旨在对比两者在解决软件安全问题上的效能。这一对比将揭示LLMs在软件漏洞检测与修复中的优势与局限。如表1所示,我们从目标定位和设计理念维度对两种方法的软件漏洞识别能力进行了系统比较。
尽管部分评估表明ChatGPT在漏洞检测中具备潜力,但大型语言模型(LLMs)对软件安全的更广泛影响仍待探索[28]。随着软件生态的持续发展,将LLMs与传统方法结合利用,可能为构建更安全、更健壮的系统开辟新路径。本研究旨在推动这一前沿讨论,明晰LLMs在软件安全领域的实际定位。此前研究[20-27]多关注LLMs基于文本描述生成代码的能力,而本文扩展了漏洞识别工作[2-3, 28],纳入漏洞缓解措施与修复方案。
我们将测试数据集从传统编程漏洞(如缓冲区溢出、命令注入)扩展至分析公共科学项目代码库,包括NASA飞行系统[30]、国家地理空间情报局[31]、国防部挑战项目[32]、Android战术突击套件(ATAK)[33]、前沿AI视觉项目[34],以及微软研究院的智能体与强化学习库[35]。通过超越单一编程案例的局限,我们试图与科学界建立联系[29]——这些领域的研究者常借助协作编码工具提升技能,但自身未必追求成为专业开发者。这一群体可通过个性化编码助手直接激发数学、物理、化学、生物学及软件工程[16]等领域的问题解决新思路[9,26-27,29]。
以下是表格内容的翻译:
对比维度 | 静态代码分析工具(如Snyk、Fortify) | 大型语言模型(LLMs) |
---|---|---|
用途与设计 | 专为识别代码中已知的安全漏洞设计 | 旨在理解和生成类人文本(包括代码) |
代码表示形式 | 使用抽象语法树(AST)或控制流图(CFG) | 将代码表示为符号(Token)序列 |
学习与适应能力 | 依赖预定义规则和特征库;传统上不具备“学习”能力 | 通过训练数据持续学习;基于已识别模式动态适应 |
泛化能力 | 精准且特定,基于已知模式/特征库 | 可泛化至多种编码模式与风格 |
反馈与迭代 | 基于规则匹配的确定性反馈 | 提供上下文相关的描述性反馈 |
覆盖范围 | 受限于预定义规则/特征库 | 因泛化训练可能更广泛,但可能缺乏精准性 |
运行原理 | 基于规则 | 基于训练数据的模式识别 |
适应性 | 固定(除非更新规则) | 因模式识别能力而灵活 |
主要应用场景 | 安全漏洞检测 | 文本理解、生成及上下文推理 |
关键点总结:
- 静态工具:强在精准检测已知漏洞,但依赖人工规则更新,覆盖范围受限。
- LLMs:通过模式识别泛化能力强,适合灵活生成与推理,但可能牺牲部分精准性。
- 互补性:静态工具提供确定性结果,LLMs扩展可能性,两者结合或能平衡安全与创新。
本研究涵盖通过聊天接口自动调用的最新OpenAI模型(GPT-4),并为其设定系统上下文指令:“作为适用于所有主流编程语言的全球最强大静态代码分析器。我将提供代码片段,你需要识别其语言并分析漏洞。输出格式要求:文件名、检测到的漏洞(编号列表)、建议修复方案(独立编号列表)”。我们将此上下文应用于OpenAI的7个不同参数规模的LLMs模型[37],其参数跨度达四个数量级:
- 350M(Ada)
- 6.7B(Curie)
- 175B(达芬奇/GPT3/GPT-3.5-turbo-16k)
- 1.7万亿(GPT-4)
然而,较大模型的训练细节属于专有信息。例如,Curie模型基于数十GB的多语言GitHub软件仓库数据及OpenAI Codex源代码训练。实践中,当参数规模超过130亿时,模型开始展现出超越代码注释或基于训练数据记忆的自动补全能力,初步具备编程技能。自2023年2月相关研究[2]发表以来,多个GPT版本更新已证明参数规模数量级增长带来的显著进步。OpenAI通过一系列能力指标评估编码性能提升[10],例如在(初级)LeetCode测试中,正确率从12/41(GPT-3.5)提升至31/41(GPT-4)。
关键要点:
- 模型规模与能力跃迁:参数规模从3.5亿到1.7万亿的跨越,驱动代码分析能力质变。
- 专有训练数据:大模型依赖多源代码库(如GitHub)和专有语料(如Codex)训练。
- 规模阈值效应:130亿参数成为基础编程能力出现的临界点。
- 性能量化评估:LeetCode测试分数等指标客观反映代际性能差异。
总结:
-
研究定位:
- 当前研究聚焦LLMs在漏洞检测与修复中的应用潜力,试图填补传统规则工具与新兴AI模型间的能力空白。
- 突破以往仅关注LLMs生成代码的研究局限[20-27],新增漏洞缓解与修复分析维度[2-3,28]。
-
数据集扩展:
- 涵盖跨领域科学项目(如NASA、国防部、AI视觉等),验证LLMs在复杂实际场景中的适用性。
- 针对非专业开发者群体(如科研人员),探索LLMs作为协作工具在跨学科问题解决中的价值。
-
核心价值:
- 为LLMs与软件安全交叉领域提供系统性评估框架,推动学术界与工业界对AI驱动安全工具的认知升级。
- 强调LLMs的“辅助者”角色,助力科学界通过低门槛编码工具加速创新(如数学建模、工程问题优化)。