LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 闪贷:为什么闪贷攻击会是新常态?

闪贷:为什么闪贷攻击会是新常态?

2020-03-01 区块律动BlockBeat 来源:区块链网络

原文标题:《闪贷:为什么闪贷攻击会是新常态?》
原文来源:蓝狐笔记

前言:bZx 事件发生之后,加密社区开始重视闪贷攻击。本文作者 Haseeb 认为闪贷用于套利不是其最大的用例,它最大的用例在于释放了闪贷攻击。闪贷攻击无法消失,且很难阻止。有些阻止攻击的措施看似合理,但成本很高,不切实际。而当前改进主要集中在价格预言机和治理代币机制上。比如价格采用通过 TWAP 或 VWAP 使用最后 X 个区块的加权平均值的机制。治理代币采用时间锁机制等。此外,如果闪贷攻击的利益足够高,矿工也可能会参与作恶。总之,面临闪贷攻击,DeFi 还需要更好的应对。本文由「蓝狐笔记」的「SoFa」翻译。

闪贷最近成为加密社区关注的焦点。最近发生了两次使用闪贷对保证金交易协议 bZx 的攻击,第一次是 35 万美元的攻击,第二次是 60 万美元的模仿攻击。

用一句话来总结,这些攻击非常「华丽」。每次攻击中,攻击者不用花费一分钱立即借到数十万美元的 ETH,然后通过一系列脆弱的链上协议,赚取数十万被盗资金,最后归还借来的数额巨大的 ETH 贷款。所有这些都是瞬间发生的。也就是说,在单个以太坊交易中完成。


封面艺术来自 Carmine Infantino


我们不知道这些攻击者是谁或他们来自哪里。他们进来时两手空空,离开时拿走数十万美元的价值,且都没有留下痕迹。

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

什么是闪贷

闪贷的概念最初由 Marble 协议的创建者 Max Wolff 于 2018 年提出。Marble 在市场上将自己宣称为「智能合约银行」,其产品非常简单,但极具 DeFi 创新:通过智能合约进行零风险贷款。(蓝狐笔记:关于什么是闪贷,可以参考之前的文章《加密闪贷:互联网货币的神奇新发明》《闪贷策略:攻击者能取走 Maker 的 7 亿美元抵押品吗?》《bZx 事件的启示》)

怎么可能有零风险的贷款?

传统的贷方承担两种形式的风险。首先是违约风险:如果借款人卷款跑了,很糟糕。贷方的第二个风险是流动性不足的风险:如果贷方在错误时间贷出太多资产,或者没有及时收回还款,贷方可能会意外地缺乏流动性,且无法履行其义务。

闪贷减轻了这两种风险。闪贷基本上是这样运作的:我在单个交易中借给你想要数额的钱。但是,在这笔交易结束之前,你必须至少偿还我借给你的钱。如果你无法执行此操作,我会自动回滚你的交易。是的,智能合约可以做到这一点。

简言之,你的闪贷具有原子性:如果你无法偿还贷款,整个事情就会还原,就像是借贷从未发生过一样。这样的事情只能发生在区块链。例如,你无法在 BitMEX 上闪贷。这是因为智能合约平台一次只能处理单个交易,因此,在单个交易发生的所有事情都是作为批处理按次序执行。你可以将其看作为交易执行期间的「冻结时间」。另一方面,中心化交易所可能会出现竞争状况,以致于你的订单无法履行。在区块链上,可以确保的是,你的所有代码都是按次序运行。

因此,让我们思考一下这里的经济学。传统的放贷人在两个方面得到补偿:他们承担的风险(违约风险和流动性风险),以及他们借出资本的机会成本(例如,如果我能在其他地方获得 2% 的利息,那么,借款人必须向我支付高于 2% 的无风险费用)。

