闪电贷攻击的深层原因:价格预言机操纵攻击

币圈资讯 0

进入11月以来,连着有两起闪电贷攻击被报道,Value DeFi 协议和BSC上的CHEESE项目方都遭遇了类似攻击,损失了数百万美元。随着时间的增加,可以预见闪电贷攻击事件可能会越来越多。闪电贷攻击是如何发生的?背后的机制是什么?如何防范类似的攻击呢?这篇文章中,知名白帽黑客、Paradigm研究合伙人Samczsun指出,价格预言机操纵漏洞是闪电贷等攻击事件的根本原因,并给出了五个相关漏洞案例

进入11月以来,连着有两起闪电贷攻击被报道,Value DeFi 协议和BSC上的CHEESE项目方都遭遇了类似攻击,损失了数百万美元。随着时间的增加,可以预见闪电贷攻击事件可能会越来越多。闪电贷攻击是如何发生的?背后的机制是什么?如何防范类似的攻击呢?


这篇文章中,知名白帽黑客、Paradigm研究合伙人Samczsun指出,价格预言机操纵漏洞是闪电贷等攻击事件的根本原因并给出了五个相关漏洞案例和六个防御建议,建议DeFi开发者收藏。


image


保安向你招手,让你等等。一分钟过去了,两分钟过去了...五分钟后,你在想是否应该在执法部门出现前逃走。当你准备放弃,乐队成员之一的Reuben Styles走过来做了自我介绍,随后你和他一起走进后台休息室,乐队对你的聪明才智印象深刻,最后你们一起喝了几杯啤酒。再后来,他们在自己的Facebook页面上分享了那晚发生的事情。




在以太坊上,一切都是智能合约,价格预言机也是如此。因此,区分价格预言机如何获取价格信息很必要。其中一种方式,你可以简单地从价格API或交易所获取现有的链下价格数据,并将其带到链上;另一种方式,你可以通过查询链上去中心化交易所来计算即时价格。


这两种方式各有优劣。




这个机器人本可以赚取超过10亿美元的利润,不过Synthetix团队最后跟交易员协商,将交易员将资金返还,换取bug赏金。


Synthetix团队正确地实施了价格预言机合约,从多个来源提取价格,以防止交易者在链上发布价格变化之前预测价格变化。然而,由于上游价格源发生故障,导致这个案例中出现了毁灭性的攻击。


这说明了使用使用链下数据的价格预言机的风险:你不知道价格是怎么计算出来的,所以你的系统必须精心设计,使所有潜在的故障模式都能得到妥善处理。


低抵押借贷">低抵押借贷


上文说到,我在2019年9月发表了一篇文章,概述了依赖链上数据的价格预言机的相关风险。虽然我强烈建议阅读原帖,但文章比较长,技术细节也很多,可能会让人难以消化。因此,我在这里提供一个简化版的解释。


想象一下,你想把去中心化的借贷带到区块链上。允许用户存入资产作为抵押品,借出其他资产,最高金额由他们存入的资产价值决定。假设用户想用ETH作为抵押品借入美元,ETH当前价格为400美元,抵押率为150%。


当用户存入375个ETH,等于他们存入了15万美元的抵押品。每1.5美元的抵押品可以借到1美元,所以他们最多可以从系统中借到10万美元。



乍一看,这似乎是正确的做法。毕竟,只要你想买入或卖出ETH,Uniswap的价格总是大致正确的,因为任何偏差都会被套利者迅速纠正。然而,事实证明,在交易过程中,去中心化交易所的现货价格也可能会出现疯狂的错误,就像下面这个案例所示。


首先需要考虑Uniswap的储备金是如何运作的。价格是根据储备持有的资产数量计算的,随着用户在ETH和美元之间进行交易,储备持有的资产会发生变化。如果有恶意用户在从你的平台贷款前/后进行交易,怎么办?



Reddit用户u/MusaTheRedGuard观察到,一名攻击者针对sMKR和iMKR(反向MKR)进行了一些非常可疑的交易。攻击者首先购买sMKR来做多MRK,然后从Uniswap ETH/MKR对中购买大量的MKR,等待一段时间后,攻击者将他们的sMKR卖出换成iMKR空头仓位,并将他们的MKR卖回Uniswap。一直重复这个过程。


