Hades活动:针对PyPI的大规模供应链攻击分析

admin 2026-06-12 05:18:27 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: Hades活动是2026年6月针对PyPI的大规模供应链攻击,涉及37个恶意Python包和60个wheel文件。攻击采用.pth启动钩子、恶意原生扩展和分离式加载器三种机制,通过Bun运行时执行高度混淆的JavaScript载荷,实现跨平台凭证窃取、蠕虫式传播和数据外渗。关键风险包括AI辅助对抗、擦除器威慑机制和SLSA信任链破坏,建议立即隔离环境、轮换凭证并实施CI/CD管道加固。 综合评分: 85 文章分类: 威胁情报,漏洞分析,供应链安全,恶意软件,安全运营


cover_image

Hades 活动:针对PyPI的大规模供应链攻击分析

原创

威胁情报中心 威胁情报中心

奇安信威胁情报中心

2026年6月10日 14:10 北京

在小说阅读器读本章

去阅读

一、事件概述

2026 年 6 月 7 日至 8 日,一场代号为 “Hades 活动” 的大规模软件供应链攻击席卷 Python 包索引(PyPI)。攻击者在 PyPI 上发布了 60 个恶意 wheel 文件,涉及 37 个 Python 包,利用 Python 的 .pth 启动钩子和原生扩展机制,在开发者机器和 CI/CD 环境中植入高度混淆的 JavaScript 凭证窃取器。

本次攻击的核心特点包括:

  • 跨运行时攻击:恶意 Python 包下载并执行 Bun(JavaScript 运行时)载荷,这种跨语言、跨运行时的攻击方式极难被传统安全工具检测。
  • 三大投递分支.pth 启动钩子、恶意原生扩展(.abi3.so)、以及分离式加载器。
  • AI 辅助分析对抗:载荷开头包含伪造的提示注入内容,专门欺骗 LLM 驱动的安全扫描器。
  • 擦除器威慑机制:安装名为 gh-token-monitor 的守护进程,一旦检测到 GitHub 令牌被撤销,将触发破坏性擦除命令。
  • 蠕虫式传播:利用窃取的凭证通过 SSH/SCP 横向移动,并利用 OIDC 信任关系发布更多恶意包。

Hades 为与 Mini Shai-Hulud / Miasma 同源的 PyPI 分支,而非独立的供应链攻击事件。截至报告日,Socket对该系列活动的追踪页面已记录 471 个受影响制品。PyPI 安全团队已在事件披露后隔离了大部分受影响的版本。

二、技术分析

2.1 攻击链全景

Hades 活动的攻击链可分为 8 个关键阶段:

  1. 投递:入侵维护者账户或利用 CI/CD 管道漏洞,发布恶意 PyPI wheel 文件。
  2. 触发:Python 启动时(通过 .pth 文件)或包被导入时(通过原生扩展)自动执行恶意代码。
  3. 运行时准备:从 GitHub 下载 Bun JavaScript 运行时。
  4. 载荷执行:使用 Bun 执行高度混淆的 JavaScript 载荷,该载荷包含多个 AES-256-GCM 加密的独立功能模块。
  5. 凭证窃取:跨平台(Linux/macOS/Windows)从 CI/CD Runner 进程内存中抓取凭证,并窃取云凭证、SSH 密钥、环境变量、AI 工具配置等。
  6. 数据外渗:通过 GitHub API 创建名称模式固定的公开仓库作为外渗通道。
  7. 蠕虫传播:利用窃取的凭证通过 SSH/SCP 横向移动,滥用 OIDC 令牌发布更多恶意包,注入恶意 GitHub Actions 工作流。
  8. 持久化:安装 C2 轮询服务和令牌撤销监控(擦除器)守护进程。

2.2 三大投递机制详解

