月亮链 月亮链
Ctrl+D收藏月亮链
首页 > NEAR > 正文

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

作者:

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

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

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

2019年年底,我发表了一篇题为"如何从抵押不足的贷款产品中获得盈利和乐趣"的文章,文中,我描述了对以太坊dApp的经济攻击,这些攻击依赖于一个或多个代币精确的价格数据。而现在已经到2020年末了,让人叹息的是,许多项目还是在犯同样的错误,最近HarvestFinance遭黑客闪电贷攻击事件,就是典型的案例,这一事件,导致协议用户集体损失3300万美元。

开发者对重入等漏洞一般比较熟悉,但预言机操纵则不太被人关注。目前,基于重入性的漏洞出现频率有所下降,而价格预言机操纵的漏洞现在却在频频增加。

是时候该发表一篇关于价格预言机操纵漏洞的文章了。

本文分为三部分。

第一部分小白科普,介绍预言机和预言机价格操纵的基本概念和原理;

第二部分中级进阶,回顾过去跟预言机相关的漏洞案例;

第三部分是对开发者的建议,看看可以应用哪些技术防止项目受到价格预言机操纵的影响。

预言机基本概念和原理

发生在现实生活类似预言机操纵的故事

回到2015年12月1日,星期三,假设你的名字叫DavidSpargo,你正在澳大利亚墨尔本,PekingDuk演唱会上,你想跟乐队来个近距离接触,但后台通道有两个保安,他们不可能让无关人员直接走进去。

这时候你会想知道,如果你表现出你跟这里很熟,保安们会有什么反应。乐队成员的亲属肯定会被允许到乐队后台参观,所以你要做的就是让保安们相信你是亲属。

安全团队:DAO Officials项目攻击者利用闪电贷获利约58万美元:金色财经消息,据Beosin EagleEye平台监测显示,BNBChain上DAO Officials项目项目遭受攻击。Beosin安全团队分析发现攻击者0x00a62eb08868ec6feb23465f61aa963b89e57e57(SpaceGodzilla Exploiter)利用闪电贷借出大量BSC-USD用于兑换DAO代币,使用兑换的DAO代币利用0xea41bbd80ac69807289d0c4f6582ab73e96834d0合约赚取DAO发放的奖励成功获利581,250(约58万美元)BSC-USD,其中一笔攻击交易

0x414462f2aa63f371fbcf3c8df46b9a64ab64085ac0ab48900f675acd63931f23,目前资金仍在攻击者账户(0x00a6...7e57)中。[2022/9/5 13:09:29]

你想了一下,想出了一个只能用天才或绝对疯狂来形容的计划。

迅速布置好一切后,你自信地走到保安面前,自我介绍说,自己是DavidSpargo,PekingDuk乐队成员的家人。当保安要求你提供证据时,你向他们展示了无可辩驳的证据--维基百科。

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

什么是价格预言机?

价格预言机,通俗来说,就是任何你可以查询价格信息的东西。

在美剧《TheOffice》中,Pam向Dwight询问SchruteBuck的现金价值时,Dwight的作用就是一个价格预言机。

安全团队:EGD_Finance遭受黑客攻击,代币价格被闪电贷操控:8月8日消息,据慢雾区消息,BSC上的EGD_Finance项目遭受黑客攻击,导致其池子中资金被非预期的取出。慢雾安全团队进行的分析如下:

1.由于EGD_Finance合约中获取奖励的claimAllReward函数在计算奖励时会调用getEGDPrice函数来进行计算EGD的价格,而getEGDPrice函数在计算时仅通过pair里的EGD和USDT的余额进行相除来计算EGD的价格

2.攻击者利用这个点先闪电贷借出池子里大量的USDT,使得EGD代币的价格通过计算后变的很小,因此在调用claimAllReward函数获取奖励的时候会导致奖励被计算的更多,从而导致池子中的EGD代币被非预期取出

本次事件是因为EGD_Finance的合约获取奖励时计算奖励的喂价机制过于简单,导致代币价格被闪电贷操控从而获利。[2022/8/8 12:09:04]

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

这两种方式各有优劣。

链下数据对价格波动的反应一般较慢,这个特性有好有坏,取决于你想用它来做什么。不过,它通常需要少数特权用户来推送链上数据,所以你必须相信他们不会变坏,不会被胁迫推送不良更新。

链上数据不需要任何特权访问,而且总是最新的,但这意味着它很容易被攻击者操纵,这就可能造成灾难性的失败。

跟预言机相关的漏洞案例

可能出现什么问题呢?

让我们来看看几个案例,在这些案例中,因为集成了糟糕的价格预言机,一些DeFi项目出现重大的财务损失。

