前言:本文提出了对MakerDAO治理攻击的可能模式,并提出了改进期望。由于MakerDao在整个以太坊的DeFi生态中具有非常重要的地位,也是当前锁定资产量最大的DeFi项目,任何跟它有关的潜在风险都会对整个DeFi生态和以太坊产生重大影响。尤其考虑到可组合性,这也是双刃剑。整个加密世界处于早期也很稚嫩,几乎所有正常项目都具有共生共荣的特点,任何正常项目的风险都可能会转化为整个领域的风险。不管如何,期望所有的DeFi项目都能够不断完善,一起推动区块链行业的持续发展。本文作者MichaZoltu,由“蓝狐笔记”社群的“CL”翻译。
摘要
任何人只要拥有大约40,000个MKR,也就是大约2000万美元,就能够偷走所有在MakerDAO上的抵押资产,包括Dai和Sai,以及来自Compound、Uniswap、和其他Maker集成系统的大量资产,全部加起来大约超过3.4亿美元。
MakerDAO v2,也就是多抵押资产的Dai,原本应该采用防御措施(紧急关闭和治理延迟)启动的,这样可以防止有敌意的MKR持有人劫掠所有抵押资产,防止可能掠走Uniswap、Compound、以及其他集成Maker的系统中的大量资产。相反,他们决定不这么做。
银行
MakerDAO是让Dai运转的东西。当前,已经有价值3.4亿美元的ETH锁定在其V1和V2版本中。跟Uniswap和Augur不同,它也是一个“治理”系统,这意味着某些有钱人可以控制系统的运作。
设计
治理系统可以调用各种各样的内部功能,以允许治理人实现各种他们想要的事情。治理是一个相当简单的“利益相关者说了算”的系统,你可以在合约中权益质押你的MKR代币,其中质押最多MKR的用户得到控制权。
由于当前的执行合约上有80,000MKR的权益质押代币(蓝狐笔记:MKR总量接近100万个,权益质押的代币占8%左右,质押率较低),这意味着,想对Maker合约做任何你想要的事情的成本大约是80,000MKR,换算成美元是4100万美元。
为了减轻恶意行为者的威胁,系统有个机制,在新执行合约被选择之后,会存在一段执行的延迟时间。在此延迟时间,任何拥有足够MKR数量的人都可以触发整个系统的全球结算,从而可以在新执行合约做出任何不好的事情之前有效关闭系统。
这意味着,如果劫掠者出现并试图通过给执行合约投票以劫取所有抵押资产,即使他们拥有的代币比其他执行合约更多,他们也必须等待这一延迟时间,并希望没人在这期间触发防御机制。
疏忽
问题是Maker基金会已经确定此治理延迟的适当值是0秒。没错,防御者有0秒的时间来防御由有钱但恶意的攻击者发起的攻击。
微妙之处
鉴于如上所述,攻击者可以做如下的事情:
不管通过何种方式,获取80,000个MKR代币。
创建一份执行合约,它可以将所有Maker上的抵押资产转给你。
立即对合约进行投票(在同一交易中)。
立即激活合约(在同一交易中)。
拿着价值3.4亿美元的ETH开溜(不要再管那些攻击用的MKR了,在攻击之后,它会毫无价值)。
这具有让人难以置信的利润,有8倍的ROI,但执行起来很昂贵。不过,只需要有耐心就可以将攻击成本将至50%。
还记得我们上面提到的当前投票系统的运作方式是:拥有最多投票数的执行合约是拥有全部控制权的合约吗?每当治理投票对提议进行表决时,MKR权益从旧执行合约转入新执行合约会存在一段时间。这不会一次全部发生,它通常会随着时间推移发生,因为个人转移他们的投票会有时间。
那么,在某个时间点上,将80,000个积极参与的MKR分到两个执行合约,每个大约有40,000个MKR。一个好的脚本可以很容易进行交易计时,它可以在MKR给两个执行合约最佳分配时进行恰时操作,并在那时执行上述攻击,仅仅花费大约40,000MKR,也就是2000万美元。
收银机
如果窃取3.4亿美元还不满足,那么,他们还可以在攻击执行过程中铸造出千万亿的Dai。在抢掠Maker的同一交易中,他们还可以将Dai移至Uniswap,并通过ETH交易对偷走所有ETH可用的流动资金。
要从不走运的银行顾客的口袋中获得一些额外的零钱,他们还可以去Compound,出借千万亿的Dai,并借入所有可获得的可借资金(他们永远不会偿还贷款,只保留借入的资产)。如果他们行动迅速,在铸造所有Dai之后,他们甚至能立即在一些半去中心化的交易所,例如IDEX、Paradex、RadarRelay等进行套现。
群众
但是等一下,还有更多!以太坊是建立在具有约束力的协议之上的系统。这意味着,一个人能够创建一个智能合约,其中多个互不信任的各方可以根据一套严格规则实现合谋。规则集可能如下:
如果该合约集中了40,000个MKR,那么任何人都可以触发它,且它将立即劫掠Maker。成功劫掠之后,战利品会在MKR贡献者之间平均分配。如果劫掠失败,参与者可以取回MKR。任何时间任何人都可以拿回其MKR。
这个智能合约非常简单,它在贡献MKR的参与者之间是具有约束力的协议,因此他们之间无须像传统劫掠那样需要彼此间的信任。没人可以带着所有战利品逃跑,没有人可以窃取其他参与者的贡献,除了将所贡献的MKR用于执行约定的行为之外,也没有人可以将其用作其他任何事情。
有人可能会争辩,任何攻击者都必须将其计划传达给人们,而Maker基金会可以简单地打破其“我们不参与治理”的规则,通过将基金会的所有MKR用于投票,以制止攻击。这样,这会让攻击的成本上升到400,000,000MKR,而不是40,000MKR。(蓝狐笔记:MKR总发行量为1,000,000个,不知道文中所提到的4亿个MKR怎么来的)
如果Maker基金会看到这种情况的来临,确实有能力阻止它。但是,没有任何保证说,Maker基金会一定会察觉到它的来临。例如,攻击者可能在其他地方有资金,并且他们随着时间用这些资金来购买MKR。攻击者也可能是MKR持有人,他们知道其他MKR持有人具有一定的道德缺陷,他们可以在私下进行协调。
即使具有约束力的协议合约是公开的,但它也能够以一种混淆众包的方式进行设计。例如,可以让每个感兴趣的人都向中心服务提供者提交预签署的交易(无须完全信任他们),然后中心服务提供者直到“动员”足够的MKR之后才会广播这些交易。
在这种情况下,要么Maker基金会介入以集中控制系统,而不知道是否有人在行动,要么他们什么都不做,冒着随时都会发生被攻击的风险,且无法即时作出反应。
局内人
值得注意的是,Maker基金会现在就可以用这种方式攻击系统,如果他们想的话。他们拥有远超80,000MKR的代币。更糟糕的是,a16z现在手上也拥有足够的MKR实施有耐心的攻击。还有一些其他的MKR持有人,他们的身份我们不清楚,他们也拥有足够的代币去实施耐心版本的攻击。然后,还有少数人需要跟其他几方合谋实施攻击。
这里让人感到恐惧的是,这不是DeFi,而是CeFi。不是只有一个人能够劫掠所有的钱,一些大的代币持有人,或一群较小的代币持有人也可以随时合谋来劫掠所有资金。
后果
那么,如果有人实施此种攻击,对Maker用户会有什么影响?首先,每个用户的CDP/Vault将会擦除,劫掠者直接取走所有抵押资产。这会导致连锁反应,Dai会变成抵押不足,其价格有可能会归零。然后,MKR价值也将可能归零,因为在这种情况下其整个系统基本上失败了。在经历这种级别的失败之后,不太可能重新恢复。
以太坊也可能会因此遭受不小的重创,因为这算是以太坊生态系统内的一个重大失败。也许它会恢复过来,因为它依然是个好的平台,但这提醒大家“人们可以在好的事情上构建坏的事情”,这是对非理性繁荣的清醒。
防御措施
我已经与Maker提出过这种攻击场景,他们明确表示,放弃即时的治理控制来防止此类攻击是不值得的。(蓝狐笔记:这里的即时,应该是指没有延迟期间)他们辩护论点的一般主题如下,(这是二手的解释,如果需要第一手的陈述,可以直接与他们交谈),其中也包括了我的反驳:
攻击向量已经存在很长一段时间了,但迄今为止情况还不错。
在被发现之前,Heartbleed(OpenSSL攻击)已经存在10年了。Maker的源代码难以遵循,且在以太坊开发者社区中有不少抱怨。之前,我曾亲自告诉他们我没有审计Maker合约,因为其代码很难阅读。我最终咬紧牙关并深入Maker v2,因为它应该是安全的(跟Maker v1被认为是不够安全不同)。
仅仅因为没有人实施过攻击,并不意味着他们将来不会实施攻击。当向量变得广为人知时,更是如此。
除了少数几个人执行之外,对任何人来说,都太昂贵了。
请参考上述提到的,同时也请注意,攻击只需要一个人即可实施。因此,“除了少数几个人过于昂贵”的说法,并不会让系统安全。
攻击者必须传播其攻击计划
仅当攻击来自于大量MKR持有人协同工作时,且仅当Maker愿意在有人可能为攻击做准备时设置防御
我们将对任何攻击者采取法律行动
这几乎是对DeFi的打脸。以太坊生态中的很多人试图保护其资产安全。而这种方式无法保护所有。同样,它假定攻击者不是匿名的。
以太坊上很难匿名
确实,以太坊上很难匿名。尽管如此,DAO攻击者依然未知。中本聪依然未知。很多非常富有的ETH持有人也是未知的。“很难”并非是抵御大规模获利攻击的好防御。
这是已知的风险,但未知的风险可能会更糟。
我非常不同意这种风险评估。你有一个已知的风险,其攻击系统可以获利颇丰,并正在与未知影响和未知可能性的未知风险进行比较。这种思路是“没有值得我们放弃控制的攻击向量”。
------
风险警示:蓝狐笔记所有文章都不能作为投资建议或推荐,投资有风险,投资应该考虑个人风险承受能力,建议对项目进行深入考察,慎重做好自己的投资决策。