CardanoのLeiosプロトタイプがEndorser Blockアナウンスのタイミング攻撃を修正

Cardanoの開発者は、正直なノード同士が互いに切断され得るLeiosプロトタイプのタイミング不具合を修正した。この問題はプロトタイプのEndorser Blockアナウンス処理に影響しており、現行のCardanoメインネットのプロトコルには一切含まれていなかった。

By SongMarketCap

Cardano News - CardanoのLeiosプロトタイプがEndorser Blockアナウンスのタイミング攻撃を修正

CardanoのLeiosプロトタイプは、開発者がEndorser Blockのアナウンスに関わるタイミング攻撃を特定したことを受けて、ネットワーク面の修正を適用した。特定の条件下では、有効な運用資格を持つステークプールが、綿密にタイミングを合わせたアナウンスを送信し、チェーンの見解がやや遅れている別の正直なピアから正直なノードを切断させることが可能だった。

この修正は8月18日にOuroboros Consensusのleios-prototypeブランチへマージされ、8月25日にIntersectのConsensusチームが取り上げた。その後、Blink LabsがDingoに同様の保護を実装した。

Leiosのタイミング差が正直なピアを切断し得る

Ouroboros Leiosは、基盤となるコンセンサスプロトコルのセキュリティ特性を維持しつつ、トランザクションスループットを高めるために設計されたCardanoの計画中のスケーリングアーキテクチャである。

この設計の一部ではEndorser Blockを用いる。これはCardanoのランキングブロックに加えて追加のトランザクションデータを運ぶ。ノードは完全なブロックデータが到着する前にEndorser Blockをアナウンスでき、情報がネットワーク全体により効率的に伝播するのを助ける。

特定された問題は、それらのアナウンスに付随する運用証明書の発行番号、すなわちOCINに関わるものだった。

二つの正直なノードが一時的に異なるイミュータブルなチェーン先端を持つことがあり得る。より進んだノードは古いOCINをすでに失効済みと見なしている一方で、同じイミュータブルポイントにまだ到達していない上流ピアはそれを引き続き正当なものとして扱える。

従来のプロトタイプのロジックでは、その古いOCINを用いたアナウンスを不正な振る舞いと解釈し、上流ピアを切断してしまう可能性があった。

元のGitHubの課題は、攻撃者であるステークプールが、自身のOCINがイミュータブルになる直前にアナウンスを送ることでそのタイミング差をどのように悪用できるかを説明している。プールは新しいヘッダーをチェーンに載せる際にOCINを増分できるため、その手順を使って正直なノード間の切断を引き起こせた。

この課題は、アナウンスのロジックをメインネットに適したものと見なす前に、この挙動を修正する必要があると述べていた。

新しいLeiosのロジックが切断を防止

マージされた修正は、ノード自身のイミュータブルな先端がすでに失効と見なしているOCINを用いたアナウンスを受け取った際のLeiosノードの反応を変更する。

ピア接続を終了する代わりに、ノードはネットワークプロトコルのレベルでそのメッセージを受け入れる。受信ノードはそのOCINが陳腐化していると既に把握しているため、アナウンスは処理や更なるリレーを行わずに無視される。

この変更により、正直なピアが一時的に遅れていても悪意があると分類されずに済む。

開発者は、漏えいした過去のKES鍵に関わるより限定的な残余ケースも文書化した。失効後であっても、漏えいした鍵を使えば直下流のピアに対して、少数の追加の虚偽のEndorser Blockアナウンスを送信できてしまう可能性がある。

それらのアナウンスは切断を引き起こさず、これ以上は伝播されない。開発の議論では、追加の処理コストは最小限であり、残る挙動は望ましくないものの、現行のプロトタイプにとって阻害要因ではないと説明されている。

この攻撃ベクトルがCardanoメインネットに影響したという一次情報の証拠はない。影響を受けたアナウンスメカニズムはLeiosプロトタイプに属しており、修正は本番のコンセンサスブランチではなく、その専用の開発ブランチにマージされた。

Dingoが同じLeiosの保護を採用

Blink Labsは、独立したCardanoノード実装であるDingoにも、陳腐化したOCINの取り扱いモデルを適用した。

開発者が、署名は正しいものの陳腐化したアナウンスが依然として記録およびリレーされ得ることを特定した後、Dingoの課題は8月26日にオープンされた。Pull request #3563は8月27日にマージされた。

更新後の実装では、陳腐化したアナウンスや発行者不明のアナウンスは、ピア接続を閉じることなく受け入れられるが、記録、処理、リレーはされない。新しいアナウンスは通常の処理を通過し、回帰テストは複数のOCIN状態をカバーしている。

Intersectの8月の開発アップデートでは、Leiosチェーン向けのdb-analyserのサポート拡充も報告された。このツールはLeiosチェーンのデータを再生し、認証済みEndorser Blockトランザクション、そのサイズ、読み取りと適用に要する時間を測定できるようになった。これにより、テストはスループットにとどまらず、台帳処理コストやリソースの挙動にも拡張された。

陳腐化したアナウンスに対する修正は、現在二つの実装にまたがっている。Ouroboros Consensusは8月18日に元のLeiosプロトタイプでの挙動を変更し、Dingoはその9日後に対応する実装を採用した。これにより、Leiosが本番導入に到達する前に、両方のコードベースが同じネットワークのエッジケースを扱う方法で整合した。