主页 > imtoken网页版 > “便利还是阴谋”:以太坊ERC20代币的无限授权该何去何从?

“便利还是阴谋”:以太坊ERC20代币的无限授权该何去何从?

imtoken网页版 2023-10-18 05:11:27

“无限制授权”作为一个被关注已久的话题,随着DeFi生态的发展和相关攻击事件的不断发生,一次又一次被摆上台面。 受大量攻击事件的启发,本文对该课题进行了详细的研究。 我们受邀在 DEFCON 2021 (Blockchain Village 29)() 上发表主题演讲。

阅读建议:

无限许可的背景

在分析ERC20代币的无限授权之前,我们先来回顾一下什么是ERC20代币授权?

ERC20代币中的代币授权

在以太坊中,除了以太币,还有各种代币(Tokens)在流通。 ERC20 是现有各种代币标准中最受欢迎的。 据我们不完全统计,代币价格统计平台CoinGecko和知名链上交易所Uniswap分别收录了超过5600个和44000个符合ERC20标准的代币。

关于ERC-20代币的授权操作,主要涉及三个主体(user/User、token contract/Token Contract、platform/Spender)和两个变量(balanceOf、allowance)和ERC20标准中的两个函数(approve、transferFrom函数) ). 简单来说,对于授权行为,如果用户想在相关平台上使用自己的代币,首先要完成一次授权交易(涉及allowance变量和approve函数),然后执行自己的action 交易(涉及 balanceOf 和 allowance 变量以及 transferFrom 函数)。 也就是说,从广义上讲,用户需要通过两次交易(类似于存币、兑换等)来使用他/她的代币。

代币授权分类

理论上,根据授权代币的数量,我们可以将代币授权分为三类:零授权、无限制授权和其他授权。

举个栗子

为了更好的理解代币授权的流程和授权的目的,我们以用户在Uniswap上更换USDT为例进行说明。

如果用户想通过去中心化交易所Uniswap用80 USDT兑换其他代币,那么用户和平台在代币合约上的状态会发生怎样的变化?

首先,具体操作,用户需要调用USDT合约中的approve函数,将一定数量的USDT授权给Uniswap。 随后,Uniswap 在执行用户兑换代币的请求时,通过调用 USDT 合约中的 transferFrom 函数使用用户的代币。 但是,这里的“一定数量”是多少? (事实如下)虽然用户只想兑换80 USDT,但Uniswap平台“华丽丽地”将无限制授权批准交易作为默认设置(如下图)。

erc20代币地址与以太坊地址_blockchain钱包usdt_小狐狸钱包usdt代币合约地址

因此,在用户完成上述操作并兑换80 USDT后,Uniswap仍将保留相当数量的代币使用权(如下图所示)。 对于用户来说,如果还想在Uniswap上兑换USDT,只需要进行兑换交易即可。 在如今交易手续费昂贵的前提下,这无疑帮用户省了一大笔钱。 但这真的那么简单吗?

blockchain钱包usdt_小狐狸钱包usdt代币合约地址_erc20代币地址与以太坊地址

无限授权的骨感现实

所谓,凡事事出有因,有利必有弊。 现实中,为数不多的安​​全事件敲响了默认无限授权的平台和无畏用户的警钟。

UniCat 活动

小狐狸钱包usdt代币合约地址_erc20代币地址与以太坊地址_blockchain钱包usdt

UniCat作为Uniswap平台发行UNI代币后“闪现”的Farming平台,与其他Farming平台几乎无异。 UniCat 通过从用户那里收集 UNI 代币并承诺相应的奖励来吸引嫉妒但无所畏惧的勇敢者。

小狐狸钱包usdt代币合约地址_blockchain钱包usdt_erc20代币地址与以太坊地址

或许是因为大部分用户的UNI代币都是通过Uniswap平台免费发行的,所以并没有太在意UNI代币的投资(不得不说,UniCat的开发者确实有敏锐的时事嗅觉)。 许多用户可能没有意识到 UniCat 是一个根本没有经过任何审查的项目。 更可怕的是,UniCat并不像看起来那么可爱,相反,它只是一只EVIL CAT。 UniCat通过提前在合约中安装后门功能小狐狸钱包usdt代币合约地址,为窃取用户的UNI token做好了充分的准备。

blockchain钱包usdt_erc20代币地址与以太坊地址_小狐狸钱包usdt代币合约地址

如上图所示,只要用户对其代币进行授权,UniCat就有机会通过其预先设置的后门窃取其UNI代币。 那么,这个后门是什么样子的呢? 如下图所示,在UniCat的主合约中,有一个函数叫做_setGovernance。 这是一个只能由合约所有者(即 UniCat)调用的函数。 UniCat通过函数参数的设置:

