作者|0x6617

案件分析|鏈上天眼團隊

近年來,隨著DeFi市場規模的指數型增長,預言機作為DeFi安全性的重要組成部分,針對它的攻擊已是屢見不鮮,而本次INV(Inverse Finance的鏈上資產)的價格被操縱,既不是閃電貸攻擊,與Inverse Finance的智能合約或前端代碼也無關,而是TWAP預言機使用的時間窗口太短。

價格操縱的另一面是鏈上套利。 DeFi興起後,以太坊等區塊鍊網絡不僅支撐鏈上資產轉賬,還有瞭如挖礦、借貸、衍生品等智能合約的交互場景,這也使得鏈上可捕獲的價值變多,主要通過套利、清算的MEV(Maximum Extractable Value,最大可提取價值)提取的價值也在迅速增加,尤其是Flashbots推出可視化MEV產品「MEV-Explore v1」,更是將MEV清晰地呈現在我們眼前。

由於存在鏈上套利機器人不間歇的搬磚行為,如果攻擊者操縱預言機,又不是藉助閃電貸在一個區塊內完成的話,防止MEV-bots搶跑(front-running)就成了攻擊者需要考慮的問題。

2022年1月26日,有黑客使用了與Inverse Finance攻擊者類似手法,攻擊了借貸平台Rari的Index Coop Pool,但卻上演了一幕「黑吃黑」,黑客的攻擊被MEV-bots「截胡」,最終虧損68 ETH離場。

雖然Inverse Finance此次事件的攻擊者預先準備了241個批量地址,每個地址打入1.5 ETH,但並不是為了發動DDOS攻擊阻截其他人(通常是套利機器人)在監測到INV價格異常波動後的套利行為,而是為了保證他的攻擊交易能被打包進下一個區塊。

如果有MEV-bots套利,則他的後續攻擊有可能跟Index Coop Pool的攻擊者一樣,面臨賠了夫人又折兵的局面。

Inverse Finance被盜過程全解析

Inverse Finance是一套無需許可的去中心化金融工具,由運行在以太坊區塊鏈上的去中心化自治組織Inverse DAO管理。 Inverse Finance的主要產品是Anchor(借貸)和DOLA(資產)。

Anchor是一種貨幣市場和合成資產協議,可實現資本高效的借貸。 DOLA是一種跟踪1 美元價格的鏈上資產。 DOLA可以用Anchor上的其他資產作為抵押來鑄造,也可以自己作為抵押借入Anchor上的其他資產。 INV具有附加功能,可用作錨定中的抵押資產。

經歐科雲鍊鍊上天眼分析,本次攻擊的關鍵在於,價格預言機雖然取了TWAP價格,但時間窗口較短,僅是相鄰兩個數值,由此使得操縱TWAP預言機成為可能。

另外SushiSwap: INV(INV-ETH交易對)的流動性非常低,僅用300 ETH(約103.5萬美元)換取INV,即可大幅拉升INV價格,這也使得攻擊者以1,746 INV(公允價值約64.4萬美元)作為抵押品,在Inverse Finance借出1,475萬美元的資產(包括1,588 ETH、94 WBTC、400萬DOLA,以及39 YFI),而後在INV價格被修正後,攻擊者的INV抵押品被清算。

相關地址&交易列表:

攻擊者地址1:

0x117C0391B3483E32AA665b5ecb2Cc539669EA7E9

攻擊者地址2:

0x8B4C1083cd6Aef062298E1Fa900df9832c8351b3

攻擊合約:

0xea0c959bbb7476ddd6cd4204bdee82b790aa1562

準備批量賬號交易:

0x561e94c8040c82f8ec717a03e49923385ff6c9e11da641fbc518ac318e588984

兌換INV交易,交易塊高「14506358」:

0x20a6dcff06a791a7f8be9f423053ce8caee3f9eecc31df32445fc98d4ccd8365

利用漏洞實施攻擊,交易塊高「14506359」

0x600373f67521324c8068cfd025f121a0843d57ec813411661b07edc5ff781842

預言機合約:

0x39b1dF026010b5aEA781f90542EE19E900F2Db15

攻擊流程:

1)攻擊者從Tornado Cash中提取了901 ETH,準備批量賬號——通過Disperse分別向241個乾淨的賬號發送1.5 ETH(合計361.5 ETH)作為手續費,交易哈希「0x561e」。

圖片來源:OKLink

2)部署攻擊合約「0xea0c」,攻擊者分別將300 ETH和200 ETH兌換成WETH,並在SushiSwap的INV-WETH池子中,使用300 WETH(約103.5萬美元),兌換出374枚INV。

原有46 WETH + 432枚INV ,拿300 ETH兌換374枚INV後,池子變成346 WETH + 58枚INV,即INV價格從0.106 WETH(約366美元)上漲至5.966 WETH(約20,583美元)。

隨後,攻擊者利用DOLA3POOL3Crv+SushiSWap把200WETH(約69萬美元)換成1,372枚INV。

攻擊者累計兌出1,746枚INV,交易哈希「0x20a6」。

圖片來源:OKLink

這裡可以發現,第一個池子用300WETH僅換出374枚INV,而第二個池子用200WETH卻兌換出了1,372枚INV,可以明顯看到第一個池子裡(INV-WETH)的INV價格已明顯被拉高。