攻击者使用了三种主要的恶意代码投递与触发方式:

  1. .pth 启动钩子(经典模式):利用 Python 的 site 模块在启动时自动执行 .pth 文件中以 import 开头的代码行。恶意 .pth 文件会检查运行标记,然后下载 Bun 运行时并执行 JavaScript 载荷。这种方式下,只要 Python 解释器启动(包括运行 pip 或 pytest),无需用户导入任何包即可触发。
  2. 原生扩展导入触发(生物信息学子簇):将恶意代码嵌入已编译的原生扩展(.abi3.so)文件中。当 Python 加载这些扩展时,初始化代码会执行载荷。这种方式完全避开了对 Python 源代码的审查,恶意逻辑隐藏在二进制文件中。
  3. 分离式加载器(MCP/AI 变体):实现加载器与载荷的分离。.pth 文件不包含载荷,而是在 Python 的模块搜索路径(sys.path)中主动寻找 _index.js 文件。这种方式可以规避基于包内容的扫描,并允许载荷由其他组件提供。

2.3 载荷与攻击技术

  • AI 分析师误导:载荷文件开头嵌入了伪造的系统指令和安全策略注释,旨在欺骗依赖 LLM 进行初步分类的安全扫描器,使其将恶意文件误判为“安全”。
  • 模块化载荷架构:与早期活动的单一脚本不同,Hades 载荷采用模块化设计。主引导程序会加载并解密多个独立的功能模块,每个模块对应特定平台(Linux、macOS、Windows)或功能(如凭证窃取、横向移动)。
  • 跨平台内存抓取:攻击者能够从 CI/CD Runner 的进程内存中提取明文机密。
  • Linux:通过遍历 /proc/{pid}/maps 并直接读取 /proc/{pid}/mem 文件。
  • macOS:利用 Mach 内核的 task_for_pid() API,在相同用户 ID 下无需 root 权限即可读取目标进程内存。
  • Windows:通过 Win32 API(OpenProcessReadProcessMemory)实现。
  • C2 与数据外渗:攻击者滥用 GitHub 公开基础设施作为命令与控制(C2)通道,包括:通过特定提交消息创建“死信投递”通道、执行签名后的 JavaScript 载荷,以及通过轮询 GitHub 搜索关键词获取新指令。
  • 蠕虫传播
  • SSH/SCP 横向移动:利用窃取的 SSH 密钥,通过 SCP 将载荷脚本传输到目标主机并执行。
  • OIDC 信任滥用:在 GitHub Actions Runner 中,利用 OIDC 令牌获取 PyPI/npm 的发布权限,并使用 Sigstore 基础设施生成具有有效加密签名的 SLSA 出处包,使恶意包看起来来自合法的构建环境。
  • 工作流注入:通过创建临时分支并提交恶意 Actions 工作流文件,窃取仓库机密,随后删除操作痕迹。
  • 持久化与擦除器威慑:安装后台服务进行 C2 轮询。同时安装 gh-token-monitor 守护进程,该进程会持续检查 GitHub 令牌的有效性,一旦检测到令牌被撤销,将立即执行 rm -rf ~/ 等数据擦除命令,以此威慑安全团队的应急响应。
  • AI 工具链后门:恶意代码会遍历目录,寻找并篡改 14 种不同 AI 编码助手和 IDE 的规则文件(如 Cursor、Claude、Copilot 等),通过植入恶意指令实现持久化感染。

#

三、组织归因

3.1 威胁组织:TeamPCP

Mini Shai-Hulud / Miasma 相关活动被多个安全厂商归因于 TeamPCP(也被追踪为 DeadCatx3、Miasma、Mini Shai-Hulud)。

| 属性 | 详情 | | — | — | | 首次活跃 | 2025 年 12 月 | | 动机 | 财务驱动(凭证盗窃、勒索软件、加密挖矿) | | 技术特征 | 云原生、自动化、多生态、AI 辅助工具、滥用合法服务(GitHub/Sigstore) | | 已知关联 | CipherForce 勒索软件、LAPSUS$ 集团 |

