Shai-Hulud:谁控制了你的包注册表,谁就控制了你的管道

Shai-Hulud:谁控制了你的包注册表,谁就控制了你的管道

💡 原文英文,约1600词,阅读约需6分钟。
📝

内容提要

npm 注册表遭蠕虫攻击,恶意包自更新并窃取凭证,已进化多代,最新变种利用合法签名管道绕过验证。攻击源于自动化发布和长期凭证,影响 npm 及 Terraform 等基础设施。防御需固定依赖版本、限制来源、使用短期凭证、控制网络出口,并视构建管道为关键基础设施。

🔎

延伸解读

供应链攻击的新范式:自动化蠕虫

Shai-Hulud 系列蠕虫展示了供应链攻击的新范式:不再依赖人工失误,而是利用自动化发布流程和长期凭证,实现自我传播。从 npm 到 Terraform,任何依赖公共注册表的系统都可能成为目标。攻击者通过窃取凭证,以合法身份发布恶意版本,使传统基于签名的验证失效。这提醒我们,构建管道已成为关键基础设施,其安全性需要与生产环境同等重视。

签名与溯源并非万能

ChainDrop 变种通过合法签名管道发布恶意包,获得有效的 SLSA 溯源证明,说明签名和溯源只能证明包来源,无法验证其内容是否应被发布。攻击者利用被攻陷的维护者账户,让合法管道为其背书。因此,仅依赖签名和溯源是不够的,还需结合依赖锁定、私有注册表和严格的访问控制,才能有效降低风险。

防御措施:从固定版本到网络出口控制

文章提出了多项具体防御措施:固定依赖版本(如 Terraform 锁文件、模块提交 SHA)、使用私有注册表、采用短期凭证(如 OIDC)、限制运行时的网络出口。这些措施旨在减少攻击面,使蠕虫难以窃取凭证或外传数据。尤其重要的是,控制网络出口可阻断蠕虫的通信通道,即使被感染也无法造成更大破坏。

Q&A

Shai-Hulud 蠕虫是如何在 npm 注册表中传播的?

Shai-Hulud 蠕虫通过窃取开发者的 npm 凭证,利用这些凭证调用 npm API 列出并下载开发者维护的包,将恶意代码注入 postinstall 脚本,然后自动发布新版本。整个过程无需人工干预,导致大量包被篡改。

ChainDrop 变种是如何绕过软件供应链的安全验证的?

ChainDrop 通过入侵具有合法写权限的维护者账户,利用其合法的、经过签名的发布管道来构建和发布恶意包,从而获得有效的 SLSA 来源证明。这绕过了基于签名的验证机制,因为验证只证明包来自何处,而不验证提交是否应该存在。

Shai-Hulud 蠕虫主要窃取哪些类型的凭证?

Shai-Hulud 蠕虫会搜索并窃取多种凭证,包括 npm 和 GitHub 个人访问令牌、AWS 或 GCP 密钥,以及从云实例元数据服务中提取的凭证。它还会使用 Trufflehog 工具验证这些凭证的有效性。

如何防止类似 Shai-Hulud 的供应链攻击影响 Terraform 基础设施?

防止此类攻击的措施包括:将依赖固定到不可变引用(如完整提交 SHA),使用组织管理的私有注册表,采用短期凭证(如通过 OIDC 获取临时云访问权限),并限制运行时的网络出口,只允许必要的域名通信。

为什么说构建管道是生产基础设施?

构建管道通常无人值守运行,且拥有比所部署系统更多的常驻权限。它不再是安全边界之外的便利层,而是生产基础设施的一部分,一旦被攻破,攻击者可以利用其权限传播恶意代码,因此必须像保护生产系统一样保护它。

Shai-Hulud 蠕虫的演变过程是怎样的?

Shai-Hulud 蠕虫经历了多个变种:最初版本在 2025 年 9 月出现,窃取凭证并自我传播;随后 Shai-Hulud 2.0 在 11 月出现,能感染更多包并删除用户主目录;Mini Shai-Hulud 在 2026 年春季出现,专门针对 AI 工具的凭证;最新变种 ChainDrop 在 2026 年 8 月出现,利用合法签名管道绕过验证。

为什么说来源证明(provenance)不足以防御供应链攻击?

来源证明(如 SLSA)只能证明包来自哪里,但不能证明该提交是否应该存在。ChainDrop 通过入侵合法账户并利用其签名管道发布恶意包,获得了有效的来源证明,因此来源证明无法防止此类攻击。

🏷️

标签

➡️

继续阅读