闪电贷的创新,在带给我们惊喜的同时,或许也悄悄打开了 DeFi 的潘多拉魔盒。

链闻此前撰文解读过 bZx 事件《除了闪电贷,bZx 事件还给 DeFi 带来了哪些启示?

原文标题:《闪贷策略:攻击者能取走 Maker 的 7 亿美元抵押品吗?》(Stealing All of Maker’s Collateral)
撰文:Dominik Harz
翻译:JT

自从 bZx 事件之后,闪贷逐渐为大家熟悉。如果利用闪贷对 Maker 进行治理攻击,会发生什么情况?闪贷之前,要发起治理攻击的成本很高,可能会采用众筹策略,而有了闪贷,只要流动池中有足够的 ETH,即可发动对 Maker 的治理攻击,从而取走 Maker 的所有抵押品并发行新 DAI。基于这样的可能性,Maker 决定制定新的治理合约,并于今天发起投票,以引入延迟,防止对系统的治理攻击。闪贷的出现,对 DeFi 的安全提出更高要求。此外,蓝狐笔记发现,当前 Uniswap 池中的 MKR 被大幅减少,1.6 万个 MKR 降至 4000 多个 MKR,从目前情况看,由很大概率是大户撤出,以防止被攻击者利用。本文作者 Dominik Harz,由「蓝狐笔记」社群的「JT」翻译。


  • 如果不对新的治理合约引入延迟,通过闪贷,你有机会窃走 Maker 的所有抵押品(7 亿美元左右)以及发行任意数量的新 DAI。
  • 任何人都可以执行攻击,且只需要支付交易费用(几美元),且无须持有任何 MKR。
  • 如果 Maker 在闪贷池的流动性超过阀值之前,不引入延迟,则几乎没有机会阻止攻击。
  • 2020 年 2 月 8 日我们曾跟 Maker 联系,并于 2020 年 2 月 14 日跟他们联系讨论我们的发现。
  • Maker 清楚攻击向量,并于 PST (蓝狐笔记:太平洋标准时间)本周五下午 12 点举行投票(也就是今天),以防止攻击。

介绍

Maker 及其 DAI 稳定币是以太坊 DeFi 上最受欢迎的项目,其智能合约锁定了大约 7 亿美元。(蓝狐笔记:当前大约 6 亿美元,跟 ETH 价格波动相关) Maker 协议依赖编码于智能合约的治理流程。MKR 代币持有人可以投票取代现有的治理合约。投票票数跟 MKR 数量成正比。MKR 的总代币量为 987,530,其中选定的钱包或合约持有大量的代币:

  • Maker 治理合约:192,910 MKR
  • Maker 基金会:117,993 MKR
  • a16z: 60,000 MKR
  • 0xfc7e22c6afa3ebb723bdde26d6ab3783aab9726b: 51,291 MKR
  • 0x000be27f560fef0253cac4da8411611184356549: 39,645 MKR

请注意:Maker 治理合约包含多个主体的 MKR 代币

治理攻击

在 2019 年 12 月的一篇文章中,Micah Zoltu 指出如何攻击 Maker 治理合约。(蓝狐笔记:具体参考《MKR 治理攻击:15 秒内将 2000 万美元变成 3.4 亿美元,可能吗?》)。其基本思想是,积累足够的 MKR 代币,用攻击者的治理合约取代现有的治理合约,也就是恶意的治理合约。然后,恶意治理合约可以让攻击者完全控制系统,可以取出系统中的所有质押品,同时发行任意数量的新 DAI。

为了减少所需的 MKR 代币数量,他建议在对新治理协议进行投票时执行攻击。目前,治理合约中已锁定 192,910 个 MKR。但是,如果假设两到三个合约用类似代币分配进行并行投票,那么攻击者将需要较少的代币。如下图,这种情况在过去经常发生:

闪电贷危机再现:攻击者能取走 Maker  7 亿美元抵押品吗?对「Maker 治理合约」进行投票

