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

百万美金的火线排雷:深度解读DeFi资产授权漏洞

作者:

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

本文来自AmberGroup,作者吴家志。原文标题:《ExploitingPrimitiveFinanceApprovalFlaws》。

事件摘要:2月24日,一篇关于PrimitiveFinance?的漏洞分析报告在圈内引发关注,报告描述了三个白帽攻击以及漏洞原理。一个多月后的4月14日,以AmberGroup区块链安全专家吴家志博士为代表的团队,发现了一个钱包地址有超过100万美金的资产存在风险。在本地复现攻击后,其团队通过Immunefi联系了Primitive项目方,并成功协助潜在的受害者重置了WETH授权,解除危机。这篇文章将介绍该团队如何在模拟环境中利用此漏洞,以及如何通过区块链数据分析找到潜在的受害者钱包地址。

原理:智能合约中的裂隙

在目前EVM及ERC-20的架构中,当用户与智能合约交互时,智能合约本身缺少一个能从代码层面捕捉到ERC-20转账事件的回调机制。例如当Alice给Bob发100个XYZ代币时,Bob的XYZ余额会被更新在XYZ合约里。但是Bob如何知道他的XYZ变多了呢?他可以查Etherscan或者其钱包App自动从以太坊节点取得的最新余额。如果Alice将100XYZ发给一个智能合约Charlie,Charlie如何得知他的XYZ余额增加了呢?

事实上Charlie没办法在收到100XYZ的当下主动取得他最新的余额,原因是这个转账是在XYZ合约上发生的,不在Charlie合约。智能合约部署完成后就像操作系统一样,是一堆代码放在某个地方,需要被调用了才会发生作用。为了解决这个难题,在ERC-20标准有一个被广泛使用的机制—approve()/transferFrom()。

ApeCoin社区提议推出百万美元漏洞赏金:10月30日消息,ApeCoinDAO社区发起AIP草案,ApeCoin社区提议推出百万美元漏洞赏金。该提案提议使用国库资产资助Immunefi的100万美元APE来支持漏洞赏金计划并与Llama合作设计、实施和运行这些计划。

此前报道,10月17日,ApeCoinDAO社区提议将APE质押功能延迟2-4周推出,以便可以提供漏洞赏金,从而防止黑客入侵。[2022/10/30 11:57:32]

举例来说,当Alice需要往Charlie存入100个XYZ代币时,Alice可以事先授权Charlie使用她的100XYZ额度,此时Charlie的deposit()函数就可以在一个交易里通过transferFrom()主动将Alice钱包里的100XYZ取出,并且更新Charlie合约的状态。为了减少摩擦,很多DApp甚至会让用户授权无限多的XYZ额度给项目方地址,这样可以让后续的transferFrom()调用直接成功,免除掉多次授权的点击以及手续费,这等同于将Charlie加白。这个方案留下了一个隐患,万一Charlie作恶或是被攻击了,Alice的资产就会有危险。

这个发生于2020年6月18日的意外证实了一个被控制或存在问题的智能合约可以如何被利用并且造成资产损失,如下代码所示,safeTransferFrom()虽然名为safe的transferFrom却意外被宣告成公开函数,导致任何人都可以使用Bancor合约的身份转移任意用户任意数量的任意资产到任意的地址。

美国国土安全部向区块链企业提供近百万美元资金以促进运营现代化:美国国土安全部科学技术局(S&T)已向五家区块链初创公司提供了近一百万美元的资金,旨在寻找基于标准的技术,以帮助国土安全部利用区块链使运营现代化。近年来,该机构已向从事新技术应用的一系列初创公司提供了资金,其中包括使用分布式分类帐技术的公司。(The Blcok)[2020/10/11]

简单举例来说,如果Alice正好使用过Bancor并且授权Bancor无限额度使用她的DAI,则一旦她的钱包里DAI余额大于零时,黑客就可以立即把她的DAI转走。

诊断:黑客是怎样绕开“安检”的?

根据上文的漏洞分析报告所述,这个外部函数有一个类似的漏洞,但无法像Bancor的漏洞一样被直接利用。事实上,攻击者需要伪造两个ERC20代币合约,一个Uniswap资金池,并且发起一笔Uniswap闪电贷绕过下图标注的?msg.sender==address(this)?检查。听起来复杂,但对于有经验的黑客来说,这并不是太困难。

Primitive为何需要实现?flashMintShortOptionsThenSwap()?这样一个接口呢?其实是有特定使用场景的,在?openFlashLong()函数可以看到,flashMintShortOptionsThenSwap()?会被封装在一个Uniswap的flash-swap调用参数里,在第1371行触发flash-swap之后,由回调函数?UniswapV2Call()?调起。此时由于?UniswapV2Call()?在Primitive合约里,便可以通过上述?msg.sender==address(this)?检查。

