进入11月以来,连着有两起闪电贷进犯被报道,Value DeFi 协议和BSC上的CHEESE项目方都遭遇了相似进犯,丢失了数百万美元。随着时间的添加,能够预见闪电贷进犯事情或许会越来越多。闪电贷进犯是怎么产生的?背面的机制是什么?怎么防范相似的进犯呢?

这篇文章中,闻名白帽黑客、Paradigm研究合伙人Samczsun指出,格预言机操作缝隙是闪电贷等进犯事情的根本原因并给出了五个相关缝隙事例和六个防护主张,主张DeFi开发者保藏。
闪电贷攻击的深层原因:价格预言机操纵攻击 
2019年年底,我发表了一篇题为 "怎么从典当不足的借款产品中获得盈利和乐趣 "的文章,文中,我描绘了对以太坊 dApp 的经济进犯,这些进犯依靠于一个或多个代币准确的价格数据。而现在现已到2020年末了,让人叹息的是,许多项目还是在犯相同的过错,最近Harvest Finance遭黑客闪电贷进犯事情,便是典型的事例,这一事情,导致协议用户集体丢失3300万美元。 开发者对重入等缝隙一般比较熟悉,但预言机操作则不太被人重视。现在,根据重入性的缝隙呈现频率有所下降,而价格预言机操作的缝隙现在却在频频添加。 是时候该发表一篇关于价格预言机操作缝隙的文章了。 本文分为三部分。 榜首部分小白科普,介绍预言机和预言机价格操作的基本概念和原理;第二部分中级进阶,回顾曩昔跟预言机相关的缝隙事例;第三部分是对开发者的主张,看看能够运用哪些技能避免项目遭到价格预言机操作的影响。

预言机基本概念和原理

产生在现实日子相似预言机操作的故事


回到2015年12月1日,星期三,假定你的名字叫David Spargo,你正在澳大利亚墨尔本,Peking Duk演唱会上,你想跟乐队来个近距离触摸,但后台通道有两个保安,他们不行能让无关人员直接走进去。 这时候你会想知道,假如你表现出你跟这儿很熟,保安们会有什么反响。乐队成员的亲属必定会被答应到乐队后台观赏,所以你要做的便是让保安们信任你是亲属。 你想了一下,想出了一个只能用天才或绝对张狂来描述的计划。 敏捷布置好一切后,你自傲地走到保安面前,毛遂自荐说,自己是David Spargo,Peking Duk乐队成员的家人。当保安要求你供给根据时,你向他们展示了无可辩驳的根据--维基百科。 闪电贷攻击的深层原因:价格预言机操纵攻击 保安向你招手,让你等等。一分钟曩昔了,两分钟曩昔了...五分钟后,你在想是否应该在执法部门呈现前逃走。当你预备放弃,乐队成员之一的Reuben Styles走过来做了毛遂自荐,随后你和他一同走进后台休息室,乐队对你的聪明才智印象深入,最后你们一同喝了几杯啤酒。再后来,他们在自己的Facebook页面上共享了那晚产生的事情。 闪电贷攻击的深层原因:价格预言机操纵攻击 

什么是价格预言机?

价格预言机,浅显来说,便是任何你能够查询价格信息的东西。 在美剧《TheOffice》中,Pam向Dwight询问Schrute Buck的现金价值时,Dwight的作用便是一个价格预言机。
闪电贷攻击的深层原因:价格预言机操纵攻击 在以太坊上,一切都是智能合约,价格预言机也是如此。因而,区分价格预言机怎么获取价格信息很必要。其间一种办法,你能够简略地从价格API或买卖所获取现有的链下价格数据,并将其带到链上;另一种办法,你能够经过查询链上去中心化买卖所来核算即时价格。
这两种办法各有好坏。 闪电贷攻击的深层原因:价格预言机操纵攻击
链下数据对价格动摇的反响一般较慢,这个特性有好有坏,取决于你想用它来做什么。不过,它一般需求少量特权用户来推送链上数据,所以你有必要信任他们不会变坏,不会被胁迫推送不良更新。 链上数据不需求任何特权访问,并且总是最新的,但这意味着它很容易被进犯者操作,这就或许形成灾难性的失败。

跟预言机相关的缝隙事例

或许呈现什么问题呢?


让咱们来看看几个事例,在这些事例中,因为集成了糟糕的价格预言机,一些DeFi项目呈现重大的财政丢失。 

