摘要

研究報告針對「ChocoPoC」惡意軟體活動提供全面的技術分析,該活動專門鎖定漏洞研究人員與滲透測試人員。攻擊者將隱藏的遠端存取木馬(RAT)植入託管於 GitHub 之概念驗證(PoC)儲存庫的木馬化 Python 相依套件中,藉此利用漏洞研究的高度時效性。此報告詳述了多階段的感染鏈、精巧的規避技術、持續性機制,以及創新地利用合法平台進行命令與控制(C2)。此外,報告也將其與 Python 型 RAT 及供應鏈攻擊的廣泛趨勢進行比較,以便在現代資安環境中為此威脅提供脈絡。

你的 EDR 看得見 PEB walking 嗎?ChocoPoC 用 export-hashing 輕鬆繞過靜態偵測! | 資訊安全新聞

1. 簡介

軟體漏洞的快速揭露與武器化,為安全研究人員營造了高度壓力的環境。為了搶先應對潛在威脅,研究人員經常依賴社群共享的概念驗證(PoC)程式碼來建立偵測模組並評估衝擊。然而,這種依賴已成為一個重大的攻擊向量。ChocoPoC 活動正是此趨勢的實例,攻擊者散佈熱門漏洞的惡意 PoC,藉此入侵那些肩負防禦職責的研究人員。此報告剖析 ChocoPoC RAT 的技術架構、其透過相依性混淆進行的散佈方式,以及如何依賴合法的雲端基礎設施進行隱蔽運作。

2. ChocoPoC 技術分析

2.1. 傳遞機制與供應鏈攻擊

該活動利用相依性混淆策略來傳遞 initial payload。攻擊者為近期揭露的漏洞(例如影響 Joomla 的 CVE-2026-48908)建立 GitHub 儲存庫,並在 requirements.txt 檔案中納入惡意套件。當研究人員嘗試執行 PoC 時, pip install 指令會下載並安裝這些套件(例如 frint skytext ),有效地將環境木馬化 [1]

2.2. 多階段感染鏈

感染程序是一個高度結構化的多階段操作,目的在規避初始偵測並於受害機器上建立持久性的存在 [1] 。事件順序如下:

  • 初始觸發: 執行 PoC 腳本會觸發載入 skytext 套件。
  • 原生擴充模組載入: Python 的 importlib 會優先載入編譯好的擴充模組(Linux 上為 .so ,Windows 上為 .pyd )。惡意軟體利用這點,釋出一個惡意的 gradient.pyd 來遮蔽合法的模組 [1]
  • 環境條件檢查(Environmental Gating): 該原生函式庫會執行雜湊檢查以驗證環境。它會計算執行中腳本檔案名稱的雜湊值,僅當符合特定目標(例如 EXPLOIT_POC.PY )時才繼續執行,確保不會在一般沙箱中觸發 [1]
  • 解密與投放: 通過條件檢查後,函式庫會使用客製化 XOR 演算法解密五個內嵌的 Python 腳本,並將其投放至 Python 的 site-packages 目錄 [1]
  • 第二階段下載器: 一個隱藏的 Python 程序會被產生了執行 choco.py ,該腳本會從 Mapbox dataset 中擷取最終的 RAT Payload [1]

2.3. 進階規避與反分析

ChocoPoC 整合了多種進階技術,以躲避安全解決方案與分析人員的偵測。它捨棄標準的匯入表(import table),而是使用 Process Environment Block (PEB) 走訪(PEB walking)和匯出雜湊(export-hashing)技術,在執行期間動態解析所需的 Windows API 函式 [1]

程式碼分析:動態 API 解析基礎元件

以下 Python 程式碼代表了惡意軟體用來依其雜湊值解析 API 函式的邏輯,藉此避開靜態偵測 [1]

  1. def h(name):
  2. v = 0x1D4E
  3. for ch in name:
  4. c = ord(ch.upper())
  5. v = (((4*v*c) & 0xFFFFFFFF) ^ v) + 1
  6. v &= 0xFFFFFFFF
  7. return v
  8. # This function computes a hash for an API name (e.g., "GetThreadContext").
  9. # The malware iterates through the exports of a DLL (like kernel32.dll),
  10. # hashes each name, and compares it to a hardcoded target hash.