案例一:SynthetixsKRWOracle故障

Fairyproof:LP价格采用加权平均无法有效预防闪电贷:3月22日消息,Fantom上部署的DeFi应用OneRing Finance遭到攻击。本次攻击黑客的地址为Fantom上的0x12EfeD3512EA7b76F79BcdE4a387216C7bcE905e。黑客借助部署在0x6A6d593ED7458B8213fa71F1adc4A9E5fD0B5A58上的攻击合约发起了本次攻击。由于该合约在特定区块会自行注销,这使得外界难以追踪OneRing上具体哪个函数被调用从而引发了本次攻击。

在攻击中黑客首先利用Celer Network的cBridge通过跨链获得了发起攻击的GAS。接下来在部署上述攻击合约后的15分钟,通过闪电贷向Solidly借到80,000,000USDC,通过推高LP价格,改变了OShare代币的价格,从协议获取大量OShare代币,掏空了OneRing的资产。黑客最终将盗取的资金从Fantom跨链转回到以太坊并最终通过Tornado.Cash套现。

在本次攻击中,Fairyproof发现该协议计算LP价格的方式不合适,本协议使用的计算方式使得LP价格是瞬时价格,因此极易被操纵。[2022/3/22 14:11:03]

Synthetix是一个基于以太坊的衍生品流动性协议,允许用户合成其他货币资产。为了实现这一目标,Synthetix依靠定制的链下喂价机制,从一组秘密喂价核算出总价格,并以固定的时间间隔发布在链上。然后,依据计算出来的价格,允许用户针对资产进行多头或空头交易。

2019年6月25日,Synthetix所依赖的其中一个喂价渠道错误的报告了韩元价格,报价比真实汇率高出1000倍,再加上价格预言机系统出现的额外错误,这个价格被系统接受并发布在了链上。一个交易机器人迅速在sKRW市场上进行了买入和卖出。

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

Grim Finance 被黑简析:攻击者通过闪电贷借出 WFTM 与 BTC 代币:据慢雾区情报,2021 年 12 月 19 日,Fantom 链上 Grim Finance 项目遭受攻击。慢雾安全团队进行分析后以简讯的形式分享给大家。

1. 攻击者通过闪电贷借出 WFTM 与 BTC 代币,并在 SpiritSwap 中添加流动性获得 SPIRIT-LP 流动性凭证。

2. 随后攻击者通过 Grim Finance 的 GrimBoostVault 合约中的 depositFor 函数进行流动性抵押操作,而 depositFor 允许用户指定转入的 token 并通过 safeTransferFrom 将用户指定的代币转入 GrimBoostVault 中,depositFor 会根据用户转账前后本合约与策略池预期接收代币(预期接收 want 代币,本次攻击中应为 SPIRIT-LP)的差值为用户铸造抵押凭证。

3. 但由于 depositFor 函数并未检查用户指定转入的 token 的合法性,攻击者在调用 depositFor 函数时传入了由攻击者恶意创建的代币合约地址。当 GrimBoostVault 通过 safeTransferFrom 函数调用恶意合约的 transferFrom 函数时,恶意合约再次重入调用了 depositFor 函数。攻击者进行了多次重入并在最后一次转入真正的 SPIRIT-LP 流动性凭证进行抵押,此操作确保了在重入前后 GrimBoostVault 预期接收代币的差值存在。随后 depositFor 函数根据此差值计算并为攻击者铸造对应的抵押凭证。

4. 由于攻击者对 GrimBoostVault 合约重入了多次,因此 GrimBoostVault 合约为攻击者铸造了远多于预期的抵押凭证。攻击者使用此凭证在 GrimBoostVault 合约中取出了远多于之前抵押的 SPIRIT-LP 流动性凭证。随后攻击者使用此 SPIRIT-LP 流动性凭证移除流动性获得 WFTM 与 BTC 代币并归还闪电贷完成获利。

此次攻击是由于 GrimBoostVault 合约的 depositFor 函数未对用户传入的 token 的合法性进行检查且无防重入锁,导致恶意用户可以传入恶意代币地址对 depositFor 进行重入获得远多于预期的抵押凭证。慢雾安全团队建议:对于用户传入的参数应检查其是否符合预期,对于函数中的外部调用应控制好外部调用带来的重入攻击等风险。[2021/12/19 7:49:04]

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

DeBank工作人员:Balancer再次遭到闪电贷攻击:金色财经报道,DeBank转发其工作人员的推文称,黑客再次利用dYdX的闪电贷进行攻击,并将多个Balancer矿池中无人认领的COMP抽走,在此过程中获利10.8ETH。[2020/6/30]

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

低抵押借贷

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

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

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

