原標題:《搬起“石頭”,竟砸了自己的腳? | DODO攻擊事件分析》

來源:成都鏈安

一、事件概覽

北京時間2021年3月9日,根據【鏈必安-區塊鏈安全態勢感知平台( Beosin-Eagle Eye )】輿情監測顯示,去中心化交易所DODO上的wCRES/USDT資金池似乎被黑客攻擊,轉移走價值近98萬美元的Wrapped CRES(wCRES)和近114萬美元的USDT。DODO官方回复目前團隊正在進行調查。原文鏈接如下:

https://www.panewslab.com/zh/sqarticledetails/1615251653717039.html

成都鏈安(Beosin)安全團隊第一時間針對該事件啟動安全應急響應,並將事件細節分析進行梳理,以供參考。其實,該事件本身來說並不復雜,其攻擊流程也非常簡單。但因該事件涉及到“閃電貸”“重入攻擊”等熱門話題,因此成都鏈安認為有必要對該事件進行發聲。  

二、事件分析

該事件的攻擊原因主要在於合約的init函數未進行限制,從而導致攻擊者有權利進行調用,如下圖所示:



經分析,攻擊者利用DODO合約提供的閃電貸工具首先向合約轉移了兩種空氣幣。緊接著,發起一筆閃電貸交易在交易結束之前,調用合約init函數將幣種指向空氣幣從而躲過閃電貸的歸還校驗,如下圖所示。


 

三、安全建議

成都鏈安(Beosin)安全團隊認為,事件並不復雜,但值得敲響警鐘,引起廣大項目方的注意。具體而言,首先是DODO的閃電貸函數是進行了重入校驗的,但由於init函數並沒有添加重入校驗,所以導致類似重入攻擊發生。  

另外結合成都鏈安審計團隊以往對項目方安全審計經驗,由於目前代碼的複雜度越來越高,模塊化也隨之越來越多,有許多項目方雖然都使用init函數進行管理,但需要提醒的是, init函數在solidity也僅僅只是一個普通函數,在此呼籲廣大項目方與開發者引起重視切記,不要誤以為取名為“ init ,就只能進行一次調用。  

同時,我們建議,在日常的安全防護中,項目方也需要做好事無鉅細的安全加固工作;通過借助第三方安全公司的專業力量,採用“形式化驗證與人工審核”結合的複合式審計方法,方能實現對項目面面俱到的全方位護航。