文章总结: 越南黑客组织OceanLotus通过PyPI供应链攻击投放ZiChatBot恶意软件,利用Zulip聊天平台RESTAPI作为隐蔽C2通道。攻击涉及三个恶意包累计2480次下载,采用依赖链投毒技术。恶意软件通过心跳emoji确认执行,代码与已知OceanLotus样本有64%相似度。事件揭示信任基础设施武器化趋势,建议开发者验证所有安装包。 综合评分: 85 文章分类: 供应链安全,恶意软件,威胁情报,漏洞预警,安全运营
利用PyPI供应链投送病毒
Jack Stone Jack Stone
黑白之道
2026年5月11日 08:32 江西
在小说阅读器读本章
去阅读
导语:越南系黑客组织OceanLotus(APT32)被卡巴斯基披露利用PyPI供应链攻击投送新型恶意软件ZiChatBot。最令人警醒的是:这款恶意软件不使用传统C2服务器,而是把Zulip公开聊天服务的REST API当作指挥通道——流量与正常开发者的聊天请求 indistinguishable,让基于网络流量的威胁检测完全失效。
攻击全景:精心策划的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流水线和生产服务器。
感染链解剖:从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 内的文件操作。
图片版权 华盟网
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消息后,会:
- 解析消息体中的shellcode(编码形式)
- 在新线程中执行shellcode
- 向Channel B发送 ❤️ 表情确认执行成功
这种架构允许攻击者远程推送任意命令,包括文件操作、网络扫描、凭据提取和横向移动——而所有这些流量都在Zulip的合法TLS加密管道中完成。
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等完全合法的公共服务上时,这个假设直接崩塌。未来可能出现以下趋势:
- 更多软件包管理器成为攻击目标:NPM(JavaScript生态)和PyPI的规模相当,已成为APT组织眼中的高价值目标
- Chat/SaaS平台的C2滥用持续增加:Slack、Discord、Telegram Bot API等均有被恶意利用的潜力
- 依赖链投毒成为主流战术:如
termncolor → colorinal的多层投毒手法,扫描工具极难在表层发现 - 合法流量中的隐蔽信道:心形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/
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:黑白之道 Jack Stone Jack Stone《利用PyPI供应链投送病毒》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论