LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 浅谈DeFi价格预言机设计的缺陷

浅谈DeFi价格预言机设计的缺陷

2020-11-01 洁sir 来源:区块链网络

随着去中心化金融(DeFi)环境的不断发展,它开始受到越来越多的关注。尽管这是一个好兆头,但它也吸引了希望从这个新兴行业中获利的黑客和攻击者的注意力。


来源: https://commons.wikimedia.org/wiki/File:Burning_off_Sugar_Cane_fields,_Queensland,_1959.jpg

我相信,在DeFi领域中越来越多的项目正在启动,同时轻描淡写了其安全性,这就是造成重大漏洞的原因。当它与智能合约处理的大量资金结合在一起时,必将成为一个更大的问题。


毕竟,这对黑客来说是一个理想的环境,因为它提供了极大的诱因:容易出现的安全漏洞,大量金钱可以窃取并且没有后果,因为在对区块链进行攻击时不难匿名。

财务攻击

大多数人倾向于将中心化系统中的经典黑客和区块链黑客归为同一类,但是除了一些整数溢出可靠性漏洞(主要由SafeMath标准解决)之外,它们是完全不同的。


在经典的笔试测试中,你需要大量知识才能成功利用目标,因为逻辑错误很少见,并且配置错误以及低级二进制错误更常见,但更难找到和利用。另一方面,在区块链上,逻辑错误是主要的攻击媒介。这意味着攻击者不需要非常了解“幕后发生事情”的知识,而是用真正巧妙的思维方式来操纵智能合约的决策。


这些是“金融黑客”,他们对协议如何工作以提供借贷,交换,抵押,销毁和铸造代币有深刻理解,并不难找到套利的方法。当我初次接触区块链安全领域时,被这些类型攻击的创造力而吸引。

价格预言机

如果你知晓有关DeFi协议的最新重大漏洞,那么会知道几乎所有这些漏洞都依靠智能套利技术来获利。发生这种情况是因为将当前资产的价格链接到链上实际上是一个巨大的问题。提供这些价格的去中心化交易所目前的流动性比中心化交易所低得多。


反过来,这意味着攻击者可以使用其他DeFi工具作为杠杆(例如闪电贷)来严重地操纵它们。不幸的是,许多当前协议要求在准确的时间提供链上价格,但是这些价格不能被信任。有解决此问题的方法,但是大多数情况下,它们的实现方法有误或根本没有实现:

1. 对于Uniswap,应使用时间加权平均价格(TWAP)预言机。如果协议使用平均价格,则它可以检测到不良行为者当前是否正在操纵所要求的价格,试图从合约中获利并还原交易。

2. 对于稳定币,应使用虚拟价格(特定代币的平均美元价格)。 curve.fi为其合并的代币提供了虚拟的价格预言。

尽管这些临时解决方案并不完美,但它们是使用资产的确切当前价格的更好选择,因为如前所述,可以对其进行操纵。

闪电贷

闪电贷是一种无需提供抵押就可以借入资金的新方法。它们之所以起作用,是因为区块链的原子性,这意味着不能部分执行交易。在闪电贷交易中,资金在交易开始时就被借用,并在交易结束时偿还,加上交易费。如果资金没有还清,整个交易将恢复,资金是安全的。


对于黑客和套利者而言,这是理想的杠杆工具,因为不需要抵押品,而且抵押品的金额可能很大。例如,Uniswap的USDT-WETH对可能以0抵押品发放260,000,000美元的USDT贷款,尽管你必须支付780,000美元的费用。


显然,即使存在不道德的用例,闪电贷概念也将继续发展和壮大。为什么?因为它们对于流动性提供者来说是非常有利可图的。如果有限合伙人的资金仅用于为紧急贷款提供资金,则其代币由于原子交易,是100%安全的,只要人们继续借款,他们就可以在其身上获得稳定的利息,而不会造成无常损失。


为了防止攻击者将此工具用作杠杆,我们必须更改设计智能合约时的思维方式。我们必须开始假设每个人都是有钱人,并且可以在这种环境下操纵很多变量。即使你不能使用闪电贷来操纵某些变量,例如固定利率。谁也不知道将来将对这些协议进行哪些更改,或者DeFi社区将创建哪些新的疯狂的杠杆技术。

最近的Harvest Finance Hack

“信任链上价格”是灾难性的行为。一个很好的例子是最近的Harvest.finance黑客行为,或者我称之为创造性套利。攻击者利用上面介绍的概念窃取了24,000,000美元。尽管大多数文章都介绍了攻击的后果,但我想介绍一下攻击如何展开,以及黑客为何能够获利。

1.攻击者通过闪电贷借入了$ 18,000,000 USDT和$ 50,000,000 USDC。


2.攻击者以$ 17,000,000 USDT在Curve的y池中购买了USDC,从而人为地提高了USDC的价格。


3.攻击者使用借入的USDC的$ 50,000,000美元,以较低的有利价格购买了Harvest的USDC库中的股票。


4.攻击者将USDC卖回给USDT,从而将USDC的价格降低到正常值。
5.攻击者为USDC出售收获股票以获利。
6.攻击者偿还贷款。
7.重复以上步骤。

我想说明的是,攻击者仅通过提高Curve y库中的USDC价格就能降低USDC-fUSDC价格。在存入USDC时,请遵循Harvest的整个股价计算调用堆栈:


要发出的fUSDC份额(_mint函数)高度依赖于无法操纵的份额的totalSupply()和底层的BalanceWithInvestment()变量。


从上面的函数中可以很明显地看出,underlyingBalanceWithInvestment()等于保管库中可用的USDC金额,策略中的被投资的UnderUnderlyingBalance()会添加到该金额中。


投资余额是策略合约中可用USDC与其yCRV代币价值的总和。 yCRV代币的值是在underlyingValueFromYCrv()函数中计算的,该函数使用yCrvToUnderlying()转换器获取USDC中的值。


$ 24,000,000的行是return zap.calc_withdraw_one_coin(_token_amount,int128(i)); 在这里,应该使用虚拟价格。


最后,合约根据其基础资产USDC计算其yCRV代币的价值。这是一个巨大的错误:使用了确切的市场价格,并且由于USDC具有更高的价值(由于y Pool上的巨额买入)= yCrvToUnderlying()更低=底层ValueFromYCrv()更低= ycrvValue更低= investmentUnderlyingBalance ()较低=底层BalanceWithInvestment()较低= toMint较高,因此,与USDC正常价格并将其传递给攻击者相比,生成的份额更多。


当攻击者在步骤5中撤回股票时,当USDC价格回落时,ycrv代币将比购买股票时价值更多的USDC,因此他的股票将价值更高,并从中获得更多的USDT。乍一看似乎很复杂,但是在仔细阅读了整个过程几次之后,一切都会变得有意义。

结论

总而言之,我相信在DeFi的当前状态下,人们在做出重要的财务决策之前应该更多地关注事物的安全性。


如果你是程序员,以这样的方式构建代码,则可能会被黑客入侵;将损失降到最低,并且永远不要相信其他合约,除非已仔细阅读这些合约。

作为投资者,请务必进行尽职调查。从最近的DeFi黑客事件中可以明显看出,如果对协议进行了审核,那并不意味着它是完全安全的。就像在经典黑客中一样,没有什么是没有错误的。直到有人找到它,这只是时间问题。无论某人是一个道德黑客,还是一个不会放弃利用并窃取尽可能多资金的邪恶黑客,你仍然需要当心。

希望诸位能保持安全,快乐“耕种”!

原文链接:DeFi Pricing Oracles: Flawed by Design

—-

编译者/作者:洁sir

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...