本文回顾了 Decentralised Autonomous Organisations (DAOs) 发展过程中的一些著名安全事件,包括 The DAO 的重入攻击、Digix DAO 的内部威胁、Beanstalk DAO 的闪电贷攻击、Sonne Finance 的提案执行问题、Tornado Cash 的虚假提案攻击、Swerve Finance 的匿名开发者和仲裁失败问题,以及 Compound Finance 的时间锁问题。
去中心化自治组织(又名“DAOs”)在以太坊开发的早期就被构思为可以在链上管理决策和资本的实体,其方式与传统公司类似。由于成立门槛低,以及将代码转化为现金的神奇能力,尽管它们与法规和传统法律结构存在模糊的契合性,但这些结构在管理新协议方面获得了爆发式增长。
在本文中,我们将记录和讨论一些更有影响力的 DAO 漏洞的原因,解释这些问题是如何发生的,以及可以采取哪些措施来缓解它们。
从以太坊上最早开发的协议之一“The DAO”开始,再好不过了,它在 2016 年引发了早期的以太坊治理危机。The DAO 被设计为通用的基于 ETH 的投资工具,并实施了链上投票系统,代币持有者可以通过投票来执行提案。
当时,DAO收到了来自超过11,000名投资者的大约1.5亿美元的ETH。这大约占 2016 年流通的 ETH 的 14%。该漏洞 基于重入漏洞,该漏洞允许将 DAO 资金耗尽到相同的合约中,这是一种 次DAO 结构。虽然现在大多数智能合约开发人员都熟悉重入风险,但在 2016 年,这还是一种相对较新的攻击。值得庆幸的是,由于重入攻击依赖于与原始 DAO 相同的合约,这意味着被盗资金随后被锁定 28 天,无法立即转移。
28 天的锁定造成的停滞为协调应对赢得了时间,这是一种大多数黑客攻击通常不具备的奢侈。面对资金追回的威胁,黑客(或声称是黑客的人)提出了法律威胁,声称他们合法获得了资金,并将对抗将资金返还给原始 DAO 参与者的企图。以太坊社区决定分叉网络,首先提出了软分叉,但由于技术原因被排除。结果是以太坊的硬分叉。由于以太坊当时是一个工作量证明网络,这需要不仅仅是小规模的协调,而是矿工的协调。对于 PoW 网络来说,硬分叉需要大多数网络节点更新其客户端软件,考虑到全球矿工的多样性,协调这项工作可能很困难。
社区中的一些人不同意分叉的选择,声称“代码即法律”,DAO 黑客是合法的所有者,从而催生了 以太坊经典。从那时起,无论黑客攻击有多大规模,人们都强烈反对使用硬分叉来解决它们,特别是因为 DeFi 生态系统已经发展壮大,任何硬分叉都可能分裂或损害现有协议。
nonReentrant
修饰符进行重入,例如 OZ 的 reentrancyGuard。时间轴上的下一个 DAO 事件与来自 Digix DAO 的 DGD 相关,Digix DAO 在 2016-2020 年间是一个大型 DAO,在其 ICO 期间众筹了 550 万美元的 ETH,用于构建链上黄金支持代币 DGX。这被证明是首次成功尝试将现实世界资产代币化。Digix 成功运营了几年,并选择在 2020 年结束运营。
Digix 的关闭值得注意,因为它部分受到以太坊价格上涨的推动。在 DAO 运营时,底层 ICO 资产现在的价值高于 DGX——金库拥有 386,000 ETH,价值 6900 万美元,而 DGX 的总供应量在 2019 年 11 月的解散公告 时仅价值 2900 万美元。交易者注意到了价格差异,然后推动了解散 DGX 的情绪,因此,DGX 的价格接近预期的 ETH 赎回率价值。
Digix 作为自身成功的受害者而独立存在,并且是一个有问题的受害者。许多 DAO 很可能希望他们的金库资金超过代币估值。因此,除了在管理大量资产时警惕传统的商业恶意收购之外,没有针对此问题的智能合约缓解措施。虽然在 Digix 案例中没有看到,但 DAO 还必须警惕那些注意到大量代币储备并希望从内部挪用资金而几乎不工作或不工作的参与者,从而利用其去中心化的性质来不受反对地行动。
DigixDAO 背后的公司 Digix 继续在没有 DGD 的情况下运营 DGX 直到 2023 年,当时该项目完全关闭。
一个关于有争议投票的热门案例是 Compound Finance,一个名为 Humpy 的大型投票者在四个月的时间里反复试图通过投票,最终由于投票者兴趣和投票率低而成功。因此,Humpy 能够通过 提案 289,该提案旨在授予他的团队 Golden Boys 499,000 个 COMP 代币。这些代币将使他们成为 Compound 最大的投票代表。值得庆幸的是,问题通过达成一项将部分利润分配给质押 COMP 代币的用户的妥协方案得到解决,这反过来导致提案 289 被取消。这个问题揭示了一些 DAO 的理想主义性质,虽然 COMP 是 由大约 290,000 个地址持有,但只有 57 个地址对提案 289 进行了投票。关于这个话题的另一个教训是,DAO 应该努力将代币持有者的激励与积极参与相结合,一种值得注意的方法是要求希望投票的代币持有者延长锁定时间,旨在防止短期前景。
Digix 因其 DAO 的大量持股与其代币价格相比而引起了关注。这种情况也发生在其他 DAO 身上,但在更具敌意的情况下。Beanstalk DAO 是最近的一个例子,它运营着 beanstalk.money,这是一个基于去中心化信用的稳定币协议。
2022 年 4 月,一名黑客 利用 Beanstalk DAO 的投票系统,注意到之前提出的投票可以在一个区块中执行,从而可以使用闪电贷购买足够的投票代币 BEAN,以强制执行所需的投票结果。该投票批准将资产从协议流动性池转移到黑客手中,为黑客带来了巨大的 7700 万美元 利润,黑客随后清算了所有资产以换取 ETH,并消失在龙卷风现金(Torndao Cash)的漩涡中。
Beanstalk 的漏洞之所以成为可能,是因为紧急治理投票没有时间延迟,因此可以在与闪电贷相同的区块中执行,闪电贷被用作获得多数投票权所需的资金来源。
很明显,投票结构很难正确设置。DAO 的另一个考虑因素是合法提案的交易排序,正如 Sonne Finance 在 2024 年 5 月 在尝试将新的抵押代币 VELO 添加到他们的 Optimism 借贷市场时发现的那样。
作为 Compound Finance 的一个分支,Sonne Finance 团队意识到先前发现的在向公众开放新的空市场时固有的会计漏洞,因此计划进行第一次市场订单以防止此漏洞发生。但是,由于提案的执行是去中心化的,因此任何人都可以触发它们,并且在这样做时,对所有提案交易的排序或包含没有任何限制。黑客知道这一点,并包含了打开新市场的交易,但不包含初始市场订单,而是用他们自己的订单替换了它,该订单利用会计错误来窃取借贷市场中价值 2000 万美元的各种资产。
合法的提案很难正确设置,但鉴于 DAO 的无需许可的性质,非法的提案同样难以注意到。Tornado Cash 是一种知名的基于以太坊的隐私工具,使用户能够混合他们的资金,从而使交易更难以追踪。尽管一些法院会让你相信 Tornado Cash 由开发人员控制,但它由一个拥有 TORN 治理代币的 DAO 控制。
在 2023 年 5 月,一场风暴正在酝酿之中,提案 C503893 已经提交,并声称与先前的提案相同,但一切并非看起来的那样。该合约包含一个名为 emergencyStop()
的函数,该函数会自我销毁提案合约,这是一个看似无害的逃生舱口。
通过巧妙的合约设计,并通过 仔细应用 CREATE 和 CREATE2 指令,恶意提案者设法在与原始 C503893 提案相同的地址部署了不同的合约。这个特洛伊木马投票允许攻击者等待原始提案通过,然后用他们的恶意负载替换它。恶意负载使攻击者 控制了所有锁定的 TORN 代币,使他们能够通过持有多数票来控制 DAO。然后,这些 TORN 代币被移除并出售,净赚约 100 万美元。具有讽刺意味的是,这些资金随后通过 Tornado Cash 的其他未受影响的混合池进行了混合。
虽然 Tornado Cash 开发人员面临法律诉讼,但其他 DAO 选择匿名以避免类似的法律问题。Swerve Finance 是 Curve Finance 的 DeFi 克隆,由于 Curve 的受版权保护的代码而匿名启动,治理委托给由 DeFi 的知名人士运营的多重签名,包括 FTX 的 Sam Bankman-Fried。
多重签名最终将成为压垮骆驼的最后一根稻草——在签署治理操作时,签名者无处可寻,导致协议陷入停顿,因为无法颁布开发。
Swerve 在 2023 年 3 月 再次回到了治理不当的问题。鉴于多重签名失败,控制权移交给了可以对问题进行投票的 SWRV 代币的持有人,并且该项目被开发团队草率地放弃了。一位行动者注意到了这一点,他确定购买足够的 SWRV 来解决投票结果对于漏洞利用是有利可图的。攻击者创建了一个治理投票,允许他们将应计费用和池的流动性引导到他们的地址。
保护协议用户免受此类恶意投票的一种常见方法是使用时间锁。时间锁要求成功的投票在执行之前延迟一段时间,这允许协议用户在不同意已颁布的更改时退出系统。
虽然时间锁在 DAO 中很受欢迎,但它们也有其自身的缺点,即延长了紧急治理响应时间。
时间锁延迟出现问题的一个例子是来自 Compound Finance(一个领先的基于以太坊的借贷市场)的 一次投票。Compound Labs 对已投票的拟议代码更改进行了专业审查,但是由于基本单位从 0
更改为 1e36
,因此需要将以前可接受的包括 >
符号的优化更改为 >=
。由于此代码更改,许多代币供应商发现自己有资格获得他们不应该能够声明的 COMP 奖励。协议投票者只能眼睁睁地看着大约 7000 万美元的 COMP 代币被错误地声明,而用于 Compound 治理的时间锁阻止了任何迅速的反应。更糟糕的是,在治理修复通过其炼狱期之前,一名用户发现 任何人都可以调用一个名为 drip()
的函数,以使具有错误逻辑的合约能够分配更多的 COMP 代币。总共释放了约 1.47 亿美元的 COMP。
很明显,DAO 的组织和一般的治理是一个棘手的过程,存在许多潜在的陷阱。
绕过常见错误的一种方法是建立在其他成功的开源 DAO 的工作之上,允许你利用他们经过实战测试和审计的工作。一种常见的路径是采用 Compound Finance Governor Alpha & Bravo 框架。这些模块旨在通过委托代币投票和使用时间锁提案来管理借贷市场,它们通常与 Compound 市场的分支一起使用,但也可以适用于其他项目。
还建议检查 OpenZeppelin 的库是否满足你的需求,因为它们还提供 与治理相关的插件。基本 Govenor
插件提供了扩展,用于处理不同的投票风格以及时间锁与提案的使用。
无论你选择哪种途径,组建 DAO 都是一项复杂而艰巨的任务,请确保与你的团队合作,如果可能,还可以与该领域的其他 DAO 共享想法。为意外事件做好计划,并观察其他协议面临的问题,确保你的代码在部署之前经过审计,并在你的设计过程中与安全专家合作,以帮助采用最佳实践。祝你好运!
- 原文链接: blog.sigmaprime.io/gover...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!