前言
北京时间2022年3月22日,知道创宇区块链安全实验室监测到Fantom生态稳定币收益优化器OneRingFinance遭到闪电贷攻击,黑客窃取逾145万美元。
分析
攻击事件如下图所示,该次攻击事件的问题点在于OneRingFinance直接使用交易对中的reserves来实时进行OShare的价格计算,攻击者通过Swap操作提高reserves的量,最终拉升OShare的价格,获取更多的资金。
基础信息
攻击合约:0x6A6d593ED7458B8213fa71F1adc4A9E5fD0B5A58
攻击者地址:0x12EfeD3512EA7b76F79BcdE4a387216C7bcE905e
攻击tx:0xca8dd33850e29cf138c8382e17a19e77d7331b57c7a8451648788bbb26a70145
漏洞合约:0xc06826f52f29b34c5d8b2c61abf844cebcf78abf
流程
攻击者的核心攻击流程如下:
攻击者从USDC/MIM交易对中闪电贷借出8000W的USDC到攻击合约中。
SmartMoney地址今日将1万枚ETH存入Compound借入320万枚USDC并转入Binance:4月22日消息,据 Lookonchain 监测,某 SmartMoney 地址今日在 Compound 平台存入 1 万枚 ETH(价值约 1860 万美元)后借入 320 万枚 USDC 并转移至 Binance。
据 Lookonchain 长期追踪数据显示,该地址主要操作模式为高抛低吸 ETH,并长期以此为盈利手段,故推断本次转入 Binance 的 320 万 USDC 或将用于购买 ETH。[2023/4/23 14:20:46]
2.攻击者使用swap把1USDC兑换成1.001miMATIC。
3.使用depositSafe存入79999997的USDC。
4.合约mint给攻击者41965509OShare,此时攻击者还有2USDC和1.001miMATIC。
DeFi隐私桥Aztec聚合器ZK.Money总存储量已超1500ETH:7月13日消息,据Dune Analytics的数据显示,DeFi隐私桥Aztec聚合器ZK.Money总存储量已超1500枚ETH,已有6873单一用户地址使用,平均存储0.19ETH,最大单笔存储为32.01ETH。[2022/7/13 2:09:49]
5.攻击者将2USDC和0.326miMATIC添加流动性,获得7.82x10<sup>-7</sup>spLP。
6.将41965509的OSharewithdraw兑换成81534750的USDC。
7.移除流动性获取0.790USDC和0.862miMATIC。
动态 | 币安Trust Wallet2019年新计划:将很快添加ZCash、Monero等匿名币:据cryptoglobe消息,币安Trust Wallet开发团队发布了2019年的计划,主要内容有:钱包致力于支持前20种加密货币,例如Tezos,Zilliqa和EOS,优先考虑匿名币,如ZCoin,ZCash和Monero,甚至即将发行的Grin和Beam;另外,钱包正与多家制造商密切合作,不仅要将硬件钱包与信任结合起来,还要制定行业标准,使未来增加硬件钱包更加容易。[2019/1/27]
8.把1.501miMATIC兑换成1.433USDC。
9.归还8000WUSDC和80080USDC的手续费,最净获得1534750-80080=1454670USDC
细节
攻击者在攻击之前通过CelerNetwork的cBridge跨链获得了发起攻击所需的gas。
声音 | Block.one 总裁 Rob:区块链是一个可以持续的行业 2018 年将成为历史:据 IMEOS 报道,Block.one 在推特分享了一篇名为 《Focus on Crypto Values Misses Key Blockchain Developments in 2018》,Block.one 总裁 Rob Jesudason 发表了对当今区块链技术发展和行情的见解,他提到,在围绕区块链和数字资产建立主流基础设施方面已经采取了重要措施。最近比特币和其他加密货币价格的大幅下跌引发了对其未来的大量争论。然而加密货币怀疑论者忽略的两件事是:
1.在金融机构的本身中,越来越重视加密货币。所有的迹象都表表明了加密货币的制度化,交易所开始受到监管,而监管又为加密货币市场带来清晰度、透明度和流动性等;
2.与金融市场的规律相同,在金融市场的许多例子中,价格的上涨往往伴随着修正。而加密货币市场没有任何不同。可以肯定的是,与监管机构合作以达成合理的管理框架的公司可能会成功。同样清楚的是,将区块链置于稳定增长轨道上的基础设施已经形成。区块链是一个可以持续的行业 - 2018年奠定的基础将大大有助于以后的发展。[2018/11/29]
通过流程第二步我们可以看出当时USDC和miMATIC的兑换率为约1:1.001,而通过流程第三步和第四步的swap后可以在第五步中看到USDC和miMATIC的兑换率变成了约1:0.163,所以我们需要重点分析deposit函数和withdraw中计算价格的问题。
分析交易的Debugger,可以看到调用的是depositSafe函数。
Monex集团CEO:普通投资者合理投资加密货币还需要时间: 据Cointelegraph消息,日前,Monex集团CEO松本大在纽约演讲时表示,日本的虚拟货币税制虽然在一定程度上会阻碍普通投资者进入市场,但是交易所方面并不太担心。他认为日本的普通投资者认清该如何去合理地投资加密货币还需要时间。[2018/5/4]
查看depositSafe函数,其内部会调用_deposit函数,继续跟进,发现在_deposit函数中又调用了_doHardWorkAll函数,最后mintOShare给攻击者。
而在_doHardWorkAll函数中使用了for循环将部分存入的USDC全部兑换成其他的代币。
执行此次depositSafe函数时getSharePrice计算的OShare价格为1062758591235248117。
接下来我们看下getSharePrice函数的代码,在getSharePrice函数中调用了balanceWithInvested函数,而在balanceWithInvested函数中又调用了investedBalanceInUSD函数。
继续跟进,investedBalanceInUSD函数是在合约MasterChefBaseStrategy中,其合约地址为:https://ftmscan.com/address/0xdbc07e219ba0cb5fddcd0fa0c5cc1eddfb77e082#code
investedBalanceInUSD函数返回的是getUSDBalanceFromUnderlyingBalance函数,在getUSDBalanceFromUnderlyingBalance函数中可以发现合约使用两个代币的数量进行计算,而前面攻击者由于闪电贷存入了大量的USDC,从而使得最终的_amount的值也变大了。再次回到getSharePrice函数中就可以发现,_sharePrice也会相应变大。
流程第六步使用了withdraw函数。
在withdraw函数中我们发现同样调用了getSharePrice计算OShare价格,在该阶段为1136563707735425848,OShare的价格的确变大了,而最终的取款数量是通过内部调用_withdraw函数计算得到的。
_withdraw函数中最终取款的值为_realWithdraw,而_realWithdraw=_toWithdraw.mul(uint256(10)**uint256(ERC20(_underlying).decimals())).div(uint256(10)**uint256(decimals()));,所以我们再看到_toWithdraw,发现其值同样是由balanceWithInvested计算得到的,所以这就会导致最终将OShare兑换成USDC变多。
总结一下:
USDC↑->_amount↑->getUSDBalanceFromUnderlyingBalance(_underlyingBal)↑->investedBalanceInUSD()↑->balanceWithInvested()↑->_sharePrice↑
USDC↑->_amount↑->getUSDBalanceFromUnderlyingBalance(_underlyingBal)↑->investedBalanceInUSD()↑->balanceWithInvested()↑->_toWithdraw()↑->_realWithdraw()↑
后续处理
针对此次攻击,OneRingFinance团队采取了四种补救措施,包括暂停保险库,分析、调试、修复漏洞,通过财政库还款,以及提供漏洞赏金。
保险库状态:保险库已暂停,OneRingFinance团队正在努力重新设置。
分析、调试、修复:OneRingFinance团队已工作了很多小时,来修复允许黑客执行这次攻击的问题,团队已与许多合格开发者、协议合作,以查漏协议中所有的代码,协议有漏洞是完全出乎意料的,甚至对一些高级开发人员来说也是如此,因为他们以前审查过OneRingFinance的代码。
通过协议财政部还款:该团队正在制定一项计划,为受影响的人提供具体的中长期还款计划。
赏金:团队将提供被盗资金的15%以及100万RING代币,作为黑客返还资金的赏金。
总结
该次攻击事件是由于项目使用实时储备量来计算价格导致攻击者通过闪电贷借出大量USDC并存入使得储备量增大拉升OShare价格造成差值从而获利。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。