SharkTeam:Prisma Finance被攻擊事件分析
發表於 2024-04-02 21:35 作者: SharkTeam
SharkTeam:Prisma Finance被攻擊事件分析
2024年3月28日,Prisma Finance遭受閃電貸攻擊,項目方損失約1221萬美元。
SharkTeam對此事件進行了技術分析,並總結了安全防範手段,希望後續項目可以引以爲戒,共築區塊鏈行業的安全防线。
一、攻擊交易分析
攻擊者1:0x7e39e3b3ff7adef2613d5cc49558eab74b9a4202(簡記爲0x7e39)
攻擊合約1:0xd996073019c74b2fb94ead236e32032405bc027c(簡記爲0xd996)
攻擊者2:0x7fe83f45e0f53651b3ed9650d2a2c67d8855e385
攻擊合約2:0x4148310fe4544e82f176570c6c7b649290a90e17
被攻擊的目標合約:0x1cc79f3f47bfc060b6f761fcd1afc6d399a968b6
攻擊包含16筆交易,以第一筆攻擊交易爲例:
0x00c503b595946bccaea3d58025b5f9b3726177bbdc9674e634244135282116c7
攻擊流程如下:
1. 讀取地址0x56a201b872b50bbdee0021ed4d1bb36359d291ed(簡記爲0x56a2)在目標合約中的所有抵押物和債務。
返回結果如下:
地址0x56a2在目標合約中抵押物共有1,745 wstETH,總債務共有1,442,100 mkUSD。
2. 攻擊者0x7e39通過攻擊合約0xd996調用mkUSD債務合約中的flashLoan函數。
參數receiver設置爲MigrateTroveZap,amount爲上面查詢到的全部債務。
然後,在flashLoan函數中會調用receiver(這裏是MigrateTroveZap)中的onFlashLoan函數。
onFlashLoan函數通過閃電貸先償還原來的所有債務,提取抵押物到receiver,然後receiver將一定數量的抵押物重新抵押,並借取一定的債務。其中主要調用了2個函數:
(1)closeTrove函數,償還債務並將所有的抵押物(1745.08 swtETH)從troverManager提取到receiver(這裏是MigrateTroveZap合約);
(2)openTrove函數,由receiver將463.18 wstETH重新抵押到troverManager中,並負債1,443,598 mkUSD。
從上面數據可以看出,flashLoan函數執行完成後,receiver中仍然保留了從troverManager中提取的屬於地址0x56a2的抵押物,數量約爲1745.08 – 463.18 = 1281.90 wstETH。
3. 攻擊者0x7e39通過攻擊合約0xd996從Balancer中通過閃電貸借取了1 wstETH。
然後,抵押1 wstETH並借取債務2000 mkUSD,加上fee,共計負債2200 mkUSD。
4. 與步驟2類似,調用mkUSD債務合約中的flashLoan函數,這裏參數receiver仍然設置爲MigrateTroveZap,amount爲上一筆質押1 wstETH後的全部債務,即2000 mkUSD。在FflashLoan函數中會調用receiver中的onFlashLoan函數,然後調用closeTrove和openTrove函數。
只是,這裏closeTrove和openTrove函數中的參數account不再是上面的地址0x56a2,而是質押了1 wstETH的攻擊合約0xd996。
(1)closeTrove函數,償還債務並將所有的抵押物(1 swtETH)從troverManager提取到receiver(這裏仍然是MigrateTroveZap合約)。此時receiver中共有1281.90 +1=1282.90 wstETH.
(2)openTrove函數,由receiver將1282.80 wstETH(幾乎全部)重新抵押到troverManager中,並負債2001.8 mkUSD。
實際上,這裏抵押物中1281.80 wstETH是不屬於攻擊合約0xd996,而是屬於上面的地址0x56a2。
5. 最後,攻擊者0x7e39通過攻擊合約0xd996單獨調用closeTrove函數,將抵押的1282.80 wstETH 提取到了攻擊合約0xd996中。
償還閃電貸後,攻擊者仍獲利1281.80 wstETH,約2.30M USD。
二、漏洞分析
本次事件的根本原因是項目合約存在邏輯和權限校驗,使得攻擊者可以利用該漏洞獲取其他账戶地址的質押資產。
攻擊者最終獲得的wstETH是原本地址0x56a2在troverManager合約中的抵押物,通過mkUSD合約的flashLoan函數,自定義MigrateTroveZap合約中onFlashLoan函數的參數,利用 MigrateTroveZap將其轉變爲攻擊合約的抵押物,然後將其提取出來。
攻擊者通過mkUSD合約中的flashLoan函數以及MigrateTroveZap合約中的onFlashLoan函數操縱其他账戶地址的抵押和提取。
(1)flashLoan函數中缺少對參數receiver地址的校驗,因爲onFlashLoan函數中receiver會接收account的所有抵押物,因此需要對receiver進行可信的校驗;
(2)onFlashLoan函數中缺少對account地址的校驗,因爲closeTrove和openTrove函數都是操作的account的資產,因此需要對account增加權限方面的校驗;
除了對這兩個地址參數的校驗外,可能還需要對flashLoan函數中的數量參數以及實現邏輯進行校驗。
三、安全建議
針對本次攻擊事件,我們在开發過程中應遵循以下注意事項:
(1)項目在設計和开發過程中,要保持邏輯的完整性和嚴謹性,尤其是涉及到資產的轉移過程中,更要加強對函數調研權限的校驗,保證調用者、調用函數、函數參數、轉账邏輯等都是安全可信的。
(2)項目上线前,需要找專業的第三方審計團隊進行合約審計。
About Us
SharkTeam的愿景是保護Web3世界的安全。團隊由來自世界各地的經驗豐富的安全專業人士和高級研究人員組成,精通區塊鏈和智能合約底層理論。提供包括風險識別與阻斷、智能合約審計、KYT/AML、鏈上分析等服務,並打造了鏈上智能風險識別與阻斷平台ChainAegis,能有效對抗Web3世界的高級持續性威脅(Advanced Persistent Threat,APT)。已與Web3生態各領域的關鍵參與者,如Polkadot、Moonbeam、polygon、Sui、OKX、imToken、Collab.Land等建立長期合作關系。
官網:https://www.sharkteam.org
Twitter:https://twitter.com/sharkteamorg
Telegram:https://t.me/sharkteamorg
Discord:https://discord.gg/jGH9xXCjDZ
標題:SharkTeam:Prisma Finance被攻擊事件分析
地址:https://www.coinsdeep.com/article/109986.html
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。