エクスプロイト&脆弱性
OpenSSHの脆弱性「CVE-2024-6387」と「CVE-2024-6409」が及ぼす懸念
本稿では、OpenSSHの脆弱性「CVE-2024-6387」と「CVE-2024-6409」について詳しく見ていきます。特に、これらの脆弱性が現実世界でどのような影響を与える可能性があるか、また x64 システムにおいて 「CVE-2024-6387」が悪用される可能性について検討します。
はじめに
「CVE-2024-6387」(通称「regreSSHion」)は、広く利用されている SSH プロトコルベースのセキュアなネットワークツール群 OpenSSHに存在する脆弱性です。2024年7月に発見されたこの脆弱性は、悪用されると、リモートから認証なしでコードを実行できるようなり、攻撃者が影響を受けるシステムでルート権限を取得する可能性があります。共通脆弱性評価システム(CVSS)では、この脆弱性の深刻度を9.8という高いスコアで評価しています。
「OpenSSHの開発元が発表したセキュリティ勧告」によると、CVE-2024-6387を実際に悪用した例が、アドレス空間配置のランダム化(ASLR)を使用した32ビットのLinuxおよびGNU Cライブラリシステムで確認されています。64ビットシステムでも悪用される可能性があるとされていますが、勧告が公開された時点では実証されていません。
2024年7月8日には、関連する別の脆弱性「CVE-2024-6409」が発見されました。これは、シグナルハンドラの競合状態に関する不具合です。この問題は、クライアントが「LoginGraceTime」と呼ぶ一定時間内(通常は120秒、古いバージョンのOpenSSH では600秒)の認証に失敗した場合に発生します。この脆弱性が悪用されると、SSHDサーバの子プロセス内にある関数「cleanup_exit()」においてシグナルハンドラの競合状態が引き起こされる可能性があります。
この脆弱性「regreSSHion」は、SSH認証の過程でシグナル「SIGALRM」が安全に扱われていないことから発生します。「LoginGraceTime」(ログイン猶予時間)が切れると、シグナル「SIGALRM」が発生し、それに対応するハンドラが様々な処理を行います。この処理には「syslog()」のような非同期シグナルに対して安全ではない関数の呼び出しも含まれています。その結果、処理のタイミングによっては競合状態が引き起こされ、メモリの破壊や予期せぬ動作が発生する可能性があります。
SIGALRM
SIGALRMは、Unix系OSで使われるシグナルの一種で、アラームやタイマーの時間切れを知らせます。プロセスがこのシグナルを設定すると、指定した秒数後にシグナルSIGALRMがそのプロセスに送られるよう予約されます。このシグナルは主に時間管理に利用され、例えばネットワーク通信のタイムアウト設定や、定期的なタスクの実行などに使われます。プロセスはSIGALRMに対して独自の対応方法(シグナルハンドラ)が定義され、これによってプロセスの終了、タイマーのリセット、実行時間の制限など、様々な処理を行えます。つまり、SIGALRMは予定されたアラームや時間に関連するイベントを扱う仕組みを提供することで、Unix環境でのプロセス内の時間に敏感な操作をサポートしています。
脆弱性「CVE-2024-6387」を悪用するには、攻撃者は競合状態を正確に発生させるために何千回もの接続を試みる必要があります。この過程では、「LoginGraceTime」(ログイン猶予時間)を繰り返し設定したりリセットしたりして、サーバにシグナルハンドラ「SIGALRM」を呼び出させます。これには精密なタイミングと適切な入力が求められ、最終的にはサーバのメモリ配置を操作してヒープ破壊とコード実行を引き起こします。
シグナルハンドラ
シグナルハンドラは、プログラムに送られる特定のシグナルに応答して呼び出される特殊な関数です。これらのシグナルは、OSやプログラム自体が生成します。ただし、すべての関数をシグナルハンドラ内から安全に呼び出せるわけではありません。再入可能でない関数は、中断されて再び呼び出されると問題が生じる可能性があるため(非同期シグナルセーフでない)、使用には注意が必要です。例えば「syslog()」はシステムログにメッセージを記録する関数ですが、非同期シグナルセーフとはみなされていません。
リサーチャーによると、この脆弱性を成功裏に悪用するには約1万回の試行が必要だとわかりました。攻撃の完了には数日かかる可能性があり、それでも成功する保証はありません。アドレス空間配置のランダム化(ASLR)や実行不可(NX)ビットなどの最新のセキュリティ技術の存在が、攻撃をさらに難しくしていますが、リスクを完全になくすことはできません。
CVE-2024-6409の技術的詳細
脆弱性「CVE-2024-6387」と同じく、この脆弱性もSSHDのハンドラ「SIGALRM」が非同期で呼び出されることで発生します。このハンドラが、シグナル処理中に安全でない(async-signal-safeでない)様々な関数を呼び出してしまう不具合です。
具体的には、「grace_alarm_handler()」内で競合状態が起こり、子プロセス「privsep」から「cleanup_exit()」が呼び出されます。しかし、この「cleanup_exit()」はシグナルハンドラから呼ばれることを想定して作られていないため、安全でない関数を呼び出す可能性があります。クリーンアップ関数の実行中にシグナルによって中断されると、安全でない状態変更が起こり、最悪の場合、リモートでコードが実行される危険性があります。
ただし、子プロセス「privsep」は制限された権限で動作するため、この脆弱性の影響は比較的小さいと考えられ、本稿執筆時点では、この脆弱性「CVE-2024-6409」による悪用事例は見つかっておらず、攻撃活動も確認されていません。
x64システムにおけるCVE-2024-6387の悪用可能性
OpenSSHの開発元が出したセキュリティ勧告によると、事例「CVE-2024-6387」による実際の悪用は、アドレス空間配置のランダム化(ASLR)を使用した32ビットのLinuxとGNU Cライブラリ「(glibc)」システムで確認されています。64ビットシステムでも悪用の可能性があると言及されていますが、x64システムの特徴により、この場合の攻撃は非常に難しくなります。以下、その理由について説明します。
x64システムでは、ASLRが重要な役割を果たしています。ASLRは、GNU Cライブラリ「(glibc)」を含むメモリアドレスをプログラムが実行されるたびにランダムに配置します。この仕組みにより、攻撃者が「(glibc)」のベースアドレスの位置を予測することが極めて困難になり、正確なメモリ位置を狙う攻撃を防ぐことができます。さらに、x64アーキテクチャは非常に広大なアドレス空間を持つため、攻撃者が正しいアドレスを推測する難しさが格段に増します。加えて、スタックカナリーやNXビットなどの他のセキュリティ対策も併用されるため、脆弱性「CVE-2024-6387」をx64システムで悪用することは、現実的にはほぼ不可能と言えます。
理論上は特定の条件下で可能かもしれませんが、ASLRの効果的な実装とx64環境特有の複雑さにより、実際の環境での悪用可能性は大幅に低下します。これは、これらのアーキテクチャが備える保護機能がいかに強力なセキュリティをもたらすかを示しています。
潜在的な影響
トレンドマイクロのデータによると、今のところ脆弱性「CVE-2024-6387」に関して特に目立った変化は見られませんでした。この脆弱性は、実際に悪用されている脆弱性(KEV: Known Exploited Vulnerability)として考えられる可能性がありますが、現時点では大きな動きはありません。
脆弱性「CVE-2024-6387」は確かに重大なセキュリティ上の危険をもたらしますが、実際の影響はいくつかの要因により抑えられています。攻撃を成功させるには高度な技術が必要で、実行にも長い時間がかかるため、大規模な攻撃は現実的ではありません。攻撃を試みるたびにログインタイマーがリセットされるため、攻撃者は正確なタイミングを計り、多大な労力を費やす必要があります。
また、この脆弱性の影響を受ける対象は、特定のバージョンのOpenSSH(4.4p1以前、および8.5p1から9.7p1まで)で、GNU Cライブラリを使用しているLinuxシステム上で動作しているものに限られます。総当たり攻撃や分散型サービス妨害(DDoS)攻撃に対する追加の保護機能を持つシステムでは、攻撃が成功する可能性がさらに低くなります。そのため、特定の標的を狙った攻撃は可能かもしれませんが、大規模な攻撃が行われる可能性は低いと考えられます。これは、実用的な攻撃手法がまだ見つかっていないことと、攻撃を成功させるのに多くの時間がかかることが理由となります。
対策
脆弱性「CVE-2024-6387」によるリスクを減らすため、管理者はOpenSSHを速やかにバージョン9.8以降に更新すべきです。すぐに更新できない場合は、「LoginGraceTime」(ログイン猶予時間)を短くすることで一時的な対策となります。
さらに、企業や組織は一般的な脆弱性の悪用から身を守るために、以下の基本的な対策の実施を検討するとよいでしょう:
パッチ管理
ソフトウェア、OS、アプリケーションを定期的に更新し、最新のパッチを適用することが、企業や組織のシステムを脆弱性の悪用から守る最も基本的な方法です。
ネットワークの分離
重要なネットワーク部分を他の大きなネットワークから切り離すことで、脆弱性が悪用された場合の影響を小さく抑えることができます。
定期的なセキュリティ点検
セキュリティ監査と脆弱性評価を定期的に行うことで、システムの弱点を早期に見つけ、悪用される前に対処できます。
セキュリティ意識向上トレーニング
攻撃者がよく使う手口について従業員に教育することで、脆弱性の悪用につながるかもしれない騙しの手口(ソーシャルエンジニアリング攻撃)の被害を防ぐことができます。
インシデント対応計画
セキュリティインシデントへの対応計画を作り、試し、常に最新に保つことで、企業や組織はセキュリティ侵害や脆弱性の悪用に素早く効果的に対応できます。
また、ネットワークベースのアクセス制御、Trend Vision One™のような侵入防止システム、定期的な脆弱性スキャンを利用することで、さらにセキュリティを強化できます。
トレンドマイクロのソリューションをご利用のお客様は、以下のIPSスマートルールで表面的な攻撃を検出できます:
- 1003593 Detected SSH Server Traffic (ATT&CK T1021.004)
- 1005748 Multiple SSH Connection Detected (ATT&CK T1499.002, T1110)
結論
他の報告によると、脆弱性「CVE-2024-6387」の動作する実証コード(POC)を装った偽の攻撃コードが出回っている可能性がありようです。これらの偽コードには、遠隔サーバからファイルをダウンロードし、セキュリティ研究者のシステムに長期間潜む悪意のあるプログラムが含まれていたとも報じています。その際、リサーチャーが本物のPOCだと思い込んでテストを行うと、自身のシステムの防御機能を無効にしている可能性があるため、攻撃の格好の標的となってしまう危険性があります。
脆弱性「CVE-2024-6387」と「CVE-2024-6409」は確かに重大ですが、攻撃の成功が難しいことや、すでに対策が講じられていることから、現時点ではインターネット全体を脅かす大きな問題にはなっていません。しかし、システム管理者は油断せず、迅速にセキュリティパッチを適用し、推奨される防御策を実施して、自社のシステムを守ることが重要です。
参考記事:
The Potential Impact of the OpenSSH Vulnerabilities CVE-2024–6387 and CVE-2024-6409
By: Jagir Shastri
翻訳:与那城 務(Core Technology Marketing, Trend Micro™ Research)