MetaMaskは、イーサリアムのステーキングに関連する基盤インフラのセキュリティインシデントが発生したことを明らかにしました。ただし、今回問題になっているのは、日常的に利用されている一般ユーザーのMetaMaskウォレットではありません。裏側でイーサリアムのステーキングサービスを担うバリデータ基盤インフラ(validator infrastructure)が対象です。

MetaMaskは9月30日、同社が「一部の基盤インフラ」に影響する継続中のセキュリティインシデントを対応していることを確認しました。現在、外部の協力パートナーおよびセキュリティ専門家(サイバーセキュリティコンサルタント)とともに調査を進めています。公式発表では、現時点でMetaMaskウォレットが差し迫った脅威にさらされていることは確認されていないと強調しています。一方で、リスク管理の観点からMetaMaskは、影響を受けたイーサリアムのバリデータ(検証者)を対象とする自社の非カストディアル・ステーキングサービスから撤退し始めています。

その後Lidoは、MetaMask Staking(旧Consensys Staking)が、Lidoプロトコルで運用しているバリデーターの退出を開始したことを確認しました。最後の影響を受けたバリデーター群は10月7日までに退出を完了する見込みです。ただし、その後ETHは出金、再度の待ち行列、バリデーターの再有効化などの手続きを経る必要があるため、ステーキングを完全に再開するまでには最長で45日近くかかる可能性があります。

MetaMaskのウォレットは無事なのに、なぜバリデーターはすべて退出させる必要があるの?

重要なのは、ウォレットの秘密鍵とバリデーター署名鍵は別のものだという点です。

MetaMaskウォレットは自己管理型のツールで、ウォレットの秘密鍵はユーザー自身が管理します。一方、MetaMaskのステーキングサービスでは、ノードサーバー、バリデーター署名システム、関連するクラウド環境やデプロイ基盤など、イーサリアムのバリデーターノードを実際に運用する必要があります。

MetaMaskの公式ドキュメントによると、ユーザーが32 ETHを預けてバリデーターを作成すると、日々のノード運用とバリデーション業務は同社のステーキングインフラが担います。そのため、攻撃者が一般のMetaMaskユーザーのウォレット秘密鍵にまったく触れていなかったとしても、バリデーター署名鍵、リモート署名システム、クラウドアカウント、デプロイ環境、その他の本番システムが侵害されていないと確認できない限り、既存のバリデーターを安心して運用し続けることはできません。だからこそ、「MetaMaskウォレットはハッキングされていない」ことと「バリデーターを退出させる必要がある」ことは矛盾しないのです。

本当に警戒すべきなのは、ETHが直接盗まれることではなく、スラッシングを受けること

イーサリアムのバリデーターには、非常に重要な鍵が2種類あります。

  1. 1つ目は出金認証情報(withdrawal credentials)で、ステーキング中のETHを最終的にどのアドレスへ引き出せるかを決めます。

  2. 2つ目はバリデーター署名鍵(validator signing key)で、ブロックのアテステーションやブロック提案など、日常的なバリデーション業務に使われます。

MetaMaskは、同社のノンカストディアル型ステーキングサービスでは、顧客の出金鍵を保有していないと特に強調しています。そのため、たとえバリデーターのインフラが侵害されても、攻撃者がユーザーのステーキング中のETHを直接引き出せるということにはなりません。

しかし、バリデーター署名鍵が漏えいした場合、依然として大きなリスクがあります。たとえば攻撃者が別のマシンで同じバリデーター鍵を使い、正規のノードと同時に互いに矛盾するデータに署名した場合、イーサリアムのスラッシングが発生する可能性があります。スラッシングが発生すると、バリデーターがステーキングしているETHが実際に失われる恐れがあります。署名鍵や関連システムが侵害されていないと完全に確認できない場合、最も慎重な対応は、該当するバリデーターをまず退出させることです。

なぜ新しい鍵に交換するだけではだめなのでしょうか?

今回の件で、最も疑問に思われやすいのもこの点です。

一般的なウェブサイトなら、APIキーやパスワードが漏えいした可能性がある場合、通常はすぐに「古いキーを無効化 → 新しいキーに交換 → 運用を継続」とできます。

しかし、イーサリアムのバリデーターはそれほど単純ではありません。バリデーターを作成した後は、一般的なパスワードのように、バリデーターとしての識別情報を保ったまま署名鍵をいつでも交換することはできません。「古い署名鍵がすでに複製されている可能性」を完全に排除するには、通常、「古いバリデーターを退出させる → ETHが出金可能になるまで待つ → クリーンなインフラを再構築する → 新しいバリデーター鍵を作成する → ETHを再びステーキングする」という方法が最も確実です。

これが、インフラのセキュリティインシデントが、単にサーバーを再起動するだけでは済まず、大規模なバリデーター退出に発展する理由です。

なぜ一部だけではなく、すべて退出させるの?

