以太坊:全面解读闪电贷:为什么闪电攻击将成为新常态?

编者按:本文来自链闻,撰文:HaseebQureshi,加密货币风投机构DragonflyCapital管理合伙人,Odaily星球日报经授权转载。闪电贷最近成为外界关注的热点。两名黑客利用闪电贷攻击了保证金交易协议bZx,第一起套利金额为35万美元,之后又搞了一起套利金额60万美元的翻版攻击。如果用一个词来形容这些攻击的话,可以说是「壮观」。每次攻击中身无分文的黑客贷到价值数十万美元的ETH,分散利用一系列链上协议的漏洞进行了一通操作,从所盗窃的资产中提走了数十万美元,并成功堵上巨额ETH贷款窟窿。所有这一切在瞬间完成,就是说,在一个以太坊区块中完成。

CarmineInfantino设计的漫画封面我们不清楚这些攻击者是谁、身居何处。两人都是空手套白狼,攻击完成赚到数十万美元,且没有留下任何暴露身份的痕迹。刚爆出这些攻击消息时,我正在仔细思考闪电贷及DeFi的安全性问题。我认为这个问题值得公共讨论。简单说一下我的观点:我认为闪电贷存在重大安全威胁。但闪电贷不会消失,我们需要认真考虑未来它对DeFi的安全性影响。什么是闪电贷?

闪电贷概念最早由Marble协议于2018年提出。Marble自诩「智能合约银行」,其产品是很简单、但很具智慧的DeFi创新:通过智能化合约完成的零风险贷款。

贷款如何能零风险?传统信贷机构放贷时面临两种风险。第一种是违约风险:如果贷款人携款潜逃,信贷机构会吞下苦果。但第二种是流动性风险:如果一家信贷机构在错误的时间放出太多贷款,或者借款人未及时还款,信贷机构可能意外遭遇流动性紧张,无法履行自己的义务。闪电贷减缓了这两种传统放贷风险。闪电贷的基本工作原理是:在单笔交易中贷出借款人需要的金额。然而在交易结束时,借款人必须偿还不少于贷款金额的数目。如果借款人做不到,贷款机构会自动回滚交易。简单讲,闪电贷是自动的:如果借款人不能偿还贷款,整个交易就会回滚,就像贷款根本没发生一样。这样的事情只有在区块链中才能发生。比如你不能在BitMEX交易所进行闪电贷。因为智能合约平台一次性处理交易,所以一次交易的所有元素是批处理执行的。交易执行时,可以把这个想成交易的「冻结时间」。而在中心化交易所中可能会出现激烈的竞争,可能导致你的交易部分失败;在区块链中,可以保障你的所有代码一行行逐次执行。所以简单考虑一下这里面的经济机制。传统信贷机构因为两个元素而赚到回报:他们承担的风险,以及他们所贷出资金的机会成本。闪电贷则不同。闪电贷利率上没有风险,也没有机会成本!因为借款人在闪电贷过程中「冻结了时间」,所以在其他任何人眼中,该系统的资金从来没有风险,从来没有阻塞,因此你也赚不到利息。这意味着,成为闪电贷出借方感觉上不需要任何成本。这严重违反了直觉。所以均衡状态下闪电贷的成本应该是多少?基本上讲,闪电贷应该是没有成本费用的。或者更准确的说,一笔很小的费用,能补偿让一笔资产进入可放贷状态而添加的三行代码。

来自0x研发人员RemcoBloemen闪电贷不能收取传统意义上的利息,因为贷款的持续时间为0,。当然,如果任何放贷机构收取更高的利息,将会被利息更低的其他竞争对手碾压。闪电贷让资金成为真正的商品。这种竞争到头来不可避免的将成本压低到0或者金额极小。dYdX目前闪电贷手续费为0。而AAVE收取本金的0.09%作为利息。我估计这种情况不会持续下去,实际上AAVE社区已经开始呼吁0利息。闪电贷有什么用?

闪电贷最初的营销标签是主要用于套利交易。Marble的亮相声明表示:「闪电贷可以帮助交易者从Marble银行贷款,在一家去中心化交易所DEX中买币,然后在另一家DEX以较高价格卖出代币,一笔自动化交易就可以让您将套利收益收入囊中。」而现实确实如此——从金额上讲,我们目前看到的多数闪电贷都被用于此类套利交易。

