ブログ | XIMIX

GCEとGKEのOpenSSHの脆弱性と対応方法について

作成者: Sakina Ooka|2024.07.16

はじめに

NI+C 大岡です。
2024/07/02 に、CVE (Common Vulnerabilities and Exposures)にてCVE-2024-6387が発表されました。
今回は、Google Compute Engine(GCE)とGoogle Kubernetes Engine(GKE)のOpenSSHの脆弱性とその対応方法についての記事となります。

影響

今回発表された脆弱性が悪用されると、認証されていないリモートの攻撃者によってターゲットマシンの rootユーザとして任意のコードを実行される危険性があります。

対応が必要となるOpenSSHのバージョン

対応が必要となるOpenSSHのバージョンは「8.5p1 から 9.7p1」となっており、該当する場合は「OpenSSH 9.8/9.8p1」に修正する必要があります。 
また、Linux ディストリビューションを使用し、OpenSSH が公開されているすべての Compute Engine VMについては、脆弱なバージョンを分析することをお勧めされております。

対応方法(GCE)

GCEの場合の対応方法は以下に記載している4つの方法があります。
詳細は以下のリンクをご参照ください。
GoogleCloud公式情報(GCE)

1. Linux ディストリビューションのアップデート
次のいずれかのパッチ適用バージョンに更新ください。

Google の Container-Optimized OS : 
・cos-113-18244-85-49
・cos-109-17800-218-69
・cos-105-17412-370-67
・cos-101-17162-463-55

各ディストリビューションによってバージョンが異なるため各OSの公式ホームページに従ってOpenSSHのバージョンをアップデートしてください。

■RedHatの場合:

https://access.redhat.com/security/cve/cve-2024-6387

■Ubuntuの場合:
https://ubuntu.com/security/CVE-2024-6387

■Debianの場合:
https://security-tracker.debian.org/tracker/CVE-2024-6387


2. ファイアウォールルールを無効化(アップデートが不可能な場合)

デフォルトのネットワークには、default-allow-sshパブリックインターネットからのSSHアクセスを許可するファイアウォールルールがあらかじめ設定されおり、
このアクセスを削除するには以下の操作を実行します。

a.オプションで、信頼できるネットワークからプロジェクト内のGKEノードまたは他のCompute Engine VMへのSSHアクセスを許可するルールを作成します。

b.以下のコマンドを使用して、デフォルトのファイアウォールルールを無効にします。
gcloud compute firewall-rules update default-allow-ssh --disabled --project=$PROJECT
c.インターネットから VM に SSH 接続できなくなったことを確認します。

※ポート22のTCP経由のSSHを許可する可能性のある他のファイアウォールルールを作成している
合は、それらを無効にするか、ソースIPを信頼できるネットワークに制限します。


3. 2の対応ができない場合
OpenSSHをオンのままにしておく必要がある場合、緩和策のスクリプトを実行ください。

#!/bin/bash
set -e

SSHD_CONFIG_FILE=/etc/ssh/sshd_config
# -c: count the matches
# -q: don't print to console
# -i: sshd_config keywords are case insensitive.
if [[ "$(grep -ci '^LoginGraceTime' $SSHD_CONFIG_FILE)" -eq 0 ]]; then
echo "LoginGraceTime 0" >> "$SSHD_CONFIG_FILE"
echo "Set the LoginGraceTime to 0 in $SSHD_CONFIG_FILE"
else
sed -i 's/^LoginGraceTime.*$/LoginGraceTime 0/' /etc/ssh/sshd_config
echo "Changed the LoginGraceTime to 0 in $SSHD_CONFIG_FILE"
fi
# Restart the sshd service to apply the new config.
systemctl restart sshd


4. 1、2、3のすべてが対応ができない場合
SSHサーバーに関連する異常なネットワーク アクティビティを監視します。

対応方法(GKE)

GKEの場合の対応方法については以下に記載している5つの方法があります。
詳細は以下のリンクをご参照ください。
GoogleCloud公式情報(GKE)