最明显的攻击策略是通过智能合约众筹所需的 MKR 代币,并在胜利后给每个参与者分配相应的收益。然而,攻击者可能需要累积大约 5 万个 MKR 代币,才有机会在不被 Maker 注意到的情况下发起对系统的攻击。

勇敢的新攻击策略:闪贷

不过,如果我们考虑使用闪贷,则可以完全无须考虑累积 MKR 代币。闪贷是相当新的概念,因此我们可以给予简要说明。(蓝狐笔记:关于闪贷 flashloan,可以参考之前的文章《加密闪贷:互联网货币的神奇新发明》)

一般来说,一个人必须提供抵押品以在 DeFi 中获得贷款。例如,在 Maker 中,Alice 通过存入 ETH 借到 DAI。这是必须的,因为这是在弱身份和主体在经济上会做出理性选择的系统下运行的。

而闪贷将这些要求都去掉,因为它仅在单个交易中发生:

  • Alice 从闪贷流动性提供商中获得贷款(例如在 Aave 或 dYdX 中)
  • Alice 执行一些操作(例如,对 Uniswap、Fulcurm、Kyber 等进行套利交易)
  • Alice 偿还闪贷及利息

闪电贷危机再现:攻击者能取走 Maker  7 亿美元抵押品吗?闪贷在一次交易中分三步执行

闪贷之所以有效,是因为这是以太坊 EVM 的设计方式:如果在这次交易中闪贷在任何时候失败,整个交易都会被还原。

因此,Alice 可以承担贷款的风险,即,如果她无法偿还贷款,她也永远不会承担其风险。流动性提供商也获得胜利:他们只有在 Alice 能够偿还贷款的情况下才会出借其资金。

利用闪贷进行套利或预言机操纵

在 2 月 14 日和 2 月 18 日,两起跟闪贷有关的事件导致 bZx 停止其平台。在第一次的交易中,一次闪贷获利 1,193ETH,大约 298,250 美元。该交易使用智能合约执行,在 Fulcrum 上开了 wBTC 的空头头寸。在同一笔交易中,该交易从 Compound 中借出一笔 wBTC 贷款,并在 kyber 的 Uniswap 储备池中交易 wBTC,导致很大的滑点,最终也将 Fulcrum 的价格降低。具体可参考 bZx 和 peckShield 的分析。(蓝狐笔记:也可参考之前蓝狐笔记的文章《bZx 事件的启示》)

同样,2 月 18 日发生了第二起事件,这一次交易中「攻击者」获得了 2,378ETH (约 60 万美元)的收益。该交易涉及最初借入 7,500ETH, 以在 Synthetix 的 sUSD 买入多头头寸。(蓝狐笔记:大概的攻击步骤如下:1. 通过闪贷借出 7,500ETH ;2. 将其中的 3,517ETH 在 Synthetix 上换取 94 万美元的 sUSD,sUSD 价格此时为 1 美元左右;3. 使用 900ETH 在 Kyber 和 Uniswap 上购买 sUSD,将 sUSD 价格推高至 2 美元;4. 通过抵押 sUSD 借入 6,796ETH,之所以用之前 94 万 sUSD 能借入这么多 ETH,是因为 sUSD 的价格被推高到 2 美元,也就是说相当于 188 万美元价值的抵押品;5. 使用借来的 6,796 个 ETH 和剩余的 3,083ETH 偿还 7500ETH 的闪贷,那么还剩下 6,796+3,083-7500=2,379ETH 的收益)

预言机操纵以减少所需的流动性

对于有些攻击,我们可以假设 5 万 MKR 就足够了。即使实践上所需的代币数量可能更多,闪贷会让 Maker 安全面临困境,如果没有治理延迟的话。用一种幼稚的方法,攻击者可以借出一笔闪贷购买 5 万 MKR 代币。

