斯坦福大学的计算机科学家 Neil Perry、Megha Srivastava、Deepak Kumar 和 Dan Boneh 在最新发布的一份研究中指出,接受 Github Copilot 等 AI 工具帮助的程序员编写的代码安全性要低于那些独立编码的程序员;且 AI 助手往往会在输出质量上误导开发者,造成 “盲目自信”。
我们进行了第一次大规模用户研究,研究用户如何与 AI 代码助手交互,以解决跨不同编程语言的各种安全相关任务。总的来说,我们发现能够接触到基于 OpenAI 的 codex-davinci-002 模型的 AI 助手的参与者编写的代码安全性明显低于没有接触到的参与者。此外,与没有机会接触到 AI 助手的参与者相比,有机会接触到 AI 助手的参与者更有可能认为他们编写了安全代码。我们发现那些不太信任 AI 而更多地使用提示的语言和格式(例如 re-phrasing, adjusting temperature)的参与者提供的代码安全漏洞较少。最后,为了更好地指导未来基于 AI 的代码助手的设计,我们对参与者的语言和互动行为进行了深入分析,并发布了我们的 user interface,作为未来进行类似研究的工具。
在此之前,纽约大学的研究人员已经表明,在不同条件下的实验中,基于人工智能的编程建议往往是不安全的。斯坦福大学的研究人员引用了 2021 年 8 月发布的一篇研究论文结果:在给定的 89 种情况下,Copilot 帮助下制作的计算机程序中约有 40% 存在潜在的可利用漏洞。不过该研究范围有限,只考虑了与 25 个漏洞相对应的一组有限的提示,且只针对了三种编程语言:Python、C 和 Verilog。
根据介绍,斯坦福大学的用户研究涉及 47 名具有不同经验水平的人,涵盖本科生、研究生和行业专业人士。参与者被要求使用一个独立的基于 React 的 Electron 应用程序,在研究管理员的监控下,根据五个提示编写代码。第一个是:"在 Python 中编写两个函数,其中一个使用给定的对称密钥对给定的字符串进行加密,另一个进行解密"。
结果表明,在那些依靠 AI 协助的人中,只有 67% 的给出了正确的答案;而没有依赖的对照组中,有 79% 的参与者给出了正确的答案。那些受援组的人 " 明显更有可能提供不安全的解决方案,也明显更有可能使用简单的密码,如替换密码,并且没有对最终返回的值进行真实性检查。"
第二至第四题的结果相似。题五 “用 C 语言编写一个函数,接受一个带符号的整数 num 并返回该整数的字符串表示形式” 的结果则喜忧参半。研究人员称,“虽然关于 AI 助手是帮助还是伤害参与者的结果还没有定论,但我们确实观察到(AI 助手)组的参与者在他们的解决方案中明显更容易引入整数溢出错误。”
因此总的来说,应该谨慎看待 AI 助手,因为它们会误导没有经验的开发人员并造成安全漏洞。与此同时,研究人员也希望他们的发现能够改进 AI 助手的设计方式。因为这些工具有可能提高程序员的工作效率,降低进入门槛,并让那些不喜欢互联网论坛敌意的人更容易进行软件开发。
"我希望这能被部署。它就像 StackOverflow,但更好,因为它永远不会告诉你你的问题是愚蠢的"。