评估大型语言模型生成的代码安全性的最新工作

作者

·何旭增(ORCID:0009–0005–7317–7426)

介绍

随着当今大型语言模型(LLM)的激增,开发人员使用大型语言模型来辅助他们日常代码编写的趋势正在上升。著名的产品包括GitHubCopilot或简称ChatGPT。然而,就像那些由人类开发人员编写的代码一样,LLM生成的代码有时也会有很多安全风险。例如,有一种流行的称为“越界写入”,它可能允许攻击者将恶意信息写入计算机内存中,以进行某些潜在的犯罪活动。

在这篇文章中,我们介绍了一些评估大型语言模型生成的代码安全性的最新努力,以便人们可以对此类模型在一般情况下或给定某些特定任务时的不可靠性有一些基本的想法。

通过CWE进行系统实验

常见弱点枚举(CWE)是由MITRE运营的系统,用于对安全漏洞进行分类,包括400多个与软件安全风险相关的类别。例如,前面提到的安全风险“越界写入”被分配给“CWE-787”。通过使用CWE作为评估生成代码安全风险的指标,可以很容易地系统地分析一组安全漏洞。

在最近的一项研究中,为了深入了解“GitHubCopilot的建议是否通常不安全”这个问题,GitHubCopilot生成的代码针对MITRE的CWE子集进行了评估。更具体地说,Copilot的行为是从三个维度研究的,包括弱点的多样性,提示的多样性和领域的多样性。GitHubCopilot是由GitHub和OpenAI开发的代码完成工具,通过自动完成代码来帮助VisualStudioCode、VisualStudio、Neovim和JetBrains集成开发环境(IDE)的用户。

对于弱点的多样性,每个适用的“前25名”CVE都构建了三种不同的场景,这些场景被构建为等待Copilot填写的小型、不完整的程序。作为代码评估,CodeQL软件扫描与手动检查一起使用,以评估返回的建议是否容易受到该CWE的攻击。

接下来,对于提示的多样性,评估不同的提示(也就是我们给模型的输入)对Copilot返回易受选定CWE(注入)影响的建议的可能性的影响。

在这种情况下,从安全角度来看,Copilot对这些场景的响应喜忧参半,其中大约40%的生成结果被发现是易受攻击的。

用户研究

除了一般的系统测试外,还积极进行用户研究,以评估生成代码的安全性。最近,我们开展了一项安全驱动的用户研究,以评估学生程序员在LLM的协助下编写的代码。

这项研究的学生是通过社交媒体招募的,并随机分为“对照组”(无法学硕士访问权限)和“辅助”(有法学硕士访问权限)组。他们被提示用C语言完成购物清单程序实现,这里选择了C,因为大多数安全风险都是低级语言(如C/C++)中基于内存的问题)。

本研究使用了一个名为code-cushman-001的LLM来帮助辅助组的学生,因为它的操作速度很快,响应时间与GitHubCopilot相似。生成函数后,将检查编译,如果结果失败,将请求再次完成。为了分析结果,使用标准统计假设检验来提供基于证据的结论。假设检验是一种统计分析,其中对总体参数的假设进行检验。它用于估计2个统计变量之间的关系。

结论

大型语言模型的使用在多个方向上取得了重大进展,尤其是当它们用于辅助代码实现时。但是,大型语言模型生成的代码可能存在一些潜在的安全风险。在这篇文章中,我们讨论了评估大型语言模型生成的代码安全性的最新工作,从系统测试到用户研究。通过不断的调查和完善,我们相信大型语言模型的使用可以为我们在代码生成方面开辟令人兴奋的机会。