闪电贷攻击解读(闪电借款和闪银是不是一家)

摆账网 知识与问答 2024-11-13 17:12:31

如何防范闪贷攻击?img=' https://P3 . /large/PGC-image/rrzyiw 2 HF 9 Q1 TN '/(奥维的教堂,梵高)

一句话总结,这些攻击都很“华丽”。在每一次攻击中,攻击者都是在不花一分钱的情况下,立即借入数十万美元的ETH,然后通过一系列脆弱的链式协议赚取数十万被盗资金,最后以巨额归还所借的ETH贷款。这一切都发生在一瞬间。即在单个以太坊交易中完成。

封面来自卡迈恩因凡蒂诺。

我们不知道这些攻击者是谁,也不知道他们来自哪里。他们空手而来,不留痕迹地带走了价值几十万美元的东西。

在这些攻击之后,我一直在思考闪贷及其对DeFi security的影响。我觉得值得开诚布公的思考。简而言之,我认为闪贷对DeFi来说是一个巨大的安全威胁。然而,闪贷不会消失,我们需要仔细考虑它们对未来DeFi安全的影响。

什么是闪贷?

闪贷的概念最早是由Marble Agreement的创始人Max Wolff在2018年提出的。Marble自称是市场上的“智能合约银行”。其产品非常简单,但在DeFi方面极具创新性:通过智能合同实现零风险贷款。(蓝狐注:关于什么是闪贷,请参考之前的文章《加密闪贷:互联网货币的神奇新发明》 《闪贷策略:攻击者能取走Maker的7亿美元抵押品吗?》 《bZx事件的启示》)

怎么会有零风险贷款?

传统贷款机构承担两种形式的风险。第一,违约风险:如果借款人跑路,那就太可怕了。贷款人的第二个风险是流动性不足的风险:如果贷款人在错误的时间贷出了过多的资产或未能及时收回还款,贷款人可能会意外缺乏流动性,无法履行义务。

快速贷款减轻了这两种风险。闪贷基本上是这样运作的:我在一次交易中借给你你想要的钱数。不过,在这次交易结束之前,你至少要把我借给你的钱还了。如果你不能做到这一点,我会自动回滚您的交易。是的,智能合约可以做到这一点。

简而言之,你的闪贷是原子性的:如果你不能偿还贷款,整个事情就会恢复,就像贷款从未发生过一样。这种事情只能发生在区块链。比如,你不能在BitMEX上闪付你的贷款。这是因为智能合约平台一次只能处理单笔交易,所以单笔交易中发生的所有事情都是作为批处理按顺序执行的。你可以把它想象成事务执行过程中的“冻结时间”。另一方面,集中交易所可能存在竞争,使你的订单无法履行。在区块链上,可以确保你所有的代码都按顺序运行。

所以让我们考虑一下经济学。传统贷款人的补偿方式有两种:他们所承担的风险(违约风险和流动性风险),以及借出其资本的机会成本(比如,如果我在别处可以获得2%的利息,那么借款人必须向我支付超过2%的无风险费用)。

闪贷不一样。从字面上讲,闪贷没有风险,没有机会成本。这是因为借款人在其闪贷期间“冻结了时间”。所以,在别人看来,体制内的资本从来都是没有风险和负担的,在别处赚不到利息(也就是没有机会成本)。

从某种意义上说,这意味着做闪贷的出借人是没有成本的。这是非常违反直觉的。那么,在均衡状态下,闪贷的成本应该是多少?(蓝狐注:当我们在这里谈论均衡时,我们指的是当我们充分竞争、成熟和稳定时)

基本上闪贷应该是免费的。或者,更恰当地说,支付一小笔费用来分担包含额外三行代码的成本,这三行代码使资产可用于flash lending。

雷姆科布洛曼

闪贷不能收取传统意义上的利息,因为这类贷款的有效期为零(任意APR*0=0)。当然,如果闪贷人收取更高的费用,他们很容易被其他收取更低利率的闪贷池超越。

快速贷款使资本成为真正的商品。这种竞争必然导致零收费或者微不足道的象征性收费。DYdX目前对闪贷零手续费。另一方面,AAVE对闪贷收取本金的0.09%。我怀疑这是不可持续的。事实上,他们社区中的一些人已经呼吁将成本降低到零。(请注意,这两次攻击都没有将AAVE作为他们的快速贷款池)

贷款有什么用?

闪贷最初的宣传是基本用于套利。大理石的公告声称:

“通过闪贷,交易者可以从大理石银行借钱,然后在一个DEX上买入代币,在另一个DEX上以更高的价格卖出代币,然后将钱返还给银行,在单个原子交易中获得套利收益。”

