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() 函數會燃燒池子中部分代幣的機制,不斷借用資產,拉高池子中代幣的價格並獲取推薦人獎勵,隨後把代幣轉移回來並再次借用,以此不斷疊加獎勵和操控價格。慢霧安全團隊建議專案方在類似功能函數中新增鎖倉時間的限制,並且在設計借貸的價格模型時考慮多種因素,避免類似事件再次發生。
以上是複盤:MOBOX 被駭分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!