前言
北京时间2022年4月15日,知道创宇区块链安全实验室监测到DeFi协议RikkeiFinance遭到黑客攻击,被盗资金中已有2600枚BNB被转入TornadoCash。
分析
攻击事件如下图所示:
基础信息
攻击合约:
0xe6df12a9f33605f2271d2a2ddc92e509e54e6b5f
0x9ae92cb9a3ca241d76641d73b57c78f1bcf0b209
跨链协议pNetwork因代码漏洞遭攻击,损失约1308万美元:9月20日消息,跨链协议pNetwork发推称攻击者利用其代码漏洞攻击了币安智能链(BSC)上的pBTC,攻击者窃取了277枚BTC(约1308万美元)。pNetwork表示,其他跨链桥没有受到影响,pNetwork中的其他资金是安全的。跨链桥目前正在修复,团队预计12小时内恢复正常,后续将为BSC上pBTC持有者制定解决方案,并表示如果黑客返还资金,将提供150万美元赏金。[2021/9/20 23:38:05]
攻击者地址:
0x803e0930357ba577dc414b552402f71656c093ab
恶意预言机地址:
0xa36f6f78b2170a29359c74cefcb8751e452116f9
0x99423d4dfce26c7228238aa17982fd7719fb6d7f
Poly Network已实现9条异构链互通,超33亿美金跨链资产转移:3月5日消息,继2020年8月18日主网上线后,跨链互操作性协议Poly Network已实现包含比特币、以太坊、Neo、Ontology、BSC、Heco、Elrond、Zilliqa、Cosmos-SDK等在内的9条异构链的互通,超33亿美金的跨链资产转移,超18,000个地址的跨链使用。[2021/3/5 18:18:19]
攻击tx:
0x93a9b022df260f1953420cd3e18789e7d1e095459e36fe2eb534918ed1687492
0x4e06760884fd7bfdc076e25258ccef9b043401bc95f5aa1b8f4ff2780fa45d44
被攻击预言机地址:
动态 | 已有23家交易所、金融机构等使用Liquid Network:据livebitcoinnews报道,已经有23家交易所、金融机构和经纪商与Blockstream签约使用其Liquid Network,其中包括BitMex、OKEx和Bitfinex等主要交易所。此外,洲际交易所(ICE)上周宣布与Blockstream合作推出了加密货币投资者跟踪工具。[2019/1/29]
0xd55f01b4b51b7f48912cd8ca3cdd8070a1a9dba5
流程
攻击者的攻击流程如下:
1.攻击者调用external可见性的setOracleData()函数将预言机设置为自己的恶意预言机。
2.由于恶意预言机替换了原来的预言机,导致预言机输出的rTokens价格可以被攻击任意操控。攻击者向RBinance合约发送0.0001BNB获得4995533044307110.024rBNB。
Metrika完成1400万美元A轮融资,Neotribe Ventures领投:9月21日消息,区块链监控初创公司Metrika获得1400万美元A轮融资,Neotribe Ventures领投,Coinbase Ventures、Samsung NEXT、Nyca Partners、SCB 10X等参投。Metrika首席执行官Nikos Andrikogiannopoulos表示,此轮融资是股权交易,作为交易的一部分,Neotribe Ventures联合创始人Swaroop“Kittu”Kolluri加入Metrika董事会。
Metrika计划利用新资金扩大其平台的容量,并扩大其跨行业的客户群。据悉,Metrika目前的客户包括Algorand、Solana、ConsenSys、Dapper Labs、Hedera Hashgraph、Blockdaemon。(The Block)[2021/9/21 23:41:09]
3.由于兑换了大量的rBNB,所以攻击者借出346199.781USDC。
4.攻击者将借出的346199.781USDC兑换成776.298WBNB。
5.攻击者重复第三步和第四步操作分别借出3.033BTCB、52275.873DAI、297082.798BSC-USD、299822.459BUSD并兑换成相应的WBNB。
6.将兑换的共2571.201BNB转移到攻击者账户上。
7.最后攻击者再次调用setOracleData()还原预言机状态。
另外一次攻击的手法相同,只是先将BNB兑换成BUSD再转去RBinance获得rBUSD。
细节
问题点就在于Cointroller中的SimplePriceOracle.sol(https://bscscan.com/address/0xd55f01b4b51b7f48912cd8ca3cdd8070a1a9dba5#code)合约,其setOracleData的可见性为external,可以被外部调用。
修改预言机前的正常价格为416247538680000000000。
将rToken0x1578的预言机修改为恶意预言机0xa36f。
设置恶意预言机后将rToken价格提升到416881147930000000000000000000000。
后续处理
攻击者将盗取的BNB分批次转入TornadoCash中。
RikkeiFinance官方称将全额补偿漏洞利用攻击中受影响的所有用户。
总结
由于合约没有对setOracleData函数的可见性进行限制,导致了攻击者可以任意修改预言机地址,从而获取了从合约中代币,所以我们在写合约时一定要严格限制函数的可见性。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。