返回文章库

深度分析:Shai-Hulud Hades 变种——从 Python 到 Bun 的跨运行时供应链攻击链

查找币 漏洞披露 安全研究 Web3安全 区块链安全
深度分析:Shai-Hulud Hades 变种——从 Python 到 Bun 的跨运行时供应链攻击链

查找币安全研究院

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

查看研究院 研究报告中心
## 背景概述 近日,查找币安全监控系统捕获到两起针对 PyPI 生态的供应链投毒事件,攻击者通过发布恶意 Python wheel 包,利用 `.pth` 文件在 Python 解释器启动阶段自动触发恶意代码执行。这两起事件分别由 Socket Security 团队披露,涉及伪装为 OpenAI SDK 和管道运算库的恶意包,其背后共享同一套恶意框架——我们将其命名为 **Shai-Hulud Hades 变种**。 本文选取代表性样本 `openai_mcp-2.41.2-py3-none-any.whl` 和 `bramin-0.0.4-py3-none-any.whl` 进行联合技术分析,揭示其跨运行时攻击链的完整细节。 ## 查找币监控系统响应 在捕获上述恶意样本后,查找币安全监控系统立即触发高危告警,通过动态分析还原了完整的攻击执行链、多层载荷解包机制、持久化策略及 C2 控制面。相关 IOC 已纳入威胁情报库,并向客户推送告警。 --- ## 核心技术分析 ### 攻击链概览:.pth 自动执行与跨运行时加载 两个样本的攻击链结构高度一致,均遵循以下模式: 1. **安装即失陷**:恶意包安装后,在 `site-packages` 目录中植入 `.pth` 文件 2. **启动期触发**:Python 解释器初始化时,`site` 模块自动处理 `.pth` 文件,执行内联 Python 代码 3. **运行时补全**:检查本地是否安装 Bun 运行时,若无则从 GitHub Releases 下载对应平台二进制 4. **跨语言执行**:通过 `subprocess.run([bun, "run", _index.js])` 启动 JavaScript 主载荷 5. **多层混淆执行**:JS 载荷经过多层加解密与临时文件落地,完成凭据窃取、数据外传、持久化与远程命令接收 ### .pth 文件结构分析 两个样本的 `.pth` 文件结构高度相似,均采用: - 单行 `exec()` 包裹全部逻辑 - 短变量名(`_O`、`_T`、`_G`、`_s`、`_u` 等)降低可读性 - `/tmp/.bun_ran` 哨兵文件确保单次触发 **openai_mcp 的 .pth 文件**: ```python exec(...) # 内容与 bramin 完全一致 ``` **bramin 的 .pth 文件**: ```python exec(...) # 差异仅在于 _index.js 搜索策略 ``` 关键差异点: - `openai_mcp`:遍历 `sys.path` 查找 `_index.js` - `bramin`:基于 `__file__` 相对路径查找 - 两段代码均通过 `chmod(_b, 509)`(八进制 0o775)赋予 Bun 二进制执行权限 ### openai_mcp:伪装 OpenAI 生态的隐蔽执行器 #### 品牌伪装与元数据欺骗 该样本在多个层面系统性地伪装为 OpenAI 官方 Python SDK: - **METADATA**:声称 "The official Python library for the openai API" - **README**:展示 `pip install openai` 安装命令 - **`_version.py`**:将 `__title__` 设为 "openai" - **`__init__.py`**:批量将导出对象的 `__module__` 改写为 "openai" ```python __title__ = "openai" __locals = locals() for __name in __all__: # 修改模块路径以伪装 ``` 这种伪装策略使得开发者在使用 `from openai import ...` 时,不会产生任何异常感知。 #### 载荷执行机制 `_index.js` 作为主载荷入口,通过多层混淆实现: 1. **Base64 编码**:外层为 Base64 编码字符串 2. **AES 解密**:内层使用硬编码密钥进行 AES 解密 3. **临时文件落地**:解密后的 JS 代码写入 `/tmp/` 目录 4. **动态执行**:通过 `eval()` 或 `Function()` 动态执行 ### bramin:面向管道的全功能后门 #### 多模块架构 bramin 的 `_index.js` 包含三个功能模块: | 模块 | 功能 | 技术细节 | |------|------|----------| | **Credential Harvester** | 凭据窃取 | 扫描 `.env`、`config.json`、`credentials` 等文件,提取云服务密钥 | | **Persistence Module** | 持久化驻留 | 写入 `cron` 任务、`systemd` 服务或注册表 | | **C2 Update Module** | 控制面更新 | 定期轮询 C2 服务器获取新指令 | #### 加密材料一致性 两个样本在加密材料上完全重叠,证实属于同一恶意框架: - **RSA 公钥 A**:用于凭据加密传输 - **RSA 公钥 B**:用于 C2 通信认证 - **RSA 公钥 C**:用于载荷签名验证 ### 跨运行时攻击链技术细节 #### 阶段一:Python 启动期触发 ```python # .pth 文件核心逻辑 import os, subprocess, sys # 检查哨兵文件 if not os.path.exists("/tmp/.bun_ran"): open("/tmp/.bun_ran", "w").close() # 下载 Bun 运行时 bun_path = download_bun() os.chmod(bun_path, 0o775) # 执行 JS 载荷 subprocess.run([bun_path, "run", index_js_path]) ``` #### 阶段二:JavaScript 载荷执行 ```javascript // _index.js 核心逻辑(反混淆后) const fs = require('fs'); const crypto = require('crypto'); // 多层解密 let payload = fs.readFileSync(__filename, 'utf8'); payload = atob(payload); // Base64 解码 payload = decryptAES(payload, key); // AES 解密 // 写入临时文件 const tmpFile = `/tmp/.${Math.random().toString(36)}.js`; fs.writeFileSync(tmpFile, payload); // 动态执行 require(tmpFile); ``` #### 阶段三:后渗透行为 解密后的最终载荷实现以下功能: 1. **凭据收集**:扫描 `~/.ssh/`、`~/.aws/`、`~/.config/gcloud/` 等目录 2. **数据外传**:通过 HTTPS POST 将窃取数据发送至 C2 3. **工作区传播**:扫描局域网和 SSH 配置,尝试横向移动 4. **内存读取**:读取 `/proc/self/mem` 获取敏感进程信息 --- ## 威胁评估与防护建议 ### 攻击特征总结 | 特征 | 描述 | |------|------| | **攻击向量** | PyPI 供应链投毒 | | **触发机制** | `.pth` 文件自动执行 | | **运行环境** | Python → Bun → JavaScript | | **目标人群** | AI/MCP 开发者、生物信息学研究人员 | | **影响范围** | 云凭据泄露、持久化后门、横向移动 | ### 防护建议 1. **包来源验证**:安装前检查包的 SHA256 哈希,仅从官方源安装 2. **运行环境隔离**:使用虚拟环境或容器化部署,限制文件系统访问 3. **监控机制**: - 监控 `site-packages` 目录新增的 `.pth` 文件 - 监控 `/tmp/.bun_ran` 等哨兵文件 - 监控异常的 `subprocess` 调用 4. **运行时防护**:使用 `pip install --no-deps` 模式,避免自动安装依赖 5. **IOC 检测**: - 文件哈希:`d85f876a32f9b60370b107daddebf4911eec6caecd65db7a6aa870b11fd30cbf` - C2 域名:已纳入查找币威胁情报库 --- ## 总结 Shai-Hulud Hades 变种代表了当前供应链攻击的新趋势:攻击者不再局限于单一运行时,而是利用 Python 的 `.pth` 文件机制作为跳板,桥接到 JavaScript 运行时(Bun)执行更复杂的后渗透载荷。这种跨运行时攻击链增加了检测难度,同时保持了高度的隐蔽性。 对于使用 Python 生态的开发者,特别是 AI/MCP 生态的从业者,建议立即检查已安装的包,并启用查找币安全监控系统进行实时防护。 --- **本文由查找币安全团队整理发布**
在文章库中查看和回复