它是如何發生的,可以學到什麼


3 月13 日針對Euler Finance 的閃電貸攻擊導致超過1.95 億美元的損失。它導致通過多個去中心化金融(DeFi)協議蔓延,除Euler 外,至少有11 個協議因攻擊而遭受損失。

在接下來的23 天裡,令許多Euler 用戶大為欣慰的是,攻擊者歸還了所有被利用的資金。

但是,儘管加密貨幣社區可以慶祝資金的回歸,但問題仍然是類似的攻擊是否會在未來造成巨大損失。

分析攻擊是如何發生的,以及開發人員和用戶是否可以採取任何措施來幫助防止將來發生此類攻擊,這可能會有所幫助。

幸運的是,Euler 的開發者文檔清楚地解釋了協議的工作原理,並且區塊鏈本身保存了完整的攻擊記錄。

歐拉金融如何運作

根據協議的官方文檔,Euler 是一個類似於Compound 或Aave 的借貸平台。用戶可以存入加密貨幣並允許協議將其借給其他人,或者他們可以使用存款作為質押來借用加密貨幣。

用戶質押品的價值必須始終高於他們藉入的價值。假設用戶的質押品低於質押品價值與債務價值的特定比率。在這種情況下,該平台將允許他們被“清算”,這意味著他們的質押品將被出售以償還債務。用戶需要的質押品的確切數量取決於存入的資產與借入的資產。

eToken 是資產,而dToken 是債務

每當用戶向Euler 存款時,他們都會收到代表所存硬幣的eToken。例如,如果用戶存入1,000 美元硬幣(USDC),他們將收到相同數量的eUSDC 作為交易所。

由於隨著存款賺取利息,它們變得比基礎硬幣更有價值,因此就價值而言,eTokens 與基礎資產沒有1:1 的對應關係。

Euler 還允許用戶通過鑄造電子代幣來獲得槓桿作用。但如果他們這樣做,協議將向他們發送債務代幣(dTokens) 以平衡所創建的資產。

例如,文檔說如果用戶存入1,000 USDC,他們可以鑄造5,000 eUSDC。但是,如果他們這樣做,該協議還將向他們發送5,000 個名為“dUSDC”的債務代幣。

dToken 的傳輸函數的編寫方式與標準ERC-20 令牌不同。如果你擁有債務代幣,則無法將其轉讓給其他人,但任何人都可以根據需要從你那裡拿走dToken。

相關:流動性協議情緒被利用超過50 萬美元

根據Euler 文檔,用戶只能通過反復存款和借貸來鑄造盡可能多的eToken,正如它所說,“Mint 功能模擬瞭如果用戶存入1,000 美元USDC 會發生什麼,然後藉了900 美元的USDC,然後重新存入900 美元的USDC,再藉810 美元的USDC,等等。”

如果健康評分降至1 或以下,用戶將被清算

根據Euler 的一篇博客文章,每個用戶都有一個“健康評分”,該評分基於他們錢包中持有的eToken 的價值與持有的dToken 的價值。用戶需要擁有比dToken 更大的美元價值的eToken,但多多少取決於他們藉入或存入的特定代幣。無論如何,擁有足夠eToken 的用戶的健康評分將大於1。

如果用戶勉強低於所需的eToken 數量,他們的健康評分將恰好為1。這將使他們進行“軟清算”。 Liquidator 機器人可以調用函數將用戶的一些eToken 和dToken 轉移給自己,直到借款人的健康評分恢復到1.25。由於勉強低於質押品要求的用戶所擁有的質押品仍然多於債務,因此清算人應該從這筆交易中獲利。

如果用戶的健康評分低於1,則會根據健康評分的糟糕程度向清算人提供越來越多的折扣。健康評分越差,給清算人的折扣就越大。這是為了確保有人會在上漲過多壞賬之前清算賬戶。

Euler 的帖子聲稱其他協議為清算提供“固定折扣”,並論證了為什麼它認為可變折扣更好。

歐拉攻擊是如何發生的

區塊鏈數據顯示,攻擊者參與了一系列攻擊,從協議中耗盡了各種令牌。第一次攻擊從Dai 存款礦池中耗盡了價值約890 萬美元的Dai (DAI)。然後對其他存款礦池一遍又一遍地重複,直到總量被耗盡。

攻擊者使用了三個不同的以太坊地址來執行攻擊。第一個是智能合約,Etherscan 將其標記為“Euler Exploit Contract 1”,用於從Aave 借用。第二個地址用於向Euler 存款和借款,第三個地址用於執行清算。

為避免重複說明Etherscan 未標記的地址,第二個帳戶將被稱為“借款人”,第三個帳戶將被稱為“清算人”,如下所示:

黑客使用的以太坊地址。資料來源:Etherscan

第一次攻擊包括同一個區塊中的20 筆交易。

首先,Euler Exploit Contract 1 以閃電貸的方式從Aave 借了3000 萬DAI。然後它將這筆貸款發送到借款人賬戶。