事例一:Synthetix sKRW Oracle毛病

 Synthetix是一个根据以太坊的衍生品流动性协议,答应用户组成其他货币财物。为了完结这一目标,Synthetix(当时)依靠定制的链下喂价机制,从一组隐秘喂价核算出总价格,并以固定的时间间隔发布在链上。然后,根据核算出来的价格,答应用户针对财物进行多头或空头买卖。 2019年6月25日,Synthetix所依靠的其间一个喂价渠道过错的陈述了韩元价格,报价比实在汇率高出1000倍,再加上价格预言机体系呈现的额外过错,这个价格被体系接受并发布在了链上。一个买卖机器人敏捷在sKRW商场上进行了买入和卖出。 闪电贷攻击的深层原因:价格预言机操纵攻击 这个机器人本能够赚取超越10亿美元的赢利,不过Synthetix团队最后跟买卖员洽谈,将买卖员将资金返还,交流bug赏金。 Synthetix团队正确地施行了价格预言机合约,从多个来历提取价格,以避免买卖者在链上发布价格改变之前预测价格改变。可是,因为上游价格源产生毛病,导致这个事例中呈现了毁灭性的进犯。 这阐明了运用运用链下数据的价格预言机的危险:你不知道价格是怎么核算出来的,所以你的体系有必要精心设计,使一切潜在的毛病模式都能得到妥善处理。 

低典当假贷

 上文提到,我在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买卖所核算出的价格是1 ETH=1,733.33美元,与此同时,用户借的375个ETH能够作为价值433,333.33美元财物的典当品,最后,用户用5000 ETH换回他本来的200万美元,然后重置价格。终究的结果是,借款渠道仅仅让用户在没有投入任何典当物的状况下,多借了333,333.33美元。 这个事例阐明,运用去中心化买卖所作为价格预言机时,呈现的最常见过错——进犯者在买卖进程中简直彻底操控了价格,而企图准确地读出这个价格,就像在一个秤上读出它完结结算前的分量一样,很有或许会得到过错的数字。或许会让你丢失许多钱。 

事例二:Synthetix MKR价格操作

2019年12月,Synthetix再次遭遇进犯,原因是价格预言机操作。值得注意的是,这次它跨越了链上价格数据和链下价格数据之间的障碍。 闪电贷攻击的深层原因:价格预言机操纵攻击 Reddit用户u/MusaTheRedGuard调查到,一名进犯者针对sMKR和iMKR(反向MKR)进行了一些十分可疑的买卖。进犯者首先购买sMKR来做多MRK,然后从Uniswap ETH/MKR对中购买大量的MKR,等候一段时间后,进犯者将他们的sMKR卖出换成iMKR空头仓位,并将他们的MKR卖回Uniswap。一向重复这个进程。 这个操作背面的逻辑是,进犯者经过Uniswap买卖,这使他们能够随意移动Synthetix上MKR的价格。深层原因,很或许是Synthetix所依靠的链下喂价实际上是依靠于MKR的链上价格,MKR没有满足的流动性让套利者将商场价格设置成最佳状态。 这一事情阐明,即便你以为你运用的是链下价格数据,但实际上你或许依然在运用链上价格数据,你依然或许暴露在运用这些数据的复杂性中。 

事例三:bZx黑客事情

 2020年2月,bZx在几天内被黑了两次,丢失约100万美元,这儿咱们只看第2次进犯事情。 在第二个进犯事情中,进犯者首先用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答应用户经过向Balancer MUSD/USDC池供给流动性来赚取USDC的收益率。当用户向Balancer池子供给流动性,作为回报,他们会收到BPT代币,BPT能够兑换池子的一部分。因而,yVault根据能够用其BPT换回的MUSD/USDC的数量来核算其持有的价值。 这似乎是正确的完结办法,但不幸的是,与之前给出的原理相同--买卖进程中Balancer流动池的状态并不安稳,不能被信任。在这种状况下,因为Balancer挑选的粘合曲线,用户从USDC换成MUSD时,不会得到1:1的汇率,事实上会在池子里留下一些MUSD。这意味着BPT的价值能够暂时被夸大,这使得进犯者能够随意操作价格,随后将金库流动性耗尽。 这一事情标明,价格预言机并不总能被方便地贴上标签,开发者需求警觉预言机摄取的是什么样的数据,并考虑这些数据是否能被无权用户轻易操作。 

事例五:Harvest Finance 进犯事情

2020年10月26日,一个不闻名的用户入侵了Harvest Finance的流动池,运用的技能你现在或许现已猜到了。你能够去阅读官方的过后陈述,但我在这儿简略总结一下:进犯者履行买卖,将Curve池中USDC的价格压低,在这时用较低的价格进入Harvest池,然后逆转之前的买卖恢复USDC价格,并以较高的价格退出Harvest池。这个终究导致超3300万美元的用户丢失。 

给开发者的主张

该怎么维护协议不被进犯?

现在,我期望读者现已认识到上文这些事例共同点——假如不做适当的预防措施,进犯者或许会欺骗协议,让其把钱交到他们手里。尽管现在没有万能的解决办法,但这儿有一些曩昔对其他项目有用的解决方案,也许其间一个也会适用于你。 

主张一:不要跳入深度不足的商场

