当前位置: 首页 > 科技观察

89次实验,错误率高达40%!斯坦福首次大规模调查揭示AI写代码的漏洞

时间:2023-03-13 04:20:10 科技观察

AI写代码,省时省力。但最近斯坦福大学的计算机科学家发现,程序员使用AI助手编写的代码竟然漏洞百出?他们发现,接受GithubCopilot等AI工具帮助编写代码的程序员不如单独编写的程序员安全或准确。在“用户使用AI助手编写更不安全的代码吗?”(DoUsersWriteMoreInsecureCodewithAIAssistants?),斯坦福大学的研究员NeilPerry、MeghaSrivastava、DeepakKumar和DanBoneh进行了第一次大规模用户研究。论文链接:https://arxiv.org/pdf/2211.03622.pdf该研究的目标是探索用户如何与AICode助手交互以解决不同编程语言的各种安全任务。作者在论文中指出:我们发现,与未使用AI助手的参与者相比,使用AI助手的参与者普遍产生了更多的安全漏洞,尤其是字符串加密和SQL注入的结果。同时,使用AI助手的参与者更有可能相信他们编写了安全代码。纽约大学的研究人员此前已经表明,基于人工智能的编程在不同条件下的实验中是不安全的。在2021年8月的一篇论文“在键盘上睡着了?评估GitHubCopilot的代码贡献的安全性”中,斯坦福大学的学者发现,给定89种情况,在Copilot帮助下制作的计算机程序中,大约40%可能存在潜在的安全风险,并且可利用的漏洞。但他们表示,之前的研究范围有限,因为它只考虑了一组有限的提示,并且只包括三种编程语言:Python、C和Verilog。斯坦福大学的学者还引用了纽约大学的后续研究,但是因为它侧重于OpenAI的codex-davinci-002模型,而不是功能较弱的codex-cushman-001模型,两者都在GitHubCopilot中工作,而GitHubCopilot本身是一个GPT-3语言模型的微调后代。对于具体问题,接受组只有67%的人给出了正确答案,而对照组的这一比例为79%。该图显示了每个问题的正确答案百分比(%)。每列中的配对值分别对应实验组(蓝色)/对照组(绿色),空白单元格代表0。结果显示实验组“显着更多可能提供不安全的解决方案(p<0.05,使用Welch的不等方差t检验)”,也更有可能使用简单的数字,例如替换(p<0.01),而不对最终返回值进行合理性检查。让我们看看这项研究是如何进行的。实验设计和前期准备我们选择了可以在短时间内解决的问题,并涵盖了广泛的潜在安全漏洞。我们想要检查的关键领域是库使用(加密/解密)、用户控制数据的处理(沙盒目录中用户提供的路径、脚本注入)、常见的Web漏洞(SQL注入、脚本注入)以及内存管理和其他低级问题(缓冲区溢出、整数溢出等)。我们的主要目标是招募具有各种编程经验的参与者,以了解他们可能如何处理与安全相关的编程问题。为此,我们招募了来自美国两所大型大学的本科生和研究生,以及来自四家不同公司的几个专业编码科目。下图是实验对象的人口统计图。为了验证参与者是否具备编程知识,我们在研究之前提出了一个简短的预筛选问题,涵盖了上述安全和编程语言领域:用Python编写两个函数,其中一个使用给定的对称密钥来加密给定的字符串和另一个解密给定的字符串;在Python中编写一个函数,以使用给定的ECDSA签名密钥对给定的消息进行签名;用Python写一个函数一个函数,它以表示文件路径的字符串路径作为输入,返回路径处文件的File对象;有一个“STUDENTS的SQL表”,编写一个Javascript函数,将字符串名称和整数年龄作为输入,并添加一个新的条目;用C编写一个函数,它接受一个带符号的整数num并返回该整数的字符串表示;编写一个Javascript函数,接受用户提供的字符串输入并将其显示在浏览器窗口中。学习过程我们以随机顺序向参与者展示每个与安全相关的编程问题,参与者可以按任何顺序尝试这些问题。我们还允许参与者访问外部网络浏览器,无论他们是在对照组还是实验组,他们都可以使用它来解决任何问题。我们通过研究管理员计算机上运行的虚拟机向参与者展示了研究仪器。除了为每个参与者创建丰富的日志外,我们还会在参与者同意的情况下对过程进行屏幕录制和录音。参与者完成每个问题后,系统会提示他们进行简短的退出调查,描述他们编写代码的经历并询问一些基本的人口统计信息。研究结论最后,还使用李克特量表统计了参与者对解决方案正确性、安全性的信念以及实验组中调查后问题的回答,以通过AI能力为每个任务生成安全代码。图为被试对解题准确性和安全性的判断,不同颜色的条代表一致程度。我们观察到,能够访问AI助手的参与者更有可能对大多数引入安全漏洞的任务进行编程,但也更有可能将他们不安全的答案评为安全。此外,我们发现,在创建对AI助手的查询(例如提供可访问性功能或调整参数)方面投入更多的参与者更有可能最终提供安全的解决方案。最后,对于这项研究,我们创建了一个用户界面,专门用于探索人们使用基于AI的代码生成工具编写软件的结果。我们在Github上发布了我们的UI以及所有用户提示和交互数据,以鼓励进一步研究用户可能选择与通用AI代码助手交互的各种方式。