大语言模型生成的代码安全性堪忧:过半代码存在漏洞

最新研究显示,大语言模型生成的代码中仅有约55%通过安全扫描,Java代码安全性尤其低下。随着AI辅助编程的普及,安全债务问题日益严重,企业需重视代码安全审查。

LLMs’ AI-Generated Code Remains Wildly Insecure

安全债务预警:最新大语言模型生成的代码中仅有约半数具备网络安全防护能力,而这类代码的生成量正在持续增长。

罗伯特·莱莫斯,特约撰稿人
2025年8月1日
6分钟阅读

图片来源:Shutterstock/Gorodenkoff

大语言模型生成的代码质量虽随时间有所提升——新版LLMs生成的代码编译成功率更高——但在其他方面却停滞不前:安全性表现持续不佳,尤其是AI生成的Java代码。除了引入漏洞外,LLMs仍容易出现错误(例如虚构不存在的软件库),并易受训练数据恶意污染等问题影响。

在本周发布的对100多个LLMs的研究中,应用安全公司Veracode测试了AI聊天机器人能否使用四种编程语言的正确定法生成代码,并通过漏洞扫描检验生成代码的安全性。虽然AI生成代码的语法正确性大幅提升——去年发布的LLMs生成的代码超过90%能无错误编译,而2023年6月之前这一比例不足20%——但仅有55%的代码通过后续安全扫描,该数值长期未见改善。

“LLMs并没有让开发者免除必须进行的安全工作,“Veracode首席技术官延斯·韦斯林表示,“LLMs学习的代码在语法上是正确的,但大多数开发者(特别是非企业或非开源项目)并不真正理解其决策的安全影响,这些问题一直存在。LLMs的输出基于实际代码建模,而实际代码本身就存在安全漏洞。”

开发者的AI编码热潮

过去两年间,开发者使用LLMs生成代码的现象呈现爆发式增长。两项调查发现,近四分之三的开发者曾将AI代码生成用于开源项目,巴西、德国和印度97%的开发者也在使用LLMs。

当非专业开发者借助LLMs生成代码(即所谓的"氛围编程”)时,漏洞进入生产代码的风险将急剧增加。

众包安全服务提供商Bugcrowd创始人凯西·埃利斯指出,企业需要找到确保代码安全的方法,因为AI辅助开发只会越来越普及。

“经常有人问我AI辅助编程是好是坏,我认为这个问题本身就不对,“他表示,“如果某项技术确实更好、更快、更便宜,它就会爆发式增长——因为人们永远追求更优、更快、更便宜。”

意外发现:模型规模无关紧要

Veracode为主流LLMs构建了分析流水线(报告未具体说明测试对象),通过评估每个版本来追踪其代码生成能力的演进。每个AI聊天机器人需完成80多项编码任务,生成的代码会接受分析。

虽然2023年上半年发布的早期LLMs生成的代码无法编译,但去年发布的更新版本中95%能通过语法检查。

另一方面,代码安全性几乎未见提升。Veracode数据显示,LLMs生成的代码中约半数存在可检测的OWASP十大安全漏洞。最新版LLMs将安全代码成功率提升至40%-60%,平均55%的代码能通过安全检测。

LLM生成代码的语法正确性(蓝线)随时间提升,而代码安全性(红线)停滞不前。图片来源:Veracode

研究最大意外在于:LLMs的规模既不影响语法正确性也不影响代码安全性,参数不足200亿的小模型表现与超千亿参数的大模型相当。

“在’是否生成优质/准确代码或符合需求’方面,所有模型表现大体相似,仅存在个别异常值,“韦斯林表示,“这完全是不同维度的问题。”

Java代码安全性尤其低下

另一个意外发现是,LLMs在生成Java安全代码方面存在特殊困难——具有讽刺意味的是,Java最初正是为增强程序安全性而设计的语言。其他受测语言(Python、JavaScript和C#)的安全通过率为55%-62%,而Java平均通过率仅为29%。

LLMs生成的代码较少出现SQL注入或加密缺陷,更多安全问题源于跨站脚本和日志注入。图片来源:Veracode

韦斯林推测,Java的悠久历史意味着大量代码诞生于安全成为焦点之前。如果这些代码被纳入LLMs训练数据,生成代码中自然会出现错误。

“存在多年的Java程序示例仍被LLMs扫描学习,我认为大量Java示例代码旨在展示功能而非安全编码实践,“他解释道,“部分问题代码因此被模型吸收。”

此外,LLMs产生的缺陷类型也呈现规律。Veracode报告指出,AI代码工具生成的大部分程序能通过SQL注入和加密错误检测,但在跨站脚本和加密错误测试中表现不佳。

安全债务持续累积

解决这些问题可能需要时间,而AI代码生成工具的使用不太可能放缓,这形成了令人担忧的差距。

使用LLMs的开发者代码产出速度更快,斯坦福大学对10万名开发者的研究发现其平均代码量增加30%-40%。但同一研究指出,相当部分代码需要返工修复功能缺陷,实际净生产力提升仅为15%-20%。

应用安全提供商Black Duck高级安全解决方案经理迈克·麦圭尔表示,发现和修复安全漏洞将进一步削弱这些收益。

“企业依赖AI系统生成代码正在累积安全债务,“他指出,“这不一定是错误率上升,而是因为AI加速了代码生产。团队在更短时间内产出更多代码,当近半数代码无法通过安全测试时,风险量会快速累积。”

Bugcrowd的埃利斯预见到安全债务引发的风暴正在逼近。

“漏洞数量与代码行数存在概率函数关系,“他表示,“我们正以越来越高速度向互联网输出代码,更多代码意味着更多漏洞。更重要的是,速度是质量的天敌,而安全是质量的衍生物。”

不过AI辅助编程已不可避免,企业需要为安全代码挑战做好准备。

“如果有人能找到让LLMs自然识别安全漏洞或在训练时过滤不安全代码的方法,理论上将彻底改变现状,我们正密切关注这方面进展,“韦斯林表示,“我们期待事态发展——今天的状况未必代表一年后的格局。”

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计