在收到3000 萬DAI 後,借款人將其中的2000 萬存入Euler。 Euler 隨後做出回應,鑄造了大約1960 萬個eDAI 並將其發送給借款人。

這些eDAI 代幣是存款的收據,因此在此過程中並沒有鑄造相應數量的dDai。而且由於每個eDAI 可以贖回略多於一個DAI,借款人只收到1960 萬,而不是全部的2000 萬。

在完成這筆初始存款後,借款人鑄造了大約1.957 億個eDAI。作為回應,Euler 鑄造了2 億個dDAI 並將其發送給借款人。

此時,借款人已接近他們的eDAI 鑄幣限額,因為他們現在藉入的DAI 數量大約是他們存入的DAI 數量的10 倍。所以他們的下一步是償還一些債務。他們存入了他們持有的另外1000 萬個DAI,實際上償還了1000 萬美元的貸款。作為回應,Euler 從借款人的錢包中取出1000 萬個dDAI 並將其燒毀,使借款人的債務減少了1000 萬美元。

相關:Allbridge 向在閃貸攻擊中竊取57.3 萬美元的開發者提供賞金

然後攻擊者可以自由鑄造更多的eDAI。借款人又鑄造了1.957 億個eDAI,使他們鑄造的eDAI 總量達到約3.914 億個。存單中的1960 萬eDAI 使借款人的eDAI 總額達到約4.11 億。

作為回應,Euler 又鑄造了2 億個dDai 並將其發送給借款人,使借款人的總債務達到4 億美元。

一旦借款人最大化了他們的eDAI 鑄造能力,他們就向空地址發送了1 億個eDai,有效地摧毀了它。

這使他們的健康評分遠低於1,因為他們現在有4 億美元的債務,而資產約為3.2 億美元。

這就是清算賬戶的用武之地。它調用了清算功能,輸入借款人的地址作為要清算的賬戶。

歐拉攻擊期間發出的清算事件。資料來源:以太坊區塊鏈數據

作為回應,歐拉啟動了清算程序。它首先從借款人那裡拿走了大約2.54 億個dDAI 並將其銷毀,然後鑄造了2.54 億個新的dDai 並將其轉移給清算人。這兩個步驟將價值2.54 億美元的債務從借款人轉移到清算人。

接下來,Euler 又鑄造了508 萬個dDAI,並將其發送給清算人。這使清算人的債務達到2.6 億美元。最後,Euler 將大約3.109 億個eDAI 從借款人轉移到清算人,完成了清算程序。

最後,借款人沒有eDAI,沒有DAI,還有1.46 億個dDAI。這意味著該賬戶沒有資產和價值1.46 億美元的債務。

另一方面,清算人擁有大約3.109 億個eDAI 而只有2.6 億個dDAI。

清算完成後,清算人贖回了3800 萬個eDAI(3890 萬美元),獲得了3890 萬個DAI 作為回報。然後,他們將3000 萬DAI 加上利息返還給Euler Exploiter Contract 1,該合約用於償還Aave 的貸款。

最後,清算人只剩下大約。 890 萬美元的利潤被該協議的其他用戶利用。

這種攻擊針對多個其他代幣重複進行,包括Wrapped Bitcoin (WBTC)、Staked Ether (stETH) 和USDC,被利用的加密貨幣價值達1.97 億美元。

歐拉攻擊的損失。資料來源:Blocksec

歐拉攻擊出了什麼問題

區塊鏈安全公司Omniscia 和SlowMist 已經分析了這次攻擊,試圖確定是什麼阻止了它。

根據Omniscia 3 月13 日的一份報告,Euler 的主要問題是其“donateToReserves”功能。這個功能允許攻擊者將他們的eDAI 捐贈給Euler 儲備,從他們的錢包中移除資產而不移除相應數量的債務。 Omnisica 表示,這個功能在Euler 的原始版本中並不存在,而是在Euler Improvement Proposal 14 (eIP-14) 中引入的。

eIP-14 的代碼顯示它創建了一個名為donateToReserves 的函數,該函數允許用戶將代幣從他們自己的餘額轉移到一個名為“assetStorage.reserveBalance”的協議變量。每當調用此函數時,合約都會發出一個“RequestDonate”事件,提供有關交易的信息。

區塊鏈數據顯示,此RequestDonate 事件是為價值1 億代幣發出的。這是Etherscan 顯示的被銷毀的確切數量,將賬戶推向破產。

在攻擊期間發出Euler 的RequestDonate 事件。資料來源:以太坊區塊鏈數據

在他們3 月15 日的分析中,慢霧同意Omniscia 關於donateToReserve 函數的重要性的觀點,並指出:

“用戶向儲備地址捐款後,未檢查用戶是否處於清算狀態,導致直接觸發軟清算機制。”

即使捐贈功能不存在,攻擊者也可能能夠執行攻擊。 GitHub 上的Euler “EToken.sol” 合約代碼包含標準的ERC-20 “轉賬”功能。這似乎意味著攻擊者可能已經將他們的eToken 轉移給了另一個隨機用戶或空地址而不是捐贈,無論如何都會將自己推向破產。

