MSTR Cat

ブロックチェーン/レベル IX · スピードとスペクタクル/9.2 公正な市場/レッスン 2

管理者キーと不変性

コントラクト盗難の根源と、それを断つ封印された金庫

用意するものコントラクト検査機能を備えたブロックエクスプローラー(例:SolscanやEtherscan)SPLトークンの権限フィールドに関するドキュメントOpenZeppelinプロキシのアップグレードドキュメント監査済みスマートコントラクトのソースコード

問い

  1. ミント権限とは何か、そしてそれを持つ者にどのようなことができるのか?
  2. アップグレード可能なプロキシは、なぜセーフティ機能でありながらバックドアでもあるのか?
  3. 管理者キーを削除することで攻撃は防げるものの修正も不可能になる場合、どのリスクをコミュニティが受け入れるかは誰が決定するのか?

探究

    パート I管理者キー:コントラクト盗難の根源

  1. 多くのラグプルは、保持された権限に起因する。ミント権限を持つ者は、トークンを無制限に発行し、いつでも市場で売却できる。フリーズ権限やブラックリストは、特定のホルダーが残高を移動できないようにする。オーナーが設定できる税率を使えば、売却手数料を100%まで引き上げ、流動性をその場に閉じ込めることができる。これらはいずれも誰かが握るキーであり、どれも本来役立つはずの人々そのものに向けて悪用されうる。
  2. アップグレード可能なプロキシは、ストレージとロジックを分離する。ステートはあるアドレスに置かれ、コードは別のアドレスから実行されるが、後者は管理者がいつでも差し替えられる。これによりバグが見つかった際にパッチを当てられるが、同時に、トークンのルールがすべてのホルダーに対して遡って変更されうることも意味する。DeFiのエクスプロイトでは、デプロイ後に資金の流れを変えたりプロトコルの動作を変更したりするために、プロキシのアップグレードが悪用されてきた。Squid Gameトークン(2021年11月)は、保持された支配権がどこに行き着くかを示している。そのコントラクトは誰でも購入できる一方で一般のホルダーの売却を阻み、作成者が利益を現金化すると、価格は数分のうちにほぼゼロまで下落した。
  3. このトレードオフは構造的なものである。ミントキーを取り除けば誰も追加のトークンを発行できず、プール流動性からの引き出し経路を取り除けば誰も準備金を引き抜けない。その代償として、開発者も監査人もコミュニティメンバーも、バグの修正、緊急事態への対応、状況の変化に応じたパラメータの調整ができなくなる。パーミッションレスな市場では、あらゆる管理者権限が攻撃対象領域であると同時にメンテナンスの道具でもある。どちらに働くかは、キーの保持者が誠実に行動し、キーを安全に保管しているかどうかにかかっている。
  4. ウォレット層の防御は、コントラクトレベルの設計の代わりにはならない。ユーザーはトークンの承認を取り消し、見知らぬトランザクションへの署名を避け、やり取りする前にコントラクトアドレスを確認できるが、こうした習慣は、実際に行使されているミント権限や、取引の途中でルールを変えるプロキシのアップグレードに対しては何の役にも立たない。SPLトークンでは、ミント権限は作成時に必ず設定され、Noneに設定されるまで残る。フリーズ権限は任意で、省略した場合は後から追加することはできない。いずれにせよ、有効な権限はユーザーがどれだけ注意していても機能する。
  5. OpenZeppelinのプロキシに関するドキュメントは、その構造を明確に示している。実装コントラクトがロジックを持ち、プロキシがステートを保持して、あらゆる呼び出しをdelegatecallで実装コントラクトに転送する。アップグレードとは、プロキシの参照先を新しい実装アドレスに切り替えることである。チームはこの方法で修正をリリースするが、これはアップグレード権限の保持者なら誰でも、1回のトランザクションでルール全体を置き換えられることも意味する。パッチと窃盗の違いは純粋に行為の問題であり、技術的なものではない。
  6. トークンのコントラクトを調べれば、どのキーが有効かがわかる。EVMチェーンでは、コントラクトにオーナーロールがあるか、アップグレード可能なプロキシの背後にあるかを確認する。Solanaでは、ミント権限とフリーズ権限、そしてパーマネントデリゲート、トランスファーフック、トランスファーフィーといったToken-2022の拡張機能を確認する。存在しない、または取り消された権限は、それに対応する攻撃クラスを消し去る。残るリスクは人へと移る。フィッシング、なりすまし、ソーシャルな操作は、完全にコードの外で行われる。
  7. パート II不変性と管理者キーの不在

  8. 多くのスマートコントラクトはローンチ後に変更できる。Solanaでは、プログラムは「アップグレード権限(upgrade authority)」キーによってデフォルトでアップグレード可能になっている。一方、EthereumなどのEVMチェーンでは、差し替え可能な実装コントラクトへ実行を転送するプロキシパターンを用いて構築しない限り、コントラクトは不変である。この設計によってバグ修正や機能追加が可能になるが、同時に、ユーザーが今日操作しているコードが、昨日読んだコードと同じとは限らないことも意味する。
  9. 変更可能性のリスクとは、信頼の集中である。開発者が管理者キーを握っていれば、理論上はいつでもトークン供給量を変更したり、ユーザーアカウントを凍結したり、流動性プールから資金を抜き取ったりできる。これは、ブロックチェーンの分散型の理念と矛盾する「ゴッドモード」を生み出す。2016年6月にThe DAOがハッキングされた際、イーサリアムコミュニティでは盗難を巻き戻すためにハードフォークを行うかどうかが議論され、その結果チェーンはイーサリアムとイーサリアム・クラシックに分裂した。この出来事は、ネットワークレベルの変更でさえ深刻なガバナンス上のリスクを伴うことを浮き彫りにした。
  10. 不変性はこのリスクを完全に排除する。Solanaであればミント権限、フリーズ権限、プログラムのアップグレード権限といったすべての管理権限を取り消し、EVMチェーンであればプロキシやオーナーロールなしでデプロイすることで、コントラクトは封印された金庫となる。デプロイ後は誰もルールを変更できない。稼働中のコードは監査済みのコードと一度照合すればよく、その状態はそのまま保たれる。これにより内部者による悪用の脅威はなくなるが、潜在的なバグもまた永久にそのまま固定される。
  11. 不変性の代償は永続性である。重大なバグが存在してもパッチを当てることはできず、新しいコントラクトへの移行かネットワークのフォークによってしか対処できない。そのため、ローンチ前の検証の重要性が一段と高まる。チームはデプロイ前に、形式検証、大規模なファズテスト、複数の当事者による監査に多大な投資を行わなければならない。負担はローンチ後の保守から、ローンチ前の厳密さへと移る。見落とされたたった一つのエッジケースが、システムの恒久的な仕様となってしまう。
  12. ビットコインは「信頼できる中立性」の基準となっている。そのルールは、単一の主体によってではなく、何千もの独立したノード間の広範な合意を通じてのみ変更される。ブロック報酬やトランザクションの有効性を変更できる管理者キーは存在しない。この硬直性こそが、多くの人がビットコインを信頼できる中立性を備えたものと見なす大きな理由である。どの単一の当事者も、そのルールを書き換えることはできないのだ。
  13. トークン設計者にとって、不変性を選ぶことは透明性へのコミットメントを示すことになる。ユーザーは、デプロイされたコードが変更され得ないことを検証できる。ただし、この選択には、ミスが取り返しのつかないものになることを受け入れる必要がある。トレードオフは明確だ。ユーザーが検証できる予測可能性を得るか、単一障害点と悪用の可能性を持ち込むことと引き換えに柔軟性を保持するか、である。

