慢霧安全團隊建議借貸類型的協議在涉及用戶資金的函數需要做好必要的健康檢查。
By: 九九& Zero
據慢霧安全團隊情報,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 以下,這就直接導致了清算者在完成清算後的獲利可以覆蓋其負債。
此次攻擊事件的根本原因在於涉及用戶資金的關鍵函數缺少流動性檢查,並與動態更新折扣的清算機制構成了套利空間,導致攻擊者無需抵押或償還債務即可套取大量的抵押品。慢霧安全團隊建議借貸類型的協議在涉及用戶資金的函數需要做好必要的健康檢查,並且需要考慮到不同模塊組合後會形成的安全風險,設計安全的經濟模型與業務模型。
展開全文打開碳鏈價值APP 查看更多精彩資訊