AAVE的闪电贷用途,来源:AAVE但金额还很小。AAVE自成立以来发起的闪电贷金额才刚刚超过1万美元。与套利交易规模和DeFi市场流动性相比,不过九牛一毛。这主要是因为多数套利交易是由运行复杂机器人的竞争性套利者完成的。他们进行链上优先gas拍卖,然后利用GasToken来优化交易费。这一市场竞争非常激烈,他们很乐意在账面上保留部分代币来优化利润。另一方面,从AAVE借款的成本约为8万gas,并收取本金0.09%,对利润微薄的套利竞争而言,这一成本过高。实际上多数AAVE套利交易中,借款人给贷款池支付的手续费多过其套利收益。长期来看,除非是某些特殊情况,否则套利者不太可能使用闪电贷。事实证明,闪电贷在DeFi中还有其他更引人注目的用例。一个例子是为贷款再融资。例如,假设我有一个Maker抵押债仓,在里面中锁定了100美元的ETH,我从其中借了40个DAI币的贷款,因此减去债务后我在CDP中的净头寸为60美元。假设我想再融资放在Compound换取更高的利率,通常我需要回购40DAI才能关闭CDP,这需要一些前期资金。相反我可以利用闪电贷借入40个DAI来关闭CDP,将60美元的未锁定ETH存入Compound,通过Uniswap将其余的40美元ETH转换回DAI,并用来偿还闪电贷。一气呵成,自动化0成本再融资。这太神奇了!这就是资本乐高运行的伟大范例。1x.ag实际上搭建了一个保证金交易聚合应用,利用闪电贷自动实现这类交易。尽管这些很酷,但bZx攻击者让我们清楚看到,闪电贷能带来多大的伤害。闪电攻击对安全的重大意义

我越来越相信闪电贷真正解锁的是闪电攻击——利用闪电贷进行高额资金攻击。近期的bZx黑客攻击让我们管中窥豹,我怀疑这仅仅是个开头而已。为何闪电贷成为攻击者的利器?主要有两个原因。很多黑客攻击需要大量的前置资金。如果你1000万美元的ETH取得正收益,那应该不是什么套利交易。短期贷款可以最大程度地减少攻击者的污点。如果我有一个如何以1000万美元的ETH操纵Oracle币的想法,即使我拥有那么多的ETH,我可能也不想用自己的资金来冒险。我的ETH可能沾染污点,交易所可能会拒绝我的存款,难度大大增加。有风险!但是,如果我用闪电贷贷出1000万美元,谁在乎呢?各方都会有收益。我的贷款来源——dYdX的抵押池不会被污染,dYdX的污染某种程度上消失了。您可能不喜欢,但交易所审查制度如今已成为区块链安全模式的一部分——相当模糊且中心化。但我认为对一个攻击者而言,闪电贷实质上改变了这种风险。在比特币白皮书中,中本聪发出了著名的宣言:比特币不会遭受安全攻击,因为:「应该会发现按照规则参与的话比毁坏系统更有利可图,而毁坏系统就是毁坏他自己的资产。」而在闪电贷中,攻击者与闪电贷游戏丝毫没有利益捆绑。闪电贷从本质上改变了攻击者的风险。另外请记住,闪电贷可以累积!鉴于gas的限制,你可以在一笔交易中从所有能放贷的资金池中贷款,然后将所有资金捆绑到一个可攻击合约中。现在攻击者手里有了5000万美元的重磅大锤,只要砸出重金,任何弱不禁风的链上协议都承受不了其巨大冲击。这太可怕了。当然攻击者不是仅凭大量金钱就可以对这些协议实施攻击。如果所有DeFi堆栈都像它声称的那样安全,这应该不是个问题——面对富鲸哪种协议是不安全的?您可能会说,这些协议没有考虑到那种情况,仅仅是疏忽了。不过据称每小时用不到20万美元的资金就可以让以太坊本身遭受51%攻击**。这个金额也并不很大!如果以太坊自身的安全模式仅仅能防止资金匮乏的攻击者,我们何必那么苛责那些防不住1000万美元攻击的DeFi应用呢?如何减缓闪电攻击?

