过去一年中,npm生态系统遭受的攻击激增,揭示了软件供应链威胁格局的重大转变。
曾经粗糙的域名抢注攻击已经演变为协调有序、基于凭证的入侵行为,专门针对维护者、CI管道以及支撑现代开发的可信自动化系统。
对于安全负责人而言,这些不再是小众的开发者失误,而是直接通往生产系统、云基础设施和数百万下游应用程序的路径。
攻击目标的转变
攻击目标不再是欺骗个别开发者,而是悄悄继承他们的权限,以及随之而来的分发影响力。
"NPM是一个极具吸引力的攻击目标,因为它是世界上最大的JavaScript包仓库,也是软件分发的关键控制点,"企业安全集团网络安全实践总监梅琳达·马克斯表示。"安全团队需要了解依赖关系,并建立定期审计和风险缓解的方法。"
几乎每个企业都直接或间接依赖npm。根据IDC数据,93%的组织使用开源软件,而npm仍然是JavaScript生态系统中最大的包注册表。IDC的DevSecOps研究经理凯蒂·诺顿表示:"攻破一个热门包可以立即影响数百万下游用户和应用程序",将一个被盗凭证变成她所说的分发"万能钥匙"。
然而,规模只是风险的一部分。诺顿指出,现代开发管道安全保护方式的结构性弱点放大了这种暴露。"个人开源维护者往往缺乏企业团队依赖的安全资源,使他们容易受到社会工程攻击,"她说。"CI/CD运行器和开发者机器经常处理存储在环境变量或配置文件中的长期密钥,很容易被恶意软件收集。"
"构建系统也倾向于优先考虑速度和可靠性而非安全可见性,导致监控有限,为获得初始访问权限的攻击者提供了长时间的潜伏期,"诺顿补充道。
虽然安全负责人无法通过补丁完全解决这个问题,但他们可以减少暴露。专家们一致指出相同的优先事项:将CI运行器视为生产资产,积极轮换和限定发布令牌范围,除非必要否则禁用生命周期脚本,以及将依赖项固定到不可变版本。
"这些npm攻击针对的是软件依赖项的预安装阶段,因此典型的代码扫描软件供应链安全方法无法应对这类攻击,"马克斯说。检测需要运行时分析和异常检测,而不是基于签名的工具。
攻击策略的演进
多年来,域名抢注定义了npm威胁模型。攻击者发布名称与热门库非常接近的包,如"lodsash"、"expres"、"reacts",然后等待自动化或人为错误完成其余工作。影响通常有限,修复也很直接。
这种模式在2025年开始被打破。
攻击者不再冒充热门包,而是越来越多地攻破真实包。伪装成npm本身的钓鱼活动收集维护者凭证。然后使用被盗令牌发布木马化更新,这些更新对每个下游消费者来说都显得合法。Shai-Hulud活动说明了问题的规模,影响了数万个仓库,并利用被攻破的凭证在整个生态系统中自我传播。
Socket.dev的网络安全研究员库什·潘迪亚表示:"npm生态系统已成为现代开发的皇冠明珠。当一个多产的维护者被攻破时,爆炸半径涵盖数百个下游项目。"
结果是一个安静但强大的转变:攻击者不再需要创建令人信服的假货。他们可以通过可信渠道传播恶意软件,像任何常规更新一样进行签名和版本控制。
CI/CD环境中的威胁
现代npm攻击越来越多地在CI/CD环境内激活,而不是在开发者笔记本电脑上。长期被视为良性设置助手的安装后脚本,成为了能够在GitHub Actions或GitLab CI内自动运行的执行载体。一旦进入运行器,恶意包可以读取环境变量、窃取发布令牌、篡改构建工件,甚至以受害者身份推送额外的恶意版本。
"开发者环境和CI运行器现在比终端用户机器更有价值,"潘迪亚指出。"它们通常拥有更广泛的权限、访问密钥的能力,以及将代码推送到生产环境的能力。"
2025年中期观察到的几个活动明确具有CI感知能力,仅在检测到自动化构建环境时才触发。一些包含延迟执行或自过期载荷,在最大化凭证盗窃的同时最小化取证可见性。
对于企业而言,这代表了根本性的风险转变。CI系统通常以比任何个人用户更高的权限运行,但监控却远不如个人用户严格。"它们通常使用较弱的默认安全设置:长期发布令牌、过度宽松的CI密钥、对生命周期脚本和包元数据的隐式信任,以及构建之间的隔离很少,"潘迪亚指出。
根据IDC研究,组织仅将约14%的应用安全预算分配给供应链安全,其中只有12%将CI/CD管道安全识别为首要风险。
攻击技术的复杂化
随着防御者在发现可疑包方面的改进,攻击者也在适应。
最近的npm活动使用不可见的Unicode字符来隐藏依赖项,多阶段加载器仅在环境检查后获取真实载荷,以及旨在规避下架的区块链托管命令控制参考。其他攻击部署了类似蠕虫的行为,使用被盗凭证大规模发布额外的恶意包。
面对这种级别的攻击技巧,手动审查已基本无效。"你可以浏览index.js并发现恶意eval()的日子已经过去了,"潘迪亚说。
"现代包将恶意逻辑隐藏在编码层、延迟执行和环境指纹识别之后。"诺顿呼应了这一担忧,指出这些攻击在行为层面运作,静态扫描在此方面存在不足。"混淆技术使恶意逻辑难以与大型JavaScript项目中的合法复杂性区分开来,"她说。"CI感知载荷和安装后脚本引入的行为只在特定环境条件下才会显现。"
Q&A
Q1:npm供应链攻击为什么变得如此危险?
A:npm是世界最大的JavaScript包仓库,93%的组织使用开源软件。攻破一个热门包可以立即影响数百万下游用户和应用程序,将一个被盗凭证变成分发的"万能钥匙"。攻击者不再需要创建假包,而是直接攻破真实包,通过可信渠道传播恶意软件。
Q2:现代npm攻击与传统域名抢注攻击有什么区别?
A:传统攻击主要是发布名称相似的假包等待用户误用,影响有限。现代攻击则通过钓鱼获取维护者凭证,直接攻破真实包发布木马化更新,专门针对CI/CD环境激活,使用复杂的混淆技术和延迟执行,具有自我传播能力。
Q3:企业如何防护npm供应链攻击?
A:专家建议将CI运行器视为生产资产,积极轮换和限定发布令牌范围,除非必要否则禁用生命周期脚本,将依赖项固定到不可变版本。由于攻击针对预安装阶段,需要运行时分析和异常检测而非传统代码扫描。
热门跟贴