Slopsquatting(幻觉包名投毒)指的是:攻击者把大语言模型(LLM)写代码时凭空编造出来的、现实中并不存在的软件包名,抢先到公共代码仓库注册成同名恶意包,等着那些照着 AI 建议去安装依赖的人自投罗网。
模型为什么会"编"出一个包名
模型生成代码时不是在数据库里查,而是在按概率往下接。它见过的命名风格太多了——fast-json-parser、easy-weather-api 这种名字一看就"很真",于是它会把格式正确、风格地道、但根本没人发布过的包名写得斩钉截铁,语气和写 requests 时一模一样。
关键在于:同一个模型面对相似的问题,编出来的名字往往高度重复。概率分布相对稳定,幻觉也就相对稳定。这让攻击者可以批量收集这些"高频幻觉名",一次性抢注——一个偶发错误,变成了一条可预测、可规模化的攻击面。
打个生活化的比方
AI 像个特别自信但不认路的向导:"往前走两百米,有家老张面馆,你去那儿吃。"其实压根没有这家店。骗子发现每天有成千上万人被指向同一个店名,就去那个位置挂上"老张面馆"的招牌。你按图索骥走过去,门脸、招牌都对得上,于是推门进去——里面卖的是什么,就不由你决定了。
装上之后会发生什么
开发者把 AI 给的命令原样复制到终端,包管理器确实下载成功了,于是更不会怀疑。而多数生态的包在安装阶段就能执行脚本(具体默认行为以各包管理器官方文档为准),恶意代码可以读取环境变量、云平台凭证、CI 令牌、SSH 私钥,然后悄悄外发。它绕过了代码审查——因为问题不在你的代码里,在你依赖的名字里。
和相邻概念的区别
| 名称 | 被利用的"错误来源" | 典型场景 |
|---|---|---|
| Typosquatting 错字抢注 | 人打字打错 | 把 requests 拼错装成山寨包 |
| Dependency Confusion 依赖混淆 | 包管理器的解析优先级 | 内部私有包名被公共仓库同名包抢占 |
| Slopsquatting 幻觉包名投毒 | 模型编造不存在的名字 | 照抄 AI 给的包名直接安装 |
前两者赌的是人的手误或构建配置,Slopsquatting 赌的是人对 AI 的信任。
对从业者和普通人的意义
对工程师:AI 给的每一个依赖名,装之前先去官方仓库搜一遍,看它是否存在、维护者是谁、首次发布时间、有没有对应源码仓库。组织层面可以把依赖收进私有镜像或代理仓库、只放行白名单包、在 CI 里做依赖审核并生成 SBOM,必要时关闭安装脚本的自动执行。具体开关和配置以各工具官方页面为准。
对普通职场人:让 AI 帮你写脚本、装工具时,别把带 sudo 的命令无脑粘贴执行。多花十秒确认一下"这个东西真的存在吗",比事后换密钥便宜得多。
