USD:OneRing Finance闪电贷攻击事件分析-ODAILY

前言

北京时间2022年3月22日,知道创宇区块链安全实验室监测到Fantom生态稳定币收益优化器OneRingFinance遭到闪电贷攻击,黑客窃取逾145万美元。

分析

攻击事件如下图所示,该次攻击事件的问题点在于OneRingFinance直接使用交易对中的reserves来实时进行OShare的价格计算,攻击者通过Swap操作提高reserves的量,最终拉升OShare的价格,获取更多的资金。

基础信息

攻击合约:0x6A6d593ED7458B8213fa71F1adc4A9E5fD0B5A58

攻击者地址:0x12EfeD3512EA7b76F79BcdE4a387216C7bcE905e

攻击tx:0xca8dd33850e29cf138c8382e17a19e77d7331b57c7a8451648788bbb26a70145

漏洞合约:0xc06826f52f29b34c5d8b2c61abf844cebcf78abf

流程

攻击者的核心攻击流程如下:

加密时尚品牌RTFKT旗下NFT系列CLONE X - X TAKASHI MURAKAMI市值突破10亿美元:金色财经报道,据 Dapprader 最新数据显示,加密时尚品牌RTFKT旗下NFT系列CLONE X-X TAKASHI MURAKAMI 市值已突破 10 亿美元,本文撰写时为 10.3 亿美元,交易总额达到 2.871 亿美元。CLONE X-X TAKASHI MURAKAMI 是加密时尚品牌 RTFKT 与艺术家村上隆联手打造的 NFT 项目,总计有 20,000 个 3D 角色形象,每个角色都有随机分配特征组合而成的外观,村上隆将设计角色的眼睛、嘴巴、头盔与“特色”,并注入其代表性的卡通美学元素。据此前报道,该 NFT 系列市值在 3 月 13 日达到 5 亿美元,这意味着在一个月内其市值已翻了一番。[2022/4/12 14:19:25]

攻击者从USDC/MIM交易对中闪电贷借出8000W的USDC到攻击合约中。

2.攻击者使用swap把1USDC兑换成1.001miMATIC。

Block.one:最初将拿出1000万EOS进行投票 后续酌情增加:Block.one今日发文《与EOS社区一起投票》,公布了B1的初步投票标准及后续步骤:

1.常规投票:我们的目标是轮流投票给候选人,不设上限。我们最初会先拿出1000万EOS进行投票,之后可能会随着时间的推移酌情增加。

所有BP候选人需在UTC时间2020年5月22日11:59之前向B1发送概述其最有价值的贡献以及与上述投票标准有关的信息的摘要。

2.EOS基金会的未来:PBE部门正在努力研究独立的EOS基金会的模型。如果启动,则旨在独立运营的基金会将获得Block.one可用投票代币的委托权重。(MEET.ONE)[2020/5/15]

3.使用depositSafe存入79999997的USDC。

4.合约mint给攻击者41965509OShare,此时攻击者还有2USDC和1.001miMATIC。

5.攻击者将2USDC和0.326miMATIC添加流动性,获得7.82x10<sup>-7</sup>spLP。

动态 | OneCoin加密局一案中的6名被告仍未被送达诉讼:OneCoin加密局诉讼案原告在9月3日的一份跟进文件中表示,6名被告仍然没有被送达诉讼。被告包括OneCoin Ltd以及Konstantin Ignatov(实体的领导者),他的妹妹Ruja Ignatova;Sebastian Greenwood(OneCoin联合创始人),Irina Andreeva Dilinska(OneCoin法律和合规部门主管),所谓的“Scott Group”(据称参与了对OneCoin收益进行的个人)。据原告称,OneCoin的被告之所以能够持续多年进行大规模欺诈,在很大程度上是因为Mark Scott和他的合伙人David Pike以及Nicole Huesmann将OneCoin通过出售欺诈性投资项目而获得的犯罪收益进行了。据悉,OneCoin一案目前正在纽约南区法院审理,但在8月23日,原告遇到了流程上的障碍,因为该案的所有诉讼程序都被推迟到所有被告都被送达诉讼为止。法官表示,从2019年9月3日开始,首席原告必须定时向法院通报其向被告送达诉讼所做的工作。(Finance Feeds)[2019/9/4]

6.将41965509的OSharewithdraw兑换成81534750的USDC。

动态 | Coinone系统维护时间更改为9月10日:Coinone官方发布消息,由于营销分离协议, 改进邮件发送系统和存款结算次数的对帐,将在9月10日14点-15点进行系统维护。此前,Coinone预定维护时间为9月6日,随后在其官推上表示,延迟维护时间。[2018/9/7]

7.移除流动性获取0.790USDC和0.862miMATIC。

8.把1.501miMATIC兑换成1.433USDC。

9.归还8000WUSDC和80080USDC的手续费,最净获得1534750-80080=1454670USDC

韩国Coinone交易所推出安全性极强的手机APP:今日(5日)韩国虚拟货币交易所Coinone宣布完成了手机APP的应用beta测试,并推出了Android版本APP。Coinone最新推出的手机APP的最大特点是它的安全性和便利性。这个APP只允许一个设备开通一个使用账户,并且用户的手机和用户识别卡(USIM)信息的使用情况会与运营商注册的信息进行比较,通过识别卡(USIM)的认证来加强APP的安全性。此外,还引入了生物识别登录功能,使用户能够轻松安全地登录。[2018/2/5]

细节

攻击者在攻击之前通过CelerNetwork的cBridge跨链获得了发起攻击所需的gas。

通过流程第二步我们可以看出当时USDC和miMATIC的兑换率为约1:1.001,而通过流程第三步和第四步的swap后可以在第五步中看到USDC和miMATIC的兑换率变成了约1:0.163,所以我们需要重点分析deposit函数和withdraw中计算价格的问题。

分析交易的Debugger,可以看到调用的是depositSafe函数。

查看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价格造成差值从而获利。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

[0:31ms0-1:47ms