软件包幻觉:LLM可能会向粗心的开发人员提供恶意代码

商有精准说 2025-04-17 13:29:39

大型语言模型倾向于“虚构”不存在的代码包,这可能会成为一种新型供应链攻击的基础,这种攻击被赛斯·拉森(Seth Larson,Python软件基金会的驻场安全开发人员)称为“slopsquatting”。

一种已知现象

如今,许多软件开发人员使用大型语言模型(LLM)来辅助编程,然而,不幸的是,LLM在回答各种话题的问题时,会编造事实并自信地呈现出来,这一已知倾向也延伸到了编码领域。这种情况已为人所知一段时间了。一些研究人员之前已经注意到,LLM偶尔会推荐不存在的软件库和包,并认为这种倾向可能会被攻击者利用,以这些名称创建恶意包,并在PyPI(适用于Python)和npm(适用于JavaScript)等流行的代码存储库中提供下载。

“这些包的虚构,是在使用LLM生成代码时出现事实冲突错误而产生的,代表了一种新型的包混淆攻击,对软件供应链的完整性构成了严重威胁,”来自德克萨斯大学圣安东尼奥分校、俄克拉荷马大学和弗吉尼亚理工学院的一组研究人员指出。

潜在的恶作剧

该团队决定检查包虚构问题的严重程度,为此,他们测试了16个代码生成AI模型(GPT-4、Claude、CodeLlama、DeepSeek Coder、Mistral等),使用了两个独特的提示数据集。LLM提供了576000个Python和JavaScript代码样本,其中推荐的包中,近20%是不存在的。为了确定LLM是否会反复虚构相同的包,研究人员使用了一个包含500个生成包虚构提示的随机样本,并对每个提示重复了10次查询。

结果如何?“当用同一个生成了虚构的包的提示反复查询模型时:43%的虚构包在所有10次查询中都被重复,而39%的虚构包在10次查询中根本没有重复。”“此外,58%的情况下,一个虚构的包在10次迭代中会被重复一次以上,这表明大多数虚构并非仅仅是随机错误,而是一种在多次迭代中持续存在的可重复现象,”他们指出。“这一点很重要,因为持续的虚构对试图利用这一漏洞的恶意行为者来说更有价值,并使虚构攻击向量成为一个更可行的威胁。”

虽然大多数模型在许多情况下能够检测到自己的虚构,但问题在于,有许多开发人员使用AI模型来辅助组装程序,并信任其提供的代码。

“比如说,我让ChatGPT帮我写一些代码,它写了。现在,假设在生成的代码中它包含了一个包的链接,我信任它并运行了代码,但这个包不存在,它是一个虚构的包。一个敏锐的对手/黑客可能会看到LLM的这种行为(LLM告诉人们使用这个不存在的包,这个虚构的包),并意识到这一点。然后,对手就可以简单地用与LLM推荐的虚构包(名称相同)创建一个新包,并在其中注入一些恶意代码,”德克萨斯大学圣安东尼奥分校计算机科学系的副教授穆尔图扎·贾德瓦拉(Murtuza Jadliwala)博士说。“现在,当下一次LLM在生成的代码中推荐相同的包时,一个毫无戒心的用户执行了代码,这个恶意包就会被下载并在用户的机器上执行。”

最小化包虚构

研究人员认为,也许许多虚构的包在之前存在过,被包含在模型的预训练数据中,并在此期间被删除了,于是他们对此进行了调查,并发现已删除的包是他们观察到的包虚构现象的“可忽略的来源”。他们还发现,跨语言虚构(例如,当一种编程语言中的一个虚构的包具有另一种编程语言中现有包的名称时)在搜索JavaScript包时更容易发生。最后,虽然大多数虚构的包的名字与现有包的名字“有实质性差异”,但这些名字通常很有说服力,并且符合上下文。

研究人员已提出了一些建议,以帮助LLM创建者在代码生成过程中减少包虚构,但对于利用LLM的个人编码人员来说,一般建议是,在包含提供的代码之前,先检查推荐的包。

0 阅读:0

商有精准说

简介:感谢大家的关注