又一經典的閃電貸套利:Wault.Finance 被黑事件分析
2021 年 08 月 04 日 10:23 AM,慢霧區情報系統捕獲到了 Wault.Finance 的 WUSDMaster 合約疑似被黑的情報,慢霧安全團隊第一時間介入分析,以下是分析的詳細內容。
事件相關方信息
攻擊者地址:0x886358f9296de461d12e791bc9ef6f5a03410c64
攻擊者合約地址 A:0xaa895873a268a387e38bd841c51d2804071197a1
攻擊者合約地址 B:0x50afa9383ea476bdf626d6fba62afd0b01c8fea1
被攻擊的項目:https://app.wault.finance/bsc/#wusd
被攻擊的項目地址:0xa79fe386b88fbee6e492eeb76ec48517d1ec759a (Wault.Finance 的 WUSDMaster 合約)
事件相關方背景
攻擊者:黑客通過創建了攻擊合約地址 A,並在合約的構造函數中發起攻擊。
被攻擊項目:WUSDMaster 是一個質押 BSC_USDT 換取 WUSD 的合約,可以通過質押 (stake) BSC_USDT 來獲得 WUSD, 通過贖回 (redeem) 將 WUSD 燃燒,然後換成 BSC_USDT,在這過程中一部分資金會轉給金庫 (Treasury), WUSDMaster 會用 WEX 補貼給用戶。
攻擊事件的核心點
WUSDMaster 合約的 stake 函數中,會在質押的時候 1:1 兌換 BSC_USDT 和 WUSD,但是它還進行了一次 swap 操作,正是因為這個 swap 操作導致可以被黑客利用進行套利。
核心問題點:允許數量 1:1 兌換 BSC_USDT 和 WUSD 的同時,WUSDMaster 的 swap 操作會額外導致 WaultSwapPair(BSC_USDT-WEX) 的池子中的代幣失衡,從而形成套利空間。
注意:BSC_USDT 和 WUSD 也可以理解為價格上也是 1:1
攻擊事件的剖析
攻擊的交易 Txid
0x31262f15a5b82999bf8d9d0f7e58dcb1656108e6031a2797b612216a95e1670e
攻擊的合約地址
0xaa895873a268a387e38bd841c51d2804071197a1
攻擊者地址
0x886358f9296de461d12e791bc9ef6f5a03410c64
被攻擊的項目地址
0xa79fe386b88fbee6e492eeb76ec48517d1ec759a (wault.finance 的 WUSDMaster 合約)
我們可以把本次的過程分為 3 個階段:准備套利資金、構造套利空間、實施套利。
第一階段:通過閃電貸獲得初始攻擊資金
1、在 WaultSwapPair (BSC_BUSD-WUSD) 中通過閃電貸借了 16,839,004 枚 WUSD;
2、調用 WUSDMaster 合約中的贖回 (redeem) 函數,將閃電貸借到的 WUSD 燃燒掉,換成 BSC_USDT 和 WEX;
3、去 PancakePair (WBNB-BSC_USDT) 中通過閃電貸借了 40,000,000 枚BSC_USDT;
4、將借到的 23,000,000 枚 BSC_USDT 在 WaultSwapPair (BSC_USDT-WEX) 中換成了 WEX。此時攻擊者已經做好了套利的准備。
WEX 的數量:624,440,724 = 106,502,606 + 517,938,118
WEX 的來源:redeem 操作 + WaultSwapPair (BSC_USDT-WEX) 中兌換所得
第二階段:使 BSC_USDT-WEX 池子失衡形成套利空間
1、 多次 (68 次) 調用 WUSDMaster 合約中的質押(stake)函數;
2、stake 函數會執行 wswapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens 將質押一部分的 BSC_USDT 換成 WEX,這樣就會使得 WaultSwapPair (BSC_USDT-WEX) 池子的 WEX 數量減少,價值變高;
3、多次 stake 之後 BSC_USDT-WEX 池子中,BSC_USDT 數量多,WEX 數量少,形成套利空間;
4、且攻擊者每次調用 stake 都會以 1:1 的兌換方式使用 BSC_USDT 兌換 WUSD,所以攻擊者在這一步的兌換可以無損的情況下就額外的將 BSC_USDT-WEX 池子打失衡了。
第三階段:進行套利,並償還閃電貸
1、攻擊者將第一階段准備好的 WEX 在已經失衡的 BSC_USDT-WEX 池子中進行兌換,就可以換出更多的 BSC_USDT;
624,440,724 枚 WEX => 25,930,747 枚 BSC_USDT
2、攻擊者將多次 (68 次) 調用 stake 函數所得到的 WUSD 在償還閃電貸之後,剩余 110,326 枚 WUSD 通過 WaultSwapPair (BSC_BUSD-WUSD) 換成了BSC_BUSD;
110,326 枚 WUSD => 109,284 枚 BSC_BUSD
3、將所得到的 BSC_USDT 和 BSC_BUSD 還完閃電貸後換成了 BEP_ETH。
MistTrack 分析過程
慢霧 AML 團隊分析統計,最終攻擊者獲利 370 枚 BEP_ETH,並通過 Anyswap 進行資金轉移,約損失 93 萬美元。
資金流向分析
慢霧 AML 團隊分析發現,攻擊者相關的錢包地址情況如下:
攻擊者地址:
0x886358f9296De461d12e791BC9Ef6F5a03410C64
慢霧 AML 旗下 MistTrack 反洗錢追蹤系統分析發現,攻擊者首先從 Binance 提幣,獲得初始資金,接着部署了合約。
通過三次操作,攻擊者將 ETH 兌換為 anyETH,再通過跨鏈平臺將所得 ETH 跨鏈到以太坊地址:
0x886358f9296De461d12e791BC9Ef6F5a03410C64。
值得注意的是:
1.跨鏈後的以太坊地址:
0x886358f9296De461d12e791BC9Ef6F5a03410C64 有一筆交易轉出到了 Binance。
2.攻擊者獲利地址最初的一筆交易是來自混幣平臺 Tornado.Cash 轉入的 100 ETH。
事件梳理 (UTC)
- 1:25:07 攻擊者從 Tornado Cash 提取 100 ETH
- 1:27:09 攻擊者充幣到幣安 1 ETH
- 1:35:24 攻擊者從幣安提現 2 BNB 到 BSC
- 1:35:27 攻擊者從幣安提現 0.72213159 Binance-Peg ETH 到 BSC
- 1:43:52 - 1:49:05 攻擊者在 BSC 上部署合約實施攻擊
截止目前,攻擊者獲利地址
0x886358f9296De461d12e791BC9Ef6F5a03410C64 共有余額 468.99 ETH。
總結
本次攻擊事件是經典的利用閃電貸進行套利的案例,由於經濟模型上的設計缺陷導致的攻擊者可以對 WaultSwapPair (BSC_USDT-WEX) 的池子進行套利攻擊。項目方在开發之初也要關注經濟模型的設計所帶來的攻擊面,建議讓第三方專業的團隊或專家對項目在 DeFi 各種場景下的攻擊面進行推演,排查可能的攻擊面,從經濟模型和架構設計上對項目進行優化和加固。
慢霧安全團隊已經將攻擊者地址加入到 AML 系統中進行監控,並且使用了 AML 系統的聯動能力盡可能的對攻擊者資金進行封堵。
參考攻擊交易:
https://bscscan.com/tx/0x31262f15a5b82999bf8d9d0f7e58dcb1656108e6031a2797b612216a95e1670e
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。