译者注:价格预言机是去中心化金融的重要一环,然而,正是这一环节中可能存在的漏洞,导致很多DeFi项目遭受了灾难性损失,有的损失甚至达到了数千万美元,那这些攻击到底是怎么回事?又怎样去预防它们?在这篇文章中,知名白帽黑客、Paradigm研究合伙人Samczsun分析了5个关于价格预言机攻击的现实案例,并总结了6种抵御这类攻击的方法。
2019年末,我发表了一篇题为“利用低抵押获利”的帖子,在这篇文章中,我描述了一种针对以太坊dApp的经济攻击,这种攻击依赖于一个或多个代币的准确价格数据。现在是2020年末,不幸的是,很多项目都犯了类似的错误,最近的例子是HarvestFinance,其遭遇了黑客攻击,导致协议用户集体损失达3300万美元。
虽然开发者们已熟悉了可重入等漏洞,但预言机操纵显然不是经常被考虑的问题。事实上,基于可重入漏洞的攻击,在过去几年中有所下降,而基于价格预言机操纵的漏洞利用率,现在正在上升。因此,我认为是时候发表一些关于价格预言机操纵的确定性资料了。
这篇文章分为三个部分,在第一部分,我们会对那些不熟悉这一主题的人,对预言机和预言机操纵进行一个简单介绍。而第二部分,则是一些案例研究,那些想要测试自己知识的人,可以跳过它们。最后,我们总结了一些开发者可用来保护他们的项目不受预言机操纵的技术。
现实生活中的预言机操纵
时间回到2015年12月1日,假设你现在的身份是DavidSpargo,现在你正在澳大利亚墨尔本的PekingDuk演唱会,你想去后台休息室亲自见见这支乐队的成员,但有两名保安拦在你的面前,他们不可能让普通人直接进去。
你想知道,如果你表现得像PekingDuk乐队的亲属,保安会有什么反应。因为家庭成员肯定会被允许在后台访问乐队,所以你所要做的就是让保安相信你是乐队的亲戚。你想了一会儿,想出了一个计划,而这个计划只能被描述为“天才般”或“绝对疯狂的”。
在迅速安排好一切之后,你自信地走到保安面前。你自我介绍自己是DavidSpargo,是PekingDuk乐队的家庭成员,当警卫要求你提供证据时,你给他们看无可辩驳的证据——维基百科。
美SEC的托管提案目前正面临着广泛批评:金色财经报道,美国证券监管机构最近提议要求投资顾问将客户的加密货币资产存放在“合格的托管人”那里,现在正面临着对未来潜在规则的广泛批评。
证券监管机构表示,对注册投资顾问如何保存客户资产的扩大要求,应该扩展到公司负责的几乎所有东西。虽然2月份的提案明确地将加密货币纳入其中,但它也包括其他资产,此举招致那些并不总是与加密货币行业站在同一阵线的组织摩根大通和小企业管理局(SBA)等大声反对。SBA辩称SEC“大大低估了其提案的潜在影响”,迫使他们与其他人合并或退出业务。摩根大通的高管在华尔街指责SEC采取过于宽泛的做法将扰乱金融市场多年来运作良好的大部分业务。(CoinDesk)[2023/5/10 14:53:11]
警卫挥手让你过去,让你稍等一下。一分钟过去了,两分钟过去了……五分钟后,你想知道你是否应该在执法人员出现之前逃跑。就在你准备放弃的时候,PekingDuk乐队成员ReubenStyles走了过来,然后你和他一起走进休息室,乐队对你的聪明才智印象深刻,最后你们一起喝了几杯啤酒,再后来,他们在自己的Facebook页面上分享了当晚发生的事情。
什么是价格预言机?
价格预言机,大可指你向其咨询价格信息的任何东西。当帕姆向德怀特询问一Schrute元的现金价值时,德怀特就扮演了一个价格预言机。
在以太坊上,一切都是智能合约,价格预言机也是如此。因此,区分价格预言机获取价格信息的方式更为有用。在一种方法中,你可以简单地从价格API或交易所获取现有的链外价格数据,并将其带到链上。而另一类方式,你可以通过咨询链上去中心化交易所来计算即时价格。
Unstoppable Domains集成元宇宙头像平台Ready Player Me:1月12日消息,NFT域名提供商Unstoppable Domains集成元宇宙头像平台Ready Player Me,支持用户将Ready Player Me的数字头像连接到他们的Web3域名身份,将头像设置为个人资料图片,并支持在Unstoppable Domains支持的数千个兼容平台中使用它。[2023/1/13 11:09:07]
这两种选择各有利弊。链外数据对波动性的反应通常较慢,这是好是坏,取决于你试图使用它的目的,而这种方式通常需要少数特权用户将数据推送到链上,因此你必须相信这些人不会做恶,也不会被迫推送坏的更新。而链上数据不需要任何特权访问,并且总是最新的,但这意味着它很容易被攻击者操纵,从而导致灾难性的失败。
那可能出现什么问题?
让我们来看几个关于价格预言机集成问题导致DeFi项目重大财务损失的例子。
1、SynthetixsKRW预言机故障
Synthetix是一个衍生品平台,它允许用户访问其他货币等资产。为了实现这一目标,当时的Synthetix依赖于一个定制的链外喂价实现,其喂价数据以固定的时间间隔发布到链上。这些价格允许用户对支持的资产做多或做空。
2019年6月25日,Synthetix依赖的一份喂价报告称,韩元的价格比真实汇率高出1000倍。由于价格预言机系统中其他地方的错误,这一价格被系统接受并发布到链上,随后一个交易机器人迅速进出这个sKRW市场。
尽管Synthetix团队能与交易者协商,让其返还资金,但总的来说,这个机器人有能力赚取超过10亿美元的利润。
Synthetix正确地执行了价格预言机,并从多个来源获取价格,以防止交易者在价格变化发布到链上之前预测价格变化。然而,一个孤立的上游喂价故障导致了一次毁灭性的攻击。这说明了使用链外数据的价格预言机的风险:你不知道价格是如何被计算的,因此你的系统必须经过仔细设计,以便正确处理所有潜在的失败模式。
火必:HT将作为火必生态唯一通证和认购DMC唯一凭证:11月29日消息,今日火必Huobi发布公告表示,经HT(Huobi Token)社区和火必Huobi全球顾问委员会决策,HT将作为火必Huobi生态内唯一通证。同时,HT将作为参与认购DMC的唯一通证。
今天下午,火必公布了与波场TRON、DMC Labs共同发行多米尼克国家代币(Dominica Coin,DMC)和国家数字身份(DID)的合作公告。DMC将通过火必Prime发行,火必还将为每位注册用户空投DMC代币和多米尼克数字身份。[2022/11/29 21:10:15]
低抵押借贷
如上面提到的,我在2019年9月发表了一篇文章,其中概述了使用链上数据价格预言机的相关风险。虽然我强烈建议你阅读这篇文章,但是它的篇幅很长,技术细节也很繁重,这可能会让人难以理解。因此,我会在这里提供一个简化的解释。
想象一下,你把去中心化的借贷放到区块链上。用户可以将资产作为抵押品存放,也可以借入其他资产,而能够借入的最高金额由他们存入的资产价值决定。假设一个用户用ETH作为抵押品,然后借入USD,目前ETH的价格为400美元,抵押率为150%。
如果用户存入375ETH,则其存入的抵押品价值15万美元,根据每1.5美元抵押品可借入1美元的规则,那么该用户最多可以从系统那借款10万美元。
当然,在区块链上,这并不像简单地声明1ETH值400美元那么简单,因为恶意的用户可以简单地声明1ETH价值1000美元,然后从系统中拿走所有的钱。因此,开发者很容易会去接入像Uniswap、Kyber或其他去中心化交易所的现货价格。
Solana流支付协议Zebec推出Zepoch节点,预计明年推出L1链:10月17日消息,Solana生态流支付协议Zebec今日宣布,预计明年将推出自己的L1应用链Zebec Chain,并推出Zepoch节点及激励计划,官方将分发30,000个Zepoch节点,每售出50个,价格上涨0.5%。此外,持有Zepoch节点将获20%的收入奖励及ZBC代币空投等。
今年8月,Zebec以10亿美元完全稀释估值完成850万美元融资。[2022/10/17 17:29:06]
乍一看,这似乎是正确的做法。毕竟,无论何时你想买或卖出ETH,Uniwap的价格总是大致正确的,因为套利者很快就会纠正任何偏差。然而,事实证明,去中心化交易所的即期价格在交易期间可能会非常不正确,如下面的示例所示。
思考一下Uniswap的存储功能,价格以储备资产金额为基础计算,但由于用户在ETH和USD之间交易,储备所持有的资产会发生变化。如果恶意用户在从平台贷款之前和之后执行交易,会怎样?
在用户贷款之前,他们以200万USD的价格购买了5000ETH,现在,Uniswap交易所计算的价格为1ETH=1,733.33USD?。现在,他们的375个ETH可以作为抵押,并借取最高433,333.33美元的资产。最后,他们将200万美元换回5000ETH,这将重置价格,而你的借贷平台则损失了333,333.33美元。
这个案例研究,说明了将去中心化交易所用作价格预言机时遇到的最常见的错误——攻击者在交易过程中几乎完全控制了价格,而试图准确读取该价格就像在完成结算之前先读取磅秤上的重量一样。
你可能会得到错误的数字,根据具体情况,这可能会花费你很多钱。
2、SynthetixMKR操纵
2019年12月,Synthetix再次遭受价格预言机操纵攻击,值得注意的是,这次攻击跨越了链上数据和链外数据的界限。
Terra推出链上治理警报机器人:8月29日消息,Terra宣布推出链上治理警报机器人,将对新治理提案提出、新提案进入投票期、投票剩余48小时时间以及投票结束几个时间点进行提示。[2022/8/29 12:55:34]
用户名为u/MusaTheRedGuard的Reddit用户观察到,一名攻击者对sMKR和iMKR进行了一些非常可疑的交易。攻击者首先通过购买sMKR来做多MKR,然后从UniswapETH/MKR资产交易对中购买大量MKR。在等待了一段时间后,攻击者将他们的sMKR换成了iMKR空头仓位,并将他们的MKR卖回Uniswap。然后他们重复了这个过程。
在幕后,攻击者通过Uniswap进行的交易,允许他们随意移动Synthetix上MKR的价格。这很可能是因为Synthetix所依赖的链外喂价,实际上依赖于MKR的链上价格,而且套利者没有足够的流动性来将市场重新设置到最佳条件。
这起事件说明了一个事实:即使你认为自己在使用链外价格数据,但实际上你可能仍然在使用链上价格数据,而且你可能仍然会因为使用这些数据,而遭遇到复杂的攻击。
3、bZx黑客事件
2020年2月,bZx在几天内遭受两次黑客攻击,损失价值约为100万美元。你可以这里找到由palkeo编写的关于两次黑客攻击的优秀技术分析文章,但我们在这只关注第二次攻击。
在第二次黑客攻击中,攻击者首先使用ETH购买了Kyber上几乎所有的sUSD,然后,攻击者从Synthetix平台购买了第二批sUSD,并将其存放在bZx上。利用sUSD作为抵押品,攻击者借用了他们被允许的最大数量的ETH,然后他们把sUSD卖回给了Kyber。
如果你注意到了,你会发现,这本质上是同样的低抵押借贷攻击,但使用了不同的抵押品和不同的去中心化交易所。
4、yVault漏洞
2020年7月25日,我报告了一个关于yEarn推出的新yVault合约的漏洞,你可以在这里读到关于这个漏洞的官方公告,但我将在下面简要总结一下。
yVault系统允许用户在不需要自己管理的情况下存入代币并赚取收益。在内部,这个金库跟踪铸造的yVault代币的总金额以及存放的基础代币的总金额。单个yVault代币的价值,由铸造的代币与存入的代币的比率来确定。金库获得的任何收益,都会分摊到所有铸造的yVault代币上。
第一个yVault允许用户通过向BalancerMUSD/USDC储备池提供流动性来获得USDC收益。当用户向Balancer提供流动性时,他们会收到BPT作为凭证。因此,yVault根据其BPT可赎回的MUSD/USDC金额计算其持有的价值。
这似乎是正确的实现,但不幸的是,与前面提到的原理相同——交易期间,Balancer池的状态是不稳定的,因此不可信任。在这种情况下,由于Balancer选择的联合曲线,在USDC和MUSD之间进行交换的用户将不会获得1:1的汇率,但实际上会在储备池中留下一些MUSD。这意味着BPT的值可以暂时膨胀,这使得攻击者可以随意操纵价格并随后耗尽金库。
这一事件表明,价格预言机并不总是可靠的,开发者需要警惕他们正在摄取什么样的数据,并考虑这些数据是否可以被非特权用户轻易操纵。
5、HarvestFinance黑客攻击
2020年10月26日,一位匿名用户用一种技术攻击了HarvestFinance储备池。你可以在这里阅读官方的分析报告,但我要再次为你总结下:攻击者通过执行交易使得Curve池中的USDC价格降低,然后以降低的价格进入Harvest池子,通过逆转先前的交易恢复价格,并以更高的价格退出Harvest池子。这最终导致用户损失了3300万美元。
如何自我保护?
现在,我希望你了解了价格预言机操纵攻击,此外,如果你不采取适当的防御措施,攻击者可能会你的协议,让其乖乖把钱交给他们。虽然目前并没有适用于所有情况的解决方案,但还是有一些曾在其他项目中奏效的解决方案,也许其中一款也会适合你。
建议1:不跳入浅市场
就像跳入游泳池的浅水区一样,跳入一个浅市场也是痛苦的,这可能会导致巨大的损失,从而永远改变你的生活。在考虑具体的价格预言机计划之前,先考虑一下代币的流动性是否足以保证与你的平台集成。
建议2:一鸟在手胜过两鸟在林
看到Uniswap上的潜在汇率可能会让人着迷,但在你真正点击“trade”按钮,并将代币放到钱包中之前,一切都不会是最终的。同样,要确定两种资产之间的汇率,最好的方法就是直接交换资产。这种方法很好,因为没有撤消,也没有假设。然而,对于贷款平台这样的协议来说,它可能不起作用,因为这些协议需要保留原始资产。
建议3:几乎去中心化的预言机
总结依赖链上数据预言机所存在的一种问题是,它们的更新有点过快。如果是这样,为什么不引入一点人为的延迟呢?写一个合约,用去中心化交易所的最新价格更新自己,但需要通过少数特权用户。现在,即使攻击者可以操纵价格,他们也无法利用这一点。
这种方法实现起来很简单,而且很容易见效,但它也有一些缺点——在区块链拥堵的时候,你可能无法按自己希望地那样快速更新价格,而且你仍然容易受到三明治攻击。另外,现在,你的用户还需要信任你会保持价格的更新。
建议4:增加最短延迟
操纵价格预言机是一种对时间敏感的操作,因为套利者总是在观察,并希望有机会优化任何次优市场。如果攻击者想把风险降到最低,他们会想在单笔交易中完成操纵价格预言机所需的两笔交易,这样套利者就没有机会跳到中间。作为协议开发者,如果你的系统支持它,那么只需要在用户进入和退出系统之间实现一个最短的延迟就足够了。
当然,这可能会影响可组合性,并且矿工与交易者的合作正在增加。在未来,不良行为者有可能在多笔交易中执行价格预言机操纵,因为他们知道矿工将确保没有人能够跳入中间并从中获利。
建议5:时间加权平均价格
UniswapV2引入了一种时间加权平均价格预言机,以供链上开发者使用。这篇文档详细地介绍了这种预言机提供的确切安全保证,一般来说,对于长时间没有链拥堵的大型资产池,这种TWAP预言机对预言机操纵攻击具有很强的抵御能力。然而,由于其实施的性质,它可能无法对市场剧烈波动的时刻做出足够快的反应,而且它只适用于具有链上流动性的代币资产。
建议6:M-of-N报告者机制
有时候人们会说,如果你想把事情做好,就自己去做。那如果你把N个值得信赖的朋友集合起来,让他们提交他们认为正确的链上价格,然后取M个最好的答案汇聚成当前价格,那会怎么样呢?
如今,很多大型项目都在使用这种方法:Maker运行一组由可信实体操作的喂价,Compound创建了OpenOracle,并有像Coinbase这样的预言机报价者,Chainlink聚合了来自Chainlink运营商的价格数据,并在链上公开了这些数据。请记住,如果你选择使用这些解决方案之一,那么你现在已经将信任委托给了第三方,而你的用户也必须这样做。要求报价者在链上手动发布最新信息也意味着,在市场高度波动及区块链拥堵的时期,价格更新可能无法按时完成。
结论
价格预言机对于DeFi安全性而言,是一个重要,但经常被忽视的组成部分。安全地使用价格预言机是很困难的,有很多方法可以让你以及你的用户都措手不及。在这篇文章中,我们讨论了一些价格预言机被操纵的例子,并确定在交易过程中读取价格信息可能是不安全的。我们还讨论了其他项目在过去采用的,用于抵御预言机价格操纵的一些技术。最后,每一种情况都是独一无二的,你可能会发现自己不确定是否正确地使用了价格预言机。如果是这种情况,请随时寻求建议。
特别感谢DanRobinson和GeorgiosKonstantopoulos审阅了这篇文章。
据霍比特HBTC官方消息,12月28日,HBTCChain正式开放主网节点申请及节点竞选投票。HBTCChain生态内将产生共计三大类节点,15个跨链托管节点,35位共识节点及不限制数量无质押的普通节点.
1900/1/1 0:00:00DeFi已成为行业热议的话题,虽然如今它还处于发展初期,但有数据显示截至6月30日,DeFi行业的总锁仓价值为14.9亿美元,较1月1日的3.02亿美元,半年时间已增长了近5倍.
1900/1/1 0:00:00PolygonzkEVM是Polygon生态系统中的新创新。zk扩容将是继OptimisticRollup之后的下一个大主题。然而,目前还没有很多协议在zkEVM上进行开发。PolygonzkEVM主网测试版于不到一个月前推出.
1900/1/1 0:00:00本文于2019年7月14日发布于BlockVC创始合伙人徐英凯个人微博。计算机在1969年诞生,就像比特币和区块链一样,在整个科技行业里面受到强烈的质疑,但是没有人会想到,在短短几年内计算机迅速普及,也正是因为计算机的兴起,孕育出了我.
1900/1/1 0:00:00在加密货币合约交易市场,如今投资者最大的需求已经不再是一个具有基本功能的合约交易平台,而是一个在兼具安全与流动性的基础上,能帮助投资者充分获取市场信息、优化投资策略,最终赚到真金白银的合约交易平台.
1900/1/1 0:00:00撰文:KevinYang、CaraCao、LeoZhu、DamonShen,均就职于数字资产管理公司IDEG自年初以来,一场突如其来的疫情席卷全球。世界经济继4月「大封锁」期间跌入衰退深渊之后,目前正在缓慢恢复.
1900/1/1 0:00:00