DeFi 協議Rikkei Finance 遭黑客攻擊,已有108.5 萬美元被盜資金被轉入Tornado Cash 混幣。前言
北京時間2022 年4 月15 日,知道創宇區塊鏈安全實驗室監測到DeFi 協議Rikkei Finance 遭到黑客攻擊,被盜資金中已有2600 枚BNB(約合108.5 萬美元)被轉入Tornado Cash。
分析
攻擊事件如下圖所示:
基礎信息
攻擊合約:
0xe6df12a9f33605f2271d2a2ddc92e509e54e6b5f
0x9ae92cb9a3ca241d76641d73b57c78f1bcf0b209
攻擊者地址:
0x803e0930357ba577dc414b552402f71656c093ab
惡意預言機地址:
0xa36f6f78b2170a29359c74cefcb8751e452116f9
0x99423d4dfce26c7228238aa17982fd7719fb6d7f
攻擊tx:
0x93a9b022df260f1953420cd3e18789e7d1e095459e36fe2eb534918ed1687492 0x4e06760884fd7bfdc076e25258ccef9b043401bc95f5aa1b8f4ff2780fa45d44
被攻擊預言機地址:
0xd55f01b4b51b7f48912cd8ca3cdd8070a1a9dba5
流程
攻擊者的攻擊流程如下:
1.攻擊者調用external 可見性的setOracleData() 函數將預言機設置為自己的惡意預言機。
2.由於惡意預言機替換了原來的預言機,導致預言機輸出的rTokens 價格可以被攻擊任意操控。攻擊者向RBinance 合約發送0.0001 BNB 獲得4995533044307110.024 rBNB。
3.由於兌換了大量的rBNB,所以攻擊者藉出346199.781 USDC。
4.攻擊者將藉出的346199.781 USDC 兌換成776.298 WBNB。
5.攻擊者重複第三步和第四步操作分別借出3.033 BTCB、52275.873 DAI、297082.798 BSC-USD、299822.459 BUSD 並兌換成相應的WBNB。
6.將兌換的共2571.201 BNB 轉移到攻擊者賬戶上。
7.最後攻擊者再次調用setOracleData() 還原預言機狀態。
另外一次攻擊的手法相同,只是先將BNB 兌換成BUSD 再轉去RBinance 獲得rBUSD。
細節
問題點就在於Cointroller 中的SimplePriceOracle.sol (https://bscscan.com/address/0xd55f01b4b51b7f48912cd8ca3cdd8070a1a9dba5#code) 合約,其setOracleData 的可見性為external,可以被外部調用。
修改預言機前的正常價格為416247538680000000000。
將rToken 0x1578 的預言機修改為惡意預言機0xa36f。
設置惡意預言機後將rToken 價格提升到416881147930000000000000000000000。
後續處理
攻擊者將盜取的BNB 分批次轉入Tornado Cash 中。
Rikkei Finance 官方稱將全額補償漏洞利用攻擊中受影響的所有用戶。
總結
由於合約沒有對setOracleData 函數的可見性進行限制,導致了攻擊者可以任意修改預言機地址,從而獲取了從合約中代幣,所以我們在寫合約時一定要嚴格限制函數的可見性。
展開全文打開碳鏈價值APP 查看更多精彩資訊