而闪贷不同。从字面意义上说,闪贷没有风险,且没有机会成本。这是因为借款人在其闪贷期间「冻结了时间」,因此,在其他人眼中,系统的资本从未有风险且无负担,它也无法在其它地方赚取利息(即,它没有机会成本)。

在某种意义上,这意味着成为闪贷的放贷人没有成本。这是非常反直觉的。那么,均衡时的闪贷成本应该是多少?(蓝狐笔记:这里说的均衡时,是指经过充分竞争且发展成熟稳定时)

基本上,闪贷应该是免费的。或者更恰当的做法是,支付小额费用,以分摊包括使得资产可实现闪贷的额外三行代码的成本。


H/t Remco Bloemen


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

闪贷使得资本变成真正的商品。这种竞争不可避免地会导致零费用或微不足道的象征性费用。dYdX 当前对闪贷收取零费用。另一方面,AAVE 对闪贷收取本金 0.09% 的费用。我怀疑这是不可持续的,确实,他们社区中的一些人呼吁将费用消减至零。(请注意,这两次攻击都没有使用 AAVE 作为他们的闪贷池)

闪贷有何用处?

闪贷最初的宣传是它们基本上用于套利。Marble 的公告声称:

「通过闪贷,交易者可以从 Marble 银行借钱,随后在一个 DEX 上买入代币,并以更高的价格在另外一个 DEX 上卖出代币,然后将钱还给银行,并且在单个原子交易中获得套利收益。」

的确如此——就交易量来说,迄今为止,大多数闪贷都用于此类套利。


AAVE 上的闪贷用途。来自:AAVE


不过交易量较小。AAVE 的闪贷业务开展以来,其借贷额仅为 1 万美元。与 DeFi 的套利和清算市场相比,这是微不足道的。

这是因为大多数套利都由运行复杂机器人的竞争套利人执行。他们从事链上优先 gas 拍卖,并使用 gas 代币来优化交易费用。这是非常有竞争力的市场,这些人非常乐意在其资产负债表上保留一些代币,以优化其收益。

另一方面,在 AAVE 上借钱花费 80kgas 成本,且收取本金 0.09% 的费用,这对竞争微薄差额的套利者来说,付出的价格很高。实际上,在大多数 AAVE 的套利中,借款人最终向借贷池支付的费用高于他们套利赚取的收益。

从长远看,除非情况特殊,否则套利者不太可能使用闪贷进行套利。但闪贷在 DeFi 中存在其他更引人注目的用例。其中一个例子是贷款再融资。例如,假设我有一个 Maker 小金库(蓝狐笔记:也就是抵押债务头寸),其中锁定了 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 的正向投资回报,则可能不是套利——你可能会说这是在扯淡。

闪贷可以最小化攻击者的污点。如果我有个用 1000 万美元 ETH 操纵预言机的想法,即便是我拥有这么多 ETH,我也可能不会用自己的资本进行冒险。我的 ETH 将会有污点,交易所可能会拒绝我的存入,且它很难洗白。这有风险。不过,如果我借来 1000 万美元的 ETH,那么,谁会在乎呢?全都是好处。dYdX 抵押池不太可能会被认为有污点,因为这是我贷款的来源——dYdX 的污点只会消失。

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

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

有了闪贷,攻击者不再需要有利益参与其中。(蓝狐笔记:也就是说,破坏系统不会影响攻击者的自身利益,因为攻击者没有利益相关)。闪贷实质上改变了攻击者的风险。请记住,闪贷可以累积!受制于 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 倍于常规区块奖励的特殊超级区块是同构的,正如你预期的那样,这样的超级区块的理性结果应该是矿工竞相竞争以孤立链的打赏并为自己偷取该区块。



对矿工争相抢食的艺术可视化效果。图片来源:AP Photo/Denis Poroy


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

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

他们为什么不呢?

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

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

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

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

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

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

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

原文来源:weixin.qq.com

—-

编译者/作者:区块律动BlockBeat

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

LOADING...
LOADING...