背景介紹
2024 年 7 月 18 日,WazirXIndia 遭遇駭客攻擊,損失約 2.35 億美元。本次攻擊是由於 ETH 上的 GnosisSafe 多籤錢包 4 個私鑰洩露造成的。攻擊者劫持了多重簽名錢包的 implement 合約,然後直接轉移錢包持有的資產。
攻擊交易
- 修改 implement 合約:https://app.blocksec.com/explorer/tx/eth/0x48164d3adbab78c2cb9876f6e17f88e321097fcd14cadd57556866e4ef3e185d
- 轉移資產(其中之一):https://app.blocksec.com/explorer/tx/eth/0x1e523051a8a481c5a57fe8261cced4cb3e775ce9315168b041fd34fc25d563ac
相關合約
- 多籤錢包 owner:https://etherscan.io/address/0xd967113224c354600b3151e27aaba53e3034f372
- 攻擊合約:https://etherscan.io/address/0x6eedf92fb92dd68a270c3205e96dccc527728066
- 多籤錢包 GnosisSafeProxy(被攻擊合約):https://etherscan.io/address/0x27fd43babfbe83a81d14665b1a6fb8030a60c9b4
- 惡意 implement 合約:https://etherscan.io/address/0xef279c2ab14960aa319008cbea384b9f8ac35fc6
攻擊交易1 Trace 分析
多籤錢包 owner 0xd967 呼叫 execTransaction
函式,對多籤進行驗證,然後執行簽名的交易。
在 execTransaction
函式中,呼叫 checkSignatures
函式檢查多籤情況。
從 requiredSignatures
引數可以得知,需要 4 個簽名才能透過多籤校驗。
根據 trace 得知,在 checkNSignatures
函式中進行了 4 次簽名驗證。
在第四次驗籤中,由於 msg.sender 為多籤錢包的 owner 0xd967,所以走了 v == 1
的分支進行驗籤操作,其餘三次都是進入 v > 30
的分支進行驗證。
透過簽名校驗後,呼叫 execute
函式,注意這裡的 data
引數已經包含了攻擊者構造的惡意 implement 合約地址。
根據傳入的引數呼叫 delegatecall
函式,具體執行了什麼操作,從 trace 裡面我們不得而知。
但是透過觀察 GnosisSafeProxy
合約的 solt 變化可以得知,攻擊者這次操作就是將 singleton
的地址修改為惡意 implement 地址。
攻擊交易2 Trace 分析
在執行完第一筆攻擊交易後,選取其中一個獲利的攻擊交易進行分析。這次再呼叫多籤錢包時,直接走的就是 0xef27 的邏輯,直接對錢包代幣進行轉賬獲利。
在本次攻擊過程中,攻擊者一共執行了 203 次這樣的獲利交易,總獲利金額約 2.35 億美元。