萧箫 发自 凹非寺

量子位 | 大众号 QbitAI

ChatGPT知道自己写的代码 缝隙,但它不说!

来自加拿大的一项最新研讨发现,ChatGPT生成的代码中,有不少都存在安全缝隙。

但是在被要求评价自己代码的安全性时,ChatGPT却很快发现了这些代码中的缝隙,并给出了一些解决方案和主张。

ChatGPT明知自己写代码有漏洞,但你不问它就不说

这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有缝隙,也有才能修复这些缝隙

而在另一篇来自斯坦福的论文中,研讨人员测验了另一位闻名AI程序员Copilot,也发现了相似的问题。

所以,用AI生成代码为啥会呈现这种情况?

写的程序中76%有安全缝隙

研讨人员试着让ChatGPT生成了21个程序。

整个测验进程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测验,并检查问题、潜在的缺点和缝隙等。

ChatGPT明知自己写代码有漏洞,但你不问它就不说

研讨人员给ChatGPT提了包含C++、C、Java和Python在内的21个写代码需求,这是评价的结果:

ChatGPT明知自己写代码有漏洞,但你不问它就不说

计算标明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能牵强通进程序安全评价,不安全代码率达到76%以上。

于是,研讨人员先试着让ChatGPT“想想自己生成的代码有啥问题”。

ChatGPT的回应是“没啥问题”:只要用户每次的输入都是有用的,那么程序一定能运行!

明显ChatGPT并没有意识到,用户并不都是职业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:

ChatGPT明知自己写代码有漏洞,但你不问它就不说

发现ChatGPT不知道自己写的程序不安全后,研讨人员测验换了种思路——用更专业的言语提示ChatGPT,如告诉它这些程序具体存在什么缝隙。

奇特的是,在听到这些针对安全缝隙的专业主张后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少缝隙。

通过一番改善后,ChatGPT终于将剩下的16个缝隙程序中的7个改得更安全了。

研讨人员得出结论以为,ChatGPT并不知道自己的代码中存在安全缝隙,但它却能在生成程序后辨认其中的缝隙,并测验提供解决方案。

论文还指出,ChatGPT虽然能精确辨认并拒绝“写个进犯代码”这种不道德的需求,但是它自己写的代码却有安全缝隙,这其实有着规划上的不合理之处。

我们试了试发现,ChatGPT确实会主动拒绝写进犯性代码的要求:

ChatGPT明知自己写代码有漏洞,但你不问它就不说

大有一种“我不进犯他人,他人也不会进犯我写的代码”自信感。

程序员们在用它辅佐写代码的时分,也需要考虑这些问题。

Copilot也存在相似问题

事实上,不止ChatGPT写的代码存在安全问题。

此前,斯坦福大学的研讨人员对Copilot也进行过相似查询,只不过他们探查的是用Copilot辅佐生成的程序,而并非完全是Copilot自己写的代码。

研讨发现,即使Copilot只是个“打辅佐”的角色,通过它改写的代码中,依然有40% 呈现了安全缝隙。

ChatGPT明知自己写代码有漏洞,但你不问它就不说

而且研讨只查询了Copilot生成代码中的一部分,包含C、Python和Verilog三种编程言语写的程序,尚不知道用其他言语编写的程序中,是否还存在更多或更少的安全缝隙。

基于此,研讨人员得出了如下结论:

ChatGPT等AI生成的代码安全性并不安稳,用某些言语写的代码比较安全,而用其他言语写的代码却很简单遭受进犯。全体来看,它们就是一个黑盒子,生成的代码是有风险的。

这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。

作者介绍

四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。

ChatGPT明知自己写代码有漏洞,但你不问它就不说

Raphal Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研讨兴趣会集在计算机安全方面。

ChatGPT明知自己写代码有漏洞,但你不问它就不说

Anderson R. Avila,魁北克大学国立科学研讨院的助理教授,首要研讨方向是数据隐私相关的联邦学习、网络安全和生物特征辨认技术等,曾经在华为的加拿大研讨院做过机器学习研讨员。

作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。

你用ChatGPT写过代码吗?感觉它的“安全意识”如何?

论文地址:
arxiv.org/abs/2304.09…

生成代码数据集:
github.com/RaphaelKhou…