SharkTeam:Sonne Finance攻擊事件分析
發表於 2024-05-17 15:59 作者: SharkTeam
SharkTeam: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,即抵押了2wei的 soVELO,借貸額爲0,兌換率(exchangeRate)爲17,735,851,964,756,377,265,143,988,000,000,000,000,000,000
exchangeRate計算如下:
抵押1wei的soVELO,可以借貸不超過17,735,851,964,756,377,265,143,988 VELO,而借貸265,842,857,910,985,546,929 WETH,至少需要抵押265,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
抵押1wei的soVELO可借貸的WETH數量如下:
1 * exchangeRate * soVELOPrice / soWETHPrice = 763,916,258,364,900,996,923
約763 WETH。僅需1wei的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
即1wei的soVELO抵押物即可。
實際上2wei的soVELO抵押物,在借貸時只用到了1wei
(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 * 1e18 / exchangeRate = 1.99999436
在計算時,因爲計算採用了截斷取整而不是四舍五入,實際計算的所需抵押物爲1wei的soVELO。
實際抵押物爲2wei的soVELO,其中1wei用於上面的借貸265WETH,剩下的1wei用於贖回35M VELO
(5)將借貸的265 WETH以及贖回的35M VELO 轉账給攻擊合約
3. 反復3次(共4次)創建新合約,重復攻擊。
4. 最後,償還閃電貸。
二、漏洞分析
以上攻擊過程中利用了2個漏洞:
(1)捐贈攻擊:向soVELO合約直接轉账(捐贈)VELO Token,改變了exchangeRate,使得攻擊者可以在只有1wei soVELO的抵押物的情況下,借貸出約265 WETH
(2)計算精度問題:利用計算過程中的精度損失以及被修改的exchangeRate,在只抵押了1wei soVELO的情況下,可以贖回35M 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:Sonne Finance攻擊事件分析
地址:https://www.coinsdeep.com/article/124913.html
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。