区块见闻 区块见闻
Ctrl+D收藏区块见闻

IMBTC:Uniswap的ERC777重入风险:详解本次ETH-imBTC套利的攻击手法及具体细节_mBT

作者:

时间:

编者注:原标题为《详解Uniswap的ERC777重入风险》

前言

据媒体消息,4月18日,Tokenlon宣布暂停imBTC转账,因其发现有攻击者通过ERC777在Uniswap流动性合约中的重入漏洞,对ETH-imBTC池循环套利。此次的攻击手法是一个存在于Uniswapv1上的已知漏洞,该漏洞最早由Consensys于2019年4月发现,当时Consensys只是发现了该风险,还没有发现可以利用这种手法进行攻击的token。随后,在imBTC上线Uniswap后,由于imBTC是基于ERC777实现的,通过组合ERC777的特性及Uniswap代码上的问题,使攻击者可以通过重入漏洞实现套利。下面,我们将来分析此次套利中的攻击手法和具体的细节。

知识准备

ERC777协议是以太坊上的代币标准协议,该协议是以太坊上ERC20协议的改进版,主要的改进点如下:

1、使用和发送以太相同的理念发送token,方法为:send(dest,value,data)

2、合约和普通地址都可以通过注册tokensToSendhook函数来控制和拒绝发送哪些token

数据:Uniswap v3在BNB Chain部署一周后,交易量突破5000万美元:金色财经报道,Uniswap v3已在BNB Chain部署一周,目前协议交易量突破5000万美元,约为5330万美元。[2023/3/24 13:22:49]

3、合约和普通地址都可以通过注册tokensReceivedhook函数来控制和拒绝接受哪些token

4、tokensReceived可以通过hook函数可以做到在一个交易里完成发送代币和通知合约接受代币,而不像ERC20必须通过两次调用来完成

5、持有者可以"授权"和"撤销"操作员?这些操作员通常是交易所、支票处理机或自动支付系统

6、每个代币交易都包含data和operatorData字段,可以分别传递来自持有者和操作员的数据

7、可以通过部署实现tokensReceived的代理合约来兼容没有实现tokensReceived函数的地址

在这里,我们需要特别关注的点是第二点,即ERC777标准中的tokenToSend函数,根据ERC777协议的定义,遵循该标准的token代币在每一次发生代币转账的时候都会去尝试调用代币发送者tokensToSend函数,而代币持有者可以通过在ERC1820注册合约注册自己的合约并通过在这个hook函数中定义一些操作来处理代币转账的过程中的某些流程,如拒绝代币发送或其他操作。

Coinbase交易量超过Uniswap,与DEX激增的预期背道而驰:金色财经报道,许多市场观察人士预计,在去年FTX崩溃后,去中心化交易所的使用会激增,但分析师表示,许多DEX提供的用户体验不如中心化交易所友好。根据加密数据公司Kaiko的一份报告,加密货币交易所Coinbase今年的交易量已经超过了流行的去中心化交易平台Uniswap。Kaiko称,截至上周五,Coinbase的交易量已超过1850亿美元,几乎是Uniswap的930亿美元的两倍。在2022年的某一时刻,交易所各自的交易量几乎相等。Kaiko的研究分析师Conor Ryder表示,向DEX过渡的呼吁看起来“有点为时过早”,因为中心化交易所(CEX)在吸引普通投资者方面仍然发挥着关键作用。[2023/2/28 12:33:19]

了解这些关键点,有助于我们理解这次攻击的具体攻击手法。现在开始,我们可以稍微加速,看看对于Uniswap而言,这次到底发生了什么?

细节分析

通过Etherscan查询攻击者的其中一笔交易?0x32c83905db61047834f29385ff8ce8cb6f3d24f97e24e6101d8301619efee96e

Uniswap创始人:Uniswap L2 24小时成交量为3330万美元:金色财经报道,Uniswap的创始人HaydenAdams发推表示:Uniswap L2(arbitrum + optimism)24小时成交量为3330万美元,是之前历史最高点的4倍。[2021/9/12 23:18:37]

可以发现,攻击者两度向Uniswap合约转帐imBTC,金额同样是0.00823084,然后从Uniswap收取了两笔ETH,看上去似乎是十分正常的两笔交易,实际上却是暗流涌动,另有玄机。为了更好的了解整一笔交易的细节,我们需要通过bloxy.info来查看交易的具体细节。

通过查询交易的细节,我们发现,攻击者首先是通过ethToTokenSwapInput函数向Uniswap兑换了一些imBTC,然后再通过tokenToEthSwapInput函数开始第一次用imBTC换取ETH,然后Uniswap先将ETH转给了攻击者,再调用imBTC的transferFrom函数,由于imBTC实现了ERC777标准,所以在调用imBTC的trasferFrom函数的时候,imBTC会对攻击者的tokensToSend函数进行调用。随后,在攻击者的tokensToSend函数中,攻击者会进行第二次用imBTC换取ETH,然后流程结束。

UNI重回20美元关口:火币全球站数据显示,UNI短线上涨,突破20美元关口,现报20.0026美元,日内跌幅达到4.7%,行情波动较大,请做好风险控制。[2021/2/15 19:49:08]

从交易细节上看,这里似乎还是没有什么问题,我们继续跟踪UniSwap的代码。

上面是代码是Uniswap的ethToTokenSwapInput函数的代码,根据代码分析,Uniswap的ethToTokenSwapInput函数会调用ethToTokenInput函数,然后会先通过getInputPrice获取代币能换取的eth数量,之后通过send函数将eth发给用户,最后再通过transferFrom把代币转进合约。我们继续跟进getInputPrice函数。

Uniswap已经正式支持合规稳定币HUSD ?:据Uniswap平台显示,该智能去中心化交易所已经正式将合规稳定币HUSD列入官方默认token名单。用户可以在Uniswap V2界面轻松搜索到HUSD相关的交易对。

Uniswap是一个基于以太坊构建的去中心化交易协议, 使用流动资金池和自动化做市商(AMM)的模型来确定资产的价格。

HUSD是由Stable Universal 发行的合规稳定币,与美元1:1锚定。HUSD已经在数字资产交易、支付、DeFi等应用中落地。HUSD团队竭诚为用户提供安全、稳定、便捷的数字资产服务。[2020/8/14]

通过分析getInputPrice函数,我们能知道,ETH获取量计算的公式为

把该公式放到ethToTokenInput函数的上下文中,该公式就变成了

在该公式下,一次正常的imBTC兑换ETH的过程中,作为分母的imBTC储备量在兑换过后应该要上升,对应的ETH储备量会变小。

但是回顾攻击者的操作方式,在攻击者第一次发送imBTC兑换ETH的过程中,Uniswap会先发送ETH给攻击者,这时候Uniswap中ETH储备量减少,然后Uniswap调用transferFrom函数,(注意此时还未将攻击者的imBTC扣除),紧接着在transferFrom函数中攻击者调用的第二次的ethToTokenSwapInput时,通过getInputPrice获取兑换的ETH数量的公式会变成这样:

注意看,在第二次的兑换计算中,只有ETH的储备量变少了,而imBTC的储备量并未增加,这导致相比与单独的调用ethToTokenSwapInput函数,攻击者可以通过重入的方式,在第二次使用imBTC兑换ETH的过程中,使计算公式的分子发生了变化,而公式的分母不会发生变化。相比正常的兑换,攻击者通过重入方式进行的第二次兑换会获取微小的利润,导致有利可图。重复这样的过程,就能通过等量的imBTC获取更多的ETH,导致Uniswap做事商的损失。

防御方法

在Uniswap的tokenToEthSwapInput函数中加入OpenZeppelin的ReentrancyGuard函数,防止重入问题。

在进行代币交换的时候,先扣除用户的代币,再将ETH发送给用户。

同时,针对本次攻击事件慢雾安全团队建议:

在关键的业务操作方法中加入锁机制,如:OpenZeppelin的ReentrancyGuard

开发合约的时候采用先更改本合约的变量,再进行外部调用的编写风格

项目上线前请优秀的第三方安全团队进行全面的安全审计,尽可能的发现潜在的安全问题

多个合约进行对接的时候也需要对多方合约进行代码安全和业务安全的把关,全面考虑各种业务场景相结合下的安全问题

合约尽可能的设置暂停开关,在出现“黑天鹅”事件的时候能够及时发现并止损

安全是动态的,各个项目方也需要及时捕获可能与自身项目相关的威胁情报,及时排查潜在的安全风险

最后的思考

这两天的DeFi世界被闹得沸沸扬扬,imBTC作为ERC777代币首当其冲,ERC777协议也饱受诟病,但是看完分析,造成此次的攻击事件原因,真的是imBTC或者是ERC777协议的问题吗?

如果Uniswap做好了ERC777的兼容,使用ReentrancyGuard,并在代币交换的时候先扣除用户的代币,再将ETH发送给用户,这样的问题是不是就不会发生?

imBTC作为以太坊上token化的比特币代币协议,其安全性在自身单独运行的时候并不存在问题,第三方DeFi平台在接入的时候,应需要充分考虑平台本身的业务逻辑与接入代币之间的兼容性,才能避免因兼容性发生不必要的安全问题。而不是简单的将问题归咎于协议和代币提供方。

标签:KENTOKENMBTIMBTCRoboFi TokenTechshare TokenmBT

币安app官网下载热门资讯
USDT:研报 | 稳定币系列报告(三):去中心化的稳定币DAI_AUSDC价格

DAI的历史 Dai是以太坊上发行的第一个去中心化稳定币,发行时间2017年年底,和其他的稳定币相比,DAI是最独特,最具有去中心化性质的一支.

加密货币:央行数字货币(DC/EP)技术猜想:架构、匿名性、钱包、双离线支付等_LIBRA

作者:任之劼,荷兰代尔夫特理工大学博士、博士后,唯链高级区块链技术研究员最近,央行数字货币正在农行内测,并将很快试点推广的新闻让「数字货币」以及「区块链」又火了一把.

加密货币:策略 | BTC减半近在眼前,跨年长牛触手可及_ROSS

来源:BlockVC 编者注:原标题为《减半近在眼前,跨年长牛触手可及|BlockVC策略》经历3月12日单日接近40%的暴跌以来,比特币已经从底部上涨幅度已经超过100%,反弹趋势强劲.

ISC:科普 | 点对点网络组建:从 Kademlia 到 Discv5_DisCas Vision

作者:dean 翻译&校对:裴奇&阿剑 来源:以太坊爱好者 如果你一直在研究以太坊或者相关的技术,你可能听说过discv4或discv5.

ISC:巴比特专访 | 连欧洲央行都追看的加密资产报告,到底长啥样?_UNI

2008年经济危机过后,涌现了一系列颠覆性的去中介化技术,社会经济和文化的改变对未来的金融模式造成了巨大的冲击,替代金融开始崛起。替代金融,即所有在传统金融体系之外的在线金融工具、机制或系统.

LIBRA:OK区块链60讲 | 第16集:什么是PoW共识机制_Liberty

视频:https://www.iqiyi.com/v_19rwfooezs.html哈喽大家好,我是小K君.