Euler eToken合約轉賬功能。資料來源:GitHub

然而,攻擊者確實選擇捐贈資金而不是轉移資金,這表明轉移不會奏效。

Cointelegraph 已聯繫Omniscia、SlowMist 和Euler 團隊,以澄清donateToReserves 函數是否對攻擊至關重要。但是,截至發稿時尚未收到回复。

相關:Euler 團隊否認鏈上偵探是黑客案件的嫌疑人

兩家公司一致認為,歐拉的另一個主要弱點是向清算人提供的大幅折扣。根據SlowMist 的說法,當貸款協議具有“動態更新折扣的清算機制”時,它“為攻擊者創造了有利潤的套利機會,可以在不需要質押品或債務償還的情況下抽取大量質押品。” Omniscia 也做出了類似的觀察,他說:

“當違規者自行清算時,將應用基於百分比的折扣 […] 保證他們將’在水面上’並且只承擔與他們將獲得的質押品相匹配的債務。 ”

如何防止未來的歐拉攻擊

在其分析中,慢霧建議開發人員如何防止未來再次發生歐拉式攻擊。它認為藉貸協議不應允許用戶銷毀資產,如果這會導致他們產生壞賬,並且它聲稱開發人員在使用可能以意想不到的方式相互交互的多個模塊時應該小心:

“慢霧安全團隊建議借貸協議在涉及用戶資金的功能中加入必要的健康檢查,同時還要考慮組合不同模塊可能產生的安全風險。 這將允許設計安全、經濟和可行的模型,以在未來有效減輕此類攻擊。”

DeFi 開發商Spool 的一位代表告訴Cointelegraph,技術風險是DeFi 生態系統的固有特徵。雖然無法消除它,但可以通過適當評估協議風險的模型來減輕它。

根據Spool 的風險管理白皮書,它使用“風險矩陣”來確定協議的風險程度。該矩陣考慮了協議的年收益率(APY)、對其合約執行的審計、自部署以來的時間、總價值鎖定(TVL) 等因素,以創建風險評級。 Spool 的用戶可以利用這個矩陣來去中心化DeFi 投資並限制風險。

該代表告訴Cointelegraph,Spool 的矩陣顯著減少了投資者因Euler 事件而遭受的損失。

“在這起事件中,受影響最嚴重的Smart Vaults,即用戶為尋求更高(和風險更高)的收益而設計的Smart Vaults,只受到了高達35% 的影響。 相比之下,接觸Euler 策略(通過Harvest 或Idle)受影響最小的金庫僅受到6% 的影響。 一些金庫的曝光度為零,因此沒有受到影響,”他們說。

Spool 繼續說道,“雖然這並不理想,但它清楚地證明了Smart Vaults 提供量身定制的風險模型以及在多個收益來源之間分配用戶資金的能力。”

Cointelegraph 從SwissBorg 得到了類似的回答,SwissBorg 是另一個DeFi 協議,旨在幫助用戶通過多樣化來限制風險。 SwissBorg 首席執行官Cyrus Fazel 表示,SwissBorg 應用程序具有“基於風險/時間APY 的不同收益策略”。

有些策略被列為“1:核心=低”,而另一些策略被列為“2:冒險=冒險”。 Fazel 表示,由於Euler 的評級為“2”,該協議的損失僅限於SwissBorg 鎖定總價值的一小部分。

SwissBorg 工程主管Nicolas Rémond 進一步澄清說,該團隊採用複雜的標準來確定哪些協議可以列在SwissBorg 應用程序中。

“在進入任何頭寸之前,我們對所有DeFi 平台都有盡職調查程序。 然後,一旦我們到了那裡,我們就有了操作程序,”他說,並補充道,“盡職調查都是關於TVL、團隊、審計、開源代碼、TVL、oracle 操縱攻擊等。 […] 操作流程是關於平台監控、社交媒體監控和一些應急措施。有些仍然是手動的,但我們正在投資以自動化所有基於的東西,這樣我們就可以非常反應。 ”

在3 月13 日的Twitter 線程中,SwissBorg 團隊表示,儘管該協議從一個礦池中損失了2.2% 的資金,從另一個礦池中損失了29.52% 的資金,但如果無法從Euler 收回資金,SwissBorg 將補償所有用戶。

Euler 攻擊是2023 年第一季度最嚴重的DeFi 攻擊。值得慶幸的是,攻擊者歸還了大部分資金,大多數用戶最終應該沒有損失。但隨著DeFi 生態系統的不斷擴大,此次攻擊引發了開發人員和用戶如何限制風險的問題。

開發商勤奮和投資者多元化的某種結合可能是解決問題的方法。但無論如何,Euler 黑客攻擊可能會在未來很長一段時間內繼續被討論,如果沒有其他原因,只是因為它的規模和對DeFi 漏洞利用風險的說明。

資訊來源:由0x資訊編譯自COINTELEGRAPH。版權歸作者Tom Blackstone所有,未經許可,不得轉載

Total
0
Shares
Related Posts