大语言模型生成的代码仍然存在广泛的安全隐患

programmer writes software code on background of screens

随着时间推移,大语言模型生成的代码在某些方面有所进步 — 较新的模型生成的代码编译成功率更高 — 但在其他方面却停滞不前:尤其是安全性方面始终存在不足,人工智能生成的 Java 代码问题尤为突出。除了引入漏洞,大语言模型还容易出现错误,例如虚构不存在的软件库,并且容易受到数据集恶意投毒等问题的影响。

01 研究揭示的关键发现

应用安全公司 Veracode 本周发布了一项针对 100 多个大语言模型的研究。该研究测试了人工智能聊天机器人能否使用四种编程语言的正确语法生成代码,随后对代码进行漏洞扫描以评估其安全性。结果显示,人工智能生成的代码在语法方面有了显著提升 —— 去年发布的大语言模型生成的代码中,超过 90% 能顺利编译,而 2023 年 6 月之前这一比例还不到 20%。然而,仅有 55% 的代码通过了后续的安全扫描,这一数字长期以来几乎没有变化。

Veracode 首席技术官延斯・韦斯林(Jens Wessling)表示:“大语言模型不会让任何人省去必要的安全工作。它们学习的代码在语法上是正确的,但大多数开发者 — 尤其是从事非企业或非开源项目的开发者 — 并未真正理解自己决策所带来的安全影响,因此这些问题一直存在。大语言模型的输出以实际代码为蓝本,而实际代码本身就存在安全漏洞。”

过去两年中,开发者使用大语言模型生成代码的情况呈爆发式增长。两项调查显示,近四分之三的开发者在开源项目中使用了人工智能代码生成工具,巴西、德国和印度有 97% 的开发者也在使用大语言模型。

当非专业开发人员在缺乏专业知识的情况下使用大语言模型生成代码 — 即所谓的 “感觉编程”(vibe coding)— 安全漏洞出现在生产代码中的风险会急剧上升。

众包安全服务提供商 Bugcrowd 的创始人凯西・埃利斯(Casey Ellis)认为,企业必须想办法确保代码安全,因为人工智能辅助开发的普及趋势只会愈发明显。

他说:“经常有人问我,人工智能辅助编码究竟是好事还是坏事,但我觉得这个问题本身就问错了。如果某种工具确实能让工作变得更好、更快、成本更低,它自然会迅速普及 — 因为人们始终追求更好、更快、更便宜的解决方案。”

02 意外发现:模型规模并非关键因素

Veracode 为最受欢迎的大语言模型创建了一套分析流程(报告中未具体说明测试的模型名称),通过评估每个版本,以了解它们生成代码的能力随时间的演变情况。研究人员给每个人工智能聊天机器人分配了 80 多项编码任务,并对生成的代码进行分析。

测试发现,2023 年上半年发布的早期大语言模型生成的代码往往无法编译,而过去一年发布的更新版本中,95% 的代码都通过了语法检查。

但另一方面,Veracode 指出,代码的安全性几乎没有提升,大语言模型生成的代码中约有一半存在可检测到的 OWASP 十大安全漏洞。最先进的大语言模型生成安全代码的成功率在 40% 至 60% 之间,平均水平为 55%。

图片

(图表:大语言模型生成代码的语法正确率(蓝色)随时间有所提高,而代码安全性(红色)则停滞不前。来源:Veracode)

该研究最令人意外的发现是,大语言模型的规模对语法正确性和代码安全性均无影响 — 参数少于 200 亿的小型模型与参数超过 1000 亿的大型模型表现不相上下。

韦斯林解释道:“这些模型的整体表现大致相似,只是在‘是否生成优质代码、准确代码或符合需求的代码’等方面存在一些差异,但这是另一个完全不同的问题。”

03 Java 代码的安全问题尤为突出

另一个值得关注的发现是,大语言模型在生成安全的 Java 代码时面临特殊困难。具有讽刺意味的是,Java 语言最初的设计初衷就包含增强程序安全性这一目标。其他测试语言(Python、JavaScript 和 C#)通过安全检查的成功率在 55% 至 62% 之间,而 Java 则表现低迷,平均成功率仅为 29%。

scatter plot of security pass rates of different vulnerability classes

(图表:大语言模型生成的代码在 SQL 注入和加密缺陷方面问题较少,但在跨站脚本和日志注入方面存在较多安全问题。来源:Veracode)

韦斯林推测,Java 的悠久历史意味着许多代码是在安全未受重视的时期编写的。如果这些代码被纳入大语言模型的训练数据集,那么模型生成的代码自然会出现错误。

他进一步解释:“多年来积累的 Java 程序示例仍然存在,并且仍在被大语言模型扫描学习。我认为,大量 Java 示例代码的编写目的只是作为范例,并不一定遵循安全编码规范,而模型会吸收这些代码的特点。”

此外,Veracode 的报告指出,大语言模型生成的特定类型缺陷相对较少。人工智能代码工具创建的绝大多数程序在 SQL 注入和加密错误的安全检查中能顺利通过,但在跨站脚本(XSS)等测试中则表现不佳。

04 安全债务可能持续累积

解决这些问题显然需要时间,而人工智能代码生成工具的使用热潮却丝毫没有减缓的迹象,这就形成了一个令人担忧的缺口。

斯坦福大学对 10 万名开发者的研究发现,使用大语言模型的开发者编写代码的速度更快,平均产量提高了 30% 至 40%。但该研究也指出,相当一部分代码需要返工以消除功能缺陷,因此整体生产力净提升为 15% 至 20%。

应用安全提供商 Black Duck 的高级安全解决方案经理迈克・麦圭尔(Mike McGuire)表示,发现并修复安全漏洞将进一步削弱这些 productivity gains。

他说:“企业依赖人工智能系统生成代码,这正在积累安全债务。这并非因为错误率在上升,而是因为人工智能加速了代码生产。团队在更短时间内生成更多代码,而当其中近一半的代码未能通过安全测试时,风险总量会迅速增加。”

Bugcrowd 的埃利斯预测,安全债务问题即将爆发。

他说:“漏洞的存在与代码行数成概率关系。我们向互联网推送代码的速度越来越快,更多的代码意味着更多的漏洞。此外,速度与质量天生对立,而安全是质量的衍生品。”

然而,人工智能辅助编码已成为不可逆转的趋势,企业应设法为安全代码挑战做好准备。

韦斯林表示:“如果有人能找到让大语言模型在训练过程中自然识别安全漏洞或过滤不安全代码的方法,理论上可能会彻底改变这一局面,因此我们正密切关注这一领域的发展。我们很想看看事态会如何发展 —— 今天的情况并不一定意味着一年后的样子。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星尘安全

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值