DeFi又遭攻擊!DAO Maker被盜走700萬美元 逾5千名用戶遭殃
2021年8月12日,據慢霧消息,加密孵化機構DAO Maker疑似遭受駭客攻擊,導致大量USDC合約被轉出。慢霧安全團隊第一時間介入分析,并將經過流程與結果分析分享如下。
攻擊對象:
在本次攻擊中,攻擊者部署了一個攻擊合約(0x1c)用于快速從DAO Maker批量受害合約(0x41)中竊取資金。
攻擊者地址1:0xd8428836ed2a36bd67cd5b157b50813b30208f50
攻擊者地址2:0xef9427bf15783fb8e6885f9b5f5da1fba66ef931
攻擊合約:0x1c93290202424902a5e708b95f4ba23a3f2f3cee
DAO Maker受害合約:0x41B856701BB8c24CEcE2Af10651BfAfEbb57cf49
DAO Maker受害合約deployer:0x054e71D5f096a0761dba7dBe5cEC5E2Bf898971c
DAO Maker受害合約admin:0x0eba461d9829c4e464a68d4857350476cfb6f559
攻擊細節
本次攻擊有別于往常攻擊的是:DAO Maker受害合約(0x41)未開源,而攻擊合約(0x1c)卻開源了。
從上圖開源的攻擊合約以及鏈上記錄我們可以看出:
1.駭客調用攻擊合約(0x1c)中的h函數,h函數會循環調用f函數,f函數則通過DAO Maker受害合約的0x4b4f892a函數獲取受害用戶在合約(0x41)中的USDC存款數量。
2.函數h接著調用DAO Maker受害合約(0x41)中的withdraw From User(0x50b158e4)函數,傳入用戶存款的用戶地址、USDC地址與需要提款的數量。
3.隨后DAO Maker受害合約(0x41)將合約中的USDC轉移至攻擊合約中(0x1c)。
通過以上行為分析我們可以發現:攻擊合約(0x1c)調用了受害合約(0x41)中的withdraw From User函數,受害合約(0x41)就將合約管理的資金直接轉給攻擊合約(0x1c)。我們直接反編譯受害合約(0x41)查看withdraw From User函數進行簡單分析:
通過反編譯的程式碼我們可以發現,此函數是有進行權限檢查的,只有DAOcontracts才能調用此函數轉移用戶的資金。但攻擊合約(0x1c)明顯不是DAO合約,因此其DAO合約必然是被攻擊者替換過的。
通過鏈上分析我們可以清楚的看到:
1.受害合約部署者(0x05)在部署受害合約(0x41)后于UTC4月12日08:33:45將0x0eba461d9829c4e464a68d4857350476cfb6f559地址設置為管理員:
TxHash:0xa1b4fceb671bb70ce154a69c2f4bd6928c11d98cbcfbbff6e5cdab9961bf0e6d
2.隨后受害合約部署者(0x05)通過調用revoke Role函數放棄了受害合約(0x41)管理權限:
TxHash:0x773613398f08ddce2cc9dcb6501adf4f5f159b4de4e9e2774a559bb1c588c1b8
3.而管理員則在UTC8月12日01:27:39將DAO合約設置為了攻擊合約(0x1c):
TxHash:0x2fba930502d27f9c9a2f2b9337a0149534dda7527029645752b2a6507ca6b0d6
因此攻擊者才得以借助此攻擊合約(0x1c)將受害合約(0x41)中用戶的資金盜走。目前被盜資金被兌換成ETH轉移至攻擊者地址2(0xef)。
總結
本次攻擊可能源于DAO Maker受害合約的管理員私鑰泄漏。攻擊者竊取私鑰后將受害合約的DAO合約替換為攻擊合約,攻擊者通過替換后的合約轉走了合約中的用戶資金。而由于合約部署者在設置完合約管理員后就放棄合約管理權限,因此目前項目方可能還無法有效的取回合約控制權。