4 月 23 日消息,ChatGPT 聊天机器人可以根据用户的输入生成各种各样的文本,包括代码。但是,加拿大魁北克大学的四位研究人员发现,ChatGPT 生成的代码往往存在严重的安全问题,而且它不会主动提醒用户这些问题,只有在用户询问时才会承认自己的错误。
研究人员在一篇论文中介绍了他们的发现,他们让 ChatGPT 生成了 21 个程序和脚本,涉及 C、C++、Python 和 Java 等语言。这些程序和脚本都是为了展示一些特定的安全漏洞,比如内存损坏、拒绝服务、反序列化和加密实现等方面的漏洞。结果显示,ChatGPT 在第一次尝试时生成的 21 个程序中只有 5 个是安全的。在进一步提示纠正其错误步骤后,该大型语言模型设法生成了 7 个更安全的应用程序,不过这只是与正在评估的特定漏洞有关的“安全”,并不是说最终的代码不存在任何其他可利用的漏洞。
研究人员指出,ChatGPT 的部分问题是由于它没有考虑敌对的代码执行模型。它会反复告诉用户,安全问题可以通过“不输入无效的数据”来避免,但这在现实世界中是不可行的。然而,它似乎能够意识到并承认自己建议的代码中存在的关键漏洞。
魁北克大学计算机科学与工程教授、论文的合著者之一 Raphaël Khoury 告诉《The Register》:“显然,它只是一个算法。它什么都不知道,但它可以识别出不安全的行为。”他说,最初 ChatGPT 对安全问题的回应是建议只使用有效的输入,这显然是不合理的。只有在之后被要求改进问题时,它才提供了有用的指导。
研究人员认为,ChatGPT 的这种行为并不理想,因为用户知道要问什么问题需要对特定的漏洞和编码技术有一定的了解。
研究人员还指出,在 ChatGPT 中存在着道德上的不一致性。它会拒绝创建攻击代码,但却会创建有漏洞的代码。他们举了一个 Java 反序列化漏洞的例子,“聊天机器人生成了有漏洞的代码,并提供了如何使其更安全的建议,但却说它无法创建更安全版本的代码。”
Khoury 认为,ChatGPT 在目前的形式下是一个风险,但这并不是说没有合理使用这种不稳定、表现不佳的 AI 助手的方法。“我们已经看到学生使用这个工具,程序员也会在现实中使用这个工具。”他说,“所以拥有一个生成不安全代码的工具是非常危险的。我们需要让学生意识到,如果代码是用这种类型的工具生成的,那么它很可能是不安全的。”他还称,让他感到惊讶的是,当他们让 ChatGPT 生成相同任务的不同语言的代码时,有时对于一种语言,它会生成安全的代码,而对于另一种语言,它会生成有漏洞的代码,“因为这种语言模型有点像一个黑盒子,我真的没有一个很好的解释或理论来说明这一点。”