SSH は Terrapin の脆弱性によって動揺したが、動揺はしなかった

Table of Contents

SSH は Terrapin の脆弱性によって動揺したが、動揺はしなかった

SSH プロトコルの脆弱性は、条件が整えば、適切な位置にいる敵によって悪用され、ユーザーの接続のセキュリティを弱める可能性があります。

中間者攻撃が成功すると、攻撃者はSSHクライアントに脆弱な認証方式の使用を強制し、一部の防御メカニズムを無効化できる可能性があります。この脆弱性の真の現実的な影響は、個々のクライアントとサーバーの設定、プロトコルの実装、その他の変数に依存するため、現時点では特定することが困難です。SSHは主に、コマンドラインインターフェースを介してリモートシステムに接続し、それらを使用または管理するために使用されます。

「テラピン攻撃」と呼ばれるこの手法は、ドイツのルール大学ボーフム校のコンピュータ科学者であるファビアン・バウマー氏、マーカス・ブリンクマン氏、イェルク・シュヴェンク氏が今週公開した技術記事で説明されています。10月にこの脆弱性を発見した彼らは、SSHクライアントとサーバーの開発者に詳細を非公開で開示し、対策を求めました。現在、パッチと関連情報が公開されており、すべて公開されています。

低レベルの詳細にご興味をお持ちの方は、3人がGitHubで概念実証スクリプトやその他の資料を公開しています。また、SSHクライアントまたはサーバーがTerrapinに対して脆弱かどうかを判断できるオープンソースツールも提供されています。

この調査結果を受けて、SSHソフトウェアのアップデートがユーザーに提供される予定であり、その間に緩和策も利用可能です。これはパニックになる必要はありません。なぜなら、サーバーへの直接攻撃ではなく、脆弱な接続を中間者攻撃(MITM)する必要があるからです。これは主にダウングレード攻撃であり、復号化やコマンドインジェクションの問題ではありません。また、Terrapin攻撃からすぐに身を守る方法もあります。

注意すべき問題は 3 つあります。1 つは、汎用的に悪用可能なプロトコル レベルの SSH 脆弱性である CVE-2023-48795、もう 1 つは、1 日あたり約 60,000 回ダウンロードされる Python SSH クライアント AsyncSSH に特有の CVE-2023-46445 および CVE-2023-46446 です。

AsyncSSHの場合、オープンソースコードにそのクライアント固有の実装エラーが存在することが判明しました。このエラーはTerrapin攻撃に悪用される可能性があり、例えば、被害者が自身のシェルアカウントではなく、攻撃者が管理するシェルアカウントに気付かずにログインしてしまう可能性があります。これは、クライアントやサーバーによってTerrapinに対する脆弱性が異なる可能性があることを示す一例です。AsyncSSHは、バージョン2.14.1でCVE-2023-46445とCVE-2023-46446、バージョン2.14.2で汎用的なCVE-2023-48795に対応するパッチが適用されました。

テラピンアタックの仕組み

Terrapin (CVE-2023-48795) はプレフィックス切り捨て攻撃であり、MITM 攻撃者が拡張ネゴシエーション中に SSHv2 接続のセキュリティを低下させる可能性があります。

これは、2015 年に Cédric Fournet が TLS 1.3 で発見し、ドラフト段階で修正された問題に似ています。

大学の3人が今週述べたように、Terrapin攻撃が成功すると、「安全性の低いクライアント認証アルゴリズムが使用され、OpenSSH 9.5のキーストロークタイミング攻撃に対する特定の対策が無効化される」可能性がある。非常に特殊な状況下では、ユーザーのログイン時にパスワードやその一部といった秘密情報を解読できる可能性もあるが、これは容易ではなく、現実的にはほぼ失敗するだろう。

では、本題に入りましょう。ここでは簡潔に説明します。詳細は論文をご覧ください。SSHクライアントがSSHサーバーに接続する際、安全な暗号化チャネルを確立する前に、ハンドシェイクが行われます。このハンドシェイクでは、互いの情報が平文で交換されます。各クライアントには、受信メッセージ用と送信メッセージ用の2​​つのシーケンスカウンタがあります。メッセージが送受信されるたびに、対応するシーケンスカウンタがインクリメントされます。つまり、これらのカウンタは、各クライアントの送受信メッセージ数を常に記録しているのです。

Terrapinは中間者攻撃として、ハンドシェイク中にセキュア接続前にプレーンテキストの「無視」メッセージを挿入します。これにより、クライアントはサーバーから送信されたメッセージだと認識し、受信メッセージのシーケンスカウンタをインクリメントします。それ以外の場合、メッセージは無視されます。セキュアチャネルが確立されると、中間者攻撃者はサーバーがクライアントに追加の防御策に関するメッセージを送信するのをブロックします。メッセージが暗号化されているかどうかは関係ありません。攻撃者はメッセージの到着を阻止するだけで、クライアントはメッセージを見ることも、それに基づいて行動することもできません。