1. Linux ディストリビューションのアップデート
GCP-2024-040に記載しているパッチ適用バージョンに更新ください。
ゾーンやリージョンでパッチが利用可能かについては以下のコマンドを実行し確認して下さい。
※LOCATIONは実際のゾーンやリージョンに置き換えます。
gcloud container get-server-config --location=LOCATION

2. ノードにパブリック IP アドレスがあるかどうかを確認する
クラスターがenable-private-nodesを使用して作成された場合、ノードはプライベートになり、インターネットへの露出が排除されることで脆弱性が軽減されます。以下のコマンドを実行して、クラスターでプライベートノードが有効になっているかどうかを確認します。

gcloud container clusters describe $CLUSTER_NAME \
--format="value(privateClusterConfig.enablePrivateNodes)"

戻り値が True の場合、すべてのノードがこのクラスターのプライベートノードとなり、脆弱性は軽減されます。
元々パブリックノードで作成されたすべてのクラスターを検索するには、プロジェクトまたは組織で以下のCloud Asset Inventoryクエリを使用します。

SELECT
resource.data.name AS cluster_name,
resource.parent AS project_name,
resource.data.privateClusterConfig.enablePrivateNodes
FROM
`container_googleapis_com_Cluster`
WHERE
resource.data.privateClusterConfig.enablePrivateNodes is null OR
resource.data.privateClusterConfig.enablePrivateNodes = false

3. ファイアウォールルールを無効化(アップデートが不可能な場合)
デフォルトのネットワークには、default-allow-sshパブリックインターネットからのSSHアクセスを許可するファイアウォールルールがあらかじめ設定されおり、このアクセスを削除するには以下の操作を実行します。

a.オプションで、信頼できるネットワークからプロジェクト内のGKEノードまたは他のCompute Engine VMへのSSHアクセスを許可するルールを作成します。

b.以下のコマンドを使用して、デフォルトのファイアウォールルールを無効にします。
gcloud compute firewall-rules update default-allow-ssh --disabled --project=$PROJECT
c.インターネットから VM に SSH 接続できなくなったことを確認します。

※ポート22のTCP経由のSSHを許可する可能性のある他のファイアウォールルールを作成している
合は、それらを無効にするか、ソースIPを信頼できるネットワークに制限します。

4. パブリックノードプールをプライベートノードプールに変換する
元々パブリッククラスターとして作成されたAutopilot クラスターの場合、nodeSelectorを使用してプライベートノードにワークロードを配置できます。ただし、元々パブリッククラスターとして作成されたクラスター上でシステムワークロードを実行するAutopilotノードは引き続きパブリックノードであるため、3.で説明したファイアウォールの変更を使用して保護する必要があります。

元々パブリックノードで作成されたクラスターを最大限に保護するには、すでに説明したように、最初にファイアウォールを無効化することをお勧めします。ファイアウォールルールを無効化できない場合は、ガイダンスに従ってノードプールを分離することで、GKE Standardクラスタ上のパブリックノードプールをプライベートに変換できます。

5. SSHD 構成を変更する
上記の緩和策をどれも適用できない場合は、SSHD LoginGraceTimeをゼロに設定し、SSH daemonを再起動するDaemonSetも公開しました。このDaemonSetをクラスターに適用すると、攻撃を軽減できます。この構成では、サービス拒否攻撃のリスクが高まり、正規のSSHアクセスで問題が発生する可能性があることに注意してください。このDaemonSetは、パッチの適用後に削除する必要があります。

まとめ

今回発表されたCVE-2024-6387はかなり危険度の高い脆弱性となっており、早めの対応が推奨されています。また、CVE-2024-6387について、Google CloudのSecurity公開情報として、GCP-2024-040が発表されておりますのでご確認ください。

 

Google Cloud、Google Workspace に関するご相談はXIMIXへ!

Google Cloud、Google Workspaceに関する お問い合わせはこちら
XIMIX(サイミクス)は商標登録出願中です