返回论坛

NPM供应链投毒深度分析:Shai-Hulud攻击手法再现

查找币 漏洞披露 安全研究 Web3安全 区块链安全

查找币安全研究院

钱包恢复评估 | 链上取证分析 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交完整私钥或助记词。

查看研究院 研究报告中心
**作者:查找币安全团队** ## 事件概述 2025年11月,NPM生态系统再次遭受大规模供应链投毒攻击。本次攻击与2025年9月曝光的Shai-Hulud攻击事件高度相似,攻击者通过植入恶意NPM包,窃取开发者的密钥、API凭据及环境变量等敏感信息,并将窃取的数据上传至攻击者控制的GitHub公开仓库。 **查找币安全团队**自主研发的Web3威胁情报与动态安全监控系统第一时间捕获了该攻击活动,并成功提取恶意样本进行深度分析。本文将对攻击技术细节进行全面披露,并提供针对性防护建议。 ## 攻击载体分析 以恶意包 `@asyncapi/php-template@0.1.1` 为例,对比其旧版本 `0.1.0`,我们发现新版本新增了两个关键文件: - `setup_bun.js` — 攻击初始化脚本 - `bun_environment.js` — 经过高度混淆的恶意载荷 ### 触发机制 攻击者在 `package.json` 的 `scripts` 字段中插入了 `preinstall` 钩子: ```json { "scripts": { "preinstall": "node setup_bun.js" } } ``` 当开发者执行 `npm install` 时,`preinstall` 脚本会在依赖安装前自动触发,无需用户交互即可执行恶意代码。 ### 执行流程 1. **检查Bun运行时**:`setup_bun.js` 首先检测系统是否已安装Bun JavaScript运行时 2. **自动安装Bun**:若未安装,脚本会从官方渠道自动下载并安装Bun,并配置环境变量 3. **执行恶意载荷**:使用Bun执行高度混淆的 `bun_environment.js` 文件 ## 恶意载荷深度分析 经过反混淆处理,我们还原了恶意脚本的核心功能架构。主入口函数 `aL0()` 负责协调整个攻击流程,主要包含以下模块: ### 1. 多维度凭据窃取 攻击脚本实现了针对三大主流云服务商的定向凭据窃取模块: #### AWS凭据窃取 - **`runSecrets()`**:遍历所有可访问的云凭据及AWS区域,实现最大化扫描范围 - **`listAndRetrieveAllSecrets()`**:在指定凭据与区域内进行深度挖掘,导出所有Secret的明文内容(包括 `SecretString` 和 `SecretBinary`) - **`enumerateValidCredentials()`**:从环境变量、配置文件、AWS CLI登录凭证等多个来源全面搜集可用的云服务密钥 #### GCP凭据窃取 - 针对GCP的 `listAndRetrieveAllSecrets()` 方法实现: - 根据Project ID列出项目下所有Secret - 定位每个Secret的最新版本 - 调用 `accessSecretVersion` API读取明文内容 #### Azure凭据窃取 - 针对Azure的 `listAndRetrieveAllSecrets()` 方法实现: - 通过Azure Resource Manager扫描整个订阅,发现所有Key Vault - 使用窃取的凭据连接每个Vault - 枚举所有Secrets并调用 `getSecret` 获取明文值 ### 2. 利用安全工具进行攻击 攻击脚本中实现了 `extractAndInstall()` 方法,用于解压并提取 **TruffleHog** 二进制文件。TruffleHog本是一款用于检测代码库中泄露凭据的安全工具,但攻击者将其逆向利用,对受害者的整个文件系统进行扫描,从而发现更多敏感信息。 ### 3. NPM供应链传播机制 `updatePackage()` 函数实现了完整的供应链传播流程: 1. **获取发布权限**:使用窃取的NPM Token 2. **下载合法包源码**:下载受害者拥有发布权限的合法NPM包 3. **植入恶意代码**:修改 `package.json` 的 `scripts` 字段,插入恶意 `preinstall` 脚本 4. **版本号递增**:自动将包版本号加1,触发用户的自动更新机制 5. **发布恶意包**:将篡改后的包推送至NPM官方仓库 ### 4. 数据外泄与C2通信 攻击脚本在完成信息窃取后,会利用窃取的GitHub Token,在攻击者控制的GitHub账号下创建公开仓库,并将所有收集到的系统信息和敏感数据打包上传,供后续利用。 ## 受影响包及SHA-256哈希 查找币安全团队已识别并标记以下恶意包(部分列表): | 包名 | SHA-256 | |------|---------| | zapier-async-storage-1.0.2.tgz | `5532148d23d199ca4697b8e69599908e1b68d425f60e14b01ebf8df15793b738` | | zapier-platform-legacy-scripting-runner-4.0.3.tgz | `7f2c195b2240158fbf01d1e862a9e9e52e12e2e36b40ec1b52b01cdad6526e6c` | | zuper-cli-1.0.1.tgz | `05bc1e7d0b97fe8a8707958cbaa7f09043d1c727d01b860add75a9b646136d04` | | zuper-sdk-1.0.57.tgz | `a4e35b4d2b8b8e884f7fd041d8c9893e0ee4ad5155bb4e82acd7845ac1290c41` | | zuper-stream-2.0.9.tgz | `2ebe077dde54ae31aa8b9` | ## 威胁评估与防护建议 ### 攻击影响等级:**严重** 本次攻击具有以下显著特征: - **零点击触发**:仅需执行 `npm install` 即可触发 - **自动化传播**:利用窃取的NPM Token实现供应链扩散 - **多平台覆盖**:同时针对AWS、GCP、Azure三大云服务商 - **数据全面窃取**:涵盖凭据、密钥、环境变量、文件系统等 ### 防护建议 #### 立即行动 1. **检查依赖**:使用 `npm audit` 或第三方安全工具扫描项目依赖 2. **验证包完整性**:对比已安装包的SHA-256哈希与官方发布值 3. **轮换凭据**:立即轮换所有可能暴露的NPM Token、GitHub Token及云服务密钥 4. **审计GitHub仓库**:检查是否有异常公开仓库包含敏感信息 #### 长期防护 1. **启用双因素认证**:为NPM、GitHub及云服务账号启用2FA 2. **限制Token权限**:使用最小权限原则配置NPM发布Token 3. **锁定依赖版本**:避免使用通配符版本号,固定依赖版本 4. **实施依赖审查**:在CI/CD流程中集成依赖安全检查 5. **监控异常行为**:部署实时威胁监控系统,及时发现异常网络活动 ## 总结 本次Shai-Hulud攻击手法重现,再次警示我们供应链安全的严峻性。攻击者通过精心设计的恶意包,实现了从凭据窃取到自动化传播的完整攻击链。开发团队应建立全面的安全防护体系,包括依赖审查、权限管理和实时监控。 查找币安全团队将持续监控此类威胁,并及时发布相关情报。建议各项目团队密切关注官方安全公告,及时更新安全策略。 --- *本文由查找币安全团队整理发布*
在论坛中查看和回复