事实上,从交易量来看,到目前为止,大多数闪贷都用于此类套利。

快速贷款在AAVE的使用。出发地:AAVE

但是,交易量小。自AAVE闪贷业务推出以来,其贷款金额仅为1万美元。与DeFi的套利和清算市场相比,这是微不足道的。

这是因为大多数套利者是由运行复杂机器人的竞争性套利者执行的。他们参与连锁优先天然气拍卖,并使用天然气代币来优化交易成本。这是一个竞争非常激烈的市场,这些人非常乐意在资产负债表上保留一些代币,以优化他们的回报。

另一方面,从AAVE借钱要花80kgas,并收取本金的0.09%,这对争夺微小差价的套利者来说是个高价。事实上,在大多数AAVE套利交易中,借款人最终支付给借款池的钱比他们从套利中获得的钱要多。

长期来看,除非有特殊情况,套利者不太可能利用闪贷进行套利。但在DeFi中,闪贷还有其他更引人注目的使用案例。一个例子是贷款再融资。例如,假设我有一个创客金库(蓝狐注:即抵押债务

务头寸),其中锁定了100美元的ETH,我从中借出了40 DAI的贷款,也就是说,除去债务,我还有60美元的净头寸。现在,假设我想在Compound再融资以获得更好的利息。通常,我需要回购40 Dai来关闭我的CDP,这需要一些前期资金。而现在的可替代方法是,我可以通过闪贷借出40 Dai,关闭100美元的CDP,然后将解锁的价值60美元的ETH存入Compound,通过Uniswap将剩余的价值40美元的ETH换成Dai,然后用它偿还闪贷。Boom!原子性的0资本再融资。

这真是太神奇了。这是货币乐高运作的很好例子。1x.ag实际上构建了一个保证金交易汇聚器,该汇聚器使用闪贷自动执行这一切。但是闪贷可以很酷,bZx攻击者向我们展示了它们不仅是好玩和游戏。

闪贷攻击对安全性有重大影响

我越来越相信,闪贷真正解锁的是闪贷攻击,一种由闪贷提供资金的资本密集型攻击。在最近的bZx攻击事件中,我们第一次看到这一现象,而我怀疑这只是冰山一角。

闪贷对攻击者尤其有吸引力的主要原因有两个:

很多攻击需要大量前期资金(例如预言机操纵攻击)。如果你在赚取价值1000万美元ETH的正向投资回报,则可能不是套利——你可能会说这是在扯淡。

你可能不太喜欢交易所黑名单是如今区块链安全模型的一部分。这是非常黏糊且中心化的。但这是一个重要的现实,它为这些攻击提供演算信息。

在比特币的白皮书中,中本聪宣称比特币有免遭攻击的安全,因为:“攻击者应该会发现,遵守规则...比破坏系统和其财富的有效性更有利可图。”

有了闪贷,攻击者不再需要有利益参与其中。(蓝狐笔记:也就是说,破坏系统不会影响攻击者的自身利益,因为攻击者没有利益相关)。闪贷实质上改变了攻击者的风险。请记住,闪贷可以累积!受制于gas limit,实际上,你可以在单个交易中(最高可达5000万美元 )汇聚各个闪贷池,并将所有资金集中涌入一个脆弱的合约中。这是一个5000万美元的攻城锤,现在任何人都可以猛击任何链上的彩陶罐。这实在恐怖。

当然,仅凭你很有钱还无法攻击协议。如果DeFi堆栈如它宣称的那样安全,所有这些都不是问题——什么类型的协议对巨鲸来说是不安全的?你可能会说,没有考虑这一点就是过失。

但是,我们承认以太坊自身也可能会遭受51%的攻击,当前的攻击成本是每小时不到20万美元。这不算非常多的资金。如果以太坊自身的安全模型都基本上是构建在资本限制上,那么,为什么我们要如此快地去嘲笑可以被1000万美元成功攻击的DeFi应用?(明确地说,我不认为这些数字——这一数字方便地忽略了滑点和供应不足——加上共识层安全和应用层安全是两码事。但你明白这个意思。)

那么,如何减轻闪贷攻击?

假设我是DeFi协议,我想避免被闪贷攻击。自然的可能问题是,我能否检测到与我交互的用户是否在使用闪贷?

简单答案是:不。

EVM并不允许你从任何其他合约中读取存储。因此,如果你想知道其他合约正在发生什么,则可以通过该合约告诉你。因此,如果你想知道是否闪贷合约在被使用,你必须直接询问合约。如今,很多借贷协议并没有对这种查询做出响应(而且一般来说,也没有办法强迫闪贷借贷者的行为)。另外,即便你试图检查,通过使用代理合约或通过串联闪贷池也容易误导此类查询。简单来说,通常很难辨别一个存储用户是否在使用闪贷。

