仅供教育参考,不构成投资建议;投资可能产生损失。
直接答案
治理攻击是指攻击者取得足够的投票、提案、取消或执行权,使协议通过自身授权的治理路径实施有害操作。相关调用可能通过智能合约的每一项检查。真正的失败在于,治理系统让控制权的取得成本、速度或问责程度与其支配的价值不相匹配。
投票权可能来自自有代币、受委托票数、借入代币、投票贿赂、被盗密钥,或治理合约与时间锁中的特权角色。历史投票检查点可以阻止同一余额在转账后重复投票,也能抵御快照之后才发生的借票行为;但它无法阻止快照前取得的票数、委托权集中、薄弱的法定人数规则或执行者失陷。
并非每项不受欢迎的提案都是攻击,治理本来就是用来改变规则的。安全判断应关注:某个参与者是否取得了不成比例或临时性的控制权,是否隐瞒或歪曲了可执行效果,或是否越过公开声明的权限边界。审查时要看实际调用、取得决定性权力的最低成本路径、可用的响应时间,以及执行后能够触及的最大价值或控制范围。
运作方式
- 从投票资产出发,经委托与检查点追踪至治理合约、时间锁、代理管理员、资金库、紧急角色和最终目标合约。治理界面并不等于权限图。
- 固定链、合约地址、实现版本、时钟模式、快照、提案门槛、法定人数计算、计票规则、投票延迟、投票期、排队延迟、到期条件、取消权限和执行角色。
- 使用
getPastVotes等历史读取,在精确的快照时点重建投票权。把受同一主体控制或协调的地址归组,并区分代币余额与获委托的投票权重。 - 解码每一项提案操作:
targets、values、calldatas和descriptionHash。解析代理与函数选择器,检查批量调用,并把可执行载荷与人类可读的说明逐项对照。 - 在分叉环境中复现提案创建、投票、排队和执行。对比执行前后的余额、所有权、角色、授权额度、实现合约、预言机设置、抵押参数以及任何新开放的可调用函数。
- 估算所有控制路径中的最低成本,包括现货买入、借贷市场、闪电流动性、场外借币、委托、投票激励、衍生品对冲、密钥失陷和特权角色被夺取。计入手续费、滑点、抵押品、平仓损失及资本必须锁定的时间。
- 测试响应路径。确认谁能取消或暂停、需要何种证据、能否在延迟期内完成操作、用户从何处获得权威公告,以及治理如何在不遗留无限紧急权限的前提下恢复。
典型的代币治理流程会依次经历提案、延迟、快照、投票、通过或否决、排队、时间锁和执行,但具体规则取决于实现。采用 ERC-5805 式检查点时,可以查询过去某个时点的委托投票权;时钟既可能使用区块高度,也可能使用时间戳。审查者必须采用已部署合约的时钟与配置,不能把界面显示的时长或代币余额当作权威依据。
时间锁只提供最短公告窗口,不会判断意图,也不会让载荷自动变得安全。其提案者、执行者、取消者和管理员角色本身都是关键权限。若外部管理员能够绕过延迟,时间锁就不是最终权力层;若无人能够取消已排队的恶意操作,仅仅发现问题也无法阻止执行。
计算示例
- 低参与率下的控制。 某协议共有
100 million枚代币,其中40 million枚流通。提案需要2 million张参与票、赞成票多于反对票,并经过6-hour时间锁。某主体买入1.2 million票,又获得1 million张委托票。反对票共0.8 million,因此其2.2 million张赞成票足以通过一项可从资金库转出15 million USDC的调用。该主体只控制总供应量的2.2 / 100 = 2.2%、流通量的2.2 / 40 = 5.5%,却占已投票数的2.2 / 3.0 = 73.3%。决定安全性的是真实参与率、委托、法定人数、载荷权限和延迟,而不是一句51%。 - 快照边界。 如果投票权按当前余额读取且可立即执行,同一笔交易就能借入代币、投票、执行并归还。改为读取投票开始前某个时点不可变的历史投票权,可以阻断这条单笔交易路径。但快照前借入或取得委托的资本仍可使用,因此提案延迟和可观察的票权积累窗口仍是防线的一部分。
- 2022 年四月 17 日的 Beanstalk 事件。 Beanstalk Farms 报告称,攻击者利用闪电贷攻击协议的治理机制,窃取了约
$77 million的非 Beanstalk 用户资产。该事件说明闪电流动性只是融资工具,决定性缺陷在于治理允许临时经济权力触及高价值执行权限。
风险与控制措施
- 实际权力集中。 衡量委托代表和协同行动主体,而不只是持币地址。公开最大委托代表占比、参与度分布,以及对基金会、托管机构、做市商和代表的依赖。
- 提案与法定人数规则薄弱。 将门槛与活跃投票权、可借供应量和资金库敞口比较。日常参数与高影响升级或转账应采用不同要求。
- 快照不安全。 使用不可变历史检查点,并让投票代币与治理合约共享同一时钟。在快照前保留足够延迟,使异常积累或委托能够被观察到。
- 临近截止或突袭式投票。 当法定人数在临近截止时才达到,可考虑设置最短延长期,并在整个提案生命周期监控大额委托变化。
- 载荷不透明。 发布已解码调用和独立模拟结果。拆分彼此无关的高风险操作,避免正常事项掩盖管理员变更或资金库转账。
- 执行延迟不足。 按影响程度设置时间锁,并公开排队操作。有效延迟必须容纳审查、告警、取消或暂停,以及可信的用户退出路径。
- 紧急角色权力过大。 按函数、价值、期限和审查标准限定守护者权限。公开成员、门槛、轮换、证据要求以及罢免和恢复流程。
- 升级路径未审查。 追踪代理管理员、信标、实现初始化器、可变形部署路径,以及取得权限后仍可升级的合约。
- 跨链执行风险。 验证源治理合约与消息、防止重放、限制目标函数、为高影响调用增加本地延迟,并规定桥故障或暂停期间的行为。
- 监控不足。 对提案创建、票权集中、法定人数变化、排队与取消事件、解码后的状态变更、实现升级、角色授予、授权额度和资金库流出设置告警。
- 事件响应失效。 演练恶意提案、签名人失联、前端失陷、跨链桥中断和误暂停。记录由谁决策、沟通、签名、验证并安全恢复运行。
- 风险价值无上限。 限制单次及滚动资金库转账、升级范围、铸币、抵押品变更和授权额度。不能只因投票通过就自动赋予治理无限权限。
审查结果应形成可复现的控制台账:逐项记录特权操作、控制者、所需票数或密钥、最早执行时间、取消路径、监控来源和最大可触及价值。每次升级、代币分配、委托变化、跨链桥迁移,或流动性与参与度发生重大变化后,都要重新计算。
常见误区
- “攻击者必须持有总供应量的 51%。” 多数系统取决于获委托或实际参与的票数、法定人数和通过规则。取得决定性控制的成本可能远低于总供应量的一半。
- “快照能消除治理攻击。” 快照只能阻止特定形式的重复用票或临近投票时借票,无法阻止提前借入、买入、委托集中、贿赂或特权密钥失陷。
- “链上投票通过就证明提案正当。” 它只证明已部署代码的条件得到满足,并不能证明说明与载荷一致,也不能证明结果安全、公平或符合公开承诺。
- “时间锁越长越安全。” 只有在延迟期内能完成监控、分析、取消或暂停、沟通与退出时,延迟才有用。过长的延迟也会妨碍紧急维护。
- “增设安全委员会就能解决治理风险。” 委员会能缩短响应时间,却也增加了一条控制路径。其权限、问责、罢免和失效模式必须纳入同一威胁模型。
相关主题
来源
- Governance - OpenZeppelin Documentation(访问日期:2026-08-20)
- ERC-5805: Voting with delegation - Ethereum Improvement Proposals(访问日期:2026-08-20)
- Compound v2 Governance - Compound Documentation(访问日期:2026-08-20)
- Beanstalk Governance Exploit - Beanstalk Farms(访问日期:2026-08-20)