GCP Pentesting

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

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

基本情報

GCP 環境をペンテストする前に、どのように機能するかを理解し、ミス構成を見つけて悪用する方法を理解するのに役立つ 基本事項 がいくつかあります。

組織の階層、権限などの概念については、以下で説明されています:

pageGCP - Basic Information

学習用ラボ

GCP ペンテスター/レッドチームの方法論

GCP 環境を監査するためには、どのサービスが使用されているか何が公開されているか誰が何にアクセス権を持っているか、内部のGCPサービスと外部サービスがどのように接続されているかを知ることが非常に重要です。

レッドチームの視点から、GCP 環境を侵害する最初のステップは、いくつかの資格情報を取得することです。以下に、それを行うためのいくつかのアイデアがあります:

  • github(または類似の)での情報漏洩 - OSINT

  • ソーシャルエンジニアリング(Workspace Security ページを参照)

  • パスワード再利用(パスワード漏洩)

  • GCP ホストされたアプリケーションの脆弱性

  • サーバーサイドリクエストフォージェリ メタデータエンドポイントへのアクセス

  • ローカルファイル読み取り

  • /home/USERNAME/.config/gcloud/*

  • C:\Users\USERNAME\.config\gcloud\*

  • 3者が侵害

  • 内部従業員

または認証されていないサービスを侵害することで:

pageGCP - Unauthenticated Enum & Access

またはレビューを行っている場合は、これらの役割で資格情報を要求するだけです:

pageGCP - Permissions for a Pentest

資格情報を取得した後は、それらの資格情報が誰に属しているか何にアクセス権を持っているかを知る必要があるため、いくつかの基本的な列挙を実行する必要があります:

基本列挙

SSRF

GCP メタデータを列挙する方法の詳細については、次の hacktricks ページを参照してください:

Whoami

GCP では、自分が誰かを推測するためにいくつかのオプションを試すことができます:

#If you are inside a compromise machine
gcloud auth list
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=$(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/tokeninfo
gcloud auth print-identity-token #Get info from the token

#If you compromised a metadata token or somehow found an OAuth token
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=<token>" https://www.googleapis.com/oauth2/v1/tokeninfo
# Get organizations
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud resource-manager folders list --organization <org_number> # Get folders
gcloud projects list # Get projects

Principal & IAM Enumeration

十分な権限がある場合、GCPアカウント内の各エンティティの特権をチェックすることで、自分や他のアイデンティティが何ができるか、特権をエスカレートする方法を理解できます。

IAMを列挙する権限がない場合、ブルートフォース攻撃を行って特権を特定することができます。 列挙とブルートフォース攻撃の方法は以下で確認できます:

pageGCP - IAM, Principals & Org Policies Enum

今、資格情報についての情報を持っている(もしレッドチームであれば、検出されていないことを願います)。環境で使用されているサービスを特定する時がきました。 以下のセクションでは、いくつかの一般的なサービスを列挙する方法を確認できます。

サービスの列挙

GCPには驚くほど多くのサービスがあり、以下のページでは、いくつかのサービスに関する基本情報、列挙のチートシート、検出を回避する方法、持続性を確保する方法、およびその他のポストエクスプロイテーショントリックが記載されています:

pageGCP - Services

すべての作業を手動で行う必要はないことに注意してください。この投稿の下には、自動ツールに関するセクションがあります。

さらに、この段階では、認証されていないユーザーに公開されているサービスがさらに見つかる可能性があります。これらを悪用できるかもしれません:

pageGCP - Unauthenticated Enum & Access

特権昇格、ポストエクスプロイテーション、持続性

クラウドの資格情報を入手したり、クラウド内で実行されているサービスを侵害したりした場合、侵害されたアカウントが持つ特権を悪用するのが最も一般的な方法です。したがって、まず特権を列挙する必要があります。

また、この列挙中に、権限は最上位の「組織」レベルで設定できることを覚えておいてください。

pageGCP - Privilege EscalationpageGCP - Post ExploitationpageGCP - Persistence

公開されているサービス

GCPサービスを列挙する際に、それらの中にはインターネットに要素を公開しているものがあるかもしれません(VM/コンテナのポート、データベースやキューサービス、スナップショットやバケツなど)。 ペンテスター/レッドチームメンバーとしては、これらがAWSアカウントへのさらなるアクセスを提供する可能性があるため、それらに機密情報/脆弱性がないか常に確認する必要があります。

この書籍では、公開されているGCPサービスを見つける方法や確認方法についての情報が記載されています。公開されたネットワークサービスの脆弱性を見つける方法については、特定のサービスを検索することをお勧めします:

GCP <--> Workspace ピボティング

1つのプラットフォームでの主体の侵害は、攻撃者が他のプラットフォームを侵害することを可能にする場合があります。詳細は以下をご確認ください:

pageGCP <--> Workspace Pivoting

自動ツール

# Install
git clone https://github.com/google/gcp_scanner.git
cd gcp_scanner
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
# Execute with gcloud creds
python3 __main__.py -o /tmp/output/ -g "$HOME/.config/gcloud"
  • gcp_enum: GCP環境を列挙するためのBashスクリプト。gcloud cliを使用して結果をファイルに保存します。

  • GCP-IAM-Privilege-Escalation: 高いIAM特権を列挙し、それを悪用してGCPで特権を昇格させるスクリプト(列挙スクリプトを実行できませんでした)。

gcloud設定とデバッグ

# Login so gcloud can use your credentials
gcloud auth login
gcloud config set project security-devbox
gcloud auth print-access-token

# Login so SDKs can use your user credentials
gcloud auth application-default login
gcloud auth application-default set-quota-project security-devbox
gcloud auth application-default print-access-token

# Update gcloud
gcloud components update

gcloud、gsutil...ネットワークのキャプチャ

gcloud cliで**--log-http** パラメータを使用して、ツールが実行しているリクエスト表示できることを覚えておいてください。ログがトークンの値を伏せるのを避けたい場合は、gcloud config set log_http_redact_token falseを使用してください。

さらに、通信を傍受するには:

gcloud config set proxy/address 127.0.0.1
gcloud config set proxy/port 8080
gcloud config set proxy/type http
gcloud config set auth/disable_ssl_validation True

# If you don't want to completely disable ssl_validation use:
gcloud config set core/custom_ca_certs_file cert.pem

# Back to normal
gcloud config unset proxy/address
gcloud config unset proxy/port
gcloud config unset proxy/type
gcloud config unset auth/disable_ssl_validation
gcloud config unset core/custom_ca_certs_file

gcloudでのOAuthトークンの設定

メタデータエンドポイントから流出したサービスアカウントのOAuthトークンを使用するには、次のようにします:

# Via env vars
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
gcloud projects list

# Via setup
echo "<token>" > /some/path/to/token
gcloud config set auth/access_token_file /some/path/to/token
gcloud projects list
gcloud config unset auth/access_token_file

参考

htARTE (HackTricks AWS Red Team Expert) htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学びましょう!

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

最終更新