前言
北京时间2022年3月22日,知道创宇区块链安全实验室?监测到Fantom生态稳定币收益优化器OneRingFinance遭到闪电贷攻击,黑客窃取逾145万美元。
分析
攻击事件如下图所示,该次攻击事件的问题点在于OneRingFinance直接使用交易对中的reserves来实时进行OShare的价格计算,攻击者通过Swap操作提高reserves的量,最终拉升OShare的价格,获取更多的资金。
基础信息
攻击合约:0x6A6d593ED7458B8213fa71F1adc4A9E5fD0B5A58
攻击者地址:0x12EfeD3512EA7b76F79BcdE4a387216C7bcE905e
攻击tx:0xca8dd33850e29cf138c8382e17a19e77d7331b57c7a8451648788bbb26a70145
加密艺术家Terrell Jones将在苏富比拍卖“American Dream Life”NFT:金色财经报道,加密艺术家Terrell Jones在社交媒体宣布将在苏富比拍卖“American Dream Life”NFT,据悉本次拍卖于 2 月 22 日开始,并且通过苏富比的Contemporary Discoveries Collection拍卖,该作品估价从 6,374 美元到 12,748 美元之间,竞价将会在3月1日结束,此前加密艺术家Des Lucrece也宣布和苏富比达成了1年合约。[2023/2/22 12:21:38]
漏洞合约:0xc06826f52f29b34c5d8b2c61abf844cebcf78abf
流程
攻击者的核心攻击流程如下:
攻击者从USDC/MIM交易对中闪电贷借出8000W的USDC到攻击合约中。
分析 | 波兰加密交易所BitBay下架Monero的决定将不利于打击行为:据Coingape消息,此前有消息称,迫于监管压力,波兰加密交易所BitBay将于11月29日停止门罗币存款,并于2020年2月份下线门罗币。对此,迪拜加密交易所BTSE全球市场总监Lina Seiche认为,将Monero下架将不利于交易所打击行为,因为用户将从需要KYC的交易所转向不需要KYC的交易所。如果这成为现实,那么隐私币将继续在地下市场和能够规避法规的小型交易所蓬勃发展。加密货币风险投资基金Multicoin Capital联合创始人Kyle Samani认为,在克服这些困难之后,隐私币很可能会“史诗般的卷土重来”。[2019/11/29]
2.攻击者使用swap把1USDC兑换成1.001miMATIC。
3.使用depositSafe存入79999997的USDC。
4.合约mint给攻击者41965509OShare,此时攻击者还有2USDC和1.001miMATIC。
分析 | 研究:挖Monero币的加密蠕虫Graboid目前已感染2000多台不安全的Docker引擎:研究人员称,Graboid加密蠕虫旨在挖Monero币,到目前为止,已经感染了2000多台不安全的Docker引擎(社区版)主机,这些主机正在清理中。最初的恶意Docker镜像已被下载了10,000次以上,蠕虫自身已被下载了6500多次。管理员可以通过镜像创建历史记录,查找名为“ gakeaws / nginx”的镜像来发现感染。
攻击者通过不安全的Docker daemons获得了最初的立足点,该daemons首先安装了Docker镜像以在受感染的主机上运行。另外,攻击者无需任何身份验证或授权,即可完全控制Docker 引擎和主机。攻击者利用此入口点来部署和传播挖矿木马。(freebuf)[2019/10/23]
5.攻击者将2USDC和0.326miMATIC添加流动性,获得7.82x10-7spLP。
动态 | Block.one 开发关系负责人谈区块链在数据安全中的作用:据 IMEOS 报道,Block.one 开发关系负责人Serg Metelin 在 infosecurity 谈到了区块链在数据安全中的作用。他认为区块链可以应用于任何需要数据库的活动,并且随之而来的是,区块链软件带来了解决数据管理问题的工具,特别是在安全性,隐私和身份验证方面。在该公司最近在伦敦召开的 EOS Global Hackathon 系列活动中,与会者被要求考虑技术如何将数据交还给用户,并提出能够实现这一承诺的解决方案。
由区块链技术支撑的世界预示着重新设计的数字环境,其中安全性和透明度是不可或缺的。在短期到中期内,泄密,网络攻击和数据管理不善可能会加剧,使得解决隐私和安全问题变得更加紧迫。?对于近期发生的安全漏洞事件,IMEOS 将会于今晚在公众号为 EOS 社区解析。[2018/11/16]
6.将41965509的OSharewithdraw兑换成81534750的USDC。
动态 | Block.one CEO Brendan Blumer 澄清 John Milburn 并非 Block.one 的合伙人:据 IMEOS 报道,今日在John Milburn 加入ONO 的公告中声称,John Milburn 为 Block.one 的合伙人,Brock Pierce 是 Block.one 的创始人之一。
一位社区成员将此事询问 Block.one CEO Brendan Blumer,Brendan Blumer 通过 IMEOS 向社区回应如下:“Brock Pierce 和 John Milburn 不是 Block.one 的联合创始人;Brock Pierce 是2017年的业务顾问;John Milburn 从未受雇于 Dan Larimer 或 Block.one 和 EOS.IO 开发团队。”[2018/8/6]
7.移除流动性获取0.790USDC和0.862miMATIC。
8.把1.501miMATIC兑换成1.433USDC。
9.归还8000WUSDC和80080USDC的手续费,最净获得?1534750-80080=1454670?USDC
细节
攻击者在攻击之前通过CelerNetwork的cBridge跨链获得了发起攻击所需的gas。
通过流程第二步我们可以看出当时USDC和miMATIC的兑换率为约1:1.001,而通过流程第三步和第四步的?swap?后可以在第五步中看到USDC和miMATIC的兑换率变成了约1:0.163,所以我们需要重点分析?deposit?函数和?withdraw?中计算价格的问题。
分析交易的Debugger,可以看到调用的是?depositSafe?函数。
查看?depositSafe?函数,其内部会调用?_deposit?函数,继续跟进,发现在?_deposit?函数中又调用了?_doHardWorkAll?函数,最后?mint?OShare给攻击者。
而在?_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价格造成差值从而获利。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。