AI生成代码频频引用不存在的第三方库,为供应链攻击敞开大门。研究显示,近20%的依赖为“幻觉”,可能导致恶意软件入侵。

想象你正在编写代码,信任地采用了AI助手生成的一段程序,却不知它引用了一个根本不存在的第三方库。这个库的名字听起来很靠谱,但实际上,它是AI凭空捏造的“幻觉”。更可怕的是,恶意攻击者可能早已盯上这个漏洞,发布同名的恶意软件包,等待你的程序自动下载。一旦安装,数据被窃、后门被植入,系统安全瞬间崩塌。这不是科幻小说,而是最新研究揭示的软件供应链危机。

由德克萨斯大学圣安东尼奥分校的博士生Joseph Spracklen牵头的研究,揭示了大型语言模型(LLM)生成代码的潜在威胁。他们测试了16个主流模型,生成57.6万份代码样本,涵盖Python和JavaScript编程语言。结果令人不安:223万个软件包引用中,近44万个(约19.7%)指向不存在的软件包。这些“幻觉”依赖并非随机错误,其中43%在多次查询中反复出现,58%的“幻觉”软件包在10次测试中至少重复一次。这意味着,AI不仅会出错,还会顽固地重复某些错误,为攻击者提供了可乘之机。

这些不存在的依赖为“依赖混淆”攻击创造了完美条件。所谓依赖混淆,简单来说,就是攻击者发布一个与合法软件包同名但版本更新的恶意包。例如,2021年的一次概念验证攻击,就成功在Apple、Microsoft和Tesla的网络中执行了伪造代码。攻击者只需用AI反复“幻觉”出的软件包名称,发布恶意版本,等待开发者因信任AI而误装。一旦恶意代码进入系统,后果不堪设想。

“攻击者只需发布一个与‘幻觉’名称相同的恶意包,”Spracklen在邮件中向Ars解释,“如果开发者不仔细验证就安装,恶意代码就会在用户系统上执行。”他将这种现象命名为“软件包幻觉”,并将在2025年的USENIX安全研讨会上发表相关论文。幻觉一直是AI的顽疾,生成错误或无关内容,降低模型的可信度,而在代码生成中,这种问题可能直接威胁全球软件生态。

为何AI会如此频繁地“胡言乱语”?研究发现,开源模型如CodeLlama和DeepSeek的幻觉率高达22%,远超商业模型的5%。Spracklen推测,这可能与商业模型(如ChatGPT系列)拥有更大的参数规模有关,参数量可能是开源模型的十倍以上。此外,训练数据、微调和安全优化等环节,也可能影响幻觉率。在编程语言方面,JavaScript代码的幻觉率(21%)高于Python(16%),或许因为JavaScript生态系统更为复杂,软件包数量是Python的十倍,模型更容易“记错”名称。

更令人担忧的是,这些幻觉并非无迹可寻的随机错误。许多不存在的软件包名称反复出现,形成可预测的模式。攻击者可以轻松识别这些高频“幻觉”名称,发布相应的恶意包,静待开发者上钩。比如,一个模型可能多次推荐一个名为“super-utils”的虚构包,攻击者便可迅速注册这个名称,植入恶意代码,坐等AI将其推荐给无数开发者。

软件供应链攻击早已不是新概念,但AI的普及让这一威胁变得更加紧迫。依赖是现代软件开发的基石,开发者通过引用现成的代码库节省时间,却也因此将信任交给了外部生态。Microsoft首席技术官Kevin Scott预测,五年内95%的代码将由AI生成。如果开发者不加验证地采纳AI代码,供应链攻击的规模可能呈指数级增长。

面对这一危机,开发者需要格外警惕。AI或许是高效的助手,但它绝非万无一失的智者。每行代码、每个依赖,都值得再三检查。毕竟,在软件供应链的博弈中,一次疏忽就可能让整个系统沦为攻击者的猎场。

本文译自 Ars Technica,由 BALI 编辑发布。