プレーンテキストの無視メッセージが以前に挿入されているため、クライアントは最終的に予想される数のメッセージを受信し、サーバーは正しい数のメッセージを送信したと認識します。

たとえ初期化中に中間者攻撃者によってメッセージが傍受されブロックされたとしても、送信シーケンスカウンタと受信シーケンスカウンタは双方とも正しく表示されます。これは非常に重要です。なぜなら、これらのカウンタはその後、ハンドシェイクプロセスの整合性を検証するために使用されるからです。カウンタが正しければ、接続は継続されます。そのため、「ignore」メッセージが挿入されます。これにより、拡張メッセージがセキュアチャネルでブロックされても、クライアントとサーバーは何も知ることはありません。

これは、Terrapin 論文の次の図に示されています。シーケンス番号は検証された時点で太字になっています。

ChaCha20-Poly1305 に対する拡張ダウングレード攻撃

接続確立時にサーバーからクライアントへのメッセージを遮断するために、任意の数の「ignore」メッセージを挿入することができます。技術記事に記載されているように、挿入するメッセージとブロックするメッセージの順序を少し工夫することで、より複雑な攻撃を実行できます。これにより、接続の設定を改ざんしたり、セキュリティレベルを下げたり、拡張機能を無効化したり、特定のクライアントまたはサーバーの実装におけるより深刻な脆弱性を悪用したりすることが可能になります。

そうは言っても、セキュア チャネルに使用される暗号化アルゴリズムは、SSH 接続が攻撃されるかどうかに大きく影響します。

ChaCha20-Poly1305は、鍵導出におけるシーケンス番号の使用方法が原因で、Terrapinによって「脆弱であり、完全に悪用可能」であるとされています。このアルゴリズム自体に暗号上の脆弱性はなく、SSHでの使用方法に問題があるだけです。

CBC-Encrypt-then-MAC(CBC-EtM)も脆弱性があり、「確率的に」悪用される可能性があると言われていますが、実装によっては攻撃が失敗する可能性もあります。CTR-Encrypt-then-MACアルゴリズムも脆弱性はありますが、実質的に悪用される可能性は低いです。

大学の3者によると、公開されているSSHサーバーの4分の3以上(77%)が「実際に悪用される可能性のあるモードを少なくとも1つ」サポートしており、そのうちの57%が悪用可能なアルゴリズムを優先選択肢として設定しているという。

パッチを当てるか、軽減するか?

科学者たちは、これは人々が仕事を休んで優先的に対処する必要のある欠陥ではないとすぐに言いました。

「この攻撃には、TCP/IP層で接続トラフィックを傍受・改ざんできる能動的な中間者攻撃者が必要です」と研究者らは述べています。「さらに、接続の暗号化モードとして、ChaCha20-Poly1305、または任意のCBC暗号とEncrypt-then-MACの組み合わせによるネゴシエーションが必要です。」

パッチやアップデートに注意し、可能な場合はインストールすることをお勧めします。たとえば、Linux を使用している場合は、通常のディストリビューションの更新方法でパッチやアップデートが提供されるはずです。

OpenSSH 9.6 が月曜日にリリースされました。このバージョンでは、厳密な鍵交換プロトコルによって Terrapin に対処しており、サーバーとクライアントの両方がこれをサポートしていれば、これらの攻撃を阻止できるはずです。

  • NKabuseバックドアはブロックチェーンの力を利用して複数のアーキテクチャを攻撃する
  • 2023年最後のパッチチューズデーが盛大に幕を開ける
  • メモリセーフ言語が今とても人気だと、Lazarus Group も同意し、DLang マルウェアを放り投げている。
  • 2年経った今でも4つのアプリのうち1つはLog4Shellに対して脆弱

「脆弱性のあるクライアントをパッチ適用済みのサーバーに接続しても、その逆の場合も、依然として脆弱な接続となる」と研究者らは指摘した。

一方、今週はTerrapinに対処するため、Putty 0.8がリリースされました。また、この攻撃手法への対策として、libssh 0.10.6とlibssh 0.9.8もリリースされました。今後、他にも対策が出てくると思われます。

管理者は、更新プログラムをインストールするだけでなく、SSH サーバーの構成で影響を受ける暗号化モードを無効にし、代わりに AES-GCM などの脆弱性のないアルゴリズムを使用することで、攻撃を軽減できます。

研究者らは、サーバーの設定が不適切であったり、クライアントが設定をサポートしていなかったりすると、サーバーへのアクセスが失われるリスクがあると警告している。OpenSSHの古いバージョン(6.2および6.3)も、AES-GCM使用時にバッファオーバーフローの脆弱性を抱えているため、注意が必要だ。

「Terrapinは、単一のライブラリやコンポーネントのアップデートで修正できるような単純なソフトウェアバグではありません」と3人は結論づけた。「プレフィックス切り捨て攻撃から接続を保護するには、クライアントとサーバーをアップデートする必要があります。つまり、すべてのSSHクライアントとサーバーの実装において、この問題への意識を高める必要があるということです。これは相当な努力を要するでしょう。」®

Discover More