鴕鳥區塊鏈

SharkTeam獨家分析 | 閃電貸攻擊:Indexed Finance被黑事件分析

SharkTeam 2021-10-17 10:05
摘要:

閃電貸攻擊:Indexed Finance被黑事件分析

北京時間2021年10月15日凌晨2:38分(UTC+8),Indexed Finance遭受閃電貸攻擊,代幣價格斷崖式下跌。攻擊者利用了該項目數字資產價格計算公式的缺陷實施了攻擊,獲利高達1600萬美元。

image.png

SharkTeam第一時間對此事件進行了攻擊分析和技術分析,并總結了安全防范手段,希望后續的區塊鏈項目可以引以為戒,共筑區塊鏈行業的安全防線。

一、事件分析

交易地址

0xbde4521c5ac08d0033019993b0e7e1d29b1457e80e7743d318a3c27649ca4417

黑客地址

0xba5ed1488be60ba2facc6b66c6d6f0befba22ebe

攻擊合約地址

0xfbc2e6b188013fc5eacd9944e6b8ced2c467464a

其根本原因在于更新索引池采用的策略不當,攻擊者能夠通過操縱SUSHI Token的初始權重,使得添加流動性能夠獲得遠高于正常情況的LP Token最終獲利。

交易明細

1.攻擊者首先調用reindexPool函數。通過調用MarketCapSqrtController合約(0x120c6956d292b800a835cb935c9dd326bdb4e011)獲取當前前五的Token。

image.png

當前排名前五的Token為UNI,AAVE,CRV,COMP,SUSHI(新增)。

image.png

下面是函數調用及對綁定Token的邏輯解釋。

image.png

reindexPool函數具體代碼如下圖。當我們調用reindexPool函數時,MarketCapacity 會根據tokens的地址作為參數調用對應池中的 reindexTokens。如果前五的Token發生變化(新Token排名上升到前五),DEFI5則會在原有的基礎上綁定上新Token。

image.png

reindexTokens代碼如下圖,只允許MarketCapSqrtController.reindexPools調用reindexTokens函數。

image.png

注意DEFI5只允許reindexTokens函數通過_bind綁定新Token。

image.png

但此時(綁定SUSHI Token后)并不能使用SUSHI進行交易,因為要求record.ready=true,此時為false。只有下圖中條件成立后,Token就被視為已初始化,可以由礦池買賣。這一步驟為后面的攻擊打下了基礎。

image.png

2.從SushiSwap平臺閃電貸獲取指定的Token

61fcc98db2c158dcbdb1d4f1a5ce08b.png

3.將閃電貸獲取的資金通過調用DelegateCallProxyManyToOne.swapExactAmountIn函數全部兌換成UNI Token(池中 UNI 的數量減少),使得poolValue值減少(UNI實際上是池中的first Token,由于poolValue是通過first Token來計算的,攻擊者通過操縱UNI的數量進而控制poolValue的值,計算公式見步驟4)。

3.1 AAVE

ccc4a29c1aa4c4f5080816937278c68.png

以下面框中為例,從DEFI5 Token池中,最終將閃電貸借出的AAVE全部兌換成UNI Token(其余Token同理)

image.png

3.2 COMP

1c219e2f1b98b82d2dbcf461ef9dda9.png

3.3 CRV

2fef298bb939d52ed2de0a6a7170260.png

3.4 MKR

21d7e09a9a9cc6986f00e64be9232ca.png

3.5 MKR

5cee029c1588f466bdf3c206aba9191.png

4.調用MarketCapSqrtController.updateMinimumBalance函數設置 SUSHI 在DEFI5中的 minimumBalance。

image.png

image.png

官方說明:為了防止最低余額與索引池的1%的價值相差甚遠,以至于沒有人愿意將其交換到池中,控制器通過函數updateMinimumBalance來重置未初始化Token的虛擬余額。

image.png

image.png

image.png

其計算totalsupply的公式如下:

357189ae472c5b28911e8930ca16cbe.png

