慢霧安全團隊建議借貸類型的協議在涉及用戶資金的函數需要做好必要的健康檢查。

作者:九九,Zero

原用標題:奇妙的化學反應:Euler Finance 被黑分析

據慢霧安全團隊情報,2023 年 3 月 13 日,Ethereum 鏈上的借貸項目 Euler Finance 遭到攻擊,攻擊者獲利約 2 億美元。慢霧安全團隊第一時間介入分析,並將結果分享如下:

相關信息

Euler Finance 是以太坊上的一個非託管的無許可藉貸協議,幫助用戶為他們的加密貨幣資產賺取利息或對沖波動的市場。

當用戶在 Euler Finance 上進行存款抵押時會收到對應的 EToken 作為憑證,後續贖回抵押品和進行借貸時都是通過 EToken。EToken 的設計使用戶可以通過鑄造 EToken 並直接使用新的 EToken 作為抵押品來借出更多的資產並增加債務,即以疊加槓桿的方式進行自我借貸 (self borrow)。

Euler 的軟清算機制是允許清算人靈活的幫被清算人償還其債務,而不是只能按照固定的係數進行清算。

以下是本次攻擊涉及的相關地址:

攻擊者 EOA 地址:

0x5f259d0b76665c337c6104145894f4d1d2758b8c(下稱攻擊者 EOA 地址 1)

0xb2698c2d99ad2c302a95a8db26b08d17a77cedd4(下稱攻擊者 EOA 地址 2)

攻擊合約地址:

https://etherscan.io/address/0xeBC29199C817Dc47BA12E3F86102564D640CBf99
https://etherscan.io/address/0x036cec1a199234fC02f72d29e596a09440825f1C
https://etherscan.io/address/0x036cec1a199234fC02f72d29e596a09440825f1C

攻擊交易:

https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d
https://etherscan.io/tx/0x71a908be0bef6174bccc3d493becdfd28395d78898e355d451cb52f7bac38617
https://etherscan.io/tx/0x62bd3d31a7b75c098ccf28bc4d4af8c4a191b4b9e451fab4232258079e8b18c4
https://etherscan.io/tx/0x465a6780145f1efe3ab52f94c006065575712d2003d83d85481f3d110ed131d9
https://etherscan.io/tx/0x3097830e9921e4063d334acb82f6a79374f76f0b1a8f857e89b89bc58df1f311
https://etherscan.io/tx/0x47ac3527d02e6b9631c77fad1cdee7bfa77a8a7bfd4880dccbda5146ace4088f

攻擊核心點

此次攻擊的主要原因有兩點:

1. 將資金捐贈給儲備地址後沒有檢查自身是否處於爆倉狀態,導致能直接觸發軟清算的機制。

2. 由於高倍槓桿觸發軟清算邏輯時,被清算者的健康係數會降低到 1 以下,導致清算者的清算獲利可以完全覆蓋其負債。因此由於清算後獲得的抵押資金的價值是大於負債的價值,所以清算者無需進行額外的超額抵押即可成功通過自身的健康係數檢查 (checkLiquidity) 而提取獲得的資金。

具體細節分析

這里以攻擊交易 0xc310a0af 進行分析,其他攻擊的手法均一致:

1. 攻擊者首先從 Aave 中閃電貸出 30,000,000 枚 DAI,並創建了兩個子攻擊合約 (0x583c21) 和 (0xA0b3ee),為後續攻擊做準備。

2. 其次將 20,000,000 枚 DAI 通過 deposit 函數存入 Euler 中,獲得了 19,568,124.3 枚抵押物憑證代幣 eDAI。

3. 之後調用 mint 函數 (self borrow) 進行借款,借出了 195,681,243 枚 eDAI 和 200,000,000 枚債務代幣 dDAI。

4. 緊接著調用 repay 函數用剩餘的 10,000,000 枚 DAI 進行還款,其目的是為了減輕債務並增加抵押物價值,以便再次進行借貸。

5. 再次調用 mint 函數 (self borrow) 進行第二次借款,借出了 195,681,243 枚 eDAI 和 200,000,000 枚 dDAI,此時該賬戶中大約 410,930,612 枚 eDAI 與 390,000,000 枚 dDAI。