3.2 活动演变时间线

  • 2025 年 12 月:TeamPCP 首次被记录。
  • 2026 年 3 月:Trivy、Checkmarx KICS、LiteLLM 等项目遭入侵。
  • 2026 年 4 月@bitwarden/cli、SAP CAP npm 包遭入侵。
  • 2026 年 5 月:Mini Shai-Hulud 大规模攻击(170+ 包),团队在 BreachForums 公开源代码。
  • 2026 年 6 月:Miasma 活动(@redhat-cloud-services 等 npm 包)及 Hades 活动(PyPI 大规模入侵)

攻击主题命名从Shai-Hulud 到Miasma,再到当前的Hades,反映了其多线程、多主题的成熟运营能力。

四、影响评估

4.1 受影响包清单(部分示例)

生物信息学/图机器学习集群embiggenensmallengpseapyphetools 等。

开发者工具/通用 PyPI 集群dynamo-releasecoolboxmagiquerlaskrsquests 等。

MCP/AI 主题集群langchain-core-mcp(分离式加载器变体)。

4.2 影响范围评估

| 影响维度 | 严重程度 | 说明 | | — | — | — | | 直接受影响项目 | 高 | 37 个 PyPI 包,多个为生物信息学领域高下载量工具 | | CI/CD 管道风险 | 严重 | 恶意代码在 Python 启动时自动执行,危害巨大 | | 凭证暴露范围 | 严重 | 覆盖 GitHub、云服务商、Kubernetes、SSH、AI 工具等 | | 横向移动与传播潜力 | 严重 | SSH/SCP + OIDC 令牌滥用可导致蠕虫式扩散 | | 数据破坏风险 | 高 | 令牌撤销触发擦除器机制,可能导致数据丢失 | | SLSA 出处信任 | 严重 | 恶意包可携带有效的 Sigstore 签名出处,破坏信任链 |

#

五、防护建议

5.1 紧急响应措施

若确认安装过受影响版本的包,请立即执行以下操作:

  1. 隔离与清除
  • 识别并记录所有安装了受影响版本的环境。
  • 立即断开受影响系统的网络连接,或将其隔离。
  • 终止可疑的 gh-token-monitor 等持久化进程。
  • 卸载所有受影响的 Python 包,并手动删除其残留的持久化文件(如 .pth 文件、服务配置、计划任务等)。
  • 关键:在终止 gh-token-monitor 进程前,不要轮换任何被泄露的令牌,以免触发擦除器。
  1. 凭证轮换(按优先级)
  • P0(最高优先级):所有 GitHub 个人访问令牌、GitHub App 令牌、Actions 机密、PyPI/npm 发布令牌。
  • P1:云服务商(AWS、GCP、Azure)凭证、Kubernetes 凭证、SSH 密钥。
  • P2:AI 工具(Anthropic、Claude)令牌、各类 .env 文件中的密钥。
  1. 环境重建
  • 销毁并重新构建所有受影响的开发环境和 CI/CD Runner 实例,确保系统处于纯净状态。

5.2 检测与狩猎

  • 文件系统检查:在所有开发机和构建服务器上,搜索是否存在可疑的标记文件(如 /tmp/.bun_ran)、_index.js 文件,以及 gh-token-monitor 相关的服务或脚本。
  • 进程与行为监控:关注 python 进程启动 bun 子进程的异常行为,以及对 github.com/oven-sh/bun/releases/download/ 的网络请求。
  • GitHub 环境审计:审计组织内近期是否有可疑的临时分支创建、名为 format-results 的 Actions 制品,以及描述为 Hades - The End for the Damned 的异常仓库。搜索提交消息中是否包含 DontRevokeOrItGoesBoom 等关键词。
  • 运行时检测:在网络层面监控对 fulcio.sigstore.devrekor.sigstore.dev 等 Sigstore 服务的异常访问。

5.3 长期防御策略

  1. PyPI 包管理安全
  • 强制使用虚拟环境隔离项目依赖。
  • 锁定所有依赖库的精确版本,并使用可信的私有镜像或代理仓库。
  • 在安装新包前,使用自动化安全扫描工具进行检查。
  1. CI/CD 管道加固
  • 实施最小权限原则,为 CI/CD 工作流分配最少的必要权限。
  • 优先使用 OIDC 等短期凭证机制,避免使用长期有效的令牌。
  • 将所有第三方 Actions 固定到具体的 SHA 提交哈希。
  • 对 CI Runner 实施出站网络限制。
  1. AI 与开发工具链安全
  • 定期审计并严格限制 .cursorrules.claude/settings.json 等 AI 助手配置文件的写入权限。
  • 对 MCP 服务器等新兴工具实施严格的准入和审查机制。
  • 确保 .env 等敏感配置文件不会被意外提交或泄露。

