前言

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

分析

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

基础信息

攻击合约: 0x6A6d593ED7458B8213fa71F1adc4A9E5fD0B5A58(已自我销毁)

攻击者地址: 0x12EfeD3512EA7b76F79BcdE4a387216C7bcE905e

攻击 tx: 0xca8dd33850e29cf138c8382e17a19e77d7331b57c7a8451648788bbb26a70145

漏洞合约: 0xc06826f52f29b34c5d8b2c61abf844cebcf78abf

流程

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

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

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

3.使用 depositSafe 存入 79999997 的 USDC。

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

5.攻击者将 2 USDC 和 0.326 miMATIC 添加流动性,获得 7.82 x 10-7 spLP。

6.将 41965509 的 OShare withdraw 兑换成 81534750 的 USDC。

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

8.把 1.501 miMATIC 兑换成 1.433 USDC。

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

细节

攻击者在攻击之前通过 Celer Network 的 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()↑

后续处理

针对此次攻击,OneRing Finance 团队采取了四种补救措施,包括暂停保险库,分析、调试、修复漏洞,通过财政库还款,以及提供漏洞赏金。

保险库状态:保险库已暂停,OneRing Finance 团队正在努力重新设置。
分析、调试、修复:OneRing Finance 团队已工作了很多小时,来修复允许黑客执行这次攻击的问题,团队已与许多合格开发者、协议合作,以查漏协议中所有的代码,协议有漏洞是完全出乎意料的,甚至对一些高级开发人员来说也是如此,因为他们以前审查过 OneRing Finance 的代码。
通过协议财政部还款:该团队正在制定一项计划,为受影响的人提供具体的中长期还款计划。
赏金:团队将提供被盗资金的 15% 以及 100 万 RING 代币,作为黑客返还资金的赏金。

总结

该次攻击事件是由于项目使用实时储备量来计算价格导致攻击者通过闪电贷借出大量 USDC 并存入使得储备量增大拉升 OShare 价格造成差值从而获利。

知道创宇区块链安全实验室 | OneRing Finance 闪电贷攻击事件分析相关推荐

  1. 知道创宇区块链安全实验室|Hundred 与 Agave 闪电贷攻击事件分析

    1.前言 北京时间 3 月 15 日晚,知道创宇区块链安全实验室 监测到 Gnosis 链上的借贷类协议 Hundred Finance 与 Agave 均遭遇了闪电贷袭击,包括 AAVE 的分支 A ...

  2. 一念天堂一念地狱——Impossible Finance 闪电贷攻击事件跟踪

    前言 6 月 20 日,BSC 链上的 DeFi 项目 Impossible Finance 突然遭遇闪电贷袭击,本是涨势喜人的 IF 代币从此也一蹶不振,价值一路下滑.知道创宇区块链安全实验室 第一 ...

  3. 知道创宇区块链安全实验室|危险的授权转账-- Li.Finance 攻击事件始末

    一.前言 北京时间3月20日晚,知道创宇区块链安全实验室 监测到以太坊上分布式跨链协议 Li.Finance 受到了攻击,攻击者执行了37次call注入获取了多个钱包中约60万美元的资产(204个ET ...

  4. 知道创宇区块链安全实验室|Build Finance 惨遭攻击,恶意治理攻击难防御?

    0x01:前言 风投 DAO 组织 Build Finance 在社交媒体发文表示,该项目遭遇恶意治理攻击,攻击者恶意铸造了110万枚BUILD并抛售套利.知道创宇区块链安全实验室第一时间对本次事件深 ...

  5. 知道创宇区块链安全实验室|二月安全事件总结与回顾

    前言 新春二月,知道创宇区块链安全实验室 拓宽了对区块链安全信息收集总结的信息广度,将专注于典型安全事件的视角,拔升到了对整个区块链安全资讯的审视. 以下是知道创宇区块链安全实验室对二月各类型安全资讯 ...

  6. 知道创宇区块链安全实验室|UmbNetwork 攻击事件分析

    一.前言 北京时间 2022 年 3 月 21 日,知道创宇区块链安全实验室 监测到 BSC 链和以太坊上的 UmbNetwork 奖励池遭到黑客攻击,损失约 70 万美元.实验室第一时间对本次事件进 ...

  7. 知道创宇区块链安全实验室|Ronin 安全事件分析

    前言 Ronin 是新加坡游戏工作室 Sky Mavis 开发的,是为支持游戏 Axie Infinity 而构建的以太坊侧链,使得用户能够自由地将资产转移到其他链上. 北京时间2022年3月29日, ...

  8. 知道创宇区块链安全实验室|Meter.io 攻击事件分析

    前言 北京时间2022年2月5日晚,Meter.io 跨链协议遭到攻击,损失约 430 万美元.知道创宇区块链安全实验室 第一时间跟踪本次事件并分析. 分析 基础信息 tx(Moonriver):0x ...

  9. 创宇区块链|Rari Capital 遭受重入攻击,损失超 8000 万美元

    前言 北京时间 2022 年 4 月 30 日,知道创宇区块链安全实验室 监测到以太坊上 feiprotocol 和 RariCapital 协议中的多个池子遭到重入攻击,导致损失超 8000 万美元 ...

最新文章

  1. oracle十六进制转数字,16进制如何转化为10进制?
  2. 从0到1,Airbnb的深度学习实践经验总结
  3. 【OpenCV 4开发详解】圆形检测
  4. php4.3-5.x,4.3 案例之 ThinkPHP 5.0 集成方法
  5. 使用ASIFormDataRequest打印参数和给项目添加测试账号
  6. c++stack容器介绍
  7. redis集群添加节点报错Either the node already knows other nodes (check with CLUSTER NODES) or contains some k
  8. golang.org/x/net包的安装方法
  9. python鞋子_python
  10. 眨眼快奔四了,大家的存款都有多少啊?
  11. 被隐藏的或许才是金子
  12. DinnerNow中的ASP.NET Ajax Extensions应用---选餐流程
  13. Chrome启动后打开第一个网页很慢的解决方案
  14. java创建对象实例的四种方式
  15. Server JRE 简介
  16. python + selenium 自动化测试框架
  17. 单片机笔记(江科大自化协)
  18. 程序员赚的辛苦钱及好朋友借钱[借钱时你是爷爷,借出去后丢一个朋友不说还多出一个爷爷]
  19. 大数据培训课程内容介绍
  20. facebook faiss的安装测试

热门文章

  1. idea创建python spark项目的步骤_Spark入门(二)--如何用Idea运行我们的Spark项目
  2. 详说SPA(单页应用)和MPA(多页应用)
  3. 李俊计算机哈佛大学,李俊教授个人主页
  4. 武汉大学计算机学院李俊,GML空间数据存储技术研究.pdf
  5. Cortex-M系列:错误异常
  6. Python系列:二、数据类型--技术流ken
  7. 1984年高考数学试题。
  8. 2021-06-26 Vue中关与el挂载点的学习
  9. 在ASP.NET中使用ListView控件对数据进行显示、分页和排序
  10. 简单几步实现网络音乐播放器(Python爬虫版百度FM)