简言之,如果有人拿着1000万美元敲你合约的前门,你无法判断这是否是他们自己的钱。那么,我们有什么真正的选择可以防止闪贷攻击?我们可以考虑如下几种方法。

说服闪贷借贷池停止提供服务。

哈,开玩笑。这是加密世界,你们懂的!

认真地说,试图让借贷池停止提供闪贷就像是试图停止噪音污染——这是典型的公地悲剧。提供闪贷符合每个协议的自身利益,且出于合理原因,它们的用户也希望使用这一功能。因此,我们尽可忽视这一条。闪贷并不会消失。

强制关键交易跨两个区块进行

请注意,闪贷允许你在单个交易时间段内借入资金。如果你需要一个资本密集型交易跨越两个区块,那么,用户必须取出至少两个区块的贷款,由此击败任何闪贷攻击。(注意:为此,用户必须将其资产锁定在两个区块之间,以防止他们偿还贷款。如果你没有正确地考虑设计,则用户可能只是在这两个区块中实施闪贷攻击)

显然,这会带来巨大的UX权衡:它意味着交易不再是同步的。它对普通用户来说极其糟糕,这是很难下决心采取的措施。(蓝狐笔记:为了防止闪贷攻击,导致用户体验糟糕,显然是下策)

很多开发者对异步智能合约操作感到烦恼,例如,与layer 2的交互,以及以太坊2.0的跨分片通信。具有讽刺意味的是,异步其实让这些系统在应对闪贷时更安全,因为你无法在单个原子交易中横跨分片或layer 2。这意味着不会有跨ETH2.0分片或在layer 2针对DEX的闪贷攻击。

要求提供链上证明,以证明用户的先前余额并没有因为闪贷而改变

如果能有方法检测出用户真实的余额多少(也就是他们获得借款之前的余额),我们就可以击败闪贷攻击。

无法在EVM中本地执行此操作,不过,你可以做点带有黑客意味的事情。这就是你要做的:

在用户与你的协议交互之前,你要求提供可以证明之前区块末尾的Merkle证明,他们有足够的余额来解释他们当前使用的资金。你需要对每个区块上的每位用户跟踪这一点。(Ari Juels向我概述了此方法)

这种方法可能有些效果。当然,它也存在棘手问题:在链上验证这些链上证明非常昂贵,并且没有用户会想要生成这些证明以及为此支付gas费用。另外,出于完全正当理由,用户有可能在早些时候在同一区块中已更改了余额。因此,从理论上它有一些优点,但这不是一个切实的解决方案。

以上提到的三个解决方案没有一个有特别的希望。我相信,没有针对闪贷攻击的全面防御措施。但是,有两个特定的应用确实可以缓解闪贷攻击:基于市场价格的预言机和治理代币。

对于像Uniswap或OasisDEX这样的基于市场的价格预言机,闪贷攻击使得你在任何情况下都不能将当前的中间市场价格用作为预言机。对于攻击者来说,在单个交易中移动中间市场价格并制造闪崩、破坏价格预言机,这是孩子的玩法。

这里最好的解决方案是通过TWAP或VWAP使用最后X个区块的加权平均值。Uniswap v2将原生提供这一点。还有Polaris,这是通用的方法,可以为DeFi协议提供移动平均值。具有讽刺意味的是,Polaris也是由Marble的创始人Max Wolff构建的。(Polaris现在已经被抛弃,但Max看到了这一角落的东西,值得赞)

链上治理本身就是自己罐头里的蠕虫。链上治理通常由治理代币持有者之间的代币加权投票决定。但是,如果这些治理代币出现在闪贷借贷池中,那么,任何攻击者可以捡起大量的治理代币并搞出任何他们想要的结果。

当然,大多数治理协议都要求在投票期间锁定这些代币,以防止闪贷攻击。但是,有些形式的投票并不要求这些,例如carbon投票,或Maker的执行合约。如今,随着闪贷攻击的出现,这些形式的投票应该认为完全遭到破坏。

理想情况下,如果治理代币不可用来闪贷,这就很好。但是,这不取决于代币的发行方,而是取决于市场。因此,所有治理行为应该要求锁定,以防止闪贷攻击。Compound的新COMP代币更进一步,它对所有协议投票都要求基于时间的加权,甚至削弱针对其治理代币的常规贷款攻击。

