原標題:《搬起“石頭”,竟砸了自己的腳? | 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 ” ,就只能進行一次調用。
同時,我們建議,在日常的安全防護中,項目方也需要做好事無鉅細的安全加固工作;通過借助第三方安全公司的專業力量,採用“形式化驗證與人工審核”結合的複合式審計方法,方能實現對項目面面俱到的全方位護航。