Kaspersky 這次揭露的重點,是一起針對 Python 套件生態的供應鏈攻擊:自 2025 年 7 月起,有惡意 wheel 套件被上傳到 Python Package Index(PyPI),用來在 Windows 與 Linux 系統上投放先前未知的惡意程式家族 ZiChatBot。[3][
6]
這不是「PyPI 被攻破」或「Zulip 被入侵」的案例。更精準地說,攻擊者把惡意套件包裝成看似有用的函式庫,放進開發者日常會接觸的套件倉庫,再利用安裝流程把隱藏 payload 帶進系統。[3][
4]
事件重點:三個假套件與 OceanLotus 連結
公開報導點名這波活動涉及三個假 Python 函式庫:
Kaspersky 在 Securelist 文章中表示,研究人員自 2025 年 7 月起注意到這批惡意 wheel 套件,並已把資訊分享給公共資安社群;相關惡意程式也已自套件庫移除。[3] 值得注意的是,這些套件並非完全「空殼」:Kaspersky 指出,它們確實實作了 PyPI 頁面上宣稱的功能,但真正目的,是在背後偷偷投放惡意檔案。[
3][
4]
歸因部分需要保留細節。Kaspersky 的 Securelist 說法是,樣本經 Kaspersky Threat Attribution Engine 分析後,研究人員認為這些套件「可能」與 OceanLotus 威脅情報報告中討論的惡意程式有關。[3] 不過,Kaspersky 的威脅研究索引則更直接,稱該公司將這起 PyPI ZiChatBot 活動歸因於 OceanLotus APT。[
6] 另有公開摘要把此歸因描述為「中等信心」。[
2]
感染鏈:跨 Windows 與 Linux 的投放器
目前公開資訊顯示,這是一條跨平台 dropper 鏈。惡意套件同時針對 Windows 與 Linux,並透過內嵌投放器交付 ZiChatBot。[1][
2][
6]
一份公開摘要描述,感染流程會從 wheel 套件中解出 DLL 或 .SO 投放器,接著在 Windows 透過 Registry、在 Linux 透過 crontab 建立持久化,最後部署 ZiChatBot。[2] 這也是為什麼它特別值得開發團隊關注:受影響的不只一般端點,也可能包括開發者工作站、CI 執行環境,以及會自動安裝 PyPI 套件的伺服器。
ZiChatBot 的不尋常之處:用 Zulip 當 C2
ZiChatBot 最引人注意的設計,是它的命令與控制(C2)架構。根據對 Kaspersky 發現的報導,ZiChatBot 並未連向專用的 C2 伺服器,而是使用公開團隊聊天應用 Zulip 的一系列 REST API 作為 C2 基礎設施。[4]
這種手法之所以麻煩,是因為 Zulip 的正式 API 本來就支援許多聊天式 C2 可能用到的操作:傳送訊息、取得訊息、上傳檔案、編輯或刪除訊息、建立 message narrow,以及處理頻道主題等。[17][
21] Zulip 的 bot 文件也說明,bot 可以攔截、查看並處理使用者送出的訊息,再送出新的回覆訊息。[
19]
換句話說,攻擊者的指令可以被包裝成聊天訊息或特定 topic 底下的訊息;惡意程式則能讀取相關訊息,並把執行結果透過同一個聊天平台回傳。現有來源並未揭露 ZiChatBot 使用的實際 Zulip workspace、bot 憑證、API endpoint 順序或完整指令集,因此較安全的說法是:ZiChatBot 濫用了合法的 Zulip REST API 功能作為 C2,而不是依賴攻擊者自建的 C2 基礎設施。[4][
17][
19][
21]
這不代表 Zulip 遭入侵,但會讓偵測更難
Zulip 這個細節不應被解讀成 Zulip 服務本身遭到入侵。公開證據指向的是正常 bot 與訊息 API 被濫用,而不是聊天服務被攻破。[4][
19][
21]
對防守方來說,真正的警訊是:惡意 C2 流量可能看起來像是連到合法協作服務。若偵測策略只依賴封鎖可疑攻擊網域,這類模式就可能漏網;更好的方向,是檢查某台主機、某個程序、某個 build job 或服務帳號,是否真的有合理理由呼叫 Zulip API。[4][
21]
現在可以優先排查什麼
資安團隊若要評估是否暴露在這波活動中,可先從以下項目著手:
- 套件盤點:檢查開發者電腦、build runner、virtual environment、lockfile 與 container image,是否出現
uuid32-utils、colorinal、termncolor。[1][
2]
- 時間線回溯:檢視 2025 年 7 月以後的 PyPI 安裝紀錄,這是 Kaspersky 指出惡意 wheel 開始上傳的時間點。[
3]
- 持久化痕跡:在可疑 Windows 與 Linux 主機上,尋找非預期的 Registry 或 crontab 持久化設定,對照公開感染鏈描述。[
2]
- 異常 Zulip API 流量:檢查 Python interpreter、套件安裝程序、CI worker 或不應使用 Zulip 的伺服器,是否出現 Zulip API 連線。[
4]
結論
這起被 Kaspersky 連結至 OceanLotus 的活動,是一波利用惡意 PyPI wheel 套件散布 ZiChatBot 的供應鏈攻擊,涉及 uuid32-utils、colorinal、termncolor 三個套件。它們在 Windows 與 Linux 上充當投放器,而 ZiChatBot 最關鍵的技巧,是把 Zulip REST API 當作命令與控制通道,避開傳統「自建 C2 伺服器」的攻擊輪廓。[1][
2][
4][
6]






