闪电贷攻击解读
总之,这些攻击是“华丽”的。在每一次攻击中,攻击者都是在不花一分钱的情况下,立即借入数十万美元的ETH,然后通过一系列脆弱的链式协议赚取数十万被盗资金,最后以巨额归还所借的ETH贷款。这一切都发生在一瞬间。即在单个以太坊交易中。
封面来自因凡蒂诺,卡迈。
我们不知道这些攻击者是谁,也不知道他们来自哪里。他们空手而来,不留痕迹地拿走了价值几十万的东西。
在这些攻击之后,我一直在思考闪贷及其对DeFi security的影响。我觉得值得开诚布公的思考。简而言之,我认为闪贷对DeFi来说是一个巨大的安全威胁。但是,闪贷不会消失,我们需要仔细考虑它们对DeFi未来安全性的影响。
什么是闪贷?
闪贷的概念最早是由Marble Agreement创始人Max Wolff在2018提出的。Marble自称是市场上的“智能合约银行”。它的产品很简单,但在DeFi上很有创新:通过智能合约实现零风险贷款。(蓝狐注:关于什么是闪贷,请参考之前的文章《加密闪贷:互联网货币的神奇新发明》和《闪贷策略:攻击者能拿走创客的7亿美元抵押品吗?bZx事件的启示》)
怎么会有零风险贷款?
传统贷款机构承担两种形式的风险。第一,违约风险:如果借款人跑路,那就太可怕了。贷款人的第二个风险是流动性不足的风险:如果贷款人在错误的时间贷出了过多的资产,或者未能及时收回还款,贷款人可能会意外地缺乏流动性,无法履行义务。
快速贷款减轻了这两种风险。闪贷基本上是这样运作的:我在一次交易中借给你你想要的钱数。不过,在这笔交易结束之前,你至少应该还我借给你的钱。如果你不能做到这一点,我会自动回滚您的交易。是的,智能合约可以做到这一点。
简而言之,你的闪贷是原子性的:如果你不能偿还贷款,整个事情就会恢复,就像贷款从未发生过一样。这种事情只能发生在区块链。比如,你不能在BitMEX上闪付你的贷款。这是因为智能合约平台一次只能处理单笔交易,所以单笔交易中发生的所有事情都是作为批处理按顺序执行的。你可以把它想象成事务执行过程中的“冻结时间”。另一方面,集中交易所可能存在竞争,导致你的订单无法履行。在区块链上,你可以确保你所有的代码按顺序运行。
所以我们来思考一下经济学。传统贷款人的补偿方式有两种:他们所承担的风险(违约风险和流动性风险)和他们贷出资金的机会成本(比如我在别处可以获得2%的利息,那么借款人必须向我支付超过2%的无风险费用)。
闪贷不一样。从字面上讲,闪贷没有风险,没有机会成本。这是因为借款人在闪贷期间“冻结了时间”。所以在别人看来,体制内的资本从来没有风险和负担,在别处赚不到利息(也就是没有机会成本)。
从某种意义上说,这意味着做闪贷的放贷人没有成本。这是非常违反直觉的。那么,在均衡状态下,闪贷的成本应该是多少?(蓝狐注:这里说的均衡,是指我们充分竞争、成熟稳定的时候)
基本上闪贷应该是免费的。或者,更恰当地说,支付一小笔费用来分担包含三行额外代码的成本,使资产可用于flash lending。
雷姆·考布勒·曼
闪贷不能收取传统意义上的利息,因为这类贷款的有效期为零(任意APR*0=0)。当然,如果快速贷款机构收取更高的费用,他们很容易被其他收取更低利率的快速贷款池超越。
快速贷款使资本成为真正的商品。这种竞争必然导致零收费或者微不足道的象征性收费。DYdX目前闪贷手续费为零。另一方面,AAVE对闪贷收取本金的0.09%。我怀疑这是可持续的。事实上,他们社区的一些人已经呼吁将成本降至零。(请注意,这两次攻击都没有将AAVE作为他们的快速贷款池。)
贷款有什么用?
闪贷最初的宣传基本都是用来套利的。大理石的公告声称:
“通过闪贷,交易者可以从大理石银行借钱,然后在一个DEX上购买代币,在另一个DEX上以更高的价格出售代币,然后将钱返还给银行,在单个原子交易中获得套利收益。”
其实从交易量来看,到目前为止,大部分闪贷都是用于这种套利的。
快速贷款在AAVE的运用。出发地:AAVE
但是,交易量小。自AAVE闪贷业务推出以来,其贷款金额仅为654.38+0万美元。与DeFi的套利和清算市场相比,这是微不足道的。
这是因为大多数套利者是由运行复杂机器人的竞争性套利者执行的。他们参与连锁优先天然气拍卖,并使用天然气代币来优化交易成本。这是一个竞争非常激烈的市场,这些人非常乐意在资产负债表上保留一些代币,以优化他们的回报。
另一方面,从AAVE借钱要花80kgas,收取0.09%的本金,这对于争夺小差价的套利者来说是个高价。事实上,在大多数AAVE套利交易中,借款人最终支付给借款池的钱比他们从套利中获得的钱多。
长期来看,除非有特殊情况,套利者不太可能利用闪贷进行套利。但在DeFi,还有其他更引人注目的闪贷使用案例。一个例子是贷款再融资。例如,假设我有一个制造者的金库。
业务头寸),它锁定了65,438+000美元的ETH,我从ETH借出了40戴的贷款,也就是说,除了债务,我还有60美元的净头寸。现在,假设我想以复利再融资以获得更高的利息。通常我需要回购40 Dai来平仓我的CDP,这需要一些前期资金。现在的替代方法是,我可以通过闪贷贷出40个Dai,关闭CDP 65,438+000美元,然后将解锁的ETH 60美元存入大院,剩下的ETH 40美元通过Uniswap换成Dai,然后用它偿还闪贷。嘣!原子零资本再融资。
这太神奇了。这是金钱乐高运作的一个很好的例子。1x.ag其实搭建了一个融资融券聚合器,用闪贷自动完成这一切。但是闪贷可以很酷,bZx攻击者向我们展示了他们不仅仅是好玩和游戏。
闪贷攻击对安全有重大影响。
我越来越相信,闪贷真正解锁的是闪贷攻击,一种由闪贷资助的资金密集型攻击。在最近的bZx攻击中,我们第一次看到了这种现象,我怀疑这只是冰山一角。
快速贷款对攻击者特别有吸引力,主要有两个原因:
许多攻击需要大量的前期资金(如计算机控制的攻击)。如果你在价值10万ETH的投资上获得正回报,那可能不是套利——你可能会说这是胡说八道。
你可能不喜欢交易所黑名单是当今区块链安全模式的一部分。这是非常粘和集中的。但这是一个重要的现实,它为这些攻击提供了计算信息。
在比特币的白皮书中,中本聪声称比特币不会受到攻击,因为:“攻击者应该发现遵守规则...比破坏系统的有效性和它的财富更有利可图。”
有了闪贷,攻击者不再需要有利益才能参与。(蓝狐注:换句话说,破坏系统不会影响攻击者自身的利益,因为攻击者没有利益)。闪贷本质上改变了攻击者的风险。记住,闪贷是可以积累的!受制于gas limit,实际上你可以在一次交易中汇集所有的闪贷池(最高5000万美元),将所有的资金集中到一个脆弱的契约中。这是一个价值5000万美元的攻城锤,现在任何人都可以在链条上猛击任何彩陶罐子。这真是太可怕了。
当然,不能因为有钱就攻击协议。如果DeFi栈像它声称的那样安全,这一切都不是问题——什么样的协议对鲸鱼来说是不安全的?你可能会说,不考虑这一点是一个错误。
不过我们承认以太坊本身可能会受到565,438+0%的攻击,目前的攻击成本不到每小时20万美元。这不是很多钱。如果以太坊本身的安全模式基本上是基于资本限制的话,那我们为什么要嘲笑654.38+00万美元这么快就能攻击成功的DeFi的使用呢?(要明确的是,我不认为这些数字——它们方便地忽略了滑脱和供应不足——加上共识层安全和使用层安全是两回事。但你知道这意味着什么。)
那么,如何缓解闪贷攻击呢?
假设我是DeFi协议,我想避免被闪贷攻击。自然可能的问题是,我能检测到我与之互动的用户是否在使用闪贷吗?
简短的回答是:没有。
EVM不允许你从任何其他合同中读取存储。所以,如果你想知道其他合同发生了什么,可以通过这个合同告诉你。所以想知道闪贷合同是否在用,一定要直接问合同。现在很多贷款协议都不回应这个查询(而且一般来说也没办法强制闪贷人的行为)。另外,即使你尝试去查,也很容易利用代理合同或者级联闪贷池来误导这类查询。简而言之,通常很难判断存储用户是否在使用闪贷。
简而言之,如果有人拿着654.38+00万美元敲你合同的前门,你说不清是不是他们自己的钱。那么,我们有什么真正的选择来防止闪贷攻击呢?可以考虑以下方法。
劝说闪贷池停止提供服务。
哈,开个玩笑。这是加密的世界,你懂的!
说真的,试图阻止借贷池提供闪贷就像试图阻止噪音污染一样——这是典型的公地悲剧。提供闪贷符合每个协议的利益,而且出于合理的原因,他们的用户也希望使用这个功能。所以,可以尽量忽略这一条。闪贷不会消失。
强制关键交易跨越两个街区。
请注意,闪贷允许您在单个交易期间借钱。如果您需要跨越两个街区的资本密集型交易,那么用户必须从至少两个街区获得贷款,从而击败任何闪贷攻击。(注:为此,用户必须将资产锁定在两个区块之间,以防止其偿还贷款。如果没有正确思考设计,用户可能只是在这两个区块实现闪贷攻击)
显然,这带来了巨大的UX代价:这意味着事务不再同步。对于普通用户来说是极其恶劣的,很难下定决心采取措施。(蓝狐注:为了防止闪贷攻击,导致用户体验不佳,显然是上策。)
很多开发者担心异步智能合约操作,比如与第二层的交互,以太坊2.0的跨片通信。具有讽刺意味的是,在处理快速贷款时,异步实际上使这些系统更安全,因为您不能在单个原子事务中跨片或第2层。这意味着在整个ETH2.0碎片或第2层中将不会有针对DEX的闪贷攻击。
需要有上线证明,证明用户之前的余额没有因为闪贷而发生变化。
如果有办法检测到用户的真实余额(也就是他们拿到贷款前的余额),就可以打败闪贷攻击。
这个操作不能在EVM本地执行,但是你可以做一些有黑客意味的事情。这是你必须做的:
在用户与您的协议交互之前,您需要向Merkle提供证据,证明他们有足够的余额来解释他们当前使用的资金。您需要为每个块上的每个用户跟踪这一点。(Ari Juels向我概述了这种方法)
这个方法可能会有一些效果。当然,它也有一个棘手的问题:在链上验证这些上链证书是非常昂贵的,没有用户会愿意生成这些证书并为此支付燃气费。此外,由于完全合理的原因,用户可能在更早的时候改变了同一块中的余额。因此,它在理论上有一些优势,但它不是一个实用的解决方案。
上面提到的三个方案都没有特别的希望。我认为,对于闪贷攻击,没有全面的防御措施。然而,有两种特定的用途可以真正减轻闪贷攻击:基于市场价格的Oracle和治理令牌。
对于像Uniswap或者OasisDEX这样的基于市场的价格预测机器,闪贷攻击让你在任何情况下都不可能用当前的中间市场价格作为预测机器。对于攻击者来说,在单次交易中移动中间市场价格并制造闪电崩盘和破坏价格预测机器是轻而易举的事情。
这里的最佳解决方案是使用通过TWAP或VWAP的最后x个块的加权平均值。Uniswap v2将本机提供这一功能。还有Polaris,这是一种通用方法,可以为DeFi协议提供移动平均值。讽刺的是,北极星也是由大理石的创始人马克斯·沃尔夫建造的。(北极星现在已经被放弃了,但是Max在这个角落看到了一些东西,值得称赞。)
链治本身就是一个自己罐里的虫子。链上治理通常通过管理令牌持有者之间的令牌加权投票来决定。但是,如果这些治理令牌出现在flash loan池中,那么任何攻击者都可以获得大量的治理令牌,并取得任何想要的结果。
当然,大多数治理协议要求在投票期间锁定这些令牌,以防止快速贷款攻击。然而,一些投票形式并不要求这样,如碳投票或制造商执行合同。如今,随着闪贷攻击的出现,这些投票形式应该算是被彻底摧毁了。
理想情况下,如果治理令牌不能用于快速贷款,那就好了。然而,这并不取决于代币的发行者,而是取决于市场。因此,所有治理操作都应该要求锁定,以防止快速贷款攻击。Compound的新补偿令牌更进了一步。它要求对所有协议投票进行基于时间的加权,甚至削弱了针对其治理令牌的传统贷款攻击。
更广泛地说,所有治理令牌都必须有时间锁。时间锁要求所有的治理决策必须等待一段时间才能生效(Compound的时间锁是两天)。这使得系统能够从任何意外的治理攻击中恢复。虽然MKR一直未能被大量租借,但最近马克尔道被要求采取措施,因为它很容易受到这种攻击。它最近实施了24小时时间锁定,以关闭此类攻击媒介。
从长远来看,这一切意味着什么?
我相信bZx袭击改变了这一切。
这不会是最后一次闪贷攻击。第二次bZx攻击是对第一次的模仿,我怀疑未来几个月还会有一波攻击。现在,成千上万来自世界最遥远角落的聪明的青少年正在嘲笑所有这些DeFi乐高玩具。他们正在显微镜下观察,试图找出如何实施闪贷攻击。如果他们成功地利用了这些漏洞,他们可以赚取数十万美元,这显然可以改变他们在世界大部分地区的生活。
有人说闪贷不会改变什么,因为如果攻击者有足够的钱,这些攻击总是有可能的。这既正确又相当不正确。大多数鲸鱼不知道如何黑智能合约,大多数智能攻击者没有数百万美元的资产。(蓝狐注:这表示两者几乎没有交集。两者兼得的攻击者是最可怕的。现在,任何人只需几分钱就可以租到价值5000万美元的毁灭球。从现在开始,这将改变所有建筑的建造方式。
bZx攻击之后,被闪贷攻击和被道攻击之后再被攻击一样尴尬:你不会得到人们的同情。你应该知道这个。
最后,这些事件让我想起了加密货币的一个老概念:矿工可以提取的价值。矿工可以提取的价值就是矿工可以从区块链系统中提取的价值。这包括大宗激励和交易费。但它也包括更多恶意形式的价值提取。例如重新排序事务或将欺诈事务插入块中。
从根本上来说,你应该把所有这些闪贷攻击看作是一个可以在内存池中赚大钱的单一交易。例如,第二次bZx攻击产生了价值645,000美元的ETH利润。如果你是一名矿工,你打算开始挖掘新的区块,请想象一下,看看以前的大宗交易,对自己说:“等等,那是什么?”当最后一个区块包含645,000美元的利润时,我为什么要计划挖掘一个新的区块来获得大约500美元的利润?“你不会选择扩张区块链,而是回到过去,试图改写历史,让自己成为一个闪贷攻击者。想想看:光是这一笔交易,就比诚实开采以太坊的四个小时要多得多!
这与包含1000倍常规块奖励的特殊超级块是同构的。如你所料,这样一个超级区块的理性结果应该是矿工们互相竞争奖励孤立链,把区块偷为己有。
在一个平衡的状态下,所有的闪贷攻击最终都应该被矿工提取。(请注意,他们最终也应该窃取链条上的所有套利和清算。)讽刺的是,这将防止闪贷攻击,因为这将防止攻击者利用这些漏洞来获利。或许最终矿工会通过私人渠道收集攻击代码,并向潜在攻击者支付发现者费用。技术上可以用零知识来证明这种操作可以在没有信任的情况下完成。
但这一切还是科幻。显然,矿工们今天没有这样做。
他们为什么不呢?
原因有很多。这很难,需要大量的工作。EVM很难模拟,有风险,可能存在导致资金流失的漏洞或孤立区块,流氓矿池可能面临公关危机,被打上“以太坊的敌人”的烙印。目前矿工可能在经商,R & amp;d和孤块损失更大。
今天就是这种情况。未来可能不会一直这样。
这为以太坊加速向ETH2.0过渡提供了另一个动力,虽然以太坊里的DeFi永远是有趣的,但它是绝对的,不可逆转的。DeFi在PoW链中是不稳定的,因为所有高价值的交易都受到矿工的再分配(也称为时间强盗攻击)。
为了让这些系统大规模运行,你需要终结性——这样矿工就不能重写已确认的块。这将保护前一个块的事务不被重新分配。此外,如果DeFi协议存在于单独的ETH2.0片段中,它们就不容易受到flash loan攻击。
根据我的估计,闪贷袭击给了我们一个微小但有用的提醒,那就是现在还很早。我们远没有一个可持续的架构,一个可以为未来金融体系而构建的架构。
目前来看,闪贷将是新常态。或许从长远来看,以太坊上的所有资产都可以用于闪贷:交易所持有的所有抵押品,Uniswap中的所有抵押品,或许还有所有ERC-20代币本身。
谁知道呢?这只是几行代码。
相关问题和答案: