宇宙链 宇宙链
Ctrl+D收藏宇宙链

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

作者:

时间:1900/1/1 0:00:00

编者注:原标题为《详解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

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

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

Uniswap“费用开关”提案以近 100% 的赞成率通过共识检查投票:8月15日消息,Uniswap的“费用开关”提案于8月5日开启共识检查投票,并已于10日结束,赞成率近100%,截至目前已相继通过温度检查(temperature check)、共识检查。[2022/8/15 12:25:28]

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

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

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

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

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

细节分析

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

DeFi借贷协议UniLend Finance将推出Moonriver借贷奖励:2月6日消息,DeFi借贷协议UniLend Finance宣布,其无需许可的协议将于2月7日推出Moonriver借贷奖励。UniLend V1已在Moonriver上推出,在Kusama网络上提供闪电贷。UniLend上的贷方(lender)将获得更多MOVR奖励。[2022/2/6 9:34:26]

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

Uniswap Labs首席法务官:DeFi的出现不意味着现有金融服务业的终结:官方消息,Uniswap Labs首席法务官Marvin Ammori在其文章中指出,一些怀疑论者认为DeFi是一场理想主义的运动,注定会永远沦为互联网的阴影。但由于其在结算效率、风险管理和可访问性方面的创新,DeFi很可能成为金融基础设施的核心部分,不仅适用于加密货币,还可能适用于所有其他类别的市场。DeFi的出现不会意味着现有金融服务业的终结(就像互联网并没有完全杀死印刷品一样)。对于传统金融服务和其他公司而言,DeFi让他们能够专注于自己的核心结构优势——托管产品、大宗经纪业务、法币入口、客户服务等。文章最后指出,最重要的是,每一波加密技术都吸引了数以万计的工程师和企业家,这正是DeFi未来的构建方式。[2021/6/20 23:51:06]

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

Uniswap创始人:并不是使用多数据源就能提升预言机数据质量:去中心化交易协议Uniswap创始人HaydenAdams撰文反对Chainlink创始人SergeyNazarov提出的观点,价格来源应该避免使用单个交易所的数据,无论是中心化交易所(CEX)或链上的去中心化交易所(DEX)。Adams认为,如果某个代币95%的交易量都来自于单一交易所,那它再和其他4个进行平均将会降低(价格来源)数据的质量。

他表示,如果某个资产在链下的CEX中的交易量更大,则Chainlink的数据相当重要,但是随着DEX不断蚕食CEX的交易量,CEX数据的相关性会不断下降。最后Adams还表示到,目前的AMM(自动做市商)还是很早的阶段,所以在AMM上改变价格可能会比在订单簿上更容易,这是由于资本效率低下,但不会长期存在,AMM最终会比CEX的操纵成本高很多。[2020/11/30 22:35:01]

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

YFI 创始人Andre Cronje:UNI的发布是为了回应SUSHI:YFI创始人Andre Cronje在推特表示:这次UNI的发布,本身是完美的,真是令人惊讶的发布和回顾。

但我不禁觉得这次发布只是为了回应SUSHI。切勿让其他人为你设定步调,要以自己的步伐前进。[2020/9/17]

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

通过分析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平台在接入的时候,应需要充分考虑平台本身的业务逻辑与接入代币之间的兼容性,才能避免因兼容性发生不必要的安全问题。而不是简单的将问题归咎于协议和代币提供方。

标签:SWAPUNIETHKENPapayaSwapUniswap FinanceBETH价格GoFit Token

酷币交易所热门资讯
区块链概念股集体涨停,咋回事?

作者:温婷 来源:上海证券报 4月16日,蚂蚁区块链面向中小企业正式推出“开放联盟链”,首次全面开放蚂蚁区块链的技术和应用能力。这开放有多大影响?——将企业区块链开发门槛从百万级降低至千元,缩短建链时间至最快一分钟.

1900/1/1 0:00:00
湖南公布区块链发展三年行动计划,2022年营业收入达到30亿元

4月27日,湖南省工信厅印发《湖南省区块链产业发展三年行动计划》。《计划》显示,湖南将坚持以产业区块链带动区块链产业、以区块链产业促进产业区块链,建设成为全国有影响力的区块链技术创新高地、产业集聚洼地和应用示范基地.

1900/1/1 0:00:00
嘉楠耘智业绩变脸加剧,或正错过“挖矿换挡“最佳时机

文丨互链脉搏·梁山花荣 4月9日晚,登陆纳斯达克不到半年的嘉楠耘智晒出了首份“成绩单”。据嘉楠耘智发布的2019年财务业绩报告显示,公司全年营业收入约为2.04亿美元,同比降低47.41%,2019年净亏损约为1.49亿美元.

1900/1/1 0:00:00
DeFi平台Lendf.Me被黑细节分析及防御建议

前言 据慢雾区情报,以太坊DeFi平台Lendf.Me遭受重入漏洞攻击。慢雾安全团队在收到情报后随即对此次攻击事件展开分析,并快速定位了问题所在.

1900/1/1 0:00:00
观点:比特币可以实现自给自足,成为区块链主权和 自治的最终形式

比特币一直是进行思想实验的首选加密货币,许多人终于开始使用这些实验来发展新的用例。随着比特币正逐渐接近减半,并且最近在价格方面达到了新的高度,如果比特币根本不是加密货币,而是一个国家怎么办?根据瑞安·沃特金斯的最新观察,比特币在201.

1900/1/1 0:00:00
QKL123行情分析 | 原油市场挤兑作妖,5月WTI合约现负值,比特币联动下行(0421)

摘要:美原油5月WTI期货现负值,短时出现“踩踏挤兑”,大量交易者“不计代价”移仓6月合约,以规避实物交割的风险。出现此次极端行情,和原油需求锐减下的库存告急有关:原油积压不利于实物交割。短时,美股下跌,比特币联动下行.

1900/1/1 0:00:00