理论上,可以在 _setGovernance 函数中调用 transferFrom 函数来转移任何已授权给他们的代币,这对用户来说是一种损失。

erc20代币地址与以太坊地址_blockchain钱包usdt_小狐狸钱包usdt代币合约地址

从这件事中我们不难看出小狐狸钱包usdt代币合约地址,当你将自己的代币无限量授权给未经审计的新兴平台创造红利时,如果等待你的不是康庄大道,那么就是漫漫地狱。

班科事件

与UniCat事件相比,Bancor平台上线没几天,内部人员就发现了一个致命bug。 简单来说,这个漏洞可以直接导致任何在 Bancor 相关合约中授权的代币被任何人转移或窃取。

erc20代币地址与以太坊地址_blockchain钱包usdt_小狐狸钱包usdt代币合约地址

如上图所示,Bancor 的 transferFrom 函数不小心被设置为 Public。 这个简单的错误“完美”地将用户授权的代币交给了Bancor合约。 好在Bancor的开发者及时发现了漏洞,通过白帽攻击将用户的资金转移到安全的地方,才躲过一劫。

同样,在本次攻击中,不难发现,即使是非作恶的平台,也有可能在开发智能合约的过程中出现失误,导致用户流失。 但值得一提的是,当用户将无限授权当成套路时,如果真的发生攻击,损失将被放大到极致。

其他活动

除了UniCat和Bancor这两起事件外,目前还发生了其他与token授权相关的安全事件。 在此我们也提出一些相关报道供大家参考。

无限赋权面具背后的真相

在本节中,我们将对无限许可现象进行详细分析。 为了揭开无限授权的面具,我们从链下和链上两个方面进行分析。 在展示我们的数据之前,我们先来看看作为现实中的前端用户,是如何一步步完成代币的授权交易的。

现实世界中的授权操作

erc20代币地址与以太坊地址_blockchain钱包usdt_小狐狸钱包usdt代币合约地址

如上图所示,完成一个授权操作可以简单的分为六个步骤。 在这六个步骤中,总共会涉及到四个主体(用户、钱包、平台、代币合约)。

Step1,2:首先,大部分前端用户(手机、网页)需要将自己的虚拟钱包连接到提供服务的网站。

blockchain钱包usdt_小狐狸钱包usdt代币合约地址_erc20代币地址与以太坊地址

Step3:然后,网站根据自己的设置,将授权交易的基本信息传送到用户钱包进行审核。

Step4,5:钱包收到平台授权交易信息后,会将相应信息显示给用户,等待用户确认信息。

Step6:用户确认后,钱包会将授权交易上传至链上进行进一步审核。 一旦交易上链,代币合约上的相关数据(配额)就会更新。

(在下面关于链上和链下的分析中,我们将首先介绍我们(链上,链下)分析的动机,然后从不同的角度展示我们的分析结果。)

基于链下钱包和平台的动机分析

在现实世界的授权过程中,不难发现前端用户最能直观接触到的主体就是钱包和平台的界面。 因此,我们选取​​了 15 个钱包和 24 个 DeFi 平台,对其交互界面进行测试分析。

(15 个钱包)

blockchain钱包usdt_erc20代币地址与以太坊地址_小狐狸钱包usdt代币合约地址

(24 个平台)

blockchain钱包usdt_小狐狸钱包usdt代币合约地址_erc20代币地址与以太坊地址

为了更好地理解和体现钱包和平台页面的合理性,我们主要对所有页面进行两方面的审核(解释和修改功能):

授权操作的用户可操作性(修改功能)

无论是钱包还是平台,用户是否可以通过其接口更改(修改)授权代币数量

由于调查的平台和钱包较多,我们选取​​了几个比较有趣的例子来说明这些钱包和平台在以上两个方面的表现。

钱包:Metamask 和 Coinbase

在本节中,我们将比较 Coinbase 钱包和 Metamask 钱包。 从两款钱包在Google Play商店的下载量和用户反馈来看(如下图),Coinbase和Metamask的安装量都在百万以上,但Metamask在用户反馈方面略逊一筹。 同时,Coinbase 的评级也更高。

小狐狸钱包usdt代币合约地址_erc20代币地址与以太坊地址_blockchain钱包usdt

在接下来对两款钱包的调研中,我们将分别使用这两款钱包在Compound平台上进行操作。 (Compound平台默认的token授权操作是无限授权。)

钱包一:Metamask

小狐狸钱包usdt代币合约地址_erc20代币地址与以太坊地址_blockchain钱包usdt

