孫宇晨旗下 Poloniex 被盜上億美元,Raft 專案被盜 340 萬美元,上周駭客為何如此猖獗?
封面:Photo by Towfiqu barbhuiya on Unsplash
上周,發生了兩起較大的安全事件。
首先是日期:11 月 10 日 19:00 左右,Beosin 旗下 EagleEye 監測到孫宇晨旗下 Poloniex 相關地址持續轉出大額資產,疑似被盜。
緊接著,孫宇晨以及 Poloniex 在社交平台發佈公告證實了被盜事件。 根據 Beosin 安全團隊使用 Beosin Trace 追蹤統計,Poloniex 被盜資產累計約 1.14 億美元。
Poloniex 駭客將盜取代幣分散到各個地址進行兌換,並沉澱到不同位址。 11 月 10 日 20:30 左右,攻擊在乙太坊鏈上已將盜取代幣兌換為超 3000 萬美元的 ETH 並存放在各個位址,在 TRON 鏈上的盜取資金也已轉移為超過 2000 萬美元的 TRX 並存放於各個地址,同時還在持續兌換轉移。 資金轉移明細如下圖所示。
在攻擊發生后,孫宇晨也發文,勸告駭客儘快「退款」,並願意拿出 5% 資產作為白帽獎勵,駭客也並未作出任何回應。
無獨有偶,第二天 2023 年 11 月 11 日,Beosin 旗下 EagleEye 平台監測到,乙太坊鏈上的 Raft 專案的 IRPM 合約遭受駭客攻擊,專案方損失約 3,407,751 美元。 本次攻擊較為複雜,Beosin 安全團隊將詳細分析結果分享如下。
Raft 專案安全事件相關信息
●攻擊交易
0xfeedbf51b4e2338e38171f6e19501327294ab1907ab44cfd2d7e7336c975ace7
●攻擊者位址
0xc1f2b71A502B551a65Eee9C96318aFdD5fd439fA
●攻擊合約
0x0A3340129816a86b62b7eafD61427f743c315ef80xfdc0feaa3f0830aa2756d943c6d7d39f1d587110
●被攻擊合約
0x9ab6b21cdf116f611110b048987e58894786c244
Raft 專案安全事件漏洞分析
主要是攻擊者利用了閃電貸進行質押率操控,並且鑄幣計算方式採用向上取整導致,攻擊者利用被操縱的質押率放大了向上取整的影響,導致少量的質押可以借出大量的資產。
攻擊流程
攻擊準備階段:
1. 攻擊者通過攻擊合約,在 AAVE 中使用閃電貸借入了 6001 個 cbETH,以用於捐贈進行利率操控。
接著攻擊者清算了自己的在 IRPM 上借貸。
清算分兩個階段,在_closePosition 中攻擊者 burn 了合約中一半數量的 rcbETH-d(rcbETH-d 是 raft 專案的債務量代幣,rcbETH-c 是質押資產代幣)。
在_closePosition 函數結束之後,第二階段會調用_updateDebtAndCollateralIndex 更新新的借貸利率。
這裡面的總債務量攻擊者通過前面的清算已經減少了一半。
由於.raftCollateralToken.setIndex 這個質押資產的利率更新中使用了 balanceof(address. This)作為參數傳入,導致了攻擊者通過閃電貸借入的 6001 個 cbETH 可以直接轉入合約中進行控制。 可以看到這 6003 個 cbETH 的總量有 6001 個都是未更新的。
而在代幣 cbETH 的 setIndex 函數中雖然有許可權控制, 新的利率是由攻擊者操控的 backingAmount 除代幣總量進行計算,攻擊者通過被攻擊合約(IRPM)的許可權,並傳入異常的參數,導致這個 storedIndex 擴大到 67*10^36(擴大 67*10^18)。
2. 在抵押率被操控之後攻擊者通過另一個攻擊合約 0xfdc0feaam 進行多筆 cbETH 鑄造 rcbETH-c。 這裡的鑄幣函數是採用的向上取整的方式,由於上面 storedIndex 擴大了 67*10^18,會導致鑄幣數量縮小 67*10^18 倍,但由於鑄幣函數是採用的向上取整的方式,使得本該按 1:1/(67*10^18)比例鑄幣變成了 1:1 來鑄幣,相當於抵押品價值擴大了 67*10^18 倍。
3. 在多次 mint 結束後,攻擊者有了 10,050 個 rcbETH-c,開始了借貸。(這多筆 mint 債務量 rcbETH-d 為 3000 始終沒變)。
4. 攻擊在增加大量 rcbETH-c 後,先把閃電貸需要還的錢借出來
之後再以 R token 形式的借出收益共 6705028 個。
之後將 3,300,000 個 Rtoken 進行兌換,最終共換出 1575 個 ETH, 但是在換出的時候將 eth 換到 0 位址上了。
剩下的 3322460 Rtoken,帳戶中留下了 1442460 個,剩下的 1,900,000 個轉入了攻擊合約向攻擊者兌換了個 127ETH。
Raft 專案安全事件資金追蹤
截止發文時,Raft 專案的 IRPM 合約被盜資金共 3,407,751 美元,其中價值 3,140,000 的 ETH 被攻擊者誤轉入 0 位址,剩下的獲利由攻擊合約分批賣出 267,751 美元。
總結
對於 Poloniex 安全事件,Beosin 提醒錢包或者專案方應保管好私鑰。 針對 Raft 專案專案 IRPM 合約安全事件,Beosin 安全團隊建議:1. 質押率等關鍵函數計算通過預言機報價進行。 2. 涉及係數計算,要先乘後除,並且盡量避免使用向上取整的方式。 同時我們建議項目上線前,尋求專業的安全審計公司進行全面的安全審計。
免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。