V神:BTG攻击者将因削减或闲置损失数百万美元:以太坊创始人V神刚刚就“BTG禁止攻击链”一事发推称,针对BTG的51%攻击被用户激活的“软叉”击败,该软叉提供了一个检查点,因此BTG团队明确禁止了攻击链。这是一个好消息。在PoS中,这种情况下,攻击者将因大幅削减或闲置泄漏而损失数百万美元。[2020/7/12]

值得注意的是,在?openFlashLong()函数里,第1360行写的是?msg.sender,表示在正常的情况下,Primitive只能使用调用者本身的资金,然而攻击者可以通过伪造的pair以及params用类似于1371行的方式直接调用Primitive合约的UniswapV2Call()并绕过?flashMintShortOptionsThenSwap()?的检查。由于params在这情况下可以完全被控制,1360行的msg.sender便可以被替换成任意曾经授权Primitive的钱包地址,然后通过?flashMintShortOptionsThenSwap()?里的?transferFrom()?调用盗取资产。

追踪:找出可能的受害者

如果一个黑客碰巧知道某位“大户”曾授权有问题的合约,他可以轻易利用这个漏洞盗取受害人大量的资金。然而,这件事情如果仅使用区块浏览器是很难做到的,尤其在合约已经部署了较长时间,并有大量用户量的情况下。其中需要分析的数据并非是靠人工搜索Etherscan能够实现的。

动态 | 瑞典郡比特币挖矿公司失踪 数百万美元电费被拖欠:在瑞典诺博顿县(Norrbotten),最近有两家加密货币挖矿公司破产,随后两家公司消失,数百万美元的电费被拖欠。[2018/11/16]

GoogleCloudPublicDatasets在此时可发挥作用。由于每一个成功的approve()调用都会在以太坊上发出一个Approval()事件,我们可以通过BigQuery服务找出所有事件并且通过一些方法过滤出我们感兴趣的部分,例如_spender是Primitive合约的所有事件。

下面是我们在GCP上实际用来找出潜在受害者使用的SQL语句,其中第五行可以看到我们限定搜索的以太坊数据库及记录事件的表,第七行过滤出Approval()事件,第八行过滤了特定的_spender。此外,第六行将区块高度范围设定在Pirmitive合约部署之后,这可以大幅降低BigQuery扫过的数据量,这类的SQL优化会直接反应在你的GCP账单里。

接下来,我们可以进一步优化SQL查询将已经通过approve(_spender,0)重置授权的账号从清单中刨除,得到最终的账号列表。有了最终的列表,我们利用一个脚本监控着这些账号,并且在这些危险账号收到大量资产时发出预警,因为这很可能会造成严重的损失。

在一个星期三的清晨,机器人发出了预警,有一个可能的受害人在北京时间4月13日清晨5点24分收到了将近500WETH的资产,价值超过一百万美金。相较于已公开的三次白帽攻击,这个受害人如果被成功攻击,所损失的金额将高于稍早的三个案例的总和。

区块链游戏公司获二百万美元PreA融资:区块链游戏公司哈希未来获唯猎资本和Wecash Ltd.200万美元Pre-A轮投资,目前其A轮融资也已经在进行中。[2018/3/12]

我们在北京时间9:32紧急联系了Primitive项目的漏洞赏金计划运营方Immunefi并且向他们展示我们如何利用这个漏洞在模拟环境中盗取受害人的500WETH,并且提供包括下面的截屏等证据。

在Primitive团队的帮助下,潜在的受害人于10:03将WETH授权重置,解除危机。

两天后,Primitive团队也针对此发现给予漏洞奖励并发布公开致谢。该笔赏金发稿前已捐助给CryptoRelief。

复现:分布拆解漏洞的利用

漏洞利用的第一步,我们需要准备两个ERC20合约:Redeem及Option。

其中Redeem合约是一个标准的ERC20,我们只需要基于OpenZeppelin的实现将mint()接口暴露出来,方便我们控制代币数量,如下所示:

Option合约会相对复杂一点,从下面的代码片段可以看到,我们需要刻意构造一些全局变量,以及公开函数,这些都是在Primitive的业务逻辑会用到的。此外,我们还需要传入三个参数来初始化Option合约:

·???????redeemToken:稍早构造的Redeem合约地址

·???????underlyingToken:攻击目标账号所持有的资产合约地址

·???????beneficiary:受益人地址,也就是攻击成功后将受害人资产转移的目标地址

