PhantomRaven恶意软件
网络安全研究人员发现了一种针对 npm 生态系统的活跃软件供应链攻击。他们已识别出 100 多个恶意软件包,这些软件包能够直接从受感染的机器窃取敏感的开发者凭证,包括身份验证令牌、CI/CD 密钥和 GitHub 凭证。
该活动代号为 PhantomRaven,于 2025 年 8 月首次出现。自那时起,它已扩展到 126 个 npm 库,并获得了超过 86,000 次安装,这表明这些恶意软件包的传播和采用速度非常快。
目录
恶意包裹悄无声息地逃过检测
被标记的几个软件包包括:
- op-cli-installer – 486 次下载
- 未使用的导入 - 1,350 次下载
- badgekit-api-client – 下载量:483
- polyfill-corejs3 – 475 次下载
- eslint-comments – 下载量:936
PhantomRaven 的隐蔽性尤其体现在其对远程动态依赖 (RDD) 的使用上。这些恶意软件包并非从官方 npm 注册表中获取代码,而是指向一个自定义的 HTTP URL (packages.storeartifact.com)。这使得 npm 可以从不受信任的外部来源检索依赖项,从而有效地绕过了 npmjs.com 的保护机制。
传统的安全扫描器和依赖项分析工具无法检测到这些 RDD,因为自动化系统会将这些软件包视为“0 个依赖项”。
攻击原理
攻击链从开发者安装看似无害的软件包之一开始。关键要素包括:
安装前钩子执行:该软件包包含一个安装前生命周期脚本,该脚本会自动执行主有效载荷。
远程有效载荷检索:该脚本从攻击者控制的服务器获取恶意依赖项。
数据泄露:恶意软件一旦执行,就会扫描开发人员的环境中的电子邮件地址,收集 CI/CD 环境详细信息,对系统进行指纹识别(包括公共 IP),并将数据发送到远程服务器。
攻击者可以随意修改有效载荷,最初提供无害代码以逃避检测,然后在软件包被广泛采用后推送恶意更新。
利用人类和人工智能的盲点
软件包名称的选择是经过精心设计的。攻击者利用一种名为“域名抢注”(slopsquatting)的策略,即大型语言模型(LLM)会生成一些并不存在但听起来合情合理的软件包名称。开发者可能会因为这些软件包名称的逼真而信任它们,从而忽视隐藏的威胁。
正如研究人员指出的那样,PhantomRaven 凸显了攻击者日益增长的复杂程度:
- 远程动态依赖项会绕过静态分析。
- AI生成的软件包名称利用了开发者的信任。
- 生命周期脚本无需用户交互即可自动执行。
此次攻击活动凸显了恶意行为者如何找到新的方法来隐藏开源生态系统中的代码,利用传统安全工具的漏洞。
为什么 npm 是首要目标
npm 生态系统发布软件包的便捷性,以及预安装、安装和后安装脚本的自动执行,使其成为主要攻击目标。攻击者可以将恶意行为隐藏在生命周期脚本中,而开发者往往对此毫不知情。这凸显了现代开发环境中提高警惕和采取健全安全措施的必要性。