此外,惡意軟體會透過檢查硬體中斷點(hardware breakpoints)來執行反除錯(anti-debugging)檢查。如果 Dr0 到 Dr3 暫存器非零,惡意軟體會假定有除錯器存在並停止執行 [1]

程式碼分析:透過 GetThreadContext 進行除錯器偵測

惡意軟體使用以下邏輯(反編譯後表示)來偵測硬體中斷點 [1]

  1. pGetThreadContext = resolve_export_by_hash(kernel32_base, 0x1CE8AF0C);
  2. hThread = pGetCurrentThread();
  3. if (pGetThreadContext(hThread, &ctx)) {
  4. if (ctx.Dr0 || ctx.Dr1 || ctx.Dr2 || ctx.Dr3) {
  5. // Debugger detected via hardware breakpoints
  6. return 0;
  7. }
  8. }
  9. # By resolving GetThreadContext dynamically (hash 0x1CE8AF0C),
  10. # the malware avoids detection by static analysis tools looking for this specific API call.

2.4. 持續性與執行流程

持續性是透過操控 Python 環境本身來達成。惡意軟體會投放一個木馬化的 _distutils_hack 套件和 .pth 檔案。這些檔案被設計成每當系統啟動新的 Python 解譯器時就會執行惡意程式碼 [1] 。為了進一步干擾數位鑑識(forensic analysis),惡意軟體會執行「時間戳記竄改(timestomping)」,修改檔案的建立與修改日期,使其融入合法系統檔案之中 [1]

程式碼分析:ChocoPoC RAT 產生器與持續性

持續性機制依賴於環境變數來控制執行並防止無限遞迴 [1]

  1. import os, sys, subprocess
  2. env = os.environ.copy()
  3. # Check for a specific marker to avoid infinite loops
  4. if "ZEBUWIAKGPHOQAP006" in env and env["ZEBUWIAKGPHOQAP006"] == "PTsjBGKQUxZorq2":
  5. if "JKHWQVEKRASDF12" not in env:
  6. os.environ["JKHWQVEKRASDF12"] = "JKHKJ23VAS8DF9"
  7. import choco # Load the downloader stage
  8. sys.exit()
  9. else:
  10. # Spawn a hidden process to run the RAT downloader
  11. env["ZEBUWIAKGPHOQAP006"] = "PTsjBGKQUxZorq2"
  12. subprocess.Popen([sys.executable], creationflags=0x08000000, env=env)

2.5. 透過 Mapbox 進行命令與控制(C2)

ChocoPoC 的一個顯著特點是它濫用 Mapbox API 進行 C2 通訊。惡意軟體使用 Mapbox dataset 作為「dead-drop resolver」來獲取指令並竊取資料 [1] 。透過使用合法的服務,惡意軟體的流量通常會被企業防火牆列入白名單,並能躲避傳統網路監控工具的偵測。

該 RAT 支援多種指令,主要著重於資料竊取與系統偵察 [1]

指令 功能
hola 觸發系統偵察(ipconfig、tasklist 等)
cmd <cmd> 在主機上執行任意 shell 指令
python <b64> 解碼並透過 exec() 執行任意 Python 程式碼
get <path> 壓縮並竊取檔案或目錄
browserdata 從主流瀏覽器竊取認證、cookie 與歷史紀錄

2.6. 感染架構視覺化

以下序列圖說明了 ChocoPoC 感染過程中,受害環境與攻擊者控制基礎設施之間的複雜互動:

