GCP - KMS Privesc
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
KMS
Informationen über KMS:
Beachten Sie, dass in KMS die Berechtigungen nicht nur von Organisationen, Ordnern und Projekten vererbt werden, sondern auch von Keyrings.
cloudkms.cryptoKeyVersions.useToDecrypt
Sie können diese Berechtigung verwenden, um Informationen mit dem Schlüssel zu entschlüsseln, über den Sie diese Berechtigung haben.
gcloud kms decrypt \
--location=[LOCATION] \
--keyring=[KEYRING_NAME] \
--key=[KEY_NAME] \
--version=[KEY_VERSION] \
--ciphertext-file=[ENCRYPTED_FILE_PATH] \
--plaintext-file=[DECRYPTED_FILE_PATH]
cloudkms.cryptoKeys.setIamPolicy
Ein Angreifer mit dieser Berechtigung könnte sich selbst Berechtigungen geben, um den Schlüssel zur Entschlüsselung von Informationen zu verwenden.
gcloud kms keys add-iam-policy-binding [KEY_NAME] \
--location [LOCATION] \
--keyring [KEYRING_NAME] \
--member [MEMBER] \
--role roles/cloudkms.cryptoKeyDecrypter
cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
Hier ist eine konzeptionelle Aufschlüsselung, wie diese Delegation funktioniert:
- Service Account A hat direkten Zugriff auf die Entschlüsselung mit einem bestimmten Schlüssel in KMS.
- Service Account B wird die Berechtigung
useToDecryptViaDelegation
gewährt. Dies ermöglicht es ihm, KMS zu bitten, Daten im Namen von Service Account A zu entschlüsseln.
Die Nutzung dieser Berechtigung ist implizit in der Art und Weise, wie der KMS-Dienst Berechtigungen überprüft, wenn eine Entschlüsselungsanfrage gestellt wird.
Wenn Sie eine standardmäßige Entschlüsselungsanfrage über die Google Cloud KMS API (in Python oder einer anderen Sprache) stellen, überprüft der Dienst, ob das anfragende Dienstkonto die erforderlichen Berechtigungen hat. Wenn die Anfrage von einem Dienstkonto mit der useToDecryptViaDelegation
Berechtigung gestellt wird, überprüft KMS, ob dieses Konto berechtigt ist, die Entschlüsselung im Namen der Entität, die den Schlüssel besitzt, anzufordern.
Einrichtung für Delegation
- Definieren Sie die benutzerdefinierte Rolle: Erstellen Sie eine YAML-Datei (z. B.
custom_role.yaml
), die die benutzerdefinierte Rolle definiert. Diese Datei sollte die Berechtigungcloudkms.cryptoKeyVersions.useToDecryptViaDelegation
enthalten. Hier ist ein Beispiel, wie diese Datei aussehen könnte:
title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
- Erstellen Sie die benutzerdefinierte Rolle mit der gcloud CLI: Verwenden Sie den folgenden Befehl, um die benutzerdefinierte Rolle in Ihrem Google Cloud-Projekt zu erstellen:
gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml
Ersetzen Sie [YOUR_PROJECT_ID]
durch Ihre Google Cloud-Projekt-ID.
- Gewähren Sie die benutzerdefinierte Rolle einem Dienstkonto: Weisen Sie Ihr benutzerdefiniertes Rolle einem Dienstkonto zu, das diese Berechtigung verwenden wird. Verwenden Sie den folgenden Befehl:
# Give this permission to the service account to impersonate
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[SERVICE_ACCOUNT_B_EMAIL]" \
--role "projects/[PROJECT_ID]/roles/[CUSTOM_ROLE_ID]"
# Give this permission over the project to be able to impersonate any SA
gcloud projects add-iam-policy-binding [YOUR_PROJECT_ID] \
--member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
--role="projects/[YOUR_PROJECT_ID]/roles/kms_decryptor_via_delegation"
Ersetzen Sie [YOUR_PROJECT_ID]
und [SERVICE_ACCOUNT_EMAIL]
durch Ihre Projekt-ID und die E-Mail des Dienstkontos.
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.