这个操作背后的逻辑是,攻击者通过Uniswap交易,这使他们可以随意移动Synthetix上MKR的价格。深层原因,很可能是Synthetix所依赖的链下喂价实际上是依赖于MKR的链上价格,MKR没有足够的流动性让套利者将市场价格设置成最佳状态。


这一事件说明,即使你认为你使用的是链下价格数据,但实际上你可能仍然在使用链上价格数据,你仍然可能暴露在使用这些数据的复杂性中。


案例三:bZx黑客事件">案例三:bZx黑客事件


2020年2月,bZx在几天内被黑了两次,损失约100万美元,这里我们只看第二次攻击事件。


在第二个攻击事件中,攻击者首先用ETH购买了Kyber平台上几乎所有的sUSD,sUSD价格短时升高,然后,攻击者自己从Synthetix购买了第二批sUSD,并将其存放在bZx上。攻击者用这些sUSD作为抵押品,借到了bZx平台允许的最大数额的ETH。最后,攻击者再将sUSD卖回给Kyber平台。


如果你足够用心的话,你会认识到这本质上是相同的低抵押贷款攻击,只是使用了不同的抵押品和不同的去中心化交易所而已。


案例四:yVault 漏洞">案例四:yVault 漏洞


2020年7月25日,我向yEarn报告了一个关于他们新上线的yVault合约的bug,我在这里简单总结一下。


yVault系统允许用户存入代币赚取收益,而不需要自己管理。在内部,金库会跟踪yVault代币的总发行量以及存入的基础代币总量。单个yVault代币的价值由铸造的代币与存入的代币的比例得出。金库赚取的所有收益都会分摊到所有已发行的yVault代币上,因此,也就分摊到所有yVault代币持有人身上。


第一个yVault允许用户通过向Balancer MUSD/USDC池提供流动性来赚取USDC的收益率。当用户向Balancer池子提供流动性,作为回报,他们会收到BPT代币,BPT可以兑换池子的一部分。因此,yVault根据可以用其BPT赎回的MUSD/USDC的数量来计算其持有的价值。


这似乎是正确的实现方式,但不幸的是,与之前给出的原理相同--交易过程中Balancer流动池的状态并不稳定,不能被信任。在这种情况下,由于Balancer选择的粘合曲线,用户从USDC换成MUSD时,不会得到1:1的汇率,事实上会在池子里留下一些MUSD。这意味着BPT的价值可以暂时被夸大,这使得攻击者可以随意操纵价格,随后将金库流动性耗尽。


这一事件表明,价格预言机并不总能被方便地贴上标签,开发者需要警惕预言机摄取的是什么样的数据,并考虑这些数据是否能被无权用户轻易操纵。


案例五:Harvest Finance 攻击事件">案例五:Harvest Finance 攻击事件


2020年10月26日,一个不知名的用户入侵了Harvest Finance的流动池,使用的技术你现在可能已经猜到了。你可以去阅读官方的事后报告,但我在这里简单总结一下:攻击者执行交易,将Curve池中USDC的价格压低,在这时用较低的价格进入Harvest池,然后逆转之前的交易恢复USDC价格,并以较高的价格退出Harvest池。这个最终导致超3300万美元的用户损失。


给开发者的建议">给开发者的建议

该如何保护协议不被攻击?">该如何保护协议不被攻击?


现在,我希望读者已经认识到上文这些案例共同点——如果不做适当的预防措施,攻击者可能会欺骗协议,让其把钱交到他们手里。虽然目前没有万能的解决方法,但这里有一些过去对其他项目有效的解决方案,也许其中一个也会适用于你。


建议一:不要跳入深度不足的市场">建议一:不要跳入深度不足的市场


就像跳入游泳池的浅滩一样,跳入深度不足的市场也是痛苦的,有可能会造成足以永远改变你生活的重大损失。因此,在考虑使用的具体复杂的价格预言机前,请考虑代币的流动性是否有跟你的平台相匹配的充足流动性。


