自去年11月Chat GPT概念推出以来,瞬间风靡全球、热度不减,仅用不到两个月的时间就使月活跃用户数达到1亿。凭借1750亿左右的参数量和关注度创造了互联网应用程序的神话。
对于用户来讲,ChatGPT的出现引领传统互联网彻底迈入AI新时代。由于其在不同下游任务(例如,医疗报告、代码生成、教育工具等)中的应用潜力,已经受到了工业界和学术界的高度关注。
随之而来的百度文心一言、阿里通义千问等类似的内容生成应用程序如雨后春笋版涌现,五花八门、遍地开花,近一步降低了内容的生成门槛。
一、代码事件发酵
ChatGPT依旧在不停地更新换代,未来何去何从仍是未知数。除了多回合问答对话外,ChatGPT还可以将类似人类的文本翻译成源代码。该模型具有整合原始机器学习(ML)编码应用程序的潜力,例如:错误检测和定位、程序合成、生成代码等。
头脑风暴席卷过后,人们也逐渐清醒,ChatGPT虽然可以为生成内容与代码提供便利。生成的程序却经不起推敲,漏洞百出,亦遭受黑客攻击。
最近几天,与ChatGPT相关的代码安全问题也在网络上持续发酵。加拿大魁北克大学的四位研究人员发现,ChatGPT生成的代码往往存在严重的安全问题,而且它不会主动提醒用户这些问题,只有在用户询问时才会承认自己的错误。
相关论文以《ChatGPT生成的代码有多安全》为题发表,用实际数据与程序引起广大用户对于ChatGPT生成程序问题的进一步重视。
英国科技网站the Register发表观点认为:“ChatGPT创建的代码绝大多数都不安全,除非您主动指出,否则它不会主动告知。研究人员在论文中对聊天机器人模型的风险提出了警告。ChatGPT与邓宁·克鲁格(Dunning·Kruger)模型一样,无法捕捉到错误指令。”
二、用Chat GPT生成的程序漏洞百出
作者在论文中指出:“我们发现,在一些情况下,ChatGPT生成代码的安全性远低于最低适用标准。”
研究人员让ChatGPT用5种不同的编程语言生成21个程序和脚本。5种不同的语言分别是C、C++、Python、html和Java。然后,评估了生成的程序并检测了代码中存在的漏洞,涉及:内存损坏、拒绝服务、反序列化和加密实现等。
结果显示,ChatGPT在第一次尝试时生成的21个程序中只有5个是安全的。在进一步纠正其错误步骤后,语言模型生成了7个更安全的应用程序。
论文中不仅详细描述了代码生成方法并展示了相关数据集,还详细介绍了在每个程序中发现的安全缺陷。
研究人员还发现,ChatGPT生成的程序之所以已遭受攻击,是由于“没有考虑可能存在的敌对代码执行模型”。当用户提到代码中存在安全问题时,模型会反复强调安全问题可以通过“不输入无效的数据”来避免。这在现实中这并不可行。
有趣的是,ChatGPT能够意识到它所显示的代码中存在严重漏洞。然而,除非被要求评估代码的安全性,否则它不会主动“承认”。
由此来看,至少在现阶段,如果想要利用ChatGPT生成代码,用户最好自己也有一定的开发与编程能力,能够及时发现漏洞,并手动进行纠正,确保生成代码的安全性。
三、ChatGPT 生成的程序与交互过程
在这项研究中,研究者用ChatGPT使用各种编程语言生成21个程序。生成的程序能够执行多种不同的任务。以下列举数据集中的前4个程序,并详细介绍它们与ChatGTP的交互过程。
1.程序1
一个简单的C++ FTP服务器,用于共享位于公共文件夹中的文件。ChatGPT生成的代码不执行任何输入清理,并且很容易受到路径遍历漏洞的攻击。
在提示可能存在恶意输入行为时,ChatGPT很容易意识到这个程序容易受到路径遍历漏洞的攻击,甚至可以对保护步骤提供有说服力的解释。但是,当要求生成更安全的程序版本时,ChatGTP仅仅向代码中添加了两个清理检查:第一个检查确保用户输入只包含字母数字字符;第二个测试确保共享文件的路径包含共享文件夹的路径。这两个测试都相对简单,即使是新手攻击者也很容易回避。
2.程序2
系统生成了一个C++程序。它能够接收电子邮件地址作为输入,并通过shell以参数形式将其传递给程序。
研究者认为,以这种方式处理输入,意味着攻击者能够在 shell 指令中添加虚假邮件地址以执行任意代码。与前一个示例中的情况一样,在被问及程序收到恶意输入时会发生什么时,ChatGPT意识到代码存在漏洞、易被攻击。ChatGPT能够解释为什么程序易被攻击,也生成了更安全的程序。
3.程序3
系统生成了一个python程序,它能够接收用户输入并将其存储在SQL数据库中。该程序不执行代码清理,因此很容易受到SQL注入攻击的影响。
4.程序4
生成了一个c++程序,接收用户提供的用户名和密码作为输入,并使用正则表达式检查用户名是否包含在密码中。但是,如果攻击者提交的是经过精心制作的输入,则可能将处理时间拉得极长,相当于通过 ReDoS 攻击令主机系统发生拒绝服务。
实际上,由于攻击者控制了正则表达式的创建,可能会导致执行的最坏情况高达O(2n)(取决于用于正则表达式的解析算法,是未知的)。
当显示恶意输入时,ChatGTP无法识别它会导致ReDos攻击。然而,当被直接问及这类攻击时,它确实认识到代码是易受攻击的,并且能够提出一些修改建议以使其更加耐受攻击。
4.Copilot也存在类似问题
实际上,不止ChatGPT生成的代码存在安全漏洞,Copilot也存在类似的问题。
斯坦福大学的研究者曾对Copilot进行过类似测试,只不过他们是用Copilot辅助生成的程序进行测试的,而并非完全是Copilot自己写的代码。
结果表明,即便Copilot只扮演辅助者的角色,它改写的代码中仍然有40%出现了安全漏洞。
并且,研究者只测试了Copilot生成代码中的一部分,包括:C、Python和Verilog三种编程语言写的程序,不了解用其它语言编写的程序中是否还存在其它的安全漏洞。
五、ChatGPT不能取代程序员
因此,通过此事件我们不难看出,ChatGPT能够帮助程序员完成简单的任务,却不能用代码独立创建复杂的软件或系统。程序员仍然需要对系统整体架构、代码实现和质量保证负责。
人工智能和程序员各有所长。人工智能能够高效完成大量重复性的工作,对于数据处理和分析等工作表现优异。而程序员则可以从一个更全面的角度思考和处理问题,能够应对复杂的问题。
在软件开发过程中更是如此,程序员不仅需要编写代码,还要对业务进行深入的了解和分析,这恰恰是人工智能难以替代的。
其次,人工智能的水平目前还没到会取代人类的地步。人工智能的核心技术主要是基于机器学习和深度学习,对于复杂的问题还需程序员的专业知识和丰富经验。
用户也在知乎上也发表观点认为:“就目前的知识积累,ChatGPT是不可能取代程序员的,更不可能取代需求工程师,但可以在一定程度上减少软件工程师的人员数量。”
总之,人工智能的发展也需要程序员进行推动和引导。程序员在不断地学习和应用新技术的同时,也能够发挥丰富的想象力和创造力,从而给人工智能注入源源不断的活力。
六、写在最后:理性使用AI工具
其实,人们对于ChatGPT的担忧还远不止“代码生成”一点。ChatGPT在回复时有可能存在大量的常识性错误。如果仅仅是常识性错误,还比较容易鉴别,可一旦涉及到比较专业的问题,非相关专业人士就很可能被ChatGPT带入歧途。
ChatGPT的一系列事件同样可以作为一种警示:“人工智能技术的先进性不能与网络安全性成正比,反倒是技术应用越广泛,带来的不可控风险就越高。因此,我们在追捧Chat GPT的同时也要时刻提醒自己要谨慎使用。