本文へ移動

ガバナンス攻撃

ガバナンス攻撃は、十分な投票権または実行権限を取得し、正規のガバナンス経路から有害なプロトコル変更を成立させます。

更新日

教育目的の参考情報であり、投資助言ではありません。投資により損失が生じる可能性があります。

端的な答え

ガバナンス攻撃とは、十分な投票権、提案権、取消権または実行権限を取得し、プロトコルの正規のガバナンス経路を通じて有害な処理を実行させることです。各呼び出しはスマートコントラクトの検査をすべて満たしている場合があります。問題は、ガバナンスが支配下に置く価値に比べ、支配権を安価、迅速、または説明責任の乏しい形で取得できる設計にあります。

投票権の源泉には、自己保有トークン、委任票、借入トークン、投票買収、侵害された鍵、Governor やタイムロックの特権ロールがあります。過去の投票チェックポイントは、送付後に同じ残高で繰り返し投票する行為や、スナップショット後の借入を防げます。しかし、スナップショット前に取得した票、委任の集中、弱い定足数規則、実行者の侵害は防げません。

不人気な提案がすべて攻撃というわけではありません。ガバナンスは規則を変更するために存在します。判断すべきなのは、ある主体が不釣り合いまたは一時的な支配権を得たか、実行効果を隠したり偽って説明したか、公表済みの権限境界を越えたかです。実際の呼び出し、決定権を得る最安経路、対応可能時間、実行後に到達できる最大の価値と権限を確認します。

仕組み

  1. 投票資産から、委任、チェックポイント、Governor、タイムロック、proxy administrator、treasury、緊急ロール、最終 target contract まで権限を追跡します。ガバナンス画面は権限グラフそのものではありません。
  2. chain、contract address、implementation version、clock mode、snapshot、proposal threshold、quorum calculation、vote-counting rule、voting delay、voting period、queue delay、expiry、cancellation right、execution role を固定します。
  3. getPastVotes などの過去読み取りを使い、正確な snapshot 時点の投票権を再構成します。同一主体が支配・協調する address をまとめ、token balance と委任された voting weight を分けます。
  4. 各提案処理の targetsvaluescalldatasdescriptionHash を decode します。proxy と selector を解決し、batch call を調べ、実行可能な payload と人間向け説明を照合します。
  5. fork 上で proposal creation、voting、queue、execution を再現します。実行前後の balance、ownership、role、allowance、implementation、oracle setting、collateral parameter、新たに到達可能になった function の差分を取ります。
  6. spot purchase、lending market、flash liquidity、OTC loan、delegation、vote incentive、derivatives hedge、key compromise、privileged-role capture を通じた最安の支配経路を見積もります。fee、slippage、collateral、unwind loss、資本を拘束する時間も含めます。
  7. 対応経路をテストします。取消や一時停止を誰が行えるか、必要な証拠、delay 内に間に合うか、利用者が公式通知を得る場所、無制限の緊急鍵を残さずにガバナンスを再開する方法を確認します。

一般的な token governor は、proposal、delay、snapshot、voting、succeeded または defeated、queue、timelock、execution の状態を進みますが、正確な規則は実装ごとに異なります。ERC-5805 型チェックポイントでは、過去の時点における委任済み投票権を照会でき、clock は block number または timestamp を利用できます。画面上の期間や token balance を正しいと仮定せず、実際にデプロイされた clock と設定を使わなければなりません。

タイムロックは最短の告知期間を設けるだけで、意図を判断せず、payload を安全にするものでもありません。proposer、executor、canceller、administrator の各ロール自体が重要な権限です。外部 administrator が delay を迂回できるならタイムロックは最終権限ではなく、queue 済みの悪意ある処理を誰も取り消せないなら、検知だけでは実行を止められません。

