區塊鏈安全公司 Beosin 對跨鏈借貸協議 Radiant Capital 昨日發生,導致超過 1900 枚 ETH 被盜的閃電貸攻擊事件進行了詳細分析。
(前情提要:Aave驚爆安全漏洞》暫時「凍結部分用戶資產」!Radiant Capital:資金都是安全的!)
(背景補充:Solidity閃電貸實現方式,與Move、Rust有何不同?)
2024 年 1 月 3 日,據 Beosin 旗下 EagleEye 安全風險監控、預警與阻斷平臺監測顯示,Radiant Capital 專案遭受攻擊者閃電貸攻擊。
攻擊者通過 3 筆交易,盜取了超 1,900 枚 ETH,價值超 450 萬美元,目前被盜資金還儲存在攻擊者地址,Beosin 安全團隊第一時間對本次事件進行了分析。
漏洞分析
該事件發生的根本是由於 Radiant Capital 專案在計算代幣數量的過程中,使用了精度擴展,並且採用了四捨五入的方式進行計算,導致攻擊者可以通過控制精度大小,並結合四捨五入擴大利潤點來進行攻擊。
觀察上述程式碼,rayDiv 函式傳入兩個 uint256 資料 a 和 b,整個過程可以簡寫為 (a*RAY+b/2)/b,其中 RAY 是精度擴展資料,為 10^27,那麼該結果相當於 a*RAY/b+0.5,實現四捨五入的功能,而該計算方式誤差主要來源於 b,如果 b 相對於 a 來說極小,那麼誤差將可忽略不計,但如果 b 於 a 擁有相同數量級,那麼誤差可能達到 a 本身。
舉個例子:如果 a*RAY=10000,b=3,那麼計算出來結果為 3333,比實際值小了 1/10000;而如果 a*RAY=10000,b=3000,計算出來的結果為 3,比實際值小了 1/10。
此次事件便是攻擊者操控 b 的值,讓 b 值與 a 值擁有相同數量級,使得計算等價於 3/2.0001=1,計算值比實際值減小 1/3。
攻擊流程
讓我們來看看駭客的攻擊流程:
1. 攻擊者首先通過 AAVE 閃電貸借貸了 300 萬枚 USDC,用於攻擊啟動資金。
2. 攻擊者將 200 萬枚 USDC 質押到 Radiant 合約,並獲得了 200 萬枚 rUSDCn 憑證代幣。
3. 攻擊者通過 Radiant 合約進行閃電貸,借貸 200 萬 USDC,並在回撥函式中將 200 萬 USDC 歸還,同時將第二步質押的 USDC 提取出來,最後閃電貸函式會呼叫 transferfrom 函式連本帶利的將攻擊者的 USDC 轉入合約。此時會收取 9/10000 的手續費,而收取的手續費便成為了池子的流動性。
4. 攻擊者通過多次重複步驟 3 的操作,將 liquidityIndex 控制得很大,liquidityIndex=271800000000999999999999998631966035920。
5. 接下來,攻擊者新建了一個合約,並向其中打入 54.36 萬 USDC,因為 5436 (USDC 數值) 正好是步驟 4 中 2718 (liquidityIndex 數值) 的兩倍,可方便進行四捨五入控制。
6. 攻擊者將 54.36 萬 USDC 全部抵押進 Radiant 合約,並獲得相同數量的 rUSDCn。
7. 攻擊者提取 40.77 萬 USDC,本應該銷燬 40.77 萬 rUSDCn,但如上所述,burn 函式進行了精度擴展與四捨五入計算。
407700000000000000000000000000000000000/271800000000999999999999998631966035920=1.49999999,而四捨五入結果為 1,導致結果偏小了 1/3。
如下圖,本該銷燬 40.77 萬,但還剩 27.18 萬,說明只銷毀了 27.18 萬,攻擊者便提取了 40.77 萬 USDC。
8. 攻擊者利用第七步的漏洞,重複質押提取操作,並且提取始終比質押數量多 1/3,最終將池子裡的 USDC 全部兌換出來。
資金追蹤
截止發稿,被盜的 1,902 枚 ETH 一直存在駭客地址未移動,Beosin Trace 將對資金進行持續監控。
隨著 2024 年的開啟,我們已目睹了兩起大金額的被盜案件的發生。(昨日安全事件回顧: 開年第一案,被盜 8000 萬美元的 Orbit Chain 事件是怎麼一回事?)這一系列的事件再次提醒了我們,在 Web3 生態系統中,安全防範仍然是至關重要!
延伸閱讀:Orbit Bridge跨鏈橋遭駭8150萬美元,Orbit Chain生態全面暴跌
Beosin 作為一家全球領先的區塊鏈安全公司,在全球 10 多個國家和地區設立了分部,業務涵蓋專案上線前的程式碼安全審計、專案執行時的安全風險監控、預警與阻斷、虛擬貨幣被盜資產追回、安全合規 KYT/AML 等 「一站式」 區塊鏈安全產品 + 服務,公司致力於 Web3 生態的安全發展,已為全球 3000 多個企業提供區塊鏈安全技術服務,包括 HashKey Group、Amber Group、BNB Chain 等,已審計智慧合約和公鏈主網超 3000 份,包括 PancakeSwap、Ronin Network、OKCSwap 等。