就像跳入游泳池的浅滩一样,跳入深度不足的商场也是苦楚的,有或许会形成足以永远改变你日子的重大丢失。因而,在考虑运用的详细复杂的价格预言机前,请考虑代币的流动性是否有跟你的渠道相匹配的充足流动性。 

主张二:一鸟在手胜于双鸟在林

在Uniswap上看到潜在的兑换汇率或许会令人入神,但在真实完结买卖、代币放在你的钱包里之前,没有什么是终究确定的。相同,确定两种财物之间汇率的最好办法是直接交流财物。这种办法很好,因为不能回撤,也没有假如。可是,关于假贷渠道等需求持有原始财物的协议来说,或许就不适用了。 

主张三:在去中心化预言机中引进人为的推迟

依靠链上数据预言机所呈现的问题,能够简略总结为,预言机的时效性太强。既然如此,为什么不引进一点人为的推迟呢?写一个合约,它能够用Uniswap这样的去中心化买卖所的最新价格来更新自己,但只需少量特权用户提出恳求时才会更新。现在即便进犯者能够操作价格,他们也无法让你的协议真实运用它。 这种办法完结起来真的很简略,并且见效很快,但存在一些缺陷--在区块链拥堵时,你或许无法像你期望的那样快速更新价格,并且你依然容易遭到三明治进犯(sandwich attacks)。另外,现在你的用户需求信任你真的会保持价格更新。 

主张四:添加买卖推迟

操作价格预言机是一个对时间敏感的操作,因为套利者总是在调查,并期望有时机优化任何次优商场。假如进犯者想把危险降到最低,他们会期望在单笔买卖中完结操作价格预言机所需的两笔买卖,这样就不会有套利者跳到中心作梗。作为协议开发者,假如你的体系支持的话,或许只需求将用户进出体系之间的时间间隔,添加至少1个区块的推迟就能够了。 当然,这或许会影响到可组成性,并且矿工与买卖员的合作正在添加。在未来,不良行为者或许会在多笔买卖中进行价格预言机操作,因为他们知道与他们合作的矿工会保证没有人能够跳到中心,从他们的收益中分一杯羹。 

主张五:时间加权平均价格(TWAP)

Uniswap V2引进了一个TWAP预言机,供链上开发者运用。有文档详细地介绍了该预言机供给的详细安全保证。一般来说,关于长期没有链上拥堵的大型财物池来说,TWAP预言机对预言机操作进犯有很强的抵抗力。不过,因为其施行的性质,在商场动摇较大的时间,它的响应速度或许不够快,并且只适用于链上现已有流动性的代币财物。 

主张六:M-of-N陈述者机制

有时候人们会说,假如你想把一件事做好,你就自己去做。假如你召集N个值得信任的朋友,让他们提交他们以为合适的链上价格,最好的M个答案汇聚成当时的价格,那会怎么样? 现在许多大型项目都在运用这种办法。Maker运行了一组由可信实体运营的喂价来历,Compound创建了Open Oracle,并具有Coinbase等陈述者,Chainlink聚合了Chainlink运营商的价格数据,并在链上公开。只需记住,假如你挑选运用这些解决方案之一,你现在现已将信任委托给第三方,你的用户也有必要这样做。要求记者在链上手动发布更新也意味着在商场高度动摇和链上拥堵的时候,价格更新或许无法及时抵达。 

结语

价格预言机是 DeFi 安全性的一个重要组成部分,但往往被忽视。安全地运用价格预言机是很难的,并且有许多办法能够让你和你的用户都吃亏。
在这篇文章中,咱们介绍了曩昔操作价格预言机的例子,并确定在买卖进程中读取价格信息或许是不安全的,或许会导致灾难性的财政丢失。咱们还讨论了一些其他项目曩昔用来打击价格预言机操作的技能。不过最后,每一种状况都是共同的,你或许会发现自己不确定自己是否正确运用了价格预言机。假如是这种状况,请随时联络咱们寻求主张。

视野开拓

错过列车只有在你追赶它时才是痛苦的!同样,不能达到别人对你期望的成功,只有在它也是你所追求的东西时才是痛苦的。 我有时惊异于为什么人们会因为一顿不好吃的饭、一杯冷咖啡、一次社交挫折或粗鲁的接待而伤心一天或者感到愤怒。回忆一下,我在第八章讨论过人们难过看到自己生活中发生的事件的真实概率。我们很容易忘记我们活着本身就是极大的运气,一个可能性微小的事件,一个极大的偶然。 想象一下一个10亿倍于地球的行星边上的一粒尘埃。这粒尘埃就代表你出生的概率,庞大的行星则代表相反的概率。所以不要再为小事烦恼了。不要再像一个忘恩负义者,得到一座城堡,还要介意浴室里的霉菌。不要再检查别人赠与你的马匹的牙齿,请记住,你就是黑天鹅。-《The Black Swa》

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注