这里需要特别说明的是mintOptions()这个函数,从上面的代码可以看到,它会直接把所有的underlyingToken发给beneficiary地址。这是因为下面的内部函数mintOptionWithUnderlyingBalance()函数在被?flashMintShortOptionsThenSwap()时会将underlyingToken发给Option代币合约,并且通过mintOptions()调用铸造Option代币。因此,我们在伪造的Option合约里,可以直接把mintOptions()当作一个提币调用,将underlyingToken发给beneficiary,用于之后归还闪电贷的资金。

接下来,我们可以用刚刚创建的Redeem及Option代币创建一个Uniswap的流动性池子,这个池子的地址将用来接收从受害人钱包转出的资金。事实上,每个Uniswap池子里有等价的两种资产,例如WETH及Redeem,为了完成漏洞利用,我们必须为池子注入流通性。Redeem是我们自己创建的,可以铸造无限量的代币,但WETH呢?

在闪电贷的帮助下,我们基本上可以利用无限数量的资金来做如何事情,只要确保能在一个交易中归还资金即可。在这个案例中,我们使用AaveV2的闪电贷借了相当于受害人总资产99.7%的资金存入上述的流动性池。

根据Aave的设计,需要实现一个回调函数executeOperation()执行获得贷款资金后的操作,并且在最后通过approve()调用授权Aave合约取走闪电贷的资产以及手续费。

总结

在基于EVM的智能合约世界里,approve()/transferFrom()是长久以来存在的固有问题。对于DeFi用户而言,需要多留意你的钱包地址是否正允许着其他人使用你的资产,并且定期重置资产使用权。对于项目方而言,需要在上线之前花更多心思和时间从各种可能的角度测试,甚至攻击你的代码,因为你正在编程的,是每位用户的真金白银。

关于作者

吴家志受聘于全球领先的加密金融智能服务提供商AmberGroup,作为区块链安全专家。他毕业于美国北卡州立大学计算机专业,获得博士学位,师从安卓安全领域领军者蒋旭宪教授,在美国读书期间一直从事系统安全研究,主要方向为虚拟化安全、安卓系统安全。吴家志博士在全球安卓安全领域有很大的影响,发表过多篇科技论文,在安卓系统漏洞安全方面经验丰富。他于2017年开始转战至区块链安全领域,曾担任全球第一家去中心化匿名众测平台DVP负责人,号召全网白帽黑客一起寻找开源底层代码中的漏洞。

标签:IONPTIOPTIOPTIONX币OPTIG价格Optimism BOBOptimism

莱特币最新价格热门资讯
去中心化交易所DeversiFi宣布发行治理代币DVF,最高15%用于空投

链捕手消息,去中心化交易所DeversiFi今日发布公告宣布将发行治理代币DVF,初始供应量的10-15%分配给战略投资者,约25%分配给DeversiFi开发公司,约45%-48%的分配给DeversiFi的流动性提供者.

1900/1/1 0:00:00
Cathie Wood 旗下 3 只 ARK ETF 昨日共购买近 75 万股 Coinbase 股票,当前市值约 2.5 亿美元

链捕手消息,号称“女股神”的方舟投资管理公司首席执行官CathieWood旗下3只ETF周三均建仓买入Coinbase?股票,其中,旗舰基金ARKK买入51.25万股,金融科技创新主题基金ARKF买入8.96万股.

1900/1/1 0:00:00
起底Dragonfly Capital 桥接东西方加密世界的互联网OG

作者:链向财经 3月18日,中美两国政府高层官员举行了自拜登总统就任以来的首次会晤,这是一个很好的机会,可以把握两国之间的长期关系。遗憾的是,联盟几乎不存在。该会议旨在在贸易争端等问题上取得进展.

1900/1/1 0:00:00
数字人民币与支付宝等第三方支付究竟是什么关系?

本文发布于01区块链,作者:泽玲、雨林。5月10日,#数字人民币与微信支付宝关系#话题登上了微博热搜榜。央行数字货币研究所所长穆长春曾表示,微信、支付宝和数字人民币不是一个维度上的,微信和支付宝是钱包,数字人民币是钱包里面装的钱.

1900/1/1 0:00:00
图说DeFi 真相:发展如何?未来会怎样?

本文发布于DeFi之道,作者:jakub,编译:夕雨。去中心化金融的现状如何?以太坊的各种扩展解决方案现在发展的怎么样了?其他区块链的DeFi现在如何了?谈到DeFi的未来,最有可能发生的情况是什么?您将在本文中找到这些问题的答案.

1900/1/1 0:00:00
波浪 2021:区块链行业影响力峰会

2021年,区块链产业迎来了一个生机盎然的开年行情:全球宏观环境变化,合规趋势愈发明显,灰度及华尔街相继入场,「机构入场元年」已经落地,DeFi、NFT、隐私计算、IPFS等热点主题相继推动着整个市场向前发展.

1900/1/1 0:00:00