فترة تجربة مجانية لمدة 7 أيام على جميع الباقات · مطلوب بريد الشركة الإلكتروني · لا توجد رسوم لمدة 7 أيامابدأ التجربة ←
جميع المقالات
SecOps15 أغسطس 2025 6 دقيقة قراءة

静默的供应链“杀戮开关”:npm 的凭证窃取危机

最近针对广泛使用的 npm 包的供应链攻击浪潮,暴露了现代软件开发中的一个关键漏洞。攻击者正在将窃取凭证的代码注入看似无害的补丁发布中,绕过传统的安全控制,并以惊人的规模危及下游应用程序。CISO 和安全工程师必须了解这种不断演变的威胁的机制和影响。

مشاركةXLinkedIn
静默的供应链“杀戮开关”:npm 的凭证窃取危机

发生了什么

在过去一年发生的一系列事件中,几个对各行业数千个应用程序至关重要的知名 npm 包遭到入侵。攻击者未经授权访问维护者账户,然后悄悄地将恶意代码注入到次要补丁版本中。这些代码旨在窃取环境变量、API 密钥和其他敏感凭证,并通过自动化依赖更新迅速传播。

影响是即时且广泛的。一家主要的 QSR(快速服务餐厅)依赖其中一个受损包为其面向客户的移动应用程序提供服务,其内部 API 令牌被窃取。同样,一家财富 500 强零售商因依赖更新暴露的 CI/CD 凭证受损,导致其暂存环境遭到未经授权的访问。

这些攻击并非是利用 Node.js 或 npm 本身的新漏洞的零日攻击。相反,它们利用了针对包维护者的社会工程、弱身份验证或内部威胁。恶意负载通常经过混淆,如果没有深入的代码分析或运行时行为监控,很难检测到。

为什么这种模式会反复出现

现代软件开发严重依赖开源组件,形成了一个庞大且相互关联的供应链。平均而言,一个应用程序会引入数百甚至数千个直接和间接依赖项。每一个都代表了一个潜在的攻击向量,一个可能被利用的单点故障。

开发速度和交付功能的压力往往优先于对每个依赖更新进行详尽的安全审查。开发人员经常运行 npm updateyarn upgrade,而没有仔细审查补丁版本中的每一行代码,认为次要版本升级是安全的。这种信任模型本质上是可利用的。

此外,包管理工具虽然在开发方面功能强大,但通常缺乏对发布中行为异常或可疑代码更改的集成实时安全分析。静态分析工具可能会捕获一些明显的恶意软件,但复杂的凭证窃取逻辑通常会逃避基于签名的检测。

攻击者的逐步策略

第 1 步:目标识别和侦察

攻击者首先识别广泛采用的流行 npm 包,特别是那些对企业应用程序至关重要的包。他们优先考虑只有一个维护者或小团队的包,这使得社会工程或账户入侵更容易。他们还会寻找可以直接访问敏感环境(例如,构建工具、部署脚本)的包。

第 2 步:维护者账户入侵

这是关键。攻击者使用网络钓鱼、凭证填充或利用弱密码来控制包维护者的 npm 账户。在某些情况下,他们可能会利用被盗的会话 cookie,甚至在维护者心怀不满或被收买的情况下利用内部访问权限。MFA 绕过技术也越来越常见。

第 3 步:恶意代码注入

一旦获得控制权,攻击者就会将混淆代码注入到包中。这些代码通常设计成看起来无害,可能是一个次要的实用函数或一个日志语句。其主要目的是收集环境变量(例如,process.env)、API 密钥、云凭证或应用程序可访问的其他秘密。

第 4 步:补丁发布和传播

攻击者随后发布一个新的补丁版本(例如,从 1.0.01.0.1)。这个次要版本增量至关重要;它向自动化更新系统和开发人员表明更改是低风险的。下游应用程序,通常配置为自动补丁更新,不知不觉地引入了恶意代码。传播迅速而广泛。

第 5 步:数据外泄和利用

