闪电贷,是近来人们一直关注的焦点。近日,两名黑客利用闪电贷(flash loans)攻击了保证金交易协议 bZx,先是一次涉及金额为 35 万美元的攻击,随后是一次涉及金额为 60 万美元的模仿攻击(copycat attack)。
总而言之,这些攻击令人惊叹。在每次攻击中,一个身无分文的攻击者可以瞬间借入价值数十万美元的以太币(ETH),通过一系列易受攻击的链上协议,从被盗资产中提取数十万美元,然后偿还他们的以太币巨额贷款。所有这些操作都在一瞬间完成,也就是说,在以太坊的一个交易中完成。
我们不知道这些攻击者是谁,也不知道他们来自哪里。两个攻击者基本上都是空手而来,然后卷走了价值几十万美元的资产,没有留下任何痕迹。
自从这些攻击发生后,我一直在思考有关闪电贷以及其对去中心化金融(DeFi)安全性的影响。我认为,这需要拿出来与你们共同思考。
简而言之:闪电贷是一个巨大的安全威胁。但闪电贷并没有消失,我们需要仔细思考它们对未来去中心化金融安全带来的影响。
什么是闪电贷?
2018 年,以太坊区块链上的开源银行 Marble 首次提出闪电贷的概念。Marble 将自己称为 “智能合约银行”,它提出了一个虽简单但十分巧妙的去中心化金融创新:通过智能合约实现零风险贷款。
如何做到零风险贷款?
传统的贷方需要承担两种形式的风险。一个是违约风险:如果借款人卷钱跑路了,那显然很糟糕;另一个是非流动性风险:如果贷方在错误的时间里出借了太多资产,或者没有及时收到还款,贷方可能会失去流动性,从而无法履行自己的义务。
闪电贷减轻了这两种风险。闪电贷的基本工作原理如下:在这笔交易中,你想要多少资金,我都会借给你。但是,在这笔交易结束之前,你需要至少将借走的资金还清。如果你没法还清,我会自动回滚你的交易!
简单地说,如果你没有还清贷款,整件事情就会被还原,就好像这笔贷款从未发生一样。
这种操作只能发生在区块链网络上。你不能在中心化交易所上实现闪电贷。因为智能合约平台一次只处理一笔交易,交易中发生的所有事件都作为一项批量操作被串行执行。你可以将其视为交易执行期间的 “冻结时间”(freezing time)。另一方面,中心化交易所中可能存在竞态条件,以至于你的交易订单无法正常执行。在区块链网络上,所有代码都能一行接一行地运行。
闪电贷漏洞检测代码,来源:0x 研发人员雷姆·科布洛门(Remco Bloemen)
让我们思考一下这其中涉及的经济学原理。传统的贷方会得到两方面的补偿:他们承担的风险(违约风险和非流动性风险)以及借出资本的机会成本(例如,如果我可以从其他地方获得该借出资本 2% 的利息,借款人必须支付给我超过 2% 的无风险利息)。
闪电贷不一样。闪电贷没有风险,也没有机会成本!这是因为借款人在其闪电贷期间拥有 “冻结时间”,在其他人看来,该系统的资金从未处于风险之中,也从未深受其累。因此,它不可能在其他地方赚取利息(它没有机会成本)。
这意味着,从某种意义上说,成为一个闪电贷贷方很容易,且无需成本。这完全不合常理。那么,在市场供求平衡时,一笔闪电贷的成本应该是多少?
基本上,闪电贷应该是免费的。或者,更恰当地说,会有一笔很小的费用,主要用来分摊包含额外的三行代码在以太坊上执行的成本,以使得资产可以快速借出。
闪电贷不能收取传统意义上的利息,当然,如果闪电贷贷方收取更高的利率,就会很快被其他收取更低利率的闪电贷池所取代。
闪电贷使资本成为真正的商品。这种恶性竞争不可避免地会导致零收费或少量的象征性收费。目前,交易平台 dYdX 的闪电贷费用为零。而 AAVE 对闪电贷本金收取 0.09% 的费用。我认为,这是不可持续的,事实上,他们的社区也已经开始呼吁将费用削减为零。
闪电攻击对安全的影响
我越来越相信,闪电贷的重要影响是解锁了闪电攻击,即由闪电贷进行资本密集型攻击。我们在最近的 bZx 黑客攻击中就能够看到这一点,我认为这只是一个开始。
· 为什么闪电贷对攻击者特别有吸引力?主要有以下两个原因。
· 许多攻击需要大量的前期资金(例如预言机操纵攻击)。如果你在价值 1,000 万美元的以太币上获得正投资回报率(ROI),这可能不是套利。
闪电贷最大限度地减少了攻击者的污名。就算我知道如何用 1,000 万美元的以太币来操纵预言机,如果我拥有那么多以太币,我也不想用自己的资金去冒险。我的以太币将被标上污点,交易所可能会拒绝我的存款,很难再进行洗钱。这简直太冒险了!但是,如果我用闪电贷贷出的 1,000 万美元,有谁会在乎呢?一切都会顺利进行。dYdX 的抵押池,基本上没有可能被污染,而那就是我的贷款来源。
如今,交易所黑名单已经成为了区块链网络安全模型的一部分,你可能不喜欢这一点。它相当脆弱和中心化。但这是一个很重要的现实,因为它揭示了这些攻击背后的基本原理。
中本聪(Satoshi)在比特币白皮书中说过,比特币不会受到安全攻击,因为:
“攻击者会发现遵守规则会比破坏财富的体系和合法性更有利可图。”
有了闪电贷,攻击者在攻击游戏中不再需要进行伪装。闪电贷从根本上改变了攻击者所承担的风险。
记住,闪电贷可以累积!但受限于 gas 的限额,你可以在一次交易中(超过 5,000万美元)将每个闪电贷的可贷资金池集合起来,然后将所有资金投入到一个容易遭受攻击的合约中。这是一个价值 5,000 万美元的重锤,现在任何人都可以去砸一个链上糖果盒,可以很容易就砸出钱来。这太可怕了。
从长远来看,这一切意味着什么?我认为对 bZx 的攻击改变了一切。
这不会是最后一次闪电攻击。第二次 bZx 攻击是对第一次攻击的模仿,我认为,在未来几个月内,将会掀起一波攻击浪潮。现在,来自世界最偏远地区的数千名聪明的青少年,正在戳倒这些去中心化金融乐高积木,用显微镜对它们进行搜索,尝试发现其中是否有某种漏洞,可以让它们发动闪电攻击。如果他们能够成功地找到并利用一个漏洞,他们就可以赚到几十万美元,这对世界大多数地区的人来说,都是一笔能够改变人生命运的资金。
而对于协议来说,闪电攻击意味着威胁模型已经发生了改变。bZx 遭到闪电攻击,与 DAO 黑客入侵后遭受重入攻击(re-entrancy)一样令人尴尬:你将沦为加密货币行业的笑柄。你应该已经看到这种情况发生了。
这些事件也让我想到了密码学中的一个老概念:矿工可提价值(MEV)。MEV 是矿工可以从区块链系统中获得的总价值,包括区块奖励和手续费,但也包括更恶性的价值提取方式,比如对交易进行重新排序或将恶意交易插入区块等。
归根结底,应该把这些闪电攻击都看作是内存池中可以赚大钱的单笔交易。例如,在第二次的 bZx 攻击中,黑客在单笔交易中获得了价值 64.5 万美元的以太币。如果你是一名矿工,并且你将要开始挖矿一个新区块,想象一下,看看前一个区块包含的交易,然后对自己说:“等等,什么?上一个区块包含 64.5 万美元的利润?我还要挖一个大约只有 500 美元交易的新区块?”
与其对区块链网络进行扩展,不如回到过去尝试重写历史,成为闪电攻击者。想想看:只是这一笔交易,就比矿工老老实实挖矿 4 个多小时赚得多!
就好像有一个特殊的超级区块,里面包含 1,000 倍的正常区块奖励。如你所料,这样的一个超级区块,正常情况应该是一堆矿工竞争,然后某个矿工自己获得这个区块。
均衡状态下,所有的闪电攻击最终都应该由矿工来完成。(请注意,最终他们也应该盗取所有的链上套利和流动性。)但具有讽刺意味的是,这将对闪电攻击起到威慑作用,因为这将使得攻击者无法利用他们发现的漏洞来获利。也许矿工们最终会通过私人渠道来收集攻击代码,并向未来的攻击者们支付一笔中介费。从技术上讲,这可以通过零知识证明来实现。
这些都相当科幻,矿工们显然不会这么做。
为什么?
有很多理由。首先,操作起来很困难,会涉及大量的工作,以太坊虚拟机(EVM很难被模拟,风险也很高,存在导致资金损失或造成孤块的漏洞,从而引发轩然大波,流氓采矿池可能会出现公关危机,并被冠以 “以太坊敌人” 的称号。目前,如果矿工这么做了,可能会在商业层面以及在孤块上损失更多,这比他们尝试攻击的成本更高。
这是目前的真实情况,但不会持续很久。
这为以太坊加速过渡到以太坊 2.0 提供了另外一个动力。以太坊上的去中心化金融,虽然令人惊叹和着迷,但已经绝对和不可挽回地被打破了。去中心化金融在基于工作量证明的区块链上不稳定,因为所有高价值交易都会被矿工重新分配。
对于可以大规模运行的系统,往往需要最终性(finality),即矿工无法对已确认的区块进行重写。这将保护以前的区块不被重新分配。另外,如果去中心化金融协议存在于独立的以太坊 2.0 分片上,它们将不容易受到闪电攻击。
据我估计,闪电攻击给了我们一个很小但有用的启示,即:这只是一个开始,我们离建好未来金融体系的可持续架构还有很长的一段路要走。
目前,闪电贷仍会是新常态。也许从长远来看,以太坊上的所有资产,包括交易所、Uniswap 持有的所有抵押品,甚至 ERC-20 本身,都可以用于闪电贷。
但谁知道呢?毕竟也只是写几行代码的事。
哈西布·库雷希(Haseeb Qureshi)是跨国加密货币风险基金蜻蜓资本(Dragonfly Capital)的管理合伙人。本文系作者本人观点,不代表 CoinDesk 中文版立场。