如下图不难发现,平台将授权交易转入钱包时,用户可以看到完整的交易信息。 此外,Metamask 允许用户更改他们授权的数量(步骤 2、3、4)。

erc20代币地址与以太坊地址_小狐狸钱包usdt代币合约地址_blockchain钱包usdt

钱包 2:Coinbase

与 Metamask 不同,Coinbase 钱包不显示任何有关授权交易的信息。 用户只能依靠平台提供的相关信息来判断和决定操作的可行性(步骤1)。 而且,值得注意的是,下图中的步骤2、3、4是用户确认并提交交易后才能看到的画面。 因此,Coinbase Wallet在授权信息展示和授权数量变化的可操作性方面不如Metamask完备。

blockchain钱包usdt_小狐狸钱包usdt代币合约地址_erc20代币地址与以太坊地址

平台:Bancor & Curve Finance

在本节中,我们将比较 Bancor 平台和 Curve Finance 平台。 根据defipulse的最新统计,Curve Finance和Bancor分别是排名第一和第五的交易平台。

小狐狸钱包usdt代币合约地址_blockchain钱包usdt_erc20代币地址与以太坊地址

在接下来对两个平台的调研中,我们将使用Metamask钱包来测试两个平台的兑换操作(swap/exchange)。

平台一:Bancor

如下图所示,我们在测试Bancor的兑换操作时,对审批操作进行了说明,为用户提供了无限审批和有限审批两种选择。 值得一提的是,Bancor 平台上的有限授权只需要用户授予平台运行所需的代币数量。

erc20代币地址与以太坊地址_小狐狸钱包usdt代币合约地址_blockchain钱包usdt

平台二:曲线金融

然而,在Curve Finance平台上,却出现了触目惊心的一幕。 如下图所示,当用户提交交易所申请时,Curve Finance界面提示信息为“请授权10 USDT给交易所”。 但是,我们在 Metamask 钱包界面收到了来自 Curve Finance 平台的无限制授权交易请求。 如此神奇的操作让我们对于一些不熟悉token授权的新手用户着实捏了把汗。

小狐狸钱包usdt代币合约地址_blockchain钱包usdt_erc20代币地址与以太坊地址

但故事并没有就此结束。 我们反复测试了Curve Finance的界面后,向Curve Finance发送了关心的问候并指出了问题。 在Curve Finance的回复中(下图),他们承认了我们指出的问题,并回复“用户不喜欢每次都授权”。 然而,这样的说辞似乎无助于其误导用户的做法站稳脚跟。

小狐狸钱包usdt代币合约地址_blockchain钱包usdt_erc20代币地址与以太坊地址

同样,在我们调研的24家平台中,Yearn Finance也存在误导用户无限授权的问题。 如果想详细了解Yearn Finance是如何误导用户进行授权操作的细节,我们在DEF CON 2021的主题演讲中也进行了展示。

基于链上平台和代币的动机分析

erc20代币地址与以太坊地址_blockchain钱包usdt_小狐狸钱包usdt代币合约地址

为了进一步探究无限授权交易在链上的分布情况,我们收集了所有授权交易的数据(截至2021年4月30日)并展开调查。 如下图所示,在DeFi生态蓬勃发展的大环境下,无限授权交易笔数迅速攀升。 特别需要注意的是,这种快速增长很可能是由 UniswapV2 的发布引起的。 关于以上推论,我们将在本节后半部分进行详细分析。

blockchain钱包usdt_erc20代币地址与以太坊地址_小狐狸钱包usdt代币合约地址

同样,为了了解用户对各个代币和平台的无限授权,我们对双方进行了详细的链上数据分析。 分析主要围绕两个方面:

无限授权交易的分配

在无限授权交易的分布分析中,我们定义了三个值来帮助理解以下两种分布:

平台:如下图所示,我们可以明显感受到UniswapV2在各个方面已经全面碾压其他平台。 这就是为什么我们在趋势授权交易趋势图中指出,无限授权的快速增加很可能是UniswapV2平台造成的。

(平台)

小狐狸钱包usdt代币合约地址_blockchain钱包usdt_erc20代币地址与以太坊地址

代币:在代币方面,如下图所示,10个带颜色的代币(授权交易数前10名)的Y值差异不大。 但USDC、USDT、DAI在活跃度和授权交易数量上优势明显。 其实这也不难理解,同为稳定币,在交易量和活跃度上肯定有不小的优势。

(令牌)

blockchain钱包usdt_erc20代币地址与以太坊地址_小狐狸钱包usdt代币合约地址

许可代币的风险分析