計算例

  • 低投票率での乗っ取り。 総数 100 million、流通 40 million の token を持つ protocol を考えます。提案には 2 million の参加票、反対票を上回る賛成票、6-hour の timelock が必要です。ある主体が 1.2 million 票を買い、1 million の委任票を得ます。反対票は 0.8 million なので、その主体の 2.2 million の賛成票により treasury から 15 million USDC を送れる call が可決されます。支配しているのは total supply の 2.2 / 100 = 2.2%、circulating supply の 2.2 / 40 = 5.5% にすぎませんが、投票済み票の 2.2 / 3.0 = 73.3% を占めます。安全性を決めるのは turnout、delegation、quorum、payload authority、delay であり、51% という標語ではありません。
  • スナップショット境界。 現在残高から投票権を読み、直ちに実行できるなら、単一 transaction で token を借り、投票し、実行して返済できます。投票前の時点における変更不能な過去の投票権を読むことで、この同一 transaction 経路を防げます。それでも snapshot 前に借りた資本や委任票は使えるため、proposal delay と観測可能な票の取得期間も防御の一部です。
  • 2022 年四月 17 日の Beanstalk。 Beanstalk Farms は、攻撃者が flash loan で protocol の governance mechanism を悪用し、Beanstalk 以外の利用者資産を約 $77 million 盗んだと報告しました。この事例では flash liquidity は資金調達手段であり、一時的な経済力を価値ある実行権限まで到達させたガバナンスが決定的な弱点でした。

リスクと対策

  • 実効支配力の集中。 保有 address だけでなく delegate と協調主体を測ります。上位 delegate の比率、参加分布、foundation、custodian、market maker、delegate への依存を公開します。
  • 弱い提案・定足数規則。 threshold を active voting power、borrowable supply、treasury exposure と比較します。通常の parameter と大きな影響を持つ upgrade や transfer には別の要件を使います。
  • 安全でないスナップショット。 変更不能な過去の checkpoint と、voting token と governor が共有する clock を使います。異常な蓄積や委任を観測できるよう、snapshot 前に十分な delay を設けます。
  • 締切間際または不意の投票。 締切近くで quorum に達した場合の最低延長期間を検討し、proposal lifecycle 全体で大口 delegation の変化を監視します。
  • 不透明なペイロード。 decode 済み call と独立した simulation を公開します。無関係な高リスク処理を分離し、正常な項目で administrator 変更や treasury transfer を隠せないようにします。
  • 不十分な実行遅延。 影響に応じて timelock を設定し、queue 済み operation を公開します。有効な delay には review、alert、cancel または pause、信頼できる利用者の exit が収まる必要があります。
  • 強すぎる緊急ロール。 guardian を function、value、duration、review standard で制限します。member、threshold、rotation、evidence requirement、解任・再開手順を公開します。
  • 未確認のアップグレード経路。 proxy administrator、beacon、implementation initializer、metamorphic deployment path、権限取得後に upgrade 可能な contract を追跡します。
  • クロスチェーン実行リスク。 source governor と message を認証し、replay を防ぎ、target function を制限し、影響の大きい call に local delay を加え、bridge failure または suspension 時の挙動を定義します。
  • 監視不足。 proposal creation、vote concentration、quorum change、queue・cancellation event、decode 済み state change、implementation upgrade、role grant、allowance、treasury outflow を警告対象にします。
  • 機能しないインシデント対応。 悪意ある proposal、signer loss、front-end compromise、bridge outage、false-positive pause を演習します。誰が判断、連絡、署名、検証、安全な復旧を行うか記録します。
  • 無制限のリスク価値。 各回および一定期間の treasury transfer、upgrade scope、mint、collateral change、approval を制限します。投票が通っただけでガバナンスに無制限の権限を自動付与すべきではありません。

レビュー結果は再現可能な control ledger にします。各 privileged action、controller、必要な票または鍵、最短実行時刻、cancellation path、monitoring source、到達可能な最大価値を記録します。upgrade、token distribution、delegation change、bridge migration、liquidity や participation の大幅な変化後に再計算します。

よくある誤解

  • 「攻撃者には総供給量の 51% が必要だ。」 多くの仕組みは委任票または参加票、quorum、可決規則で決まります。決定権の取得費用は総供給量の半分を大きく下回ることがあります。
  • 「スナップショットでガバナンス攻撃を排除できる。」 特定の票の再利用や直前の借入は防げますが、事前の借入、購入、委任集中、買収、特権鍵の侵害は防げません。
  • 「オンチェーン投票の可決は正当性を証明する。」 デプロイ済みコードの条件を満たしたことしか証明しません。説明と payload の一致、安全性、公平性、公約の範囲内であることは証明しません。
  • 「タイムロックは長いほど安全だ。」 その期間内に監視、分析、取消または一時停止、連絡、exit を実行できて初めて有効です。長すぎる delay は緊急保守を妨げることもあります。
  • 「セキュリティ評議会を加えればガバナンスリスクは解決する。」 評議会は対応を速めますが、新たな支配経路でもあります。その権限、説明責任、解任、障害形態を同じ脅威モデルに含める必要があります。

関連トピック

出典

ナビゲーション

Wiki を検索...