当使用受损包时,被注入的代码会执行。它会收集敏感数据并将其泄露到攻击者控制的端点,通常伪装成合法流量(例如,虚假的分析端点)。通过这些被盗凭证,攻击者可以访问云环境、内部 API、数据库或 CI/CD 管道,从而导致进一步的泄露或数据窃取。

防御者错过了什么

许多组织依赖传统的边界安全和端点检测,这些对于这种类型的供应链攻击是无效的。恶意代码由合法维护者签名,通过官方渠道分发,并在应用程序本身的受信任环境中执行。从应用程序的角度来看,这是一次“内部作业”。

“我们对第三方依赖项的盲目信任是现代软件开发中最大的未解决风险。我们正在大规模导入未知代码,通常没有经过充分的审查。”

此外,静态应用程序安全测试 (SAST) 工具通常难以识别混淆代码或细微逻辑更改中的恶意意图。动态应用程序安全测试 (DAST) 可能会在运行时检测到异常网络流量,但通常为时已晚,即在初始数据外泄发生之后。软件组成分析 (SCA) 工具非常适合识别已知漏洞,但对于新注入的、以前未知的恶意代码效果不佳。

一个实用的防御清单

  • 实施严格的依赖项锁定: 避免在 package.json 中使用宽泛的版本范围(^~)。严格锁定精确版本或使用锁定文件(package-lock.jsonyarn.lock),并将其提交到源代码管理中。通过受控流程定期审计和更新依赖项。
  • 强制维护者使用多因素身份验证 (MFA): 要求所有 npm、GitHub 和包维护者使用的其他开发平台账户进行强 MFA。这是防止账户泄露的第一道防线。
  • 自动化依赖项审查: 集成工具,对依赖项更新执行深度代码分析,标记引入新网络调用、文件系统访问或混淆代码的更改。寻找行为变化,而不仅仅是已知的签名。
  • 运行时应用程序自保护 (RASP): 部署 RASP 解决方案,实时监控应用程序行为,并阻止可疑操作,例如尝试访问环境变量或将数据泄露到未知端点。
  • 构建环境的最小权限: 确保 CI/CD 管道和构建代理以绝对必要的最小权限运行。受损的构建环境不应拥有对生产凭证的广泛访问权限。
  • 供应链安全工具: 利用专业的供应链安全平台,跟踪来源、验证完整性,并持续监控开源组件是否存在可疑活动或维护者更改。
  • 定期审计关键依赖项: 对于您最关键的依赖项,进行定期的手动代码审查或聘请第三方安全研究人员来审查其代码库是否存在后门或漏洞。

现代攻击性测试本可以如何发现这一点

现代攻击性测试超越了漏洞扫描。它持续探测组织的攻击面,包括其软件供应链,以寻找可利用的弱点。对于这种事件模式,一个强大的攻击性测试平台将与 CI/CD 管道集成,分析每个依赖项更新是否存在行为异常和潜在的凭证泄露。

一旦检测到可疑的补丁发布,这样的平台将自动生成一个可执行的概念验证 (PoC),演示恶意代码如何从应用程序的运行时窃取特定的环境变量或 API 密钥。这种即时、可操作的洞察,以及重现步骤,将在脆弱代码到达生产环境之前提醒安全团队,有效地将潜在的泄露转化为已预防的事件。

接下来要关注什么

供应链攻击的复杂性将继续升级。预计将看到更多针对小众但关键的基础设施包的攻击。向 WebAssembly (Wasm) 和其他沙盒执行环境的转变可能会提供一些缓解措施,但攻击者会适应,寻找新的方法来突破或利用沙盒本身。

此外,重点将不仅仅局限于代码。配置文件、Docker 镜像甚至机器学习模型都将成为新的注入和入侵目标。组织必须对他们的软件供应链采取整体视图,将从开发到部署的每个组件都视为潜在的攻击向量。软件生态系统中的信任之战远未结束。

مشاركةXLinkedIn

قراءة ذات صلة