#

六、IOC汇总

| 制品 | SHA256 哈希值 | | — | — | | langchain_core_mcp-1.4.2-py3-none-any.whl | 6d332f814f15f19758d65026bbfd0a8c49671b319ec77b8fa1b27fc48afff7d9 | | langchain_core-setup.pth | 6506d31707a39949f89534bf9705bcf889f1ecae3dbc6f4ff88d67a8be3d01b2 | | _index.js 变体 1(4.8 MB,17 个包) | dc48b09b2a5954f7ff79ab8a2fd80202bd3b59c08c7cdbc6025aa923cb4c0efe | | _index.js 变体 2(4.7 MB,2 个包) | e1342a80d4b5e83d2c7c22e1e0aaa95f2d88e3dbf0d853a4994b180c93a4b17d | | *-setup.pth (所有受影响制品通用) | c539766062555d47716f8432e73adbe3a0c0c954a0b6c4005017a668975e275c |

6.2 文件系统指标

| 指标类型 | 路径/文件名 | 说明 | | — | — | — | | 执行标记 | /tmp/.bun_ran (Linux)/ %TEMP%\.bun_ran(Windows) | 防止重复执行的标志文件 | | 防递归锁 | /tmp/tmp.0144018410.lock | 反递归单例锁 | | C2 状态追踪 | /var/tmp/.gh_update_state | 追踪已执行的 firedalazer 载荷 | | Bun 下载包 | /tmp/b.zip%TEMP%\b.zip | Bun 运行时压缩包 | | Bun 可执行文件 | /tmp/b/bun%TEMP%\b\bun.exe | 解压后的 Bun 运行时 | | SSH 传播文件 | /tmp/.sshu-setup.js | SSH 传播载荷 | | C2 守护进程 | ~/.local/share/updater/update.py | Python C2 轮询脚本 | | 擦除器脚本 | ~/.local/bin/gh-token-monitor.sh | 令牌监控/擦除脚本 | | 令牌存储 | ~/.config/gh-token-monitor/token | 当前监控的 GitHub 令牌 |

6.3 持久化服务配置

| 平台 | 服务路径 | 功能 | | — | — | — | | Linux | ~/.config/systemd/user/update-monitor.service | C2 轮询服务(每小时) | | Linux | ~/.config/systemd/user/gh-token-monitor.service | 令牌撤销监控/擦除器触发 | | macOS | ~/Library/LaunchAgents/com.user.update-monitor.plist | C2 轮询服务 | | macOS | ~/Library/LaunchAgents/com.user.gh-token-monitor.plist | 令牌撤销监控 |

6.4 原生扩展指标

| 指标 | 说明 | | — | — | | ensmallen_haswell.abi3.so | 生物信息学子簇中的木马化原生扩展 | | ensmallen_core2.abi3.so | 同上 | | .abi3.so 与 _index.js 同时出现 | 需要审查的可疑包布局 |

6.5 网络指标

| 指标 | 类型 | 说明 | | — | — | — | | https://github.com/oven-sh/bun/releases/download/bun-v1.3.13/ | 合法服务滥用 | Bun 运行时下载 | | https://github.com/oven-sh/bun/releases/download/bun-v1.3.14/ | 合法服务滥用 | Bun 运行时下载(新版本) | | https://api.anthropic.com/v1/api | 伪装通道 | 向 Anthropic API 发送虚假流量作为伪装 | | https://fulcio.sigstore.dev | 合法服务滥用 | SLSA 出处签名证书获取 | | https://rekor.sigstore.dev | 合法服务滥用 | Sigstore 透明度日志上传 | | Bun/1.3.14 | User-Agent | langchain-core-mcp 的 PyPI 上传 User-Agent |

