(自画像, 梵高)
前言: 自从 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 治理合约" 进行投票
最明显的攻击策略是通过智能合约众筹所需的 MKR 代币, 并在胜利后给每个参与者分配相应的收益. 然而, 攻击者可能需要累积大约 5 万个 MKR 代币, 才有机会在不被 Maker 注意到的情况下发起对系统的攻击.
勇敢的新攻击策略: 闪贷
不过, 如果我们考虑使用闪贷, 则可以完全无须考虑累积 MKR 代币. 闪贷是相当新的概念, 因此我们可以给予简要说明.(蓝狐笔记: 关于闪贷 flashloan, 可以参考之前的文章《加密闪贷: 互联网货币的神奇新发明》)
一般来说, 一个人必须提供抵押品以在 DeFi 中获得贷款. 例如, 在 Maker 中, Alice 通过存入 ETH 借到 Dai. 这是必须的, 因为这是在弱身份和主体在经济上会做出理性选择的系统下运行的.
而闪贷将这些要求都去掉, 因为它仅在单个交易中发生:
*Alice 从闪贷流动性提供商中获得贷款(例如在 Aave 或 dYdX 中)
*Alice 执行一些操作(例如, 对 Uniswap,Fulcurm,Kyber 等进行套利交易)
* 爱丽丝偿还闪贷及利息
闪贷在一次交易中分三步执行
闪贷之所以有效, 是因为这是以太坊 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%.
获得足够的流动性
Aave 上锁定的 ETH
即使使用预言机操纵, 也需要大量的 ETH 执行对 Maker 的攻击. 但是, 攻击者可以通过在同一次交易中进行两笔闪贷来提高其流动性. Aave 和 dYdX 为了保护自己免遭重入攻击的伤害, 在一次交易中仅允许单笔闪贷. 但是, 攻击者可以在同一笔交易中从这两个不同协议中借出 ETH.
因此, 截止到 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 调查中显示, 似乎有些人确实对这种攻击感兴趣:
还应注意: 排名前四位的账户持有人 (实际上有 5 个, 但不考虑当前 Maker 治理合约) 能够在无须众筹的情况下实施攻击.
没时间等待.
一旦通过闪贷池获得足够的流动性(使用或不使用预言机操纵的组合), 任何人都可以接管 Maker 治理合约. 当流动性池资金达到这种阀值时, 一旦 Maker 开始投票, Maker 需要确保 MKR 代币尽可能少地分布. 如果在此投票过程中, 任何时候 MKR 的分布被允许利用此漏洞, 那么, 任何抵押品都可能被取走.
该攻击者将能够取走价值 7 亿美元的 ETH 抵押品, 且能够任意印发新 Dai. 这种攻击将会扩散到整个 DeFi 领域, 因为 Dai 在其他协议被用作抵押资产. 此外, 攻击者可以使用新 Dai 交易其他价值 2.3 亿美元的代币.
对策
Maker 应制定新的治理合约, 防止闪贷攻击其系统. 具体来说, 新的治理合约应该能够被 Maker 基金会核查, 以查看是否有恶意代码, 并能够有足够的时间做出反应. 从最低限度来说, 新治理合约不应该在单个交易中生效. 这样, 攻击者无法从攻击中获利, 从而导致无法偿还闪贷贷款. 如果攻击者无法偿还闪贷, 攻击也就不会发生.
Maker 将于 2020 年 2 月 21 日大平洋标准时间 12 点 (星期五) 下午对这类合约进行表决. 其建议对合约激活治理安全模块(GSM), 并防止此类闪贷攻击.
------
风险警示: 蓝狐笔记所有文章都 不能作为投资建议或推荐, 投资有风险, 投资应该考虑个人风险承受能力, 建议对项目进行深入考察, 慎重做好自己的投资决策.
来源: http://www.tuicool.com/articles/RjMrqun