OpenAI 的 ChatGPT 生成程序代码并不安全 但未能提醒用户
OpenAI 的聊天机器人大型语言模型 ChatGPT,不仅会产生不安全的代码,而且尽管其能够指出自身的缺陷,但却未能提醒用户注意其不足之处。
在针对大型语言模型可能性和限制的学术兴趣狂潮中,加拿大魁北克大学的四位研究者深入探讨了来自 OpenAI 的 ChatGPT 生成的代码的安全性。
在一篇名为「How Secure is Code Generated by ChatGPT?」的论文中,计算机科学家 Rapha?l Khoury、Anderson Avila、Jacob Brunelle 和 Baba Mamadou Camara 回答了这个问题,他们的研究可总结为「不太安全」。
研究人员在论文中称:「结果令人担忧。我们发现,在多个情况下,ChatGPT 生成的代码远低于适用于大多数环境的最低安全标准。事实上,当被问及所生成的代码是否安全时,ChatGPT 能够认识到它不安全。」
四位作者之所以得出这个结论,是因为他们要求 ChatGPT 生成 21 个程序和脚本,使用多种语言:C、C 、Python 和 Java。
出题时要求 ChatGPT 生成的编程任务旨在说明特定的安全漏洞,例如内存泄露、拒绝服务以及与反序列化未正确实施的加密相关的缺陷。
例如,第一个程序是一个 C FTP 服务器,用于共享公共目录中的文件。ChatGPT 生成的代码没有过滤输入内容,这使得软件容易受到路径遍历漏洞的攻击。
总的来说,在第一次尝试中,ChatGPT 在 21 个程序中仅成功生成了 5 个安全程序。经过进一步的提示来纠正其错误后,这个大型语言模型成功地生成了另外 7 个安全应用程序,但这只是指特定漏洞被评估时是「安全」的,不能断言最终代码不会有其他可利用的漏洞。
与 GitHub 的另一个基于 GPT-3 家族的模型 Copilot 的类似评估一样,研究人员的发现表明,这些语言模型的错误虽然有些相似,但并不完全一致(Copilot 近期被升级到了 GPT-4)。其他研究则更为广泛地调查了 ChatGPT 的错误。与此同时,这些模型也被用于帮助解决安全问题。
学者们在他们的论文中观察到,问题的一部分似乎源于 ChatGPT 没有对代码执行采用对抗模型。他们说:「ChatGPT 反复告诉我们,安全问题可以通过‘不向其创建的易受攻击程序提供无效输入’绕过。但是,ChatGPT 似乎已经知道,并且确实承认其建议中存在严重的漏洞。」除非被要求评估其自己代码建议的安全性,否则它不会说任何话。
「显然,它是一种算法。它什么也不知道,但它可以识别不安全的行为,」魁北克省塔瓦斯大区大学计算机科学和工程教授、论文的共同作者之一 Rapha?l Khoury 告诉 The Register。
起初,ChatGPT 对于安全问题的回应是建议仅使用有效的输入——这在现实世界中有点行不通。只有在被提示以纠正问题后,这个 AI 模型才会提供有用的指导。
这并不理想,作者建议,因为知道要问哪些问题需要熟悉特定的漏洞和编码技术。
换句话说,如果您知道正确的提示来让 ChatGPT 修复漏洞,则您可能已经了解如何解决它。
作者还指出,ChatGPT 不会生成攻击代码,却会生成易受攻击的代码,这存在伦理矛盾。
他们举了 Java 反序列化漏洞的例子,ChatGPT「生成易受攻击的代码,并提供有关如何使其更加安全的建议,但声称无法创建更加安全的代码版本。」
Khoury 认为,即便有时 AI 助手存在缺陷,也存在一些有效的用途,但目前 ChatGPT 还是存在风险的。他说:「我们已经看到学生和程序员在实际情况下使用这个工具。因此,生成不安全代码的工具确实很危险,我们需要让学生意识到,如果使用这种工具生成代码,它可能是不安全的。」
「令我惊讶的是,当我们要求 [ChatGPT] 使用不同的语言生成相同类型的程序时,有时一个语言会是安全的,而另一个语言则会容易受到攻击。因为这种语言模型有点像黑盒,对此我真的没有很好的解释或理论。」
- 0000
- 0000
- 0000
- 0000
- 0000