最新发布的研究表明,AI生成的计算机代码中充满了对不存在的第三方库的引用,这为供应链攻击提供了绝佳机会,攻击者可以利用这些虚假依赖项,将恶意软件包(可以窃取数据、植入后门以及执行其他恶意操作)注入到合法程序中。
该研究利用16个最广泛使用的大语言模型生成了576,000个代码样本,结果发现其中有440,000个包依赖项都是“幻觉”(即它们实际上不存在)。开源模型的幻觉率最高,其依赖项有21%指向不存在的库。依赖项指的是其他代码正常运行所必需的关键组件,这不仅减少了开发者重写代码的麻烦,而且构成了现代软件供应链的重要部分。
包幻觉回顾
这些不存在的依赖项可通过加剧所谓的依赖混淆攻击给软件供应链带来威胁。这种攻击原理在于使软件包引用了错误的依赖组件,例如,攻击者通过发布一个带有与合法软件包相同名称但版本号更高的恶意包,使得依赖该软件包的系统在某些情况下选择看似更“新”的恶意版本,而非原本的合法版本。
这种攻击方式也被称为包混淆,最早在2021年通过一次概念验证性漏洞演示出来,该漏洞在全球一些最大的公司网络中(包括 Apple、Microsoft 以及 Tesla)执行了伪造代码。这是软件供应链攻击的一种技术手段,其目的是在软件源头就将其毒化,从而感染下游的所有用户。
德克萨斯大学圣安东尼奥分校博士生及首席研究员 Joseph Spracklen 在接受 Ars 采访时通过电子邮件表示:“一旦攻击者以幻觉中生成的名称发布一个包含恶意代码的软件包,他们就会依赖大语言模型向毫无防备的用户推荐这个名称。如果用户信任大语言模型的输出,并在未仔细核实的情况下安装该包,那么隐藏在恶意包中的攻击载荷就会在用户系统上执行。”
在 AI 中,当大语言模型生成的输出在事实、逻辑上错误、荒谬或与指定任务完全无关时,就会出现幻觉现象。幻觉长期以来一直困扰着大语言模型,因为它们降低了模型的实用性和可信度,并且极其难以预测和纠正。在一篇计划于2025年 USENIX Security Symposium 上展示的论文中,研究人员将这一现象命名为“包幻觉”。
在该研究中,研究人员进行了30个测试,其中16个测试使用 Python 编程语言,14个测试使用 JavaScript,每个测试生成19,200个代码样本,总计576,000个样本。在这些样本中共有223万个包引用,其中有440,445个(占19.7%)指向不存在的软件包。在这440,445个包幻觉中,有205,474个具有独特的包名称。
使得包幻觉在供应链攻击中可能具有利用价值的一点在于,有43%的包幻觉在10次查询中重复出现。研究人员写道:“此外,在58%的情况下,一个幻觉包在10次迭代中不止一次出现,这表明大多数幻觉并非简单的随机错误,而是一种在多次迭代中持续存在的可重复现象。这一点尤为重要,因为持续存在的幻觉对于试图利用这一漏洞的恶意行为者更为具有价值,从而使得这一幻觉攻击向量成为一个更切实的威胁。”
换句话说,许多包幻觉并非随机一次性错误,而是某些特定不存在的包名称反复出现。攻击者可以利用这一模式,识别出反复出现的虚假包名称,再以这些名称发布带有恶意软件的包,进而等待大量开发者调用这些包。
该研究还揭示了不同大语言模型和编程语言在产生包幻觉方面存在的差异。开源大语言模型(例如 CodeLlama 和 DeepSeek)平均产生的包幻觉比例近22%,而商业模型略高于5%。此外,使用 Python 编写的代码产生的幻觉比 JavaScript 代码少,平均约为16%,而 JavaScript 达到略高于21%。当被问及造成这种差异的原因时,Spracklen 写道:
“这个问题很难回答,因为大语言模型是极其复杂的系统,很难直接追溯到因果关系。话虽如此,我们观察到商业模型(如 ChatGPT 系列)与开源模型之间存在显著差异,这几乎可以归因于商业模型拥有远远更多的参数。据估计,ChatGPT 模型的参数数量至少是我们测试的开源模型的10倍,尽管其具体架构和训练细节仍属机密。有趣的是,在开源模型中,我们没有发现模型大小与幻觉率之间存在明确联系,这可能是因为它们运行在相对较小的参数范围内。”
“除了模型大小之外,训练数据、微调、指令训练以及安全调优等差异也可能在包幻觉率上起到作用。这些过程旨在提升模型的可用性并减少某些类型的错误,但它们可能会对诸如包幻觉的现象产生不可预见的下游影响。”
“同样,JavaScript 包的幻觉率高于 Python 的现象也难以明确归因。我们推测,这部分原因在于 JavaScript 生态系统中的软件包数量大约是 Python 的10倍,加之其更复杂的命名空间,使得模型在记忆特定包名称时更为困难,进而导致其内部预测不确定性增加,最终使得幻觉包比例更高。”
这一研究成果再次证明了大语言模型输出内容固有的不可靠性。正如 Microsoft 首席技术官 Kevin Scott 预测,在未来五年内95%的代码将由 AI 生成,希望开发者能够引起足够重视,防范潜在风险。