更广泛地说,所有治理代币必须有时间锁。时间锁要求所有治理决定必须等待一段时间才能生效(Compound的时间锁是两天)。这使得系统可以从任何意料之外的治理攻击中恢复。尽管MKR还无法被大量闪贷,MakerDAO最近因为易受此类攻击而被号召实施措施。它最近实施了24小时的时间锁,关闭了此类攻击向量。

从长远看,这一切意味着什么?

我相信bZx攻击改变了这一切。

这不会是最后一次闪贷攻击。第二次bZx攻击是对第一次的模仿,而且我怀疑在未来几个月会掀起一波攻击浪潮。现在,来自世界最遥远角落的成千上万名聪明少年正在嘲笑所有这些DeFi乐高,他们在显微镜下观察,试图发现可以实施闪贷攻击的方法。如果他们设法成功利用漏洞,那么,他们就可以赚取几十万美元,这在世界上的大部分地区都是可以明显改变生活的。

有人称闪贷并不会改变任何东西,因为如果攻击者有足够资金,这些攻击总是可能的。这既正确又相当不正确。大多数鲸鱼都不知道如何黑智能合约,而大多数聪明的攻击者也没有数百万美元的资产。(蓝狐笔记:此处是说,两者的交集不大。同时具备两者的是最可怕的攻击者。但闪贷到来让攻击者获得了免费的利器)现在,任何人仅花费几分钱就可以租用一个价值5000万美元的毁灭球。从现在开始这改变了每个建筑被构建的方式。

在bZx攻击之后,被闪贷攻击就像是在DAO攻击后被重入攻击一样令人尴尬:你不会得到人们的同情。你应该了解这一点。

最后,这些事件让我想到加密货币的一个古老的概念:矿工可提取的价值。矿工可提取的价值是矿工可以从区块链系统中提取的价值。这包括区块奖励和交易费用。但它也包括更多恶意形式的价值提取。例如对交易重新排序或将无赖交易插入区块。

从根本上讲,你应该将所有这些闪贷攻击都视为是在内存池中可以赚取大量金钱的单个交易。例如,第二次bZx攻击产生了价值64.5万美元ETH的收益。如果你一位矿工,你打算开始挖新区块,请想象一下,查看先前的区块交易,并对自己说:“等等,那是什么?当最后一个区块包含64.5万美元的利润时,我为什么还要打算为区区500美元左右的收益挖新区块呢?”你不会选择去扩展区块链,而是回去并试图重写历史,以使自己成为闪贷攻击者。想想看:仅此一笔交易就比4小时诚实地开采以太坊来得多!

这与包含1000倍于常规区块奖励的特殊超级区块是同构的,正如你预期的那样,这样的超级区块的理性结果应该是矿工竞相竞争以孤立链的打赏并为自己偷取该区块。

在均衡状态下,所有闪贷攻击应该最终会被矿工提取。(请注意,他们也应该会最终窃取所有链上套利和清算)具有讽刺意味的是,这会阻止闪贷攻击的发生,既然它会导致攻击者无法利用这些漏洞来获利。或许最后矿工会通过私人渠道征集攻击代码,并向潜在的攻击者支付发现者费用。从技术上讲,可以使用零知识证明无须信任地完成此类操作。

但这一切现在都还是科幻小说。显然矿工今天还没有这么做。

他们为什么不呢?

有大量的原因。它很难,需要很多工作。EVM很难模拟,它有风险,可能会有漏洞导致损失资金或孤块,流氓矿池可能会面临PR危机,被人们冠以“以太坊敌人”的烙印。就目前来看,相对于这么做的收益,矿工可能会在业务、R&D以及孤块上损失更多。

今天是如此。未来不一定永远如此。

这为以太坊提供了另外一个动力,以加速并过渡到ETH2.0。尽管以太坊上的DeFi总是很有趣,但它是绝对和不可撤销的。DeFi在PoW链上不稳定,因为所有高价值交易都受制于矿工的重新分配(也称时间劫匪攻击)。

为了让这些系统大规模运行,你需要最终性——让矿工无法重写已确认的区块。这将保护先前区块的交易免遭重新分配。此外,如果DeFi协议存在于单独的ETH2.0分片中,它们不容易遭到闪贷攻击。

据我估计,闪贷攻击给我们一个小的但有用的提醒,那就是现在还很早期。我们还远没拥有可持续的架构,一个可为未来金融系统构建的架构。

目前,闪贷会是新常态。也许从长期看,所有以太坊上的资产都可用于闪贷:交易所持有的所有抵押品,Uniswap中的所有抵押品,也许所有ERC-20代币本身。

谁知道呢?这只是几行代码的事。

相关问答:

上一篇:hpt是什么意思

下一篇:零钱通会不会超额(微信买理财不让用零钱)