由于其中是根據first Token的流動性來估算整個池子的價值,其公式又可以視為:

d9d57a0111713c8661b6b7af0e08645.png

即攻擊者可以通過操縱poolValue的值來間接操縱minimumBalance的值,進而控制新Token的初始權重,其公式見步驟5。

5.通過調用DelegateCallProxyManyToOne.joinswapExternAmountIn 函數將swap得到的UNI token添加到池中以提供流動性,獲取LP token:DEFI5

image.png

c59979d5595225c4dc3a9f67853c633.png

6.使用閃電貸借取SUSHI Token,將其添加至DEFI5,然后調用gulp函數對SUSHI進行初始化,由于先前的步驟操縱了SUSHI的minimumBalance(令其變得極小),SUSHI初始權重(denorm)會非常大。

image.png

6dee5fe5627ef25f122810b40d4d924.png

gulp函數用來對新Token進行初始化并計算初始權重。定義由下圖所示。

image.png

我們可以看到,計算初始權重denorm的公式為

eed25ae2fbb3e405c8e38a0c31adbe0.png

可以看到當minimumBalance越小,其初始權值enorm越大。

7. 通過exitPool函數將之前獲得的LP Token換回underlying Tokens (UNI, AAVE, COMP, SNX, CRV, MKR, SUSHI)

image.png

81d1f5b319dd709ab2ffc4d076196c3.png8.將SUSHI兌換為DEFI5,由于SUSHI初始權重極高,使得兌換獲得的DEFI5的價值也極高

image.png

964fd0913f04de8967f030b942d172a.png

 9.將所有DEFI5兌換掉,其中5061.099 DEFI5轉移至0x78a3ef

image.png

cb563988de9462ece11cdc4c2834d94.png

10. 將SUSHI兌換成DEFI5 

image.png

11.將DEFI5兌換成其他Token

image.png

12.歸還閃電貸

image.png

13.將剩余的Token 轉移至黑客地址

image.png

二、安全建議

此次事件是又一次與閃電貸有關的安全事件,DeFi項目的業務邏輯設計復雜,涉及的經濟學計算和參數較多,卻不同項目和協議之間可組合性極其豐富,很難預測,非常容易出現安全漏洞。如下表,利用閃電貸這種新型產品進行攻擊的DeFi事件在過去的一年里層出不窮,已增加到45起。通常閃電貸攻擊包括“哄抬套利”、“操縱預言機”、“重入攻擊”和“技術漏洞”四種,本次屬于基于利用“技術漏洞”進行的閃電貸攻擊。

image.png

SharkTeam提醒您,在涉足區塊鏈項目時請提高警惕,選擇更穩定、更安全,且經過完備多輪審計的公鏈和項目,切不可將您的資產置于風險之中,淪為黑客的提款機。而作為項目方,智能合約安全關系用戶的財產安全,至關重要!區塊鏈項目方應與專業的安全審計公司合作,進行多輪審計,避免合約中的狀態和計算錯誤,為用戶的數字資產安全和項目本身安全提供保障。

SharkTeam作為領先的區塊鏈安全服務團隊,為開發者提供智能合約審計服務。智能合約審計服務由人工審計和自動化審計構成,滿足不同客戶需求,獨家實現覆蓋高級語言層、虛擬機層、區塊鏈層、業務邏輯層四個方面近兩百項審計內容,全面保障智能合約安全。

image.png

==

和2萬人一起加入鴕鳥社群

添加QQ群:645991580

添加TG群:鴕鳥中文社區 https://t.me/tuoniaox

聲明: 鴕鳥區塊鏈所有發布內容均為原創或授權發布,如需轉載,請務必注明文章作者以及來源:鴕鳥區塊鏈(微信公眾號:MyTuoniao),任何不尊重原創的行為鴕鳥區塊鏈都將進行責任追究!鴕鳥區塊鏈報道和發布內容,不構成任何投資建議。

SharkTeam

——

65 篇 作品
彩票游戏