3)隨著INV的價格被修改,攻擊者前往Inverse Finance抵押1,746枚INV,此時1枚INV的價值為20,583美元,從而藉出共計1,475萬美元的資產,包括1,588 ETH(約547.9萬美元) 、94 WBTC(435.2萬美元)、400萬DOLA(約400萬美元),以及39 YFI(約91.7萬美元)。

圖片來源:OKLink

攻擊漏洞分析:

本次攻擊者能成功盜取Inverse Finance 1,475萬美元的資產,其核心漏洞在於價格預言機雖然取了TWAP價格,但是採取的窗口只是相鄰兩個數值。

這裡我們先簡單科普一下TWAP (Time Weighted Average Price) 。 TWAP Oracles是一種去中心化預言機,通過時間加權平均價格的方式來消除閃電貸等攻擊方式對價格預言機的操縱,從而增加攻擊者操縱價格的成本。

在本次攻擊中,Keep3r TWAP價格在14,506,358塊上鍊,攻擊者需要在下一塊使用該價格,就可以利用操縱的價格貸出超值資產。具體如下,預言機合約「0x39b1」:

#4-6:為獲取TWAP價格,該數值為操縱後的,在操縱價格交易塊高14,506,358上鍊。

#10-12:攻擊交易發生在塊高14,506,359,因此此處邏輯為獲取操縱之前的價格。

#17:此處計算實際是將兩個相鄰價格進行計算,使得操縱的TWAP價格發揮作用。

批量賬號作用:

我們在前文提到過,攻擊者在交易哈希為「0x561e」中準備了241個批量賬號,每個地址打入1.5 ETH作為手續費,並且這些賬號在操縱價格交易(塊高14,506,358)發生之前就開始發送攻擊交易。

從攻擊合約交易歷史可以看到,攻擊交易在區塊高度14,506,357就已經開始發送,操縱價格發生在下一塊14,506,358,具體攻擊交易發生在再下一塊14,506,359。

攻擊者使用這些賬號只是保證攻擊交易能在操縱價格的下一塊成交,從而使得操縱的價格可以發揮作用;但是並不能防止其他人(一般是MEV-bots)在監聽到INV價格從0.106 ETH升高到5.966 ETH時進行套利(賣出INV將價格拉回正常數值)。

我們再分析操縱價格交易第二部分的200 WETH,從Curve兌換出DOLA後,在Sushiswap的DOLA-INV池購買INV。該池原有2,188,077 DOLA + 5,734 INV(價格:382 DOLA/INV), 拿690,203 DOLA換成1,372 INV後,池子變為2,878,280 DOLA+ 4,362 INV(價格:660 DOLA/INV)。

我們之前計算過,攻擊者在WETH-INV池子中,將INV價格從0.106 WETH(約366美元)拉升至5.966 WETH(約20,583美元),而在DOLA-INV池子中,則是0.146 WETH(504美元),這意味著如果有MEV-bots從這個池子購入INV,然後賣出到WETH-INV池,是可以實現套利的,但實際情況是沒有MEV-bots發起套利交易(我們在後文列舉了一個相似攻擊手法,但遭遇MEV-bots「截胡」的案例)。

另一方面,操縱價格交易所在區塊高度14,506,358只有199個交易,且Gas使用只有52.27%,所以241個賬號發送交易的目的也不是填滿區塊以阻止其他交易。

圖片來源:OKLink

另外,下圖可以看出,操縱價格交易之前WETH-INV對交易並不頻繁。

相似手法,卻遇「黑吃黑」

2022年1月26日有黑客以類似的手法攻擊了借貸平台Rari的Index Coop Pool,但結果卻是攻擊失敗。

攻擊者首先買入285 ETH 的BED(WETH、WBTC、DPI組成的合成資產),希望大幅抬高BEP價格影響Uniswap V3 TWAP預言機,再抵押提前準備的BED借出其他資產。

圖片來源:OKLink

由於BED在其他市場基本沒有流動性,正常情況下這次攻擊會成功。但攻擊者忽略了BED本身屬於合成資產,除了市場上的流動性外,還可以用對應等值的資產mint。

於是在黑客發起攻擊的的下一個區塊,MEV-bots就發起了“反擊”。 MEV-bots通過購買WETH、WBTC、DPI直接mint出了4,915.91個BED並賣出,直接將價格拉回了正常水平。

由於使用了TWAP預言機,單一區塊的波動無法影響最終預言機價格。所以攻擊者計劃落空,最終虧損了68 ETH離場。

數據顯示,截至4月8日,MEV提取價值已經達到了6.08億美元,其中99.4%來自套利。過去30日的MEV提取價值為740萬美元。

安全,是DeFi生態繁榮發展的保證

預言機作為DeFi生態重要的基礎設施,其安全性是DeFi生態繁榮發展的保證,鏈上天眼認為,安全審計應審查預言機的價格算法、經濟模型等。

項目方在設計借貸池的時候,抵押借貸的經濟模型,不僅要關注價格,還要關注流動性,流動性差會導致相應的鏈上資產價格易被操縱。在上線前應加強對預言機的針對性測試,上線後也需對預言機進行定期的安全檢查。