重要な事実

  • ミント権限を持つ者は新しいトークンを作成できる。権限が保持されたままであれば、既存のすべてのホルダーの持ち分を希薄化させるために使われうる。
  • Squid Gameトークン(2021年)は誰でも購入できたが、一般のホルダーの売却は阻まれていた。
  • アップグレード可能なプロキシはステートをロジックとは別に保存するため、管理者キーによるパッチの適用と遡及的なルール変更の両方が可能になる。
  • オーナーが管理する売却税を100%に設定すると、ハニーポットとして機能する。ホルダーは手数料を発生させずに売り抜けることができない。
  • デプロイ時にミント、フリーズ、アップグレードの権限を放棄すると、それらの攻撃クラスはなくなるが、将来のメンテナンス能力もすべて失われる。
  • SPLのミント権限はNoneに設定されるまで有効なままである。フリーズ権限は、作成時に設定された場合、取り消されるまで有効である。
  • Solanaでは、プログラムはアップグレード権限が取り消されると不変になる。トークンのミント権限とフリーズ権限は、それとは別に取り消すことができる。
  • プロキシパターンなしでデプロイされたEVMコントラクトは、デプロイ後にアップグレードすることはできない。
  • 2016年6月のThe DAOハッキングはハードフォークにつながり、イーサリアムは2つのチェーンに分裂した。
  • ビットコインのルールは、管理者キーではなく、分散したノード間の広範な合意によってのみ変更される。
  • 不変性は内部者による悪用のリスクをなくすが、ローンチ後のバグ修正を不可能にする。
  • 不変コントラクトは永続的であるため、形式検証と徹底的なテストが不可欠である。

演習 九・六・三・一

9集めるトークンコントラクトまたはプロトコルのデプロイを9つ挙げてください。それぞれについて、ミント権限、フリーズ権限、アップグレードプロキシがアドレスに割り当てられているか、放棄されているかを記してください。
6まとめる9つを、それぞれが保持している管理者権限によって6つのグループに分けてください。
3絞り込む6つのグループを、保持された権限が社会的・法的な救済手段なしにホルダーに対して悪用されうるかどうかに基づき、3つのカテゴリーに絞り込んでください。
1結晶化するメンテナンス用の権限と攻撃対象領域を技術的に区別するものがあるとすれば何かについて、1文で書いてください。

事実確認

日付、数字、主張は、下記に記載された公表資料と照合して確認しました。

インタラクティブ版で開く →

EN PT ES ZH KO RU DE FR MS