sequenceDiagram participant V as Victim (Researcher) participant GH as GitHub (Malicious PoC) participant PyPI as PyPI (frint/skytext) participant MB as Mapbox (Dead-drop C2) participant RAT as ChocoPoC RAT V->>GH: Clone/Download PoC V->>PyPI: pip install -r requirements.txt PyPI-->>V: Download frint & skytext (.pyd/.so) V->>V: Execute PoC (e.g., python exploit.py) V->>V: Load skytext (gradient.pyd) Note over V: Anti-Analysis & Env Gating (Hash Check) V->>V: Drop Persistence (_distutils_hack & .pth) V->>V: Spawn hidden Python process (choco.py) V->>MB: GET Mapbox Dataset (Feature) MB-->>V: Encrypted RAT Payload V->>V: exec(decrypted_payload) V->>RAT: ChocoPoC RAT active RAT->>V: Harvest Browser Data/Files RAT->>MB: Exfiltrate Data via Mapbox/External IP

此圖強調了攻擊的多階段特性,顯示初始 PoC 執行如何導致一連串隱蔽操作,最終部署完整的 RAT。

3. 與相關威脅之比較分析

在 ChocoPoC 中觀察到的技術,是 Python 型惡意軟體廣泛趨勢的一部分。如同關於 Python RAT 的研究 [2] 所述,這些工具因其跨平台特性,以及能利用合法 API(如 Discord 或 Mapbox)進行 C2,而越來越受歡迎。舉例來說,許多現代 Python RAT 使用 Fernet 加密來混淆其 payload 與通訊,類似於 ChocoPoC 使用的客製化 XOR 和 Zlib 壓縮 [2]

此外,ChocoPoC 活動與 EtherRAT 具有架構上的相似性,後者近期被觀察到利用 React2Shell 漏洞 [3] 。兩者都採用多階段部署鏈,並專注於在開發者環境中達成深度的持續性。然而,EtherRAT 代表了進一步的演進,它使用 以太坊智慧合約 進行去中心化的 C2 解析,提供了更強的基礎設施抗查封能力 [3]

下表比較了這兩個進階威脅的關鍵特徵:

功能 ChocoPoC EtherRAT
主要傳播途徑 木馬化的 PoC 依賴套件 React2Shell (CVE-2025-55182)
C2 機制 Mapbox Dataset 以太坊智慧合約
持續性 Python .pth 與 _distutils_hack Cron、Systemd、SSH 金鑰、LD_PRELOAD
目標平台 Windows / Linux Linux

4. 偵測與緩解策略

防禦像 ChocoPoC 這類的供應鏈攻擊,需要主動且多層次的安全態勢。組織與個別研究人員應考慮以下策略 [2]

  • 相依性驗證: 在從不受信任的 PoC 儲存庫安裝相依套件之前,務必審查 requirements.txt pyproject.toml 檔案。使用工具檢查已知的惡意套件。
  • 執行時期監控: 部署端點偵測與回應(Endpoint Detection and Response, EDR)解決方案,以偵測異常的 Python 行為,例如隱藏程序的產生、未經授權的雲端 API 網路連線,以及檔案時間戳記竄改。
  • 網路流量分析: 監控通往合法服務(如 Mapbox 或 Discord)的異常流量模式,特別是源自開發環境或非預期程序的流量 [2]
  • 沙箱執行: 在隔離、非持久性的環境(例如容器或專用虛擬機器)中執行所有不受信任的 PoC 程式碼,且該環境無法存取敏感性資料或認證。

5. 結論

ChocoPoC 活動代表了一次針對漏洞研究社群的複雜且目標明確的攻擊。透過利用對社群共享程式碼的固有信任,並採用先進的規避技術, 如原生擴充模組遮蔽(Native extension shadowing)和環境條件檢查(Environmental gating),攻擊者已創造出一個用於產業間諜活動和認證竊取(Credential theft)的強大工具。依賴合法雲端基礎設施進行 C2 更進一步增加了偵測與應變的難度。隨著威脅態勢持續演變,以及 EtherRAT 中利用區塊鏈的 C2 等創新手法出現,安全專業人員在處理第三方研究材料時,必須保持高度警覺並實施強固的防禦措施。