復盤:MOBOX 被黑分析
撰文:Doris,慢霧科技
背景
2024 年 3 月 14 日,據慢霧 MistEye 安全監控系統預警,Optimism 鏈上的去中心化借貸協議 MOBOX 遭攻擊,損失約 75 萬美元。慢霧安全團隊對該攻擊事件展開分析並將結果分享如下:
(https://twitter.com/SlowMist_Team/status/1768167772230713410)
相關信息
攻擊者地址:
0x4e2c6096985e0b2825d06c16f1c8cdc559c1d6f8
0x96f004c81d2c7b907f92c45922d38ab870a53945
被攻擊的合約地址:
0xae7b6514af26bcb2332fea53b8dd57bc13a7838e
攻擊交易:
0x4ec3061724ca9f0b8d400866dd83b92647ad8c943a1c0ae9ae6c9bd1ef789417
攻擊核心
本次攻擊的核心點主要有兩個,其一是攻擊者利用合約中的 borrow() 函數漏洞,每次調用該函數都會觸發對推薦人地址的獎勵分配。由於獎勵的計算是基於轉移的代幣數量確定的,所以攻擊者可以通過將給推薦人的獎勵再次轉回被攻擊合約來增加下一次借款的數量。其二是每次調用 borrow() 函數會燃燒掉池子中的一部分 MO 代幣,因此 MO 代幣的價格被不斷拉高,最終攻擊者可以通過不斷借款並疊加獎勵獲利。
交易分析
我們可以發現,整個攻擊的流程主要是通過循環調用存在漏洞的 borrow() 函數,隨後立即調用 redeem() 進行贖回,再將分配給推薦人的代幣轉移回攻擊合約。
跟進 borrow() 函數進行分析,可以發現每次調用該函數都會燃燒掉池子中的部分 MO 代幣。
然而借出去的 USDT 的數量是根據池子中的 MO 代幣的價格進行計算的,由於 MO 代幣的價格因為燃燒而不斷的拉高,最終導致攻擊者用少量的 MO 代幣就能借出大量的 USDT 代幣。
此外,每次借款都會給一個推薦人地址進行分紅獎勵,並且該函數是根據傳入的 MO 代幣的數量進行計算的。
然而由於推薦人地址也是由攻擊者 (0x96f004c81d2c7b907f92c45922d38ab870a53945) 控制的,所以攻擊者可以在完成借貸操作後,將這部分獎勵轉回來,以此疊加下一次借款的數量和分紅獎勵。
經過以上循環操作後,攻擊者拉高了 MO 代幣的價格,最終可以用極少數量的 MO 代幣就能借出合約中的大額的 USDT,並且直接在失衡的池子中將 USDT 全部兌換出來,獲利離場。
總結
本次攻擊的核心在於攻擊者利用 borrow() 函數會燃燒池子中部分代幣的機制,不斷借用資產,拉高池子中代幣的價格並獲取推薦人獎勵,隨後把代幣轉移回來並再次借用,以此不斷疊加獎勵和操控價格。慢霧安全團隊建議項目方在類似功能函數中添加鎖倉時間的限制,並且在設計借貸的價格模型時考慮多種因素,避免類似事件再次發生。