背景
近期,我們接到一位用戶的求助,當日遭遇釣魚攻擊。該用戶發現錢包中存在異常授權記錄,試圖撤銷授權卻無法完成,並提供了受影響的錢包地址9w2e3kpt5XUQXLdGb51nRWZoh4JFs6FL7TdEYsvKq6Wb。我們透過鏈上分析發現,該使用者的帳戶Owner 權限已轉移至位址GKJBELftW5Rjg24wP88NRaKGsEBtrPLgMiv3DhbJwbzQ。此外,該用戶已有超過價值300 萬美金的資產被盜,另外價值約200 萬美金的資產存於DeFi 協議中但無法轉移(目前該部分價值約200 萬美金的資產已在相關DeFi 的協助下援救成功)。

(https://solscan.io/tx/524t8LW1PFWd4DLYDgvtKxCX6HmxLFy2Ho9YSGzuo9mX4iiGDhtBTejx7z7bK4C9RocL8hfeuKF1QaYMnK3ititMVJ)
受害者曾嘗試從該帳戶向自身地址發起轉帳以驗證權限,但所有交易都失敗。這一情況與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 帳號
簡單來說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 平台,剩餘資金分散並停留在約15 個中轉地址。

5)20 SOL 轉移至5rJdvkp…,再轉移並停留在地址2etvjZH…。

6)2,142 SOL 轉移至2xFzAda…,352 SOL 轉入Binance 平台,200 SOL 轉入Letsexchange 平台,剩餘資金分散並停留在約11 個中轉地址。

流向2:7pSj1RxHf77G3XeisvnNAtbyx5AFjYPcChswWhZe9bM8
第二條主要路徑涉及約79 萬美元等值資產,核心特徵為「跨鏈與多鏈循環兌換」。攻擊者同樣將接收的多種代幣兌換為SOL,其中JitoSOL、PUMP 與POLYFACTS 佔比較高。

兌換後的SOL 主要流向如下:
5,742 SOL 轉移至FiywJZ2Z…,該地址同時收到了被MistTrack 標記為“Phishing”的其他釣魚事件地址的2772.8 SOL。

其中,攻擊者透過Relay.link 將8,579.92 SOL 兌換為ETH 並跨鏈至Arbitrum 地址0xDCFa6f…,再透過1inch 將資金兌換為SOL 並跨鏈到多個Solana 地址,然後再使用1inch 進行反復跨鏈,此處不多贅述。

FiywJZ2Z… 將剩餘的215.89 SOL 轉移至Ah5Rs916…,然後兌換為29,875 USDC。 USDC 分別以5000、5000、5000、5000、19,875.38 的數值透過Relay.link 兌換為DAI 並跨鍊至Base 和Ethereum 位址0xd2c1c2A…,其中有兩筆5000 USDC 均被退回,目前已被退回,目前DAIDC 均未轉出 USDAIDC 均未轉出,目前均未轉出 USDAIDC 均未轉出,目前均未轉出。


DeFi 資產援救
此外,受害者在DeFi 中的剩餘資產在多方協助下得以成功提取,並透過地址fgR5PJF… 完成了轉移,包括約217 萬PYUSD 與4548 USDC:

本次資金流向清晰展現出攻擊者的行為模式:快速分散、多地址跳轉、多平台混合、跨鏈循環、CEX 入金與DeFi 資產再利用同時進行,構建出多層級、跨生態的洗錢網絡,極大增加追踪難度,目前MistTrack 已對所有相關地址進行標記。
如何預防類似攻擊?
對一般用戶來說,這類攻擊其實本質上就是「釣魚攻擊」。攻擊者會用各種方式包裝鏈接,例如空投、獎勵、任務、提前測試資格、甚至假裝是官方公告,讓人以為只是做個簡單操作,但實際上彈出的簽名裡藏著修改Owner 等高危權限。一旦簽了,錢包基本上就被接管了。所以最重要的預防方法,就是在點連結和點「簽名」之前多想一下:來源是不是可信?這個頁面是不是官方的?這個簽名到底在做什麼?如果錢包彈出的內容你完全看不懂,或是裡面突然出現一些奇怪的權限、陌生的地址、莫名其妙需要你授權的地方,那就一定要停下來,千萬不要硬著頭皮點確認。
平時也盡量不要用存大額資產的錢包到處互動。做任務、玩專案、領空投可以專門準備一個「低餘額、只用於互動」的小號,把真正的重要資產放在獨立的錢包甚至冷錢包裡,就算誤簽了也能把損失降到最低。另外,盡量少給“無限授權”,能限制範圍、限制金額就限制一下,減少讓攻擊者可以長期濫用的空間。
總之,多看一眼、多確認一次、不亂點、不亂簽,給自己留層保護;大額資產分離存放、小號負責交互,大號只負責保管;遇到異常立刻停下,不要抱著僥倖心理。只要做到這些,被這類釣魚攻擊的風險就能大幅降低。最後,非常建議閱讀《區塊鏈黑暗森林自救手冊》(https://darkhandbook.io/)。