その理由は、セキュリティインシデントが発生した直後に最も確認が難しいのは、通常「問題が起きたかどうか」ではなく、攻撃者がどのシステムに触れたのかという点だからです。

MetaMaskは現時点で根本原因の全容を公表しておらず、バリデーター署名鍵が盗まれたとも公表していません。しかし、同じバリデーター群が一部のクラウドアカウント、デプロイ手順、リモート署名サービス、鍵管理システムを共有していた場合、調査が完了するまでは、どの鍵が「確実に安全」で、どの鍵が影響を受けた可能性があるのかを正確に判断するのは困難です。

そのため、プロのステーキングサービス事業者にとって最も慎重な対応は、影響を受けたインフラの範囲に含まれるものをいったん退出させ、その後に再構築することです。なお、MetaMaskの公式発表で使われている表現は「影響を受けたバリデーター」であり、世界中のMetaMaskのステーキング用バリデーターすべてを退出させたとは明言していません。

10月7日に退出が完了するのに、なぜ45日もかかるの?

「バリデーターの退出」と「ステーキング報酬を再び得始めること」の間には、まだ多くの手順があるからです。

全体の流れはおおむね次のとおりです。

  • バリデーターが退出を申請

  • → 退出待ちの列に並ぶ

  • → 正式に退出

  • → ETHが出金可能になる

  • → 資金がステーキングプールに戻る

  • → 新しいバリデーターの作成待ち列に並ぶ

  • → 新しいバリデーターが有効化される

  • → ステーキング報酬の獲得を再開

Lidoによると、最後の影響を受けたバリデーター群は10月7日までに退出を完了する見込みです。しかし、ETHが再びステーキングに入るには、現在かなり混雑しているイーサリアムのバリデーター参加待ち行列を通過する必要があるため、全プロセスには最長で45日近くかかる可能性があります。

10月1日時点で、beaconcha.inによると、現在のイーサリアムの状況はおよそ次のとおりです。

  • 157.8万ETHがステーキングへの参加を待っており、待ち時間は約27.4日と推定されています。

  • 57.6万ETHが退出を待っており、約10日かかると推定されています。

バリデーターが退出待ちの列に並んでからETHを正式に引き出せるようになるまで、全体で約11日かかると推定されています。別のリアルタイム統計によると、現在、イーサリアムでは約4,370万ETHがステーキングされており、総供給量の約35.8%を占めています。ステーキングの年率換算報酬率は約2.64%です。

影響を受けたバリデーターは、退出して再構築されるまでの間、確かに通常どおりのステーキング報酬を十分に生み出せない期間が発生します。そのため、Lido全体でもある程度の報酬損失が生じる可能性があります。

バリデーターが正式に退出する前に運用を停止した場合、その間に少額のオフラインペナルティ(downtime penalty)が発生する可能性もあります。ただし、これはすべてのMetaMaskユーザーのETHが45日間報酬を生まなくなるという意味でも、すべてのstETH保有者が報酬を受け取れなくなるという意味でもありません。

Lidoは共同ステーキングプールであり、資金は複数の異なるノード運営者に分散されています。MetaMask Stakingはそのうちの1つのノード運営者にすぎないため、今回の退出で主に影響を受けるのはその運営者が担当するバリデーターであり、Lidoシステム全体ではありません。

Lidoは、stETH保有者が追加の操作を行う必要はないとしています。現在、イーサリアム上におけるLidoのTVL(預かり資産総額)は、依然として約265億ドルです。

Lidoには単一の運営者の退出による影響を抑えるバッファー機能がある

Lidoによると、プロトコル自体は複数のノード運営者によって分散運用されているため、単一の運営者が一部のバリデーターを退出させても、ステーキングシステム全体が直ちに停止するわけではありません。Lidoは今回のバリデーター退出がシステム全体に及ぼす影響を抑えるため、6,750 stETHを超える一時的な準備金も用意しています。

これが、リキッドステーキングと個人でバリデーターを1台運用する場合の最大の違いです。個人が32 ETHのバリデーターを1台だけ運用している場合、退出すると、再び参加するまでの間、その32 ETHは基本的に通常のバリデーター報酬を生みません。一方、Lidoは大量のETHを複数の異なる運営者に割り当てているため、ある運営者が一時的に撤退しても、その影響はステーキングプール全体で吸収されます。

10月1日時点でETHの価格は約2,685ドルで、今回の件による市場の目立った動揺は見られません。また、今回の件が原因でstETHに顕著な価格乖離が生じた兆候もありません。

ただし、MetaMaskがインシデントの根本原因をまだ公表していないため、実際のリスクの程度は現時点では完全には分かっていません。

 

「MetaMaskでインフラのセキュリティインシデント発生!Lidoのバリデーターを緊急退出、ETHの再ステーキングには最長45日かかる恐れ」という記事は、最初に(BlockTempo)で公開されました。