阅读有关价格预测的所有信息,并学习如何安全地使用它们。
撰稿人:**的白帽,加密风险投资公司范式研究合伙人
2019年底,我发表了一篇题为“利用抵押贷款获取乐趣和利润”的帖子。在本文中,我描述了对以太坊去中心化应用DAPP的经济攻击,该应用依赖于来自一个或多个代币的准确价格数据。这是2020年底。不幸的是,许多项目都犯了非常类似的错误。**的例子是harvest finance的黑客攻击,导致协议用户集体损失3300万美元。
尽管开发者对再入市等漏洞了如指掌,但他们显然并不经常考虑价格预测器的操纵。相反,基于可重入的漏洞数年来有所减少,而基于预言机操纵价格的漏洞现在却在增加。所以我决定,是时候让人提供关于这种操作的明确资源,以提高安全意识。
本文分为三个部分。对于不熟悉这个话题的读者来说,这是一篇关于预言机及其操作的科普文章。想要测试自己知识水平的读者可以直接跳到案例研究中。让我们回顾一下过去与预言机机器相关的一些漏洞和攻击。**,我们总结了一些开发人员可以用来保护他们的项目免受价格预测器操纵攻击的技术。
什么是预言机控制事件?让我们举一个真实的例子
2015年12月1日,星期3你叫大卫·斯巴戈。你在澳大利亚悉尼看北京杜克的演唱会。你可能想亲眼看看乐队,但是两个保安挡住了你去后台的路。他们不可能让一个普通的路人大摇大摆地走进背景。
你可能会想,如果你表现得像个后台人员,保安会怎么做。家庭成员当然可以在后台参观乐队,所以你需要做的就是让保安相信你是乐队成员的亲戚。你想一想,你就想出了一个计划,这个计划可能被称为天才计划,也可能是非常糟糕的计划。
当你准备好了,你自信地走向保安。你介绍一下大卫·斯巴戈,北京杜克的家人。当保安要证据时,你给他们看无可辩驳的证据——****。
以太坊大卫·斯巴戈修改了****中的北京杜克词条,在“家庭成员”中增加了自己的名字
卫兵挥手示意你过去,让你等一下。一分钟,两分钟。五分钟后,你想知道你是否应该在警察出现之前逃跑。当你正要离开时,乐队成员之一鲁本·斯泰尔斯走了过来,介绍了自己。你和他一起走进后台休息室,乐队对你的聪明才智印象深刻,**和你喝了几杯啤酒。后来,他们还在自己的Facebook页面上分享了发生的事情。
什么是价格预测机?
事物的价格通常是可以预测的。例如,当帕姆问德怀特关于施鲁特·巴克的现金价值时,德怀特充当价格预测者。
在以太坊区块链中,一切都是一个智能合约,所以它也是一个价格预测器。因此,区分价格预测者是如何获得价格信息的更为有用。一种方法是简单地从price API或exchange收集现有的链外价格数据,然后将数据导入到链中。另一种方法是通过咨询链上的中央交易所来计算即时价格。
这两种选择各有利弊。离线数据对波动性的响应通常很慢,波动性可以是好是坏,这取决于您试图使用它的目的。然而,通常需要少数特权用户将数据推送到数据链上,因此您必须相信他们不会变成邪恶,也不会被迫推送坏信息。链上的数据不需要任何访问权限,并且总是**的,但这意味着攻击者很容易操纵它,这可能导致灾难性的失败。
会出什么问题?
让我们来看看一些例子,在这些案例中,一个糟糕的综合价格预测已经对DeFi项目造成了严重的财务损失。
Synthetix skrw 预言机错误警报
Synthetix是一个衍生品平台,允许用户访问其他货币资产。为了匹配这些交易,synthetix(then)依赖于一种定制的链外价格反馈实现机制,在这种机制中,总价格根据一组秘密价格提要计算,并定期在链上发布。然后,用户可以在他们支持的资产上以这些价格做多或做空头寸。
2019年6月25日,synthetix依赖的一个价格来源虚报了韩元的价格,比实际汇率高出1000倍。由于价格预测系统的其他部分存在其他错误,价格被系统接受并发布在链上,其中一个交易机器人在skrw市场上快速进行交易。
自动交易机器人最终获利超过10亿美元,不过synthetix团队能够与交易员谈判,返还资金,并给予他更正奖励。
Synthetix正确地实现了预言机合同,并引入了来自多个数据源的报价,以防止交易员在发布到链上之前预测价格变化。然而,一个孤立的上游价格供给失败的案例会导致毁灭性的攻击。这说明了使用链外数据价格预测器的风险:您不知道价格是如何计算的,因此您必须仔细设计系统,以正确处理所有潜在的故障模式。
担保贷款不足
如前所述,我在2019年9月发表了一篇文章,概述了使用链上数据预测价格的风险。尽管我强烈建议您阅读原文,但有相当多复杂的技术细节可能会使您难以理解。所以我在这里给出一个简单的解释。
假设您想将去中心化借贷引入区块链。用户可以将资产作为抵押物存放,也可以根据所存资产的价值确定一定数额的其他资产。假设用户想以以太坊作为抵押物借入美元,以太坊的当前价格为400美元,抵押率为150%。
如果用户存入375以太坊,相当于存入15万美元的抵押品。他们可以借1美元,每笔抵押贷款1.5美元,因此他们可以从系统借款不超过10万美元。
当然,在区块链中,这并不像宣称ETH值400美元那么简单,因为恶意用户可以简单地声明ETH值1000美元,然后从系统中窃取所有的钱。因此,对于开发者来说,**价格预测工具的接口,如Uniswap、kyber或其他去中心化交易所,都非常需要当前的现货价格。
乍一看,这似乎是正确的做法。毕竟,无论何时你想买卖ETH,Uniswap的价格总是大致正确的,因为任何偏差都会通过套利迅速纠正。但事实证明,去中心化交易所的现货价格在交易期间可能非常错误,如下例所示。
考虑联合国信息和安全信息系统留存资产的函数式。其内部报价是根据储备持有的资产量计算的,但储备资产随着用户在以太坊和美元之间的交易而不断变化。如果恶意用户在从您的平台获得贷款之前和之后执行事务,会发生什么情况?
用户在你的平台上借款之前,花200万美元购买5000以太坊。Uniswap现在计算价格为1以太坊=1733.33美元。现在,他们的375以太坊可以作为抵押品,取出高达433333美元的资产,然后他们可以用原来的5000以太坊换回200万美元,以统一定价。因此,您的贷款平台同意用户额外贷款33333.33万元。
这个案例研究说明了在使用去中心化交易所作为价格预测器时最常见的错误:攻击者几乎完全控制了交易过程中的价格,准确地读取价格就像在商品稳定之前读取重量计一样。你可能打错了号码,在某些情况下,这可能会花掉你很多钱。
Synthetix MKR操作
2019年12月,synthetix再次遭遇价格预测机操纵攻击。值得注意的是,此次攻击突破了链上价格数据与链下价格数据之间的壁垒。
Reddit用户U/musateredguard发现,攻击者对kr和imkr(reverse MKR)进行了一些非常可疑的交易。攻击者首先通过购买kr间接购买MKR的多头头寸,然后从Uniswap ETH/MKR交易对中购买大量MKR。等待一段时间后,攻击者将他的kr卖给imkr,然后将MKR卖回Uniswap。然后他们重复了这个过程。
在幕后,攻击者通过Uniswap进行交易,允许他们在语法协议中移动MKR的价格。这可能是因为synthetix所依赖的链外价格供给实际上取决于MKR的链上价格,而套利没有足够的流动性来推动市场回到**的价格配置。
此事件说明了这样一个事实:尽管您认为您使用的是链外价格数据,但您仍可能使用链内价格数据,并且您可能仍然面临使用这些数据所涉及的复杂性。
BZX黑客攻击
2020年2月,BZX协议在几天内遭到两次攻击,黑客抢劫了大约100万美元。在这里,您可以看到两个黑客事件的**技术分析,但我们将在本文中只讨论第二次攻击。
在第二次攻击中,攻击者首先使用ETH购买kyber协议中的几乎所有SUSD。然后,攻击者从synthetix本身购买第二批SUSD并将其存储在BZX上。攻击者以ssusd作为抵押品,并借用了允许的**ETH金额。然后他们又把房子卖给了凯伯。
如果你一直在关注,你会发现这在抵押贷款攻击下基本上是一样的,有不同的抵押品和不同的去中心化交易。
Yvault漏洞
2020年7月25日,我报告了他们新推出的yvault合同中的协议漏洞。你可以阅读有关这个错误的官方材料,但我将在下面简要总结。
yvault系统允许用户存入代币并赚取收入,而无需自己管理代币。在yvault中,保险库跟踪所投的yvault代币的总金额和存入的基础代币的总额。单个yvault代币的价值取决于代币转换与存入代币的比率。保险库获得的所有收益将在所有的yvault代币中平均分配(因此,所有yvault代币持有人将平均分享)。
第一个yvault允许用户使用USDC向平衡器协议中的MUSD/USDC流动性池提供流动性以赚取收入。当用户向平衡池提供流动性时,他们将得到BPT作为回报,BPT可以交换流动性池中的一些资产。因此,yvault根据可使用BPT赎回的MUSD/USDC金额计算其持有的价值
这似乎是真的,但不幸的是,我们前面提到的同样危险的原则也适用:平衡器的流动性池在交易期间的状态是不稳定的,其价格是不可信的。在这种情况下,由于平衡器选择的联合曲线,用户将不会从USDC到MUSD获得1:1的汇率,但实际上会在流动性池中留下一些MUSD。这意味着BPT的价值会暂时膨胀,这给攻击者提供了恶意操纵价格的漏洞,然后耗尽金库。
此事件表明,价格预测并不总是方便的,开发人员需要对他们正在接收的数据类保持警惕,并考虑这些数据是否容易被非特权用户操纵。
收获金融黑客攻击
2020年10月26日,一个未知用户用一种你可能已经猜到的技术入侵了harvest finance的流动性池:攻击者通过执行交易来抑制曲线流动性池中的USDC价格,然后使用降价流动性池进入harvest,然后反转之前的交易以恢复价格,然后以更高的价格退出收获流动性池。这给嘉实的流动性池造成了超过3300万美元的损失。
丰收金融官方事后分析报告
我如何保护自己?
到目前为止,我希望你已经学会了识别共同点:你使用价格预测并不总是显而易见的,如果你不采取适当的预防措施,攻击者可以欺骗你的协议,并拿走很多钱。虽然没有一劳永逸的解决方案,但这里有一些针对过去项目的行之有效的解决方案。也许其中一个也适合你。
不要急于进入浅水市场
就像跳入泳池的浅水区一样,跳入浅滩市场可能会很痛苦,会导致很多开支,并永远改变你的生活。在考虑您计划使用的特定价格预测值的复杂性之前,请考虑代币的流动性是否足以确保与平台的集成。
一鸟在手胜过两只在林
Uniswap上的潜在汇率可能越来越有吸引力,但在确定汇率之前,这些只是镜花水月。同样,确定两种资产之间汇率的**方法是直接交换资产。这很好,因为没有回收利用,也没有不确定性。但对于需要持有原始资产的贷款平台来说,这可能行不通。
几乎去中心化的预言机
依赖链上数据的预言机机器的一个问题是它们太新了。如果是这样,为什么不人为地引入一些延迟呢?编写一份智能合约,并用Uniswap等去中心化交易所的**价格对其进行更新,但前提是只有少数特权用户提出要求。现在即使攻击者可以操纵价格,他们也不能得到你的同意来实际使用它。
这种方法使用方便,工作迅速,但也有一些缺点:当区块链拥塞时,你可能无法按预期更新价格,而且你仍然容易受到夹心攻击。另外,你的用户需要确信你会保持价格的更新。
减速带
操纵价格预测器是一种时间敏感的操作,因为套利者总是保持警惕,希望有机会优化任何次优市场。如果攻击者想要最小化风险,他需要执行两个交易,在一个交易中操纵预言机的价格,这样套利就不能在中间。作为一个协议开发人员,如果您的系统能够支持它,您只需要在用户进入和退出系统之间部署一个最短的延迟块。
当然,这可能会影响协议的可组成性,而且越来越多的矿工和贸易商合作作恶。未来,不良因素有可能在多笔交易中实施价格预测机操纵,因为他们知道,与他们合作的矿工将确保没有人能在中间插手,从他们的利润中分一杯羹。
时间加权平均价格
Uniswap V2为链上的开发人员引入了twap预言机。本文档详细描述了该预言机提供的确切的安全保证。一般来说,对于长期没有区块链拥塞的大流动性池,twap预言机对预言机操纵攻击具有高度的抵抗力。然而,由于其实施的性质,它可能无法迅速应对市场剧烈波动的时候,而且只能适用于链上有流动代币的资产。
M-of-N报价
有时他们说,如果你想做正确的事,你**自己去做。如果你打电话给n个值得信赖的朋友,让他们提交他们认为合适的价格,而**的答案是当前价格,那会怎么样?
现在很多大项目都采用了这种方法:maker运行一组由可信实体操作的价格源,compound创建开放的预言机和CoinBase,chainlink从chainlink运营商那里收集价格数据,并在链上公开。请记住,如果您选择使用这些解决方案之一,那么您现在已经将信任委托给了第三方,并且您的用户只能这样做。要求投标人手动发布链上的更新也意味着,在市场高度波动和区块链拥塞期间,价格更新可能无法按时到达。
总结
价格预测机对于DeFi的安全性非常重要,但往往被忽视。安全地使用价格预测是一个挑战。有很多方法可以同时照顾你自己和你的用户。本文介绍了价格预测机操纵攻击的一些案例,证明了在交易过程中读取价格信息可能是不安全的,可能会导致灾难性的经济损失。我们还讨论了在其他项目中使用的一些技术,以防止操纵价格预测器。归根结底,每种情况都是****的,你可能会发现自己不确定当前价格预测值的使用。如果是,请随时联系我们寻求建议。
特别感谢danrobinson和georgioskonstantopoulos审阅本文。
文章标题:著名的白帽山姆孙写了一篇详细的文章为什么defi频繁发动价格预测机器操纵攻击
文章链接:https://www.btchangqing.cn/139763.html
更新时间:2021年06月12日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。