DeFi 收益聚合器 Rari Capital 本月 8 日驚傳遭駭,受害的以太幣資金池共損失 2,600 ETH,現值超過 1,000 萬美元。動區專欄作者 慢霧 SlowMist 第一時間介入分析,並將攻擊細節分享給大家。
(前情提要:DeFi|Rari Capital 遭駭!損失1,000萬鎂 ETH,RGT急跌47%;研究員 : 首個跨鏈攻擊)
(事件背景:BSC首現閃電貸攻擊/技術解析 Spartan Protocol 遭駭手法,造成 3 千萬美元損失)
2
021 年 5 月 8 日,以太坊收益聚合協議 Rari Capital 因匯集了 Alpha Finance 而產生漏洞,損失近 1500 萬美元。
事後,Rari Capital 官方發佈了事故報告,分析了此次事故的主要原因。筆者以官方分析的基礎出發,結合自身對此事件的深入解析,進一步解讀安全事故的原因。
There has been an exploit in the Rari Capital ETH Pool related to our @AlphaFinanceLab integration.
The rebalancer has removed all funds from Alpha in response.
We are currently investigating the situation and a full report will be shared once everything is assessed.
— Rari Capital (@RariCapital) May 8, 2021
攻擊細節分析
本次攻擊發生在 Rari Capital 的 RariManger 合約中,整體過程就是攻擊者先透過閃電貸從 dYdX 中借出巨量資金,然後不停的重複調用 RariManger 合約中的 deposit 和 withdraw 函數,完成獲利。如下圖:
– 圖片來源:微信原文 –
那麼用戶是如何透過 deposit 和 withdraw 這兩個操作獲利的呢?我們需要分析對應的函數:
以上是 deposit 函數的部分邏輯,首先 deposit 函數本身會調用内部的 _depositTo 函數,然後會再次調用 getFundBalance 函數來獲取合約的餘額。getFundBalance 函數最終是會調用到 Rari Controller 合約的 getBalance 函數去獲取餘額。
最後透過 Rari Controller 合約中的 AlphaPoolController 庫的 getBalance 函數獲取餘額。如下圖:
流程上略為複雜,用圖來顯示大概就是下面這樣:
從上面的分析中不難發現,Rari 合約最終是用到了 Alpha Finance 項目的 ibETH 合約的 totalETH 函數獲取合約餘額,目的是為了根據 totalETH 和 totalSupply 的比值計算出 Rari 合約真正的 ETH 餘額。
deposit 函數是根據用戶的充值 ETH 的數量和比值計算要發放給用户的 REPT 數量,而 withdraw 函數的公式也大同小異,同樣需要通過 getBalance 函數獲取合約的 ETH 餘額並計算比值,然後根據用戶的 REPT 代幣的餘額和比值計算需要返還给用户的 ETH 數量。
但是問題恰出在這個獲取 ETH 餘額的公式上。
根據官方描述,從 ibETH 合約獲取的 totalETH 函數獲取的值是可以被用戶操控的。以下是官方原文:
根據官方的描述,用戶可透過 ibETH 合约的 work 函數操控 totalETH 函數返回的值,導致 Rari 整個價值計算公式崩潰。我們分别分析 ibETH 的 work 函數和 totalETH 函數:
totalETH 函數:
work 函數:
以上分別是 ibETH 合約中的 totalETH 函數和 work 函數的部分實踐。
不難發現 totalETH 函數其實就是獲取合約總共 ETH 的數量。而 work 函數,本身是一個 payable 函數,也就是說,用戶是可以透過 work 函數來控制 ibETH 合約中的 ETH 數量進而改變 totalETH 返回值的。更糟糕的是,work 函數同時還支持調用其他的任意合約,這樣整個思路就很清楚了。
延伸閱讀:事件始末 | 黃立成旗下 Defi 新創Cream.Finance遭閃電貸攻擊,駭客得手近 10億台幣
攻擊流程
1、從 dYdX 中進行閃電貸,借出大量的 ETH;
2、使用一部分的 ETH 充值到 Rari Capital 合約中,此時從 ibETH 獲取的比值還是正常的;
3、使用剩餘的 ETH 充值到 ibETH 合約中,調用 ibETH 合約的 work 函數,為後續推高 ibETH 合約的 totalETH 返回值做準備;
4、在 work 函數中同時對 Rari Capital 合約發起提現,由於上一步已經推高 totalETH 值,但是計算的 totalETH()/totalSupply() 的值相對於充值時被拉高,從而使攻擊者能從 Rari Capital 中使用等量的 REPT 獲取到更多的 ETH。
總結
本次分析下來,主要的原因是協議的不兼容問題,攻擊者透過閃貸和重入的方式,攻擊了 Rari Capital,造成了巨大損失。
筆者建議在 DeFi 逐漸趨於複雜的情況下,各 DeFi 項目在進行協議間交互時,需要做好協議之間的兼容性,避免因協議兼容問題導致的損失。
📍相關報導📍
觀點|以太坊 DeFi 溢出效應強烈,「跨鏈宇宙」來襲!解析這輪牛市的板塊輪動
交易所 Hotbit 驚傳被駭!關停服務整整 7-14 天、200萬用戶遭殃,網轟 : 根本搶劫
資安專欄|DeFi 聚合平台 “Furucombo” 被駭細節分析,與用戶建議
讓動區 Telegram 新聞頻道再次強大!!立即加入獲得第一手區塊鏈、加密貨幣新聞報導。
LINE 與 Messenger 不定期為大家服務