IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 知道创宇区块链安全实验室 | OneRing Finance 闪电贷攻击事件分析 -> 正文阅读

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

前言

北京时间 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 价格造成差值从而获利。

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:28:45  更:2022-03-30 18:29:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:16:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码