建议二:一鸟在手胜于双鸟在林">建议二:一鸟在手胜于双鸟在林


在Uniswap上看到潜在的兑换汇率可能会令人着迷,但在真正完成交易、代币放在你的钱包里之前,没有什么是最终确定的。同样,确定两种资产之间汇率的最好方法是直接交换资产。这种方法很好,因为不能回撤,也没有万一。但是,对于借贷平台等需要持有原始资产的协议来说,可能就不适用了。


建议三:在去中心化预言机中引入人为的延迟">建议三:在去中心化预言机中引入人为的延迟


依赖链上数据预言机所出现的问题,可以简单总结为,预言机的时效性太强。既然如此,为什么不引入一点人为的延迟呢?写一个合约,它可以用Uniswap这样的去中心化交易所的最新价格来更新自己,但只有少数特权用户提出请求时才会更新。现在即使攻击者可以操纵价格,他们也无法让你的协议真正使用它。


这种方法实现起来真的很简单,而且见效很快,但存在一些缺点--在区块链拥堵时,你可能无法像你希望的那样快速更新价格,而且你仍然容易受到三明治攻击(sandwich attacks)。另外,现在你的用户需要相信你真的会保持价格更新。


建议四:增加交易延迟">建议四:增加交易延迟


操纵价格预言机是一个对时间敏感的操作,因为套利者总是在观察,并希望有机会优化任何次优市场。如果攻击者想把风险降到最低,他们会希望在单笔交易中完成操纵价格预言机所需的两笔交易,这样就不会有套利者跳到中间作梗。作为协议开发者,如果你的系统支持的话,可能只需要将用户进出系统之间的时间间隔,增加至少1个区块的延迟就可以了。


当然,这可能会影响到可组成性,并且矿工与交易员的合作正在增加。在未来,不良行为者可能会在多笔交易中进行价格预言机操纵,因为他们知道与他们合作的矿工会保证没有人可以跳到中间,从他们的收益中分一杯羹。


建议五:时间加权平均价格(TWAP)">建议五:时间加权平均价格(TWAP)


Uniswap V2引入了一个TWAP预言机,供链上开发者使用。有文档详细地介绍了该预言机提供的具体安全保障。一般来说,对于长期没有链上拥堵的大型资产池来说,TWAP预言机对预言机操纵攻击有很强的抵抗力。不过,由于其实施的性质,在市场波动较大的时刻,它的响应速度可能不够快,而且只适用于链上已经有流动性的代币资产。


建议六:M-of-N报告者机制">建议六:M-of-N报告者机制


有时候人们会说,如果你想把一件事做好,你就自己去做。如果你召集N个值得信赖的朋友,让他们提交他们认为合适的链上价格,最好的M个答案汇聚成当前的价格,那会怎么样?


如今很多大型项目都在使用这种方法。Maker运行了一组由可信实体运营的喂价来源,Compound创建了Open Oracle,并拥有Coinbase等报告者,Chainlink聚合了Chainlink运营商的价格数据,并在链上公开。只要记住,如果你选择使用这些解决方案之一,你现在已经将信任委托给第三方,你的用户也必须这样做。要求记者在链上手动发布更新也意味着在市场高度波动和链上拥堵的时候,价格更新可能无法及时到达。

以太币换算 以太币换算 虚拟货币市值排名

欧易OKX介绍: 欧易OKX是行业领先的虚拟资产交易所及Web3生态圈,欧易OKX开发出速度与可靠性兼备的虚拟资产应用程序,深受全球逾五千万投资者及专业交易员的青睐。除了交易所服务外,欧易OKX最新推出OKX Web3钱包服务,为用户打通交易 GameFi和 DeFi代币的入口,尽情探索NFT和元宇宙领域。

原文网站:区块链之家https://www.digitals.tw/zh/
原文标题:闪电贷攻击的深层原因:价格预言机操纵攻击
原文网址:https://www.digitals.tw/zh/touzilicai/614.html

也许您对下面的内容还感兴趣: