SharkTeam:Sonne Finance攻擊事件分析
SharkTeam
2024-05-20 05:12
本文约1260字,阅读全文需要约5分钟
Sonne Finance遭受攻擊事件技術解讀。

2024 年 5 月 15 日,Sonne Finance 遭受攻擊,專案方損失超過 2 千萬美元。

SharkTeam 對此事件第一時間進行了技術分析,並總結了安全防範手段,希望後續項目可以引以為戒,共築區塊鏈產業的安全防線。

一、攻擊交易分析

攻擊者:0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43

攻擊合約:0x02fa2625825917e9b1f8346a465de1bbc150c5b9

目標合約:0xe3b81318b1b6776f0877c3770afddff97b9f5fe5

攻擊交易:0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0

攻擊過程如下:

1. 閃電貸35, 569, 150 VELO,並將這些 VELO Token 轉移(transfer)至 soVELO 合約中

因為是直接轉帳(捐贈),沒有鑄造 soVELO Token。因此,soVELO 合約中,totalCash 增加了 35, 569, 150 VELO, soVELO 的 totalSupply 不變。

2. 攻擊者新建合約0xa16388a6210545b27f669d5189648c1722300b8b,在新合約中對目標合約發動攻擊,攻擊流程如下:

(1)向新合約轉入 2 soVELO

(2)將 soWETH 和 soVELO 聲明為抵押物

(3)向 soWETH 借貸 265, 842, 857, 910, 985, 546, 929 WETH

從以上 borrow 函數的執行過程中,根據 getAccountSnapshot 函數的回傳值,發現:

對於 soWETH 合約,新合約餘額為 0 ,借貸額為 0 ,兌換率(exchangeRate)為 208, 504, 036, 856, 714, 856, 032, 085, 073

對於soVELO 合約,新合約餘額為2 ,即抵押了2 wei 的soVELO,借貸額為0 ,兌換率(exchangeRate)為17, 735, 851, 964, 756, 377, 265, 143, 988, 000, 988, 000, 98 , 000, 000, 000, 000

exchangeRate 計算如下:

抵押1 wei 的soVELO,可以藉貸不超過17, 735, 851, 964, 756, 377, 265, 143, 988 VELO,而藉貸265, 842, 857, 910, WE985, 546, 29546696 , 842, 857, 910, 985, 546, 929 soWETH,

soWETH 的價格:soWETHPrice = 2, 892, 868, 789, 980, 000, 000, 000 ,

soVELO 的價格:soVELOPrice = 124, 601, 260, 000, 000, 000

抵押 1 wei 的 soVELO 可藉貸的 WETH 數量如下:

1 * exchangeRate * soVELOPrice / soWETHPrice = 763, 916, 258, 364, 900, 996, 923

約 763 WETH。僅需 1 wei 的 soVELO 抵押就足以支持本次借貸。

借貸 265, 842, 857, 910, 985, 546, 929 WETH(約 265 WETH)換算成抵押物 soVELO,至少需要抵押的 soVELO 數量為:

265, 842, 857, 910, 985, 546, 929 * soWETHPrice / soVELOPrice / exchangeRate = 0.348

即 1 wei 的 soVELO 抵押物即可。

實際上 2 wei 的 soVELO 抵押物,在藉貸時只用到了 1 wei

(4)贖回標的資產,即 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO

exchangeRate = 17, 735, 851, 964, 756, 377, 265, 143, 988, 000, 000, 000, 000, 000, 000

贖回 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO 所需的抵押物 soVELO 的數量為

35, 471, 603, 929, 512, 754, 530, 287, 976 * 1 e 18 / exchangeRate = 1.99999436

在計算時,因為計算採用了截斷取整而不是四捨五入,實際計算的所需抵押物為 1 wei 的 soVELO。

實際抵押物為 2 wei 的 soVELO,其中 1 wei 用於上面的借貸 265 WETH,剩下的 1 wei 用於贖回 35 M VELO

(5)將藉貸的 265 WETH 以及贖回的 35 M VELO 轉帳給攻擊合約

3. 重複 3 次(共 4 次)建立新合約,重複攻擊。

4. 最後,償還閃電貸。

二、漏洞分析

以上攻擊過程中利用了 2 個漏洞:

(1)捐贈攻擊:直接向 soVELO 合約轉帳(捐贈)VELO Token,改變了 exchangeRate,使得攻擊者可以在只有 1 wei soVELO 的抵押物的情況下,借貸出約 265 WETH

(2)計算精度問題:利用計算過程中的精度損失以及被修改的 exchangeRate,在只抵押了 1 wei soVELO 的情況下,可以贖回 35 M VELO

三、安全建議

針對本次攻擊事件,我們在開發過程中應遵循以下注意事項:

(1)專案在設計和開發過程中,要保持邏輯的完整性和嚴謹性,尤其存款、質押、更新狀態變數以及計算過程中乘除法計算結果的取捨問題,要盡可能多考慮一些情況,使得邏輯完整,沒有漏洞。

(2)專案上線前,需要由第三方專業的審計公司進行智慧合約審計。

About Us

SharkTeam 的願景是保護Web3世界的安全。團隊由來自世界各地的經驗豐富的安全專業人士和高級研究人員組成,精通區塊鏈和智慧合約底層理論。提供包括風險識別與阻斷、智能合約審計、KYT/AML、鏈上分析等服務,並打造了鏈上智能風險識別與阻斷平台ChainAegis,能有效對抗Web3世界的高級持續性威脅(Advanced Persistent Threat ,APT)。已與Web3生態各領域的關鍵參與者,如 Polkadot、Moonbeam、polygon、Sui、OKX、imToken、Collab.Land、TinTinLand 等建立長期合作關係。

官網:https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Telegram:https://t.me/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

SharkTeam
作者文库