6.6 GitHub C2 关键词

| 关键词 | 用途 | | — | — | | DontRevokeOrItGoesBoom | 令牌死信投递提交搜索 | | TheBeautifulSnadsOfTime | 签名 JavaScript 载荷提交搜索 | | firedalazer | Python 下载器提交搜索 | | thebeautifulmarchoftime | 备用 C2 发现字符串 | | thebeautifulsnadsoftime | 备用 C2 发现字符串 |

6.7 GitHub 外渗标记

| 标记 | 说明 | | — | — | | 仓库描述:Hades - The End for the Damned | 所有外渗仓库的描述 | | 仓库名模式:stygian-cerberus-[数字] | 外渗仓库命名模式 | | 仓库名模式:tartarean-charon-[数字] | 外渗仓库命名模式 | | 提交标记:IfYouYankThisTokenItWillNukeTheComputerOfTheOwnerFully | 威慑性提交消息 | | 制品名:format-results | Actions 制品名称 | | 工作流名:Run Copilot | 恶意工作流名称 | | 文件路径:results/results-*.json | 外渗数据文件路径 |

6.8 针对性指标

| 指标 | 说明 | | — | — | | harden-runner | StepSecurity 防御工具被恶意软件针对性拦截 | | step-securitystepsecurity | StepSecurity 标识被针对性检测 | | agent.stepsecurity.io | StepSecurity 遥测域名被报告为恶意软件拦截目标 | | api.stepsecurity.io | StepSecurity API 域名被拦截 | | app.stepsecurity.io | StepSecurity 应用域名被拦截 | | /var/run/docker.sock | 被攻击的合法 Docker Socket |

#

七、总结

Hades 活动代表了 2026 年软件供应链攻击的又一技术巅峰。这不仅仅是一次简单的包篡改事件,而是一场精心编排、多阶段、跨平台、跨生态系统的持续性威胁活动。

关键发现

  1. 攻击技术不断进化:从 .pth 启动钩子到原生扩展触发,再到分离式加载器设计,攻击者在短短数天内就完成了三次技术迭代
  2. AI 对抗成为新常态:提示注入对抗 LLM 扫描器标志着安全工具与攻击者之间的”AI 军备竞赛”已进入实战阶段
  3. 擦除器威慑开创危险先例gh-token-monitor 的令牌撤销→数据擦除机制为未来的勒索软件操作提供了新的心理战术模板
  4. 跨运行时攻击增加检测难度:Python → Bun → JavaScript 的跨语言执行链使得单一生态系统的安全工具难以检测
  5. SLSA 出处信任被武器化:利用 Sigstore 和 OIDC 生成”合法”的构建出处,对软件供应链的可信验证机制构成了根本性挑战
  6. MCP/AI 工具链成为新攻击面:针对 Model Context Protocol 和 AI 助手配置的攻击反映了威胁行为者对新兴技术栈的快速适应能力

防御启示

Hades 活动再次证明,软件供应链安全不能仅依赖任何单一控制点。有效的防御需要:

  • 多层检测:结合静态分析、运行时监控、网络检测和 GitHub 审计
  • 零信任架构:不信任任何包、任何出处签名、任何 CI/CD 管道
  • 快速响应能力:在攻击者迭代技术之前检测并遏制威胁
  • AI 工具安全:将 AI 助手和 MCP 服务器纳入安全评估范围
  • 凭证生命周期管理:实施短期凭证、自动轮换和最小权限原则

八、参考链接

  • https://socket.dev/blog/shai-hulud-descends-to-hades-miasma-pypi-wave
  • https://socket.dev/blog/mini-shai-hulud-miasma-and-hades-worms-target-bioinformatics-and-mcp-developers-via-malicious
  • https://www.stepsecurity.io/blog/the-hades-campaign-pypi-packages

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:奇安信威胁情报中心 威胁情报中心 威胁情报中心《Hades 活动:针对PyPI的大规模供应链攻击分析》

评论:0   参与:  0