利用PyPI供应链投送病毒

导语:越南系黑客组织OceanLotus(APT32)被卡巴斯基披露利用PyPI供应链攻击投送新型恶意软件ZiChatBot。最令人警醒的是:这款恶意软件不使用传统C2服务器,而是把Zulip公开聊天服务的REST API当作指挥通道——流量与正常开发者的聊天请求 indistinguishable,让基于网络流量的威胁检测完全失效。

APT威胁情报示意图

攻击全景:精心策划的PyPI供应链攻击

2025年7月16日至22日,攻击者在PyPI上架了三款恶意软件包,表面上看都是普通Python开发工具:

软件包名
仿冒目标
上传时间
下载量
uuid32-utils
UUID生成工具
2025-07-16
1,479
colorinal
终端彩色输出库
2025-07-22
614
termncolor
ANSI颜色格式化库
2025-07-22
387

三个包累计超过 2,480次下载,波及范围不容小觑。其中 termncolor 本身不携带恶意代码,但它在 setup.py 中声明了 colorinal 作为依赖——这是一种依赖链投毒技术,让恶意payload的暴露面进一步扩大。

攻击者还精心设计了掩护层:为 colorinal 建立了一个看起来完全正常的良性项目页面,将 uuid32-utils 和 colorinal 设为前置依赖,进一步稀释恶意代码的存在感。

为什么这件事值得关心? PyPI是Python生态的命脉,每天有数千万次安装请求。供应链攻击在此处的杀伤半径呈指数级放大——一个恶意包可能同时污染开发环境、CI/CD流水线和生产服务器。

PyPI供应链攻击示意图

感染链解剖:从pip install到持久化驻留

以 colorinal 为例,完整感染链如下:

pip install colorinal
        │
        ▼
安装 wheel 包
        │
        ▼
Python 导入时触发 dropper
        │
        ▼
提取 terminate.dll (Windows) / terminate.so (Linux)
        │
        ▼
加载 dropper → 提取 ZiChatBot 主 payload
        │
        ▼
建立持久化:
  Windows: 注册表 Run 键
  Linux:   crontab 条目
        │
        ▼
开始与 Zulip C2 通信

Windows感染路径

安装完成后,恶意代码会从wheel包中提取 terminate.dll 到磁盘,再通过 vcpktsvr.exe(一个合法的Windows可执行文件)加载该DLL。一旦加载,DLL即作为dropper向系统植入ZiChatBot主payload,同时在注册表写入自启动项,最后删除自身痕迹。

Linux感染路径

Linux版本将恶意共享对象 terminate.so 放置在 /tmp/obsHub/obs-check-update 路径下,并通过 crontab 条目实现定期执行。这里使用 /tmp 而非系统路径,是一种刻意降低权限痕迹的策略——大部分系统日志不会详细记录 /tmp 内的文件操作。

Zulip C2通信示意图

图片版权 华盟网

C2创新设计:Zulip REST API 作为指挥通道

ZiChatBot最值得关注的技术特征,是其C2通信设计。

传统C2的问题

传统恶意软件的C2通道要么是自建IP(易被威胁情报封堵),要么是DGA域名(流量特征可被检测)。SOC团队配置IDS/IPS规则,可以相当有效地识别出这些异常外联行为。

Zulip作为C2的巧妙之处

ZiChatBot的C2流量全部通过 Zulip公开聊天平台的REST API发出——这与普通开发者使用Zulip进行团队协作的流量完全 indistinguishable

ZiChatBot                     Zulip API                   攻击者控制台
    │                              │                             │
    │ GET /api/v1/messages         │                             │
    │ (带API Token的HTTP请求)       │                             │
    ├─────────────────────────────►│                             │
    │◄─────────────────────────────┤  读取加密消息(包含shellcode)  │
    │                              │                             │
    │ POST /api/v1/messages        │                             │
    │ (发送心跳emoji)               │                             │
    ├─────────────────────────────►│◄────────────────────────────┤

每个HTTP请求的Authorization头携带Zulip的API Token,但流量路径与正常Zulip客户端一致,WAF和网络流量分析难以区分。

ZiChatBot通过两个独立的channel-topic对进行C2通信:

通道类型
功能
Channel A
回传被感染机器的基础系统信息
Channel B
接收包含shellcode的消息并执行

