NPM 生态系统遭受了迄今为止波及范围最广的供应链攻击之一,超过 187 个流行软件包被高级恶意软件入侵。该恶意软件能够自我传播和自动收集凭证。此次攻击影响了数百万周下载量的软件包,包括 angulartics2、ngx-toastr 和 @ctrl/tinycolor,表明网络犯罪分子正在改进其策略,以创造出能够在软件供应链中自主传播的「蠕虫式」恶意软件。本博客将全面分析此次攻击的方法、恶意负载的技术能力,以及与这次前所未有的供应链入侵相关的入侵指标 (IOC)。
Mend.io 对我们的开发环境和产品进行了内部审计,可以确认我们未受此次零日事件的影响。
NPM 供应链漏洞概述
攻击始于对不同组织的多个软件包维护者账户的协同入侵。攻击者成功渗透了维护者的账户,从而将恶意代码注入到他们的软件包中。 此次攻击之所以特别危险,在于该恶意软件能够通过 npm 生态系统自我传播,自动修改 package.json 文件,并使用合法的维护者凭证重新发布特洛伊木马化的版本。
通过自动化扩大攻击面
与需要手动干预的传统供应链攻击不同,这种恶意软件像真正的「蠕虫」一样运作,具备自动传播能力。恶意代码会扫描受感染环境中的 npm 项目,自动修改其依赖项,并将其与嵌入的恶意软件一起重新发布,从而形成指数级的增长模式,能够迅速危及整个软件生态系统。
恶意软件分析
该恶意软件负载设计用于在多种环境中执行,包括开发人员工作站、CI/CD 管道和生产服务器,从而最大程度地发现和窃取凭证。
初始执行和持久化
恶意软件通过 npm 软件包生命周期挂钩执行,通常在软件包安装或更新过程中触发。 ### 多阶段凭证收集 恶意软件通过几个协调的阶段运作,每个阶段都旨在最大化凭证发现的同时,在不同环境类型中保持隐蔽。
第一阶段:环境侦察和 TruffleHog 部署 恶意软件首先会下载并执行合法的开源凭证扫描工具 TruffleHog,以系统地在受感染的系统中搜索暴露的秘密信息。
第二阶段:云端元数据端点利用 恶意软件专门针对云端环境元数据端点,以提取云端服务凭证和实例信息。
第三阶段:GitHub 仓库操纵 恶意软件在受感染的 GitHub 账户下创建名为「Shai-Hulud」的仓库,用于存储和组织被盗的凭证,使攻击者可以轻松获取。
先进的传播机制
也许这种恶意软件最令人担忧的方面是其自我传播能力,这使其无需人工干预即可在 npm 软件包之间自主传播。
自动化软件包修改 恶意软件会扫描受感染环境中的 package.json 文件,并自动修改它们以包含恶意依赖项或生命周期挂钩。
利用 GitHub Actions 恶意软件利用 GitHub Actions 来自动化凭证窃取,并在仓库更新过程中保持持久性。
影响和生态系统启示 这次 npm 供应链攻击标志着威胁行为者能力的显著演进,对软件开发生态系统构成了前所未有的风险: ### 指数级的传播潜力 蠕虫般的行为使其能够在 npm 生态系统中呈指数级增长。每个受感染的软件包都可能危及多个下游软件包,产生连锁反应,可在数小时内影响数千个项目。
针对开发人员的攻击 通过专门针对开发人员环境,此次攻击危及了那些通常拥有较高权限并能访问多个系统、仓库和云端环境的个人,从而使每次感染的潜在影响最大化。
大规模自动化凭证收集 TruffleHog 的整合使得在整个开发环境中系统地发现凭证成为可能,可能暴露: - GitHub 个人访问令牌 - 云端服务凭证(AWS、GCP、Azure) - 数据库连接字符串 - API 密钥和身份验证令牌 - SSH 私钥和证书
CI/CD 管道污染 恶意软件修改 package.json 文件并重新发布软件包的能力意味着它可以污染 CI/CD 管道,可能影响生产部署,并在已部署的应用程序中创建持久的后门。 ## 归因和威胁态势 此次攻击的特征与 S1ngularity/nx 威胁组织的特征一致,该组织以其先前复杂的 npm 供应链攻击而闻名。使用「Shai-Hulud」仓库命名惯例与之前的攻击模式相符,表明该威胁行为者仍在持续活动。
攻击复杂度指标
-
先进的自动化能力
-
多阶段负载设计
-
云原生环境感知
-
整合 GitHub Actions
-
自我传播的蠕虫行为
结论
本次攻击中所分析的复杂的自我传播恶意软件,代表了供应链威胁能力的显著升级。通过结合自动化传播、全面的凭证收集以及对云原生环境的利用,该恶意软件展示了威胁行为者如何适应现代开发实践和基础设施。 这一事件凸显了供应链安全的极端重要性,以及在整个软件开发生命周期中采取全面安全措施的必要性。随着软件包生态系统的持续增长和开发实践日益云原生化,我们可以预见到更多针对现代软件开发基础元素的复杂攻击。
缓解建议
为防范类似的供应链攻击和自动化凭证收集,开发人员和组织应实施以下措施:
供应链安全措施
-
使用软件包锁定文件以防止意外的版本更新
-
为关键应用程序实施私有 npm 注册表
-
定期审计和轮换维护者访问凭证
-
启用分支保护规则,要求进行拉取请求审查
-
对所有提交实施强制性安全扫描
-
监控意外的仓库创建或可见性更改
随着供应链攻击变得更加自动化和复杂,积极的安全措施和全面的监控变得至关重要。npm 生态系统的庞大规模以及开发社区对第三方软件包的依赖,使得这一攻击向量对网络犯罪分子极具吸引力,需要整个软件开发社区提高警惕并加大安全投入。