ステークプール・セキュリティの基本
最初にまず申し上げたいのは、ADAをカルダノのネットワークに委任すれば、仮にステークプールが侵害されたとしても、ステーカーのADAが失われることはないということだ。では、なぜステークプールのセキュリティは重要なのか?
ステークプールが報酬を得るためにはスロットリーダーに選ばれたスロット(時間帯)にオンラインの状態を保つ必要がある。スロットリーダーに選ばれる確率はプールのステーク量で決まるため、当該スロットの時間にステークプールのサーバーがオフラインの場合、ブロック生成は不可能となり、ステークプールとステーカーは報酬を得るチャンスを失ってしまう。そのため、ステークプールオペレーター(プール運営の担当者)にとって一番重要な任務はサーバーが24時間絶え間なく機能していることを保証することだ。
IOHKのステークプール設定ドキュメンテーションにはステークプールのセキュリティと安定性を保証するための基本コンセプトが幾つか示されている。[1]
(1)ブロック生成サーバーのインバウンド通信をリレーサーバーに限定するようにファイヤーウォールを設定する
(2)リレーサーバーのインバウンド通信をカルダノネットワークとブロック生成サーバーに限定するようにファイヤーウォールを設定する
(3)各サーバーの管理をadminサーバーのIPアドレスに限定するようにファイヤーウォールを設定し、同時に標準のSSHポートも無効化にし、専用のSSH鍵ペアーを起用する
(4)インターネットからステークプールのステーク鍵の情報をすべて削除し、オフラインで保存する
下記はこれらのコンセプトを組み込んだBEAVRステークプールのハイレベルシステム設計である。
ステークプールはどういう攻撃を受ける可能性があるか?その攻撃はステーカーにどういう影響を及ぼすのか?
ステークプールが受ける可能性のある攻撃は基本的に二種類ある。
(1)いずれかのサーバーへのアクセスの獲得(ブロック生成、リレー、admin)
(2)分散型サービス妨害攻撃(DDoS攻撃)
ステークプールサーバーへのアクセスを獲得する方法
設定が脆弱なサーバーの隙を突くことでアクセスを獲得することは可能である。これが成功した場合、アタッカーが取れる行動は以下である。
(1)サーバーにステークプールのステーク鍵がある場合、ステークプールオペレーターのプレッジ(オペレーター自身のステーク)を奪う
(2)サーバーをダウンさせる
ステークプールHAPPYの事件ではアタッカーがサーバーへのアクセスを獲得し、サーバー内に保存されてるステーク鍵を見つけ、オペレータープレッジの100万ADAを盗んだ。[2] それを可能にしたのはDockerというコンテナ仮想化のアプリケーションが抱える脆弱性で、アタッカーはその弱点を利用してサーバーにアクセスできた。サーバーを速やかに立ち上げるためにDockerを使うオペレーターも一定数いるため、自分のステーク鍵をオフラインで保存することは極めて重要なことだ。
このタイプの攻撃はステーカーの獲得し得るブロック報酬を削減させてしまう。サーバーがダウンした場合、ブロック生成のチャンスが失われる可能性がある。サーバーがプレッジを失った場合、トータルステーク量の減少によりスロットリーダーに選ばれる確率も下がることになる。
DDoS
ブロック生成サーバーに複数のリレーサーバーを付け加える主な理由はDDoSに対する冗長性だ。カルダノネットワークでは現在DDoS攻撃が多発しているわけではないが、発生率はゼロではない。同時に複数のサーバーIPにDDoS攻撃を仕掛けた場合コストと複雑さが高くなるので、複数のリレーサーバーを使用することはブロック生成時のサーバーダウンを阻止する手段となる。
このタイプの攻撃はステーカーが潜在的に獲得し得るブロック報酬を減少させることでステーカーに不利益をもたらすことになる。サーバーがダウンした場合、ブロック生成のチャンスが失われる可能性がある。
まとめ
ステークプールが侵害されてもステーカーがそのプールに委任したADAを失うリスクはない。唯一失われるのはサーバーダウンによる報酬を獲得し得るチャンスだ。BEAVRステークプールはステーカーがブロック生成の報酬をしっかりと受け取れるために幾つかの予防策を導入し、サーバーの常時オンラインという目標に力を注いでいる。
引用
[1] Cardano Documentation, IOHK 2020, https://docs.cardano.org/projects/cardano-node/en/latest/stake-pool-operations/node_keys.html
[2] Cardano Forum, junada 2020, https://forum.cardano.org/t/spos-do-not-repeat-my-mistakes-keep-your-core-node-safe/37766
Comentários