GCP Pentesting

HackTricksをサポートする

基本情報

GCP環境のペンテストを開始する前に、その動作について知っておくべき基本的なことがいくつかあります。これにより、何をすべきか、どのようにミスコンフィギュレーションを見つけ、それをどのように悪用するかを理解するのに役立ちます。

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

GCP - Basic Information

学習用ラボ

GCP ペンテスター/レッドチーム メソドロジー

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

レッドチームの観点から、GCP環境を侵害する最初のステップは、いくつかのクレデンシャルを取得することです。以下にその方法のいくつかを示します:

  • github(または類似のもの)でのリーク - OSINT

  • ソーシャルエンジニアリング(ページWorkspace Securityをチェック)

  • パスワードの再利用(パスワードリーク)

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

  • Server Side Request Forgery メタデータエンドポイントへのアクセス

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

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

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

  • 3rdパーティの侵害

  • 内部従業員

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

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

Org Enumeration

組織の列挙

# 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

Principals & IAM Enumeration

十分な権限がある場合、GCPアカウント内の各エンティティの特権を確認することで、自分や他のアイデンティティが何をできるか、そして特権をエスカレートする方法を理解するのに役立ちます。

IAMを列挙するための十分な権限がない場合は、それらをブルートフォースで盗むことで特定することができます。 列挙とブルートフォースの方法については以下を参照してください:

GCP - IAM, Principals & Org Policies Enum

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

Services Enumeration

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

GCP - Services

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

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

GCP - Unauthenticated Enum & Access

Privilege Escalation, Post Exploitation & Persistence

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

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

GCP - Privilege EscalationGCP - Post ExploitationGCP - Persistence

Publicly Exposed Services

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

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

GCP <--> Workspace Pivoting

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

GCP <--> Workspace Pivoting

Automatic Tools

# 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

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

OAuth token configure in 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