假设你是一家衍生品平台,想避免受到闪电攻击。自然会问:我是否能检测出与我交易的用户是不是在用闪电贷?简单的答案是:你做不到。以太坊的EVM设计方式不允许你从任何其他合同中读取存储。因此,如果你想知道另一个合同中发生的事情,只能通过该合同告诉你。如果你想知道客户是否正在使用闪电贷合同,则必须询问该闪电贷合同。目前许多放贷协议都无法对此类查询做出回应。即使你的衍生产品平台试图检查已知的闪电贷协议,协议平台使用代理合同或通过跨闪电贷协议链接,也很容易将任何此类查询误导。通常根本无法判断用户是否正在使用闪电贷。短短的一秒钟,如果有人要用1000万美元敲开你家交易平台的大门,无法判断这是他们自己的资金,还是一笔闪电贷。所以我们要防范闪电攻击,真正的选择是什么?我想到三种方法。说服闪电贷协议停止提供这种服务开个玩笑而已。伙计们,这可是加密世界啊!严肃地讲,试图让贷款池停止提供闪电贷,就像试图阻止噪声污染一样,这是公共领域的经典悲剧。提供闪电贷款符合每个协议的利益,并且其用户有合理原因的希望使用此功能。因此,我们可以放心地消除这一选项。闪电贷不会消失。迫使关键交易跨越两个区块要记住,闪电贷允许你在单笔交易时间内借入资本。如果一个资本密集型交易需要跨越至少两个区块,用户需要至少在两个区块时间段取出贷款,闪电攻击就成为不可能。显然这是以大幅牺牲用户体验下进行的:这意味着交易将不再是同步的,很像commit/reveal方案。用户体验很糟糕,需要谨慎三思。很多开发者抱怨智能合约异步操作,例如与Layer2或以太坊2.0的跨片通信协议的互动。具有讽刺意味的是,异步性使得这些系统更安全,避免遭遇闪电攻击。因为攻击者无法在一次自动化交易中同步完成主链与Layer2或分片的操作。这意味着ETH2.0分片或Layer2DEX不会遭遇闪电攻击。要求提供链上证明,证明完成闪电贷后用户的账户余额未出现变化如果可以通过某种方法来检测用户的实际余额是多少,我们就可以战胜闪电攻击。在原生EVM机制中无法执行此操作,但是可以对其进行修改。你要做的是:在用户与你的协议进行交互之前,你要求其提供Merkle证明,证明在上一个区块末尾时他们有足够的余额来偿还当前使用的资金。你需要针对每个区块中的每个用户跟踪此情况。这种方法一定程度上是奏效的。当然,它还很粗糙,有一些问题:验证这些链上证据在链上的成本极高,思维正常的用户没有人愿意提供这类证明,并为整个过程支付gas费用。另外用户完全可能有合法合理的理由,在上个区块想调整其余额。所以,尽管这种方法理论上有些作用,它不是一种可行的解决方案。很清楚,我上面所举的三种解决方案都不够理想。我相信面对闪电攻击没有真正好的解决办法。但有两个特别应用确实能减缓闪电攻击:市场价预言机和治理代币。像Uniswap或OasisDEX等市场价预言机,由于闪电攻击的可能性,你任何情况下不能把当前市价中位数当成喂价。攻击者只需要一笔交易就能轻而易举地大幅改变市价中位数,让预言机失灵。对此最好的解决方案是通过时间加权平均价格或成交量加权平均价格计算上一批X区块的加权平均数。Uniswapv2会自带这一功能;经济学家MaxWolff的著作《Polaris》为其它协议提供了一种通用方法。链上治理则是则会带来一连串令人头疼的问题。链上治理通常由治理代币持币人按权重投票决定。但如果这种治理代币进入某一贷款池,任何攻击者可以偷走大量选票,得到自己想要的结果。当然,多数治理协议要求这些治理代币在投票期间锁定,这让闪电攻击无计可施。但有些治理协议并非如此,例如「CarbonVote」和Maker的行政投票。在闪电攻击的阴影之下,这些治理机制完全可能被攻陷。理想情况下,你不想让治理代币进入闪电贷款池。但这并非由发币者决定,它是由市场决定的。因此,所有治理行动应该要求代币锁定期,以阻止闪电袭击。更关键的是,所有治理代币必须有时间锁。时间锁迫使所有的执行决策在生效前都有一段等候期。。如果遭遇意料之外的治理攻击,这一机制让系统有了容错时间。甚至尽管MKR目前大量未进入闪电贷资金池,近期已经有人称MakerDAO很容易遭遇此类攻击。MakerDAO当前正加快修复。这些有什么深远意义?

