GCP Pentesting

Support HackTricks

基本情報

GCP 環境の ペンテスト を開始する前に、どのように機能するかについて知っておくべき 基本的なこと がいくつかあります。これにより、何をすべきか、誤設定を見つける方法、そしてそれをどのように悪用するかを理解するのに役立ちます。

組織 階層、権限、およびその他の基本的な概念については、以下で説明されています:

GCP - Basic Information

学習用ラボ

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

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

レッドチームの観点から、GCP 環境を侵害するための 最初のステップ は、いくつかの 資格情報 を取得することです。以下はその方法のいくつかのアイデアです:

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

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

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

  • GCP ホスティングアプリケーションの脆弱性

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

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

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

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

  • 第三者の 侵害

  • 内部 従業員

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

GCP - Unauthenticated Enum & Access

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

GCP - 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

ユーザーに関する詳細情報を取得するには、APIエンドポイント /userinfo を使用することもできます:

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth $(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/userinfo

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth <access_token>" https://www.googleapis.com/oauth2/v1/userinfo

組織の列挙

# 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

プリンシパルとIAM列挙

十分な権限がある場合、GCPアカウント内の各エンティティの権限を確認することは、あなたや他のアイデンティティが何をできるか、また権限を昇格させる方法を理解するのに役立ちます。

IAMを列挙するための十分な権限がない場合は、強制的に盗むことができます列挙と強制的に取得する方法を確認してください:

GCP - IAM, Principals & Org Policies Enum

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

サービス列挙

GCPには驚くべき数のサービスがあります。次のページでは、基本情報、列挙のチートシート、検出を回避する方法持続性を得る方法、その他のポストエクスプロイトのトリックについての情報を見つけることができます:

GCP - Services

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

さらに、この段階で認証されていないユーザーに公開されているサービスを発見するかもしれません。それらを悪用できるかもしれません:

GCP - Unauthenticated Enum & Access

権限昇格、ポストエクスプロイト&持続性

クラウドの資格情報を取得したり、クラウド内で実行されているサービスを侵害した後の最も一般的な方法は、侵害されたアカウントが持つ誤設定された権限を悪用することです。したがって、最初に行うべきことは、あなたの権限を列挙することです。

さらに、この列挙中に、権限は「組織」の最高レベルで設定できることを忘れないでください。

GCP - Privilege EscalationGCP - Post ExploitationGCP - Persistence

公開されているサービス

GCPサービスを列挙しているときに、いくつかのサービスがインターネットに要素を公開しているのを見つけたかもしれません(VM/コンテナのポート、データベースやキューサービス、スナップショットやバケットなど)。 ペンテスター/レッドチームとして、機密情報や脆弱性を見つけられるかどうかを常に確認すべきです。これにより、AWSアカウントへのさらなるアクセスを得ることができるかもしれません。

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

GCP <--> Workspace ピボット

一つのプラットフォームでプリンシパルを侵害することは、攻撃者が他のプラットフォームを侵害することを可能にするかもしれません。以下を確認してください:

GCP <--> 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: gcloud cliを使用してGCP環境を列挙し、結果をファイルに保存するBashスクリプト。

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

  • BF My GCP Permissions: あなたの権限をブルートフォースするスクリプト。

gcloud config & debug

# 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

Capture gcloud, gsutil... network

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

OAuthトークンをgcloudで設定する

メタデータエンドポイントから抽出されたサービスアカウント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

参考文献

HackTricksをサポートする

Last updated