你的 EDR 看得見 PEB walking 嗎?
摘要
研究報告針對「ChocoPoC」惡意軟體活動提供全面的技術分析,該活動專門鎖定漏洞研究人員與滲透測試人員。攻擊者將隱藏的遠端存取木馬(RAT)植入託管於 GitHub 之概念驗證(PoC)儲存庫的木馬化 Python 相依套件中,藉此利用漏洞研究的高度時效性。此報告詳述了多階段的感染鏈、精巧的規避技術、持續性機制,以及創新地利用合法平台進行命令與控制(C2)。此外,報告也將其與 Python 型 RAT 及供應鏈攻擊的廣泛趨勢進行比較,以便在現代資安環境中為此威脅提供脈絡。
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] :
- def h(name):
- v = 0x1D4E
- for ch in name:
- c = ord(ch.upper())
- v = (((4*v*c) & 0xFFFFFFFF) ^ v) + 1
- v &= 0xFFFFFFFF
- return v
- # This function computes a hash for an API name (e.g., "GetThreadContext").
- # The malware iterates through the exports of a DLL (like kernel32.dll),
- # hashes each name, and compares it to a hardcoded target hash.
此外,惡意軟體會透過檢查硬體中斷點(hardware breakpoints)來執行反除錯(anti-debugging)檢查。如果 Dr0 到 Dr3 暫存器非零,惡意軟體會假定有除錯器存在並停止執行 [1] 。
程式碼分析:透過 GetThreadContext 進行除錯器偵測
惡意軟體使用以下邏輯(反編譯後表示)來偵測硬體中斷點 [1] :
- pGetThreadContext = resolve_export_by_hash(kernel32_base, 0x1CE8AF0C);
- hThread = pGetCurrentThread();
- if (pGetThreadContext(hThread, &ctx)) {
- if (ctx.Dr0 || ctx.Dr1 || ctx.Dr2 || ctx.Dr3) {
- // Debugger detected via hardware breakpoints
- return 0;
- }
- }
- # By resolving GetThreadContext dynamically (hash 0x1CE8AF0C),
- # 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] :
- import os, sys, subprocess
- env = os.environ.copy()
- # Check for a specific marker to avoid infinite loops
- if "ZEBUWIAKGPHOQAP006" in env and env["ZEBUWIAKGPHOQAP006"] == "PTsjBGKQUxZorq2":
- if "JKHWQVEKRASDF12" not in env:
- os.environ["JKHWQVEKRASDF12"] = "JKHKJ23VAS8DF9"
- import choco # Load the downloader stage
- sys.exit()
- else:
- # Spawn a hidden process to run the RAT downloader
- env["ZEBUWIAKGPHOQAP006"] = "PTsjBGKQUxZorq2"
- 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 感染過程中,受害環境與攻擊者控制基礎設施之間的複雜互動:
此圖強調了攻擊的多階段特性,顯示初始 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 程式碼,且該環境無法存取敏感性資料或認證。