双刃剑的DAO:保护协议免受其治理的威胁

  • Certora
  • 发布于 2025-02-13 20:27
  • 阅读 18

Lido Finance recently launched a dual governance system to enhance security in liquid staking protocols。

Lido Finance,作为流动质押领域的领先协议,最近引入了一种双重治理系统,旨在保护用户资金并增强 DAO 安全性。然而,任何创新都伴随着潜在风险,不夸张地说,Lido 的治理中的漏洞会在 DeFi 中产生广泛影响。

在这篇博客文章中,我详细介绍了 Lido 双重治理系统的设计审查过程,概述了发现的挑战、漏洞及实施的解决方案,以确保该协议的安全性和稳健性。

双重治理概述

在许多情况下,DAO 治理代币的总市场价值远低于 DAO 管理的资产总价值。这种差异使攻击者能经济上可行地获取大多数治理代币并执行恶意提案以窃取资金。

DAO 通常使用时间锁和紧急多签等保护措施来缓解这一攻击向量。这些机制为用户提供了反应的时间,比如在面对可疑提案时撤回或迁移资金。然而,像 Lido、Rocket Pool 等流动质押协议面临独特挑战:撤回时间可能差异很大,给用户反应的时间窗口有限。

Lido Finance 发明了双重治理,一种二层治理系统,包括原始投票机制和一个额外的否决层。在恶意提案执行之前,存款人可以协作暂时停止所有 DAO 执行。这一暂停允许进一步验证、取消提案,或为用户通过撤回队列退出提供足够的时间。

提议的 Lido 双重治理架构

Lido 双重治理的状态机。来源: Lido Finance

Lido 最初的治理设计包括在执行 DAO 批准的提案之前强制执行 3 天的时间锁。此期间充当缓冲,允许利益相关者审查提案。如果被认为是恶意的,相关的质押者可以将其质押的以太坊(stETH)锁定在一个特殊合约中,称为 Escrow,以表示他们的反对。

一旦总 stETH 的预定义百分比——“第一道支持印章”——锁定在 Escrow 中,系统将进入一个称为 vetoSignaling 的阶段,持续 45 天。在此期间,所有提案执行被暂停,即使时间锁已经到期。所需支持阈值随时间线性增加,代表必须保持在 Escrow 中锁定的 stETH 量,以维持 vetoSignaling 状态。该阈值在 vetoSignaling 开始后 45 天最终达到“第二道支持印章”。

如果在任何时候锁定的支持低于所需支持阈值,系统会暂时进入 vetoSignalingDeactivation 阶段,持续 24 小时。这个阶段为 stETH 持有者提供了恢复足够支持以满足当前阈值的机会。如果成功,系统将恢复到标准的 vetoSignaling 阶段,并且停用期计入 45 天的要求。在 vetoSignalingDeactivation 期间,不能提交新提案,执行保持暂停。

如果在 45 天之后达到了第二个支持印章,系统将转入 RageQuit 状态。在此阶段,治理操作被暂停,锁定的 stETH 被转移到撤回队列。这允许受影响的质押者退出协议并取回他们的资金。只有在处理完所有撤回请求并经过一周的冷却期后,治理系统才能恢复正常操作。

Alternatively, 如果提案不是恶意的,质押者可以从 Escrow 中解锁他们的 stETH,降低资金低于所需阈值。如前所述,这会触发 vetoSignalingDeactivation 阶段,为 stETH 持有者提供一个 24 小时的窗口来恢复支持。如果在此期间仍未满足阈值,系统将完全退出 vetoSignaling,并转入 vetoCooldown 阶段

vetoCooldown 阶段,用户无法通过将资金锁定到 Escrow 中来启动新的 vetoSignaling 阶段。然而,提案执行会照常进行。一旦冷却期结束,系统恢复正常状态。该冷却期防止了迅速返回 vetoSignaling,确保有一个简短的时间间隔,在此期间提案可以不受干扰地进行。

双重治理的潜在风险与挑战

虽然双重治理通过添加否决机制增强了安全性,但它引入了更多复杂性,可能扩展系统的攻击面。主要挑战可以分为三个类别:

  1. 治理活跃性 确保治理保持功能正常至关重要。即使在激烈的否决活动期间,系统也必须继续处理和执行有效提案,而不出现死锁或延迟。
  2. 否决准确性 治理行动不应不公平地缩短或绕过否决期。另一方面,提案者也不应能够操纵系统以延长否决的持续时间。
  3. 公平性 每个用户必须保证完全撤回其资金的能力。此外,系统必须防止用户访问属于他人的资金。