在区块链系统中,不是简单地宣布1个ETH值400美元就可以了。恶意用户完全有可能宣布1个ETH值1000美元,然后从系统中拿走所有的钱。因此,对于项目开发者来说,去寻找接近真实价格的价格预言机就变得很有必要,比如Uniswap、Kyber或其他去中心化交易所的当前现货价格。

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

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

Uniswap的ETH/USD池子里有8000个ETH和320万个USD,假设在用户贷款前,用200万美元购买5,000个ETH。Uniswap交易所计算出的价格是1ETH=1,733.33美元,与此同时,用户借的375个ETH可以作为价值433,333.33美元资产的抵押品,最后,用户用5000ETH换回他原来的200万美元,从而重置价格。最终的结果是,贷款平台只是让用户在没有投入任何抵押物的情况下,多借了333,333.33美元。

这个案例说明,使用去中心化交易所作为价格预言机时,出现的最常见错误——攻击者在交易过程中几乎完全控制了价格,而试图准确地读出这个价格,就像在一个秤上读出它完成结算前的重量一样,很有可能会得到错误的数字。可能会让你损失很多钱。

案例二:SynthetixMKR价格操纵

2019年12月,Synthetix再次遭遇攻击,原因是价格预言机操纵。值得注意的是,这次它跨越了链上价格数据和链下价格数据之间的障碍。

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

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

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

案例三:bZx黑客事件

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

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

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

案例四:yVault漏洞

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

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

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

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

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

案例五:HarvestFinance攻击事件

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

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

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

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

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

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

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

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

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

这种方法实现起来真的很简单,而且见效很快,但存在一些缺点--在区块链拥堵时,你可能无法像你希望的那样快速更新价格,而且你仍然容易受到三明治攻击]建议四:增加交易延迟

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

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

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

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

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

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

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

结语

价格预言机是DeFi安全性的一个重要组成部分,但往往被忽视。安全地使用价格预言机是很难的,而且有很多方法可以让你和你的用户都吃亏。

在这篇文章中,我们介绍了过去操纵价格预言机的例子,并确定在交易过程中读取价格信息可能是不安全的,可能会导致灾难性的财务损失。我们还讨论了一些其他项目过去用来打击价格预言机操纵的技术。不过最后,每一种情况都是独特的,你可能会发现自己不确定自己是否正确使用了价格预言机。如果是这种情况,请随时联系我们寻求建议。

特别感谢DanRobinson和GeorgiosKonstantopoulos对这篇文章的评论,感谢@zdhu_和mongolsteppe指出的错误。

作者:Samczsun

编译:Savage

标签:USDETHNCEVAULTdoge币怎么换成usdtEETH价格Hillstone FinanceCITIES Vault (NFTX)

NEAR热门资讯
GATE:Gate.io已上线BCHA永续合约交易(USDT结算)_TPS

Gate.io已上线BCHA/USDT永续合约实盘交易,支持1-20倍做多和做空操作,杠杆率可以在下单时自行选择.

1900/1/1 0:00:00
比特币:彤欣言币:11.19比特币以太坊行情分析来回洗盘,谨防再次插针_OSMO币

因为生来就是个很普通的人,所以每一次努力,都得竭尽全力,一点点的进步,都会欢欣鼓舞,我们也曾如此期盼外界的认可,到最后才知道,世界是自己的,与他人毫无关系。我们总是太在意别人怎么看自己.

1900/1/1 0:00:00
HTT:关于WBF上线YFIPT的公告_YFI

尊敬的用户:YFIPT将在WBF开放区上线YFIPT/ETH交易对,具体时间安排如下:充币时间:2020-11-1818:00交易时间:2020-11-1914:00提币时间:2020-11-1.

1900/1/1 0:00:00
DEX:2020第三季度DEX、DeFi大热,中心化交易所作何表态?_中心化交易所

要点总结近期,TokenInsight发布了《2020Q3数字资产交易所行业领袖观点》,文章表示DeFi热潮在8-9月达到了流量顶峰,不仅为DEX带来了交易量带来迅速的增长.

1900/1/1 0:00:00
GAT:Gate.io今日直播新鲜看,市场分析、投资教学等14个节目即将开播_HTT

Gate.io直播间作为行业内首个交易所内置直播功能,通过多样性的直播形式为平台用户带来具有深度、有趣、开放的信息内容.

1900/1/1 0:00:00
区块链:趋势论币:11.17 BTC晚间走势分析 日内布局收获丰厚_区块链最直白的解释

大家好!我是你们的老朋友趋势论币,每日解读世界经济要闻,K线走势解析,实时交易策略及中长线布局.

1900/1/1 0:00:00