按照目前的汇率,攻击者需要大约 485,000ETH,用来购买 MKR,因为只有一个交易所 Kyber 有足够的量。但是,攻击者也可以在多个交易所购买 MKR,在 Kyber 买入 3.8 万的 MKR,在 Uniswap 买入 1.15 万的 MKR,从 Switcheo 买入 500MKR,共计需要 378,940ETH。这个数字依然很高,但已经减少了近 10 万 ETH。

攻击者可以使用预言机操控策略以有效降低 Kyber 和 Uniswap 上 MKR 的价格。这是两个最大的 MKR 提供商,并显出很容易受到预言机价格操纵的影响。需要进一步分析来确定 MKR 价格可以降低多少。但是,像 wBTC 这样的流动性较低的代币,攻击者能够将汇率操纵大约 285%。

获得足够的流动性

闪电贷危机再现:攻击者能取走 Maker  7 亿美元抵押品吗?Aave 上锁定的 ETH

即使使用预言机操纵,也需要大量的 ETH 执行对 Maker 的攻击。但是,攻击者可以通过在同一次交易中进行两笔闪贷来提高其流动性。Aave 和 dYdX 为了保护自己免遭重入攻击的伤害,在一次交易中仅允许单笔闪贷。但是,攻击者可以在同一笔交易中从这两个不同协议中借出 ETH。

闪电贷危机再现:攻击者能取走 Maker  7 亿美元抵押品吗?

因此,截止到 2 月 18 日,攻击者在 dYdX 上拥有一个 9 万 ETH 池,在 Aave 上有 1.7 万 ETH 池。因此,以当前的流动性,攻击者可以从 dYdX 和 Aave 那里获得共计大约 10.7 万 ETH 的贷款,通过借入的 ETH,试图用来操纵 MKR 代币价格,并由此获得足够的 MKR 代币,以取代当前 Make 治理合约。

为了让这种方法成功,攻击者必须能够将 MKR 平均价格降低至少 3.54 倍。或者,攻击者可以等待 dYdX 和 Aave 增加其流动性池。由于两种协议的当前流动性池增长率大约在 5% 左右,因此似乎不太可能在两个月内实现此攻击。

组合攻击?

显然,可以将众筹和闪贷两种方法结合起来。使用当前可获得的大约 10.7 万的 ETH,大约可以从 Kyber 上获得 1.08 万 MKR。这样一样,多个攻击者所需的众筹 MKR 量从 5 万个降至 3.92 万个。在非正式的 Twitter 调查中显示,似乎有些人确实对这种攻击感兴趣:

闪电贷危机再现:攻击者能取走 Maker  7 亿美元抵押品吗?

还应注意:排名前四位的账户持有人(实际上有 5 个,但不考虑当前 Maker 治理合约)能够在无须众筹的情况下实施攻击。

没时间等待

一旦通过闪贷池获得足够的流动性(使用或不使用预言机操纵的组合),任何人都可以接管 Maker 治理合约。当流动性池资金达到这种阀值时,一旦 Maker 开始投票,Maker 需要确保 MKR 代币尽可能少地分布。如果在此投票过程中,任何时候 MKR 的分布被允许利用此漏洞,那么,任何抵押品都可能被取走。

该攻击者将能够取走价值 7 亿美元的 ETH 抵押品,且能够任意印发新 DAI。这种攻击将会扩散到整个 DeFi 领域,因为 DAI 在其他协议被用作抵押资产。此外,攻击者可以使用新 DAI 交易其他价值 2.3 亿美元的代币。

对策

Maker 应制定新的治理合约,防止闪贷攻击其系统。具体来说,新的治理合约应该能够被 Maker 基金会核查,以查看是否有恶意代码,并能够有足够的时间做出反应。从最低限度来说,新治理合约不应该在单个交易中生效。这样,攻击者无法从攻击中获利,从而导致无法偿还闪贷贷款。如果攻击者无法偿还闪贷,攻击也就不会发生。

Maker 将于 2020 年 2 月 21 日大平洋标准时间 12 点(星期五)下午对这类合约进行表决。其建议对合约激活治理安全模块(GSM),并防止此类闪贷攻击。

来源链接:medium.com