我认为bZx攻击事件彻底改变了局面。这不会是最后一起闪电攻击事件。第二起bZx攻击只是第一次翻版而已,我怀疑未来几个月还有一波类似攻击。现在全球各个角落有数千名聪明的青少年对所有这些DeFi乐高虎视眈眈,用显微镜寻找任何漏洞,试图找出发动闪电攻击的办法。如果攻陷一个漏洞,他们也会赚到数十万美元,对全球多数国家和地区而言,这一数字足以改变人生。对各家DeFi协议而言,闪电攻击意味着安全模式已经改变。在bZx黑客事件后如果再遭到类似攻击,会和DAO黑客事件后再遭重入式攻击一样,会成为加密世界的笑话。不过你可以预期,这是会出现的。最后,这些事件让我去思考加密世界的古老概念:矿工可提取价值。MEV指矿工可以从一个区块链系统中可以提取的总价值,包括出块奖励和费用,但也包括其它不那么正大光明的收益,例如交易重新排序或向块中插入流氓交易。从根本上讲,应该将所有这些闪电攻击都视为海量资金内存池中的单笔交易。例如,第二次bZx攻击在单笔交易中产生了价值64.5万美元的ETH利润。如果你是矿工,并且打算开始开采新区块,请想象一下查看先前区块的交易并对自己说:「这算怎么回事儿?上一个区块中包含64.5万美元的利润,我为什么要开采一个只换来500美元的新区块?」更符合你利益的做法不是继续开采新区块,而是试图重写历史,让你自己成为那个闪电攻击者。想一下:这一笔交易就相当于以太坊诚实挖矿四个小时的所得!这与拥有一个包含正常块奖励1000倍的超级块是同样的原理——这种超级块带来的合理结果是大批矿工疯狂争夺,为自己窃取那个超级块。

模拟展示矿工们的激烈争夺均衡状态下,所有闪电攻击应该最终被矿工提取价值。。讽刺的是,这会成为阻止闪电攻击的一个重要元素,因为会让攻击黑客无法将窃取成果折现。也许最终矿工们会开始私下悬赏攻击代码,为黑客提供线人费。技术上讲,利用零知识认证是可以在无需信任的情况下完成。在今天这还都是科幻。矿工们明显没有这么做。他们为什么没这么干?有无数的理由。首先它很难,需要大量工作,EVM很难模拟,风险很高,存在漏洞可能造成资金流失或孤块,会招致口诛笔伐,整个矿池会遭遇公关危机,可能被列为「以太坊公敌」。在目前情况下,矿工如果这么做更有可能带来更多经济损失和孤块,而不是拿到这笔钱。在目前这是真的,但这种情况不会持续很久。这给以太坊带来了一个新的动力去尽快过渡到以太坊2.0。以太坊上的DeFi尽管令人惊叹且令人着迷,但毫无疑问是漏洞百出的。DeFi在PoW链上不稳定,因为所有高价值交易都会由矿工重新分配。对于大规模运营的系统,你需要的是不可改变性——矿工不能重写已确认的区块。这将会保护之前的区块不会被重新分配。另外,如果DeFi协议存在于单独的以太坊2.0分片上,它们不会在闪电攻击面前弱不禁风。依据我的估计,闪电攻击带给我们很小、但很有用的一个提醒是,这仅仅是个开局。我们还没有拥有出色的架构来构建未来的金融系统。目前闪电贷款会是新常态。也许在长远来看,以太坊上的所有资产都可以被投入闪电贷。交易所所持有的所有抵押物,Uniswap的抵押物,也许所有ERC-20标准代币。谁知道呢,不过是几行代码的事儿。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-7:90ms