在本节中,我们将对授权代币进行风险分析。 我们选择了三个稳定币(USDC、USDT、DAI)和两个平台(Bancor、UniCat)进行调查。 同时,我们还定义了两个值来帮助理解授权代币的风险(如下图所示)。

erc20代币地址与以太坊地址_小狐狸钱包usdt代币合约地址_blockchain钱包usdt

代币:如下图所示,USDC和USDT在Risk Rate上的表现近一年半以来都比较稳定(均在10%左右徘徊)。 然而,DAI 在 2020 年中期经历了大起大落,才逐渐企稳。

小狐狸钱包usdt代币合约地址_erc20代币地址与以太坊地址_blockchain钱包usdt

(在上面的代币风险分析中,我们简单地画了一张排名靠前的代币风险率的趋势图,其中趋势的变化可能是由某些事件决定的,但不可否认的是,越低的风险率保证了令牌将遭受较低的非法转移造成的损害。)

平台:关于平台,我们将展示上述两个事件的核心平台(Bancor、UniCat)的Risk Amount趋势图。 我们还锁定了平台拥有的排名靠前的代币(BNT、UNI)进行分析。

小狐狸钱包usdt代币合约地址_erc20代币地址与以太坊地址_blockchain钱包usdt

blockchain钱包usdt_erc20代币地址与以太坊地址_小狐狸钱包usdt代币合约地址

Bancor的走势图为我们展示了其BNT代币在短时间内从无到有的图景。 这也合理解释了Bancor的开发者确实在短时间内发现了其合约漏洞,及时发起白帽攻击,将用户的资产转移到安全的地方。

至于图中右边的UniCat趋势图,经过我们的核实,其中几个比较明显的下降都是UniCat进行的后门攻击。

虽然在风险分析过程中,我们只是对历史数据进行了回顾性分析。 但是,在确认了风险金额和风险率这两个系数的有效性之后,我们相信对于未来的链上监控会有一定的帮助。

“勇士”无限出现

正如我们之前提到的,无限许可是一个由来已久的话题。 在旷日持久的讨论中,我们不难发现,无限授权存在的很大一部分原因与高昂的交易手续费有关。 用户在使用各种平台服务时,首先要对自己的代币进行授权,平台再对授权后的代币进行转让和使用。 这样,如果用户每次只授权需要执行的代币数量,则用户在同一个平台上每次操作都会执行两笔交易。 也就是说,每次操作都会支付两次交易的交易手续费(相对于进行无限授权的用户而言)。

为了解决用户对授权行为的开销和安全考虑,也有很多引人注目的解决方案得到了应用。 下面说说各个方案无限授权的可行性。

ERC777

作为2017年提出的代币标准,ERC777标准中的运营商机制(代理机制)解决了用户在进行操作时需要提交两次交易的问题。 在运营商机制下,用户只需要添加自己信任的平台作为自己代币的运营商/代理人(这里的代理人可以是交易所,也可以是借贷平台),然后用户就可以在一笔交易中完成所有操作(Atomic购买)。 但是ERC777的缺点也很明显。 由于token机制中穿插了很多hook,每笔交易的成本都比较高。 同时,用户需要选择自己信任的代理,并赋予他们执行用户操作的权限。 虽然,与无限制授权相比,这种机制本质上需要用户考虑代理选择的安全性。 但这无疑抛给了用户一个问题(是天堂还是地狱,这是一个问题)。

EIP2612

关于EIP2612,在提案中,其作者指出可以通过计算签名提交无需交易手续费的交易。 在该机制作用下,用户可以免费更改授权代币数量(配额),解决每次审批产生的“额外费用”。 至此,该方案已被UniswapV3采纳应用。 相信这应该是解决今天无限授权问题的一个比较合理的方案。 然而,在这个ERC20“横行”的时代,又有多少平台愿意在上面花费大量时间呢?

无限授权·本·总结

无限授权固然可以减少用户在交易手续费上的支出,但通过我们的调查,一些平台和钱包不仅没有通过交互界面帮助用户了解无限授权的潜在风险,更有什者,当用户使用其功能时,同时时间误导用户的决策。 那么,是贯彻爱与真,还是穿梭于虚拟世界中最迷人的反派角色? 默许代币无限授权的DeFi平台是应该正视今后无限授权的安全问题并为此买单,还是继续在这条路上奋发向上? 我们拭目以待。

0x5。 引用

币虎:

Uniswap:

UniCat主合约:0xb246bcd5baac8e342941d0f803d528b6668e42cd

班科平台:

曲线金融平台:

消除脉冲:

渴望财务:

ERC777 标准:eips.ethereum.org/EIPS/eip-777

EIP2612 提案:eips.ethereum.org/EIPS/eip-2612