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