6. 然後調用 donateToReserves 函數將 100,000,000 枚 eDAI 捐贈給儲備地址,此時賬戶中的 eDAI 剩下 310,930,612 枚,而債務代幣 dDAI 有 390,000,000 枚,此刻賬戶處於爆倉狀態,但 donateToReserves 函數並沒有檢查賬戶的健康係數。

7. 通過另一個子攻擊合約 0xA0b3ee 調用清算函數去清算上一步中處於可被清算狀態下的賬戶 0x583c21。

清算過程中將 0x583c21 賬戶的 259,319,058 枚 dDAI 的負債轉移到 0xA0b3ee 上,並獲取了該賬戶的 310,930,612 枚 eDAI。

可以看出清算人僅承擔較少的債務卻可以獲得絕大部分的抵押品,這是因為 Euler 的軟清算機制:當清算人開始進行清算時,將會根據債務人的健康係數計算折扣。根據這個特性當健康係數越低時,折扣越大,所能轉移抵押品越多,最終只要能覆蓋本身的債務既可完成獲利。

由於清算後 0xA0b3ee 賬戶獲得的抵押品是超過債務數量的,所以能成功通過清算檢查。

8. 最後通過調用 withdraw 函數進行提款上一步清算中得到的資金,並歸還閃電貸獲利。

MistTrack 鏈上追踪

截止發文時間,100 ETH 已經被黑客轉移到 Tornado Cash。

剩餘資金作為餘額保留在黑客地址,以下為詳情:(備註:價格取 2023-03-14 10:00 UTC)

值得注意的是,此次攻擊事件共有 6 筆攻擊交易,除了第一筆攻擊交易為攻擊者 EOA 地址 1 發起的外,其他的攻擊交易發起人均為攻擊者 EOA 地址 2。

以下是 6 筆攻擊交易的時間線:

2023-03-13 11:38:11 UTC,攻擊者 EOA 地址 1 將獲利的 8,877,507.34 DAI 提款到攻擊者 EOA 地址 2 的獲利地址。

2023-03-13 12:08:35 UTC,攻擊者 EOA 地址 1 發起鏈上喊話交易,喊話內容為:攻擊者 EOA 地址 1 自稱為 MEV 機器人,搶跑了攻擊者 EOA 地址 2 的第一筆攻擊交易,嘗試搶跑其他的攻擊交易但失敗。更不幸的是,它創建的攻擊合約只能提款到攻擊者 EOA 地址 2 的獲利地址。

根據 MistTrack 鏈上分析團隊分析,攻擊者 EOA 地址 1 的手續費來源地址是 30 天前在 BSC 鏈採用閃電貸攻擊手法攻擊 EPMAX 項目的黑客地址,攻擊獲利 346,399.28 USDT。

攻擊獲利後,EPMAX 黑客地址通過 cBridge 跨鏈到 ETH 鏈後將獲利資金轉移到 Tornado Cash。EPMAX 黑客使用到的平台工具有 Multichain, FixedFloat, cBridge, 1inch 和 KyberSwap。

攻擊者 EOA 地址 2 的手續費來源是 Tornado Cash。

總結

綜上所述,我們可以發現其實單獨看 donate 操作,不檢查捐贈用戶的流動性是沒有問題的。當用戶捐贈後處於爆倉狀態時,自然會有套利機器人進行清算。而單獨看軟清算的特性反而可以減輕過度清算以及清算不足的情況,正常清算的情況下是要求清算者需要有一定的抵押物,以避免完成清算後無法通過流動性檢查。

但當捐贈操作與軟清算相結合時就發生了奇妙的化學反應,攻擊者通過槓桿 (self borrow) 與捐贈特性將本身的健康係數降低到 1 以下,這就直接導致了清算者在完成清算後的獲利可以覆蓋其負債。

此次攻擊事件的根本原因在於涉及用戶資金的關鍵函數缺少流動性檢查,並與動態更新折扣的清算機制構成了套利空間,導致攻擊者無需抵押或償還債務即可套取大量的抵押品。慢霧安全團隊建議借貸類型的協議在涉及用戶資金的函數需要做好必要的健康檢查,並且需要考慮到不同模塊組合後會形成的安全風險,設計安全的經濟模型與業務模型。

免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。