文章摘要

  • 解釋 Solana 帳戶 Owner 權限修改攻擊的背景。
  • 分析攻擊的機制和利用漏洞。
  • 詳細展示被盜資金在區塊鏈中的路徑。
  • 提供預防釣魚和詐騙攻擊的實用策略。
  • 強調在簽署任何交易之前保持謹慎和驗證的重要性。

前言

近期,我們接到一位用戶的求助,當日遭遇釣魚攻擊。該用戶發現錢包中存在異常授權記錄,試圖撤銷授權卻無法完成,並提供了受影響的錢包地址9w2e3kpt5XUQXLdGb51nRWZoh4JFs6FL7TdEYsvKq6Wb。透過鏈上分析,我們發現該使用者的帳戶Owner 權限已轉移至位址GKJBELftW5Rjg24wP88NRaKGsEBtrPLgMiv3DhbJwbzQ。此外,該用戶已有超過價值300 萬美元的資產被盜,另外價值約200 萬美元的資產存於DeFi 協議中但無法轉移(目前該部分價值約200 萬美元的資產已在相關DeFi 的協助下援救成功)。受害者曾嘗試從該帳戶向自身地址發起轉帳以驗證權限,但所有交易都失敗。這一情況與TRON 生態中頻繁出現的「惡意多簽」攻擊具有高度相似性。換言之,這起攻擊並不是傳統意義的“授權被盜”,而是核心權限(Owner 權限)被攻擊者替換,導致受害者即便想轉移、撤銷授權或操作DeFi 資產,也毫無辦法。資金雖“看得見”,但已無法控制。

Solana Owner 修改機制

攻擊者利用了兩個反直覺的場景成功誘騙了使用者點擊:
  1. 通常交易簽名時,錢包會模擬運行交易的執行結果,如果有資金變化那麼會顯示在交互界面上,而攻擊者精心構造的交易沒有資金變化;
  2. 傳統的以太坊EOA 帳號是私鑰控制所有權,主觀上不清楚Solana 存在可以修改帳號所有權的特性;
下面我們來分析Solana Owner 修改究竟是一種什麼樣的操作。 帳號所有權通常我們用錢包建立帳號時,Owner 是系統帳號(11111111111111111111111111111111),在交易時需要透過系統驗證交易簽章是否由對應的公鑰簽署而來的。用Solana Account 指令可以查看帳號的基本資訊: 還有一種帳號稱為PDA 帳號,它是由智慧合約衍生的帳號,主要用於儲存智慧合約數據,它的Owner 是衍生它的智慧合約,例如:用來儲存Token 發行和持有資訊的帳號就是一種PDA 帳號,用Solana Account 查看帳號基本資訊時可以看到它的Owner 是Token智能合約TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA: 這兩種帳號都可以修改Owner,但有不同的規則和限制:普通帳號無法在外部透過指令或腳本直接修改Owner,但可以透過智慧合約呼叫進行修改,關鍵指令如下: assign 指令將帳戶的Owner 從目前值改為new_owner,部署程式後,使用Solana CLI 或用戶端(如Solana Web3.js)呼叫這個指令。這次釣魚事件正是利用這項特性誘導受害者主動簽署含有assign 指令的交易,從而悄無聲息地完成了受害者錢包地址Owner 的轉移。 簡單來說PDA 帳號可以修改Owner,但要求帳號的data 為空,同樣是透過assign 指令進行操作,我們簡單測試了一下幾個場景下修改Owner 的回饋:
  1. 新建立的PDA 帳號,可以任意指定Owner,如果Owner 不為建立它的Program,那麼Program 無寫入權限。
  2. 建立完成的PDA 帳號試圖修改Owner 時報錯:instruction illegally modified the program id of an account。
  3. PDA 帳號最終assign 之前試圖寫入資料:instruction modified data of an account it does not own。
帳號修改Owner 後使用者就失去了帳號的控制權,攻擊者可以透過CPI 呼叫的方式轉移帳號資產。還有一種常見的所有權變更,那就是Token 帳號的所有權,本質上這是一種智能合約內邏輯控制的所有權,不是由Solana 底層邏輯控制,但它也經常被用於釣魚攻擊,廣大用戶應警覺這類釣魚攻擊方式。

MistTrack 分析

根據鏈上追蹤& 反洗錢工具MistTrack 對受害者地址9w2e3kpt5XUQXLdGb51nRWZoh4JFs6FL7TdEYsvKq6Wb 的分析,本次攻擊資金轉移路徑複雜,攻擊者主要透過兩個核心位址對資產:BaBcXDg... BaBcXDg... 流向1:BaBcXDgbPgn85XtEQK7TZV8kZuFpT4iWVAs4QJoyNSmd 第一條主要路徑涉及約238 萬美元等值資產,核心特徵為「多層級擴散+ CEX 分散入金+ 多位址中轉」。攻擊者透過該地址將接收的多種代幣(包括PAYAI、CASH、CARDS、JitoSOL、POLYFACTS、PUMP、PYUSD、CAP)兌換為SOL。其中,PUMP 是轉移至7E4eNkK... 後再兌換為SOL。 兌換後的SOL 主要流向如下:
  1. 717.5 SOL 轉移至YDrMfsB...,部分SOL 轉入Binance 平台,剩餘資金分散並停留在約4 個中轉地址。
  2. 7,556.89 SOL + 2,218 SOL(來自PUMP 兌換)統一匯聚至7E4eNkK...,隨後部分SOL 轉入Letsexchange 平台,5,050.93 SOL 轉入FyB2jDJbTdmW...,剩餘資金分散並停留在約13 個地址。
  3. 2,161.88 SOL + 上述5,050.93 SOL 在FyB2jD...進一步分散,分別被轉入多個平台(HTX、Binance、Kucoin、ChangeNOW、Changelly),並有部分流入一個未知地址(25nULbv),剩餘資金分散並停留在約25 個地址。
  4. 2,053 SOL 轉移至6qdtH5D...,部分SOL 轉入Letsexchange 平台,剩餘

風險警告:本文僅代表作者個人觀點並僅供參考。本內容不構成投資建議或財務指導,也不代表 Markets.com 平台的立場。在進行股票、指數、外匯及商品的交易或價格預測時,請務必留意:差價合約(CFD)交易具有高度風險,可能導致資本虧損。過去的表現並不代表任何未來結果。此資訊此資訊僅供參考之用,並不構成也不應構成投資建議。所有英國散戶投資人皆被限制進行加密貨幣差價合約(CFD)與點差交易。