已预防的漏洞

在审查 Lido 的双重治理设计过程中,我与他们的团队紧密合作,通过多次迭代识别和缓解潜在漏洞。这涉及到集思广益可能的利用以及确保协议逻辑中处理边缘情况。为了加强我们的分析,我们利用了一种称为 TLA+ 的形式验证工具,它使我们能够严格验证管理双重治理的状态机。

以下是设计审查过程中预防的两个有趣漏洞。

漏洞 1:通过永久的否决信号停用进行恶意攻击

我发现了否决信号机制中的一个漏洞,该漏洞可永久停用否决信号。这一问题让攻击者能够以极小的成本利用 Escrow 系统,严重阻碍治理过程。

恶意行为者可以通过闪电贷暂时锁定资金在 Escrow 中,触发 vetoSignaling 阶段。一旦触发,他们可以在同一个区块解锁资金,偿还闪电贷,导致 Escrow 的余额低于所需的支持阈值。这将迫使系统进入 vetoSignalingDeactivation 状态,在此期间不能提交提案,执行暂停 24 小时。攻击者可以在 45 天的 vetoSignaling 期间,每 24 小时重复这一过程,有效地阻止新提案在正常程序下提交。这种攻击对攻击者几乎是免费的,仅产生Gas费。

通过采取与攻击者相同的步骤可以反制这种攻击:进行闪电贷、锁定足够的资金到 Escrow 中以达到所需支持阈值,并将系统恢复到 vetoSignaling 状态。这暂时恢复了提交提案的能力。提案可以在解锁的资金从 Escrow 中撤回和闪电贷被偿还之前提交,并且都发生在同一个区块中。然而,这一变通方法有一个重大缺陷——重置了 24 小时的 vetoSignalingDeactivation 期,进一步延长了正常治理过程的干扰。

解决方案

该系统 现在 强制在 Escrow 中存入资金的 最低锁定时间。这一变化防止了攻击者利用闪电贷操纵系统,因为资金必须在被提取之前锁定几个区块。这一修改确保了此类低成本、重复性的攻击不会中断治理过程。

漏洞 2:拒绝服务的 RageQuit 循环

攻击者可以在 RageQuit 结束的确切时刻重新激活否决,通过否决提案并完成 RageQuit 状态。然而,系统有一个备份的拆解委员会,经过一年的持续 RageQuit,即使在 RageQuit 状态下也可以执行提案。

这一攻击向量可能导致绕过这一拆解委员会,只需每年不立即否决,从而让系统进入正常状态,然后在同一个区块中再次触发 vetoSignaling。这一循环有效阻止了提案的执行(以及拆解委员会),导致 DAO 服务拒绝。这个漏洞允许攻击者无限期 stalled DAO。

修复方案

之前,系统只有在否决尝试失败后才会进入 vetoCooldown 阶段。在我们报告之后,Lido 解决了这一漏洞,通过延长 vetoCooldown 阶段,使之在成功否决(没有其他否决的情况下)之后也适用。

这一改进确保了系统不能在 vetoSignaling RageQuit 循环中立即重新进入(以绕过拆解委员会)。从而维护治理活跃性,防止滥用否决机制。此外,Lido 团队增加了从 Escrow 中提取的额外延迟,以惩罚重复的 vetoSignaling,而不防止它。

确保你协议的设计安全

在系统中添加新层或修改现有组件增加了复杂性和潜在攻击面。每一次变更都需要进行新的威胁建模与重新评估,以确保安全性。

对像双重治理这样的创新系统进行设计审查在编码之前至关重要。早期识别和缓解漏洞要比在部署后解决它们更加容易和低成本。主动保护 DeFi 系统增强用户信任和保护资产,促进更有韧性的生态系统。

联系 Certora 在编写智能合约和其他系统部分之前审查你的项目设计,以增加安全性并缩短市场时间。我们为所有类型的区块链和协议提供服务。

  • 原文链接: certora.com/blog/the-dou...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Certora
Certora
Securing DeFi through smart contract audits, formal verification, and protocol design reviews.