不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

2021-12-01 21:12:04

11月30日,鏈必應-區塊鏈安全態勢感知平臺輿情監測顯示,自動做市商協議MonoX遭閃電貸攻擊,獲利約3100萬美元。關於本次攻擊,成都鏈安技術團隊第一時間進行了事件分析。

事件概覽

攻擊發生之後,MonoX在官方推特確認其合約遭到攻擊,團隊正在調查並將盡最大努力追回被盜資金。


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

MonoX使用單邊代幣池模型,其使用vCASH穩定幣與AMM提供的代幣創建虛擬的交易對。簡單來說,MonoX創建的是代幣-vCASH交易對,添加流動性時,只需要添加代幣,進行任意代幣兌換時,兌換路徑為:代幣A -> vCASH -> 代幣B,而不需要像Uniswap一樣經過多個交易對:代幣A -> Pair1-> Pair2-> Pair3-> Token B。

事件具體分析

攻擊者使用相同的地址

0xEcbE385F78041895c311070F344b55BfAa953258對以太坊以及MATIC上的MonoX發起了攻擊,在兩個平臺進行攻擊所部署的合約一致。攻擊交易為:

以太坊:

0x9f14d093a2349de08f02fc0fb018dadb449351d0cdb7d0738ff69cc6fef5f299

MATIC:

0x5a03b9c03eedcb9ec6e70c6841eaa4976a732d050a6218969e39483bb3004d5d

由於兩個平臺代碼完全一致,下面的分析將基於以太坊上的攻擊交易進行。

Round 1

將 0.1 WETH 通過 Monoswap中兌換為79.98609431154262101 MONO;


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 1 WETH兌換MONO

Round 2

移除Monoswap所有的流動性。這裏利用了Monoswap合約中的任意地址流動性移除漏洞。

漏洞1:

Monoswap合約中未檢測流動性的所有者to是否為msg.sender。_removeLiquidity函數中,如圖2所示,第443行,獲取調用者(攻擊合約)最後一次添加流動性的時間戳,返回結果是0,因此第445行的檢測通過。第446行,topLPHolderOf如果不是調用者(攻擊合約)地址,第447行的檢測通過。此後移除流動性相關代碼中,再無msg.sender相關的操作。


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 2 _removeLiquidity源碼


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 3 第一次移除流動性內部調用細節


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 4 移除Monoswap中MONO池所有的流動性

Round 3

添加極少數量的MONO到Monoswap中,這一步是為了後面快速提升MONO的價格做准備。


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 5 攻擊合約添加流動性

Round 4

利用Monoswap合約中的代幣兌換價格覆寫漏洞,反復進行同種代幣的兌換,拉升MONO的價格。第3步攻擊者將Monoswap合約中MONO的儲量控制到了一個極小的值,目的就是更快的以極低的MONO數量來拉升MONO的價格。

漏洞2:

Monoswap合約的代幣兌換過程為:檢查兌換參數是否正常,然後計算應輸入輸出代幣的數量以及代幣兌換後的價格,最後執行兌換操作並將新的代幣價格寫入账本。以上邏輯在不同種代幣兌換的時候會正常運行。但是在同種代幣兌換時,將出現兩處問題:

(1) 在_getNewPrice函數計算應輸入輸出代幣數量時,未考慮到兌換過程中交易池代幣儲量的變更,同種代幣是基於相同的初始價格進行兌換後價格的計算。

(2)在最後一步更新代幣過程中,未考慮到同種代幣進行兌換時,兌出代幣的價格更新操作(圖6 第841行)會覆蓋兌入代幣更新的操作(圖6 第830行)。該漏洞導致MONO代幣兌換MONO代幣時,MONO的價格異常增長。此外不止攻擊者使用的swapExactTokenForToken函數存在該問題,swapTokenForExactToken函數也存在該問題。


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 6 swapIn函數源碼


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 7 兌換過程參數計算


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 8 兌換後價格計算


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 9 swapOut函數源碼

現在看看攻擊者是如何利用漏洞2進行攻擊的:

(1)如圖10所示,初始MONO的價格為5.218 vCASH/MONO。


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 10 初始MONO價格

然後攻擊者反復進行MONO->MONO的兌換,一共進行了55次兌換,如下圖所示:


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 11 反復兌換,拉升MONO價格

對其中一筆兌換交易進行分析,每次兌換的數量是交易池中MONO的總量減去1,這是能夠最大提升MONO價格的兌換數量(使圖8 _getNewPrice第527行,分母為1)。另外由於交易池中MONO的總量較低(第3步的操作),攻擊者已經通過第1步保證了有足夠的余額進行兌換操作。


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 12 MONO兌換細節

截止至兌換結束時,MONO的價格已經被拉升至843,741,636,512.366 vCASH/MONO。攻擊合約中剩余51.92049285389317 MONO。


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

圖 13 最終的MONO價格

(2)通過Uniswap V2的USDC/WETH池借入了847.2066974335073 WETH。然後攻擊者通過Monoswap將0.0709532091008681 MONO 兌換為4,029,106.880396 USDC,然後將USDC歸還給USDC/WETH池。注意,這裏實際上是攻擊者將從Monoswap中兌換的USDC到Uniswap V2中兌換為WETH,而不是閃電貸攻擊。

(3)攻擊者所有轉出的資產如下:


      不安分的黑客又“偷襲”?MonoX被攻擊事件全解析

所有被盜資產全部發送到

0x8f6a86f3ab015f4d03ddb13abb02710e6d7ab31b地址。

目前項目方已經和攻擊者進行了溝通,成都鏈安將持續對此事件進行監控。

事件復盤

這次攻擊事件中,攻擊者利用了合約中的兩個漏洞:(1)任何地址都可以任意移除指定地址的流動性;(2)特殊情況下的價格寫入操作覆蓋問題。

建議項目方在進行合約开發過程中做好權限的檢查;在开發以及測試過程中將特殊情況納入考慮,例如同種代幣轉账。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

XRP飆升至三年新高,ChatGPT預言2025年可達5美元!

人工智能預測XRP何時可能達到5美元,並對新興山寨幣STARS給出看漲預測 全球交易者正在轉向Ch...

coincaso
1 1小時前

今日推薦|傳統金融巨頭Visa、摩根大通等正在積極推動資產代幣化

什么是代幣化資產?代幣化資產是資產所有權的數字化表示,存儲在區塊鏈上。這些數字代幣使得高價值資產可...

coincaso
10 1天前

超萬億市場的變革——了解真實世界資產代幣化

簡介:什么是資產代幣化? 首先,定義代幣化——這是一個將資產的發行、記账和管理流程轉變為數字化的過...

coincaso
24 1周前

UU Wallet:守正出奇、合規創新,東南亞加密支付新勢力

由Chainlink主辦的2024 SmartCon大會近日在香港落幕,作為大會頂級贊助商之一,東...

coincaso
26 1周前

COW 單日翻倍領漲 DeFi 賽道,V 神最愛的 swap 有什么本領?

隨着特朗普的勝選,加密資產全线普漲,但最為矚目的項目當屬剛剛上线幣安的 COW,最高漲幅204%。...

coincaso
30 1周前

今日推薦|DeFi 代幣飆升 30%,交易員預計在特朗普領導下 DeFi 將迎來“更友好”的環境

DeFi 公司擔心在美國證券交易委員會的監督下為其代幣實施“價值累積機制”——但隨着當選總統唐納德...

coincaso
30 2周前