执行shellcode后,ZiChatBot会在聊天中发送一个**心形emoji(❤️)**作为执行完毕的信号——这个细节体现了攻击者在”伪装”上的极致追求,让操作日志看起来就像某个开发者在表达感谢。

Shellcode执行机制

ZiChatBot在收到C2消息后,会:

  1. 解析消息体中的shellcode(编码形式)
  2. 新线程中执行shellcode
  3. 向Channel B发送 ❤️ 表情确认执行成功

这种架构允许攻击者远程推送任意命令,包括文件操作、网络扫描、凭据提取和横向移动——而所有这些流量都在Zulip的合法TLS加密管道中完成。

APT溯源示意图

APT溯源:OceanLotus的指纹

卡巴斯基威胁归因引擎(KTAE)对ZiChatBot dropper的代码与已知OceanLotus(APT32)关联dropper进行了相似度比对,结果显示 64%代码相似度

OceanLotus是越南系国家级黑客组织,长期以东南亚及亚太地区的政府、媒体、人权组织为目标。2024年底,该组织还被观察到针对中国网络安全社区发起攻击,通过投毒Visual Studio Code项目(伪装成Cobalt Strike插件)植入特洛伊木马,并使用Notion笔记服务作为C2。

这次PyPI供应链攻击标志着OceanLotus攻击手法的重大进化:

2017-2019  │ 鱼叉邮件 + 恶意Office文档
2019-2022  │ 水坑攻击 + 浏览器漏洞链
2023-2024  │ VS Code项目投毒 + Notion C2
2025+      │ PyPI供应链攻击 + Zulip API C2

攻击组织正在系统性地探索”利用合法开发者基础设施”的攻击路径——PyPI、NPM、GitHub Actions等平台都可能成为下一个攻击跳板。

现有处置进展

卡巴斯基通过威胁狩猎发现这些恶意包后,已通知PyPI官方并提交安全社区。所有三个恶意软件包已被PyPI下架,攻击者使用的Zulip组织账户也已被官方停用。

但研究人员警告:已感染的系统仍可能尝试联系已被停用的Zulip端点。这意味着:

  • 已感染主机仍处于活跃威胁状态
  • 定期向已停用域名发起HTTP请求的行为本身就是一个强IoC
  • 企业应主动排查内部环境中是否存在此类异常网络行为

未来趋势:信任基础设施武器化

ZiChatBot代表了一种新型攻击趋势——信任基础设施武器化(Weaponization of Trusted Infrastructure)

传统安全模型的假设是:”流量从可疑IP发出=恶意”。当攻击者将C2建立在GitHub、Zulip、Notion等完全合法的公共服务上时,这个假设直接崩塌。未来可能出现以下趋势:

  1. 更多软件包管理器成为攻击目标:NPM(JavaScript生态)和PyPI的规模相当,已成为APT组织眼中的高价值目标
  2. Chat/SaaS平台的C2滥用持续增加:Slack、Discord、Telegram Bot API等均有被恶意利用的潜力
  3. 依赖链投毒成为主流战术:如 termncolor → colorinal 的多层投毒手法,扫描工具极难在表层发现
  4. 合法流量中的隐蔽信道:心形emoji作为ACK信号只是开始,更复杂的Covert Channel编码方案正在被探索

对于开发者和安全团队,这意味着:信任但必须验证——包括你pip install的每一个包,以及看似正常的HTTP请求。


参考来源:

  • https://securelist.com/oceanlotus-suspected-pypi-zichatbot-campaign/119603/[1]
  • https://thehackernews.com/2026/05/pypi-packages-deliver-zichatbot-malware.html[2]
  • https://cybersecuritynews.com/new-zichatbot-malware-uses-zulip-rest-apis/[3]
  • https://www.cryptika.com/new-zichatbot-malware-uses-zulip-rest-apis-as-command-and-control-server/[4]

图片版权 华盟网

引用链接

[1]https://securelist.com/oceanlotus-suspected-pypi-zichatbot-campaign/119603/

[2]https://thehackernews.com/2026/05/pypi-packages-deliver-zichatbot-malware.html

[3]https://cybersecuritynews.com/new-zichatbot-malware-uses-zulip-rest-apis/

[4]https://www.cryptika.com/new-zichatbot-malware-uses-zulip-rest-apis-as-command-and-control-server/

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容