From 7f9d06c046fedfc8e826614eb9af56fcabe885b8 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 4 Mar 2026 11:26:22 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/gcp-security/gcp-services/gcp-kms- --- .../gcp-kms-post-exploitation.md | 36 +++++++---- .../gcp-security/gcp-services/gcp-kms-enum.md | 63 +++++++++++-------- 2 files changed, 63 insertions(+), 36 deletions(-) diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md index 85cd5dfe4..62685dbba 100644 --- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md @@ -12,11 +12,11 @@ Trouvez des informations de base sur KMS dans : ### `cloudkms.cryptoKeyVersions.destroy` -Un attacker disposant de cette permission pourrait détruire une version KMS. Pour ce faire, vous devez d'abord désactiver la clé, puis la détruire : +Un attacker disposant de cette permission pourrait détruire une version KMS. Pour ce faire, vous devez d'abord désactiver la clé puis la détruire :
-Désactiver et détruire la version de la clé (Python) +Désactiver et détruire la version de clé (Python) ```python # pip install google-cloud-kms @@ -65,20 +65,34 @@ destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version) ### KMS Ransomware -Dans AWS, il est possible d'entièrement **steal a KMS key** en modifiant la KMS resource policy et en autorisant uniquement le compte de l'attaquant à utiliser la clé. Comme ces resource policies n'existent pas dans GCP, cela n'est pas possible. +Dans AWS il est possible de complètement **steal a KMS key** en modifiant la KMS resource policy et en n'autorisant que le compte de l'attaquant à utiliser la clé. Comme ces resource policies n'existent pas dans GCP, cela n'est pas possible. Cependant, il existe une autre façon d'exécuter un KMS Ransomware global, qui impliquerait les étapes suivantes : -- Créer une nouvelle **version de la clé avec un key material** importé par l'attaquant +- Créer une nouvelle **version of the key with a key material** importée par l'attaquant ```bash gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY] ``` -- Définir comme **version par défaut** (pour les données futures qui seront chiffrées) -- **Rechiffrer les anciennes données** chiffrées avec la version précédente en utilisant la nouvelle. +- Définir cela comme **default version** (pour les futures données chiffrées) +- **Ré-chiffrer les anciennes données** qui ont été chiffrées avec la version précédente en utilisant la nouvelle. - **Supprimer la clé KMS** -- Désormais, seul l'attaquant, qui possède le matériel de clé d'origine, pourrait être capable de déchiffrer les données chiffrées +- Désormais, seul l'attaquant, qui possède le matériel clé d'origine, pourra déchiffrer les données chiffrées -#### Voici les étapes pour importer une nouvelle version et désactiver/supprimer les anciennes données : +#### Cloud Storage + CMEK permission model + +Lorsque des objets dans Cloud Storage sont chiffrés avec CMEK, les appels decrypt/encrypt vers KMS sont effectués par le **Cloud Storage service agent du projet dont l'email est service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)**, et non directement par l'utilisateur final qui lit l'objet. + +Cela signifie que pour lire quelque chose chiffré par un CMEK : + +- Le cloud storage service agent du projet doit avoir des permissions KMS sur la clé KMS utilisée (typiquement `roles/cloudkms.cryptoKeyEncrypterDecrypter`). +- L'utilisateur n'a besoin que des permissions de lecture d'objet (par exemple `storage.objects.get`). Il n'a pas besoin de permissions sur la clé KMS. + +Cela signifie que pour contrôler l'accès aux données chiffrées avec la clé KMS, il est nécessaire d'ajouter/supprimer des permissions KMS pour le cloud storage service agent du projet. + +Notez qu'un binding au niveau du projet comme `roles/cloudkms.cryptoKeyEncrypterDecrypter` pour le Storage service agent permettra toujours le décryptage avec les clés du même projet. + + +#### Here are the steps to import a new version and disable/delete the older data:
@@ -243,7 +257,7 @@ print('Signature:', signature)
-Vérifier la signature avec une clé asymétrique (Python) +Vérifier une signature avec une clé asymétrique (Python) ```python from google.cloud import kms import hashlib @@ -271,7 +285,7 @@ verified = verify_asymmetric_signature(project_id, location_id, key_ring_id, key print('Verified:', verified) ``` ### `cloudkms.cryptoKeyVersions.restore` -La permission `cloudkms.cryptoKeyVersions.restore` permet à une identité de restaurer une version de clé qui avait été précédemment programmée pour destruction ou désactivée dans Cloud KMS, la remettant dans un état actif et utilisable. +La permission `cloudkms.cryptoKeyVersions.restore` permet à une identité de restaurer une version de clé qui avait été précédemment programmée pour destruction ou désactivée dans Cloud KMS, la ramenant à un état actif et utilisable. ```bash gcloud kms keys versions restore \ --key= \ @@ -280,7 +294,7 @@ gcloud kms keys versions restore \ --project= ``` ### `cloudkms.cryptoKeyVersions.update` -L'autorisation `cloudkms.cryptoKeyVersions.update` permet à une identité de modifier les attributs ou l'état d'une version de clé spécifique dans Cloud KMS, par exemple en l'activant ou en la désactivant. +La permission `cloudkms.cryptoKeyVersions.update` permet à une identité de modifier les attributs ou l'état d'une version de clé spécifique dans Cloud KMS, par exemple en l'activant ou en la désactivant. ```bash # Disable key gcloud kms keys versions disable \ diff --git a/src/pentesting-cloud/gcp-security/gcp-services/gcp-kms-enum.md b/src/pentesting-cloud/gcp-security/gcp-services/gcp-kms-enum.md index 58804a8cf..c659b6960 100644 --- a/src/pentesting-cloud/gcp-security/gcp-services/gcp-kms-enum.md +++ b/src/pentesting-cloud/gcp-security/gcp-services/gcp-kms-enum.md @@ -1,43 +1,56 @@ -# GCP - KMS Enum +# GCP - KMS Enumération {{#include ../../../banners/hacktricks-training.md}} ## KMS -Le [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) sert de stockage sécurisé pour les **clés cryptographiques**, qui sont essentielles pour des opérations telles que **le chiffrement et le déchiffrement de données sensibles**. Ces clés sont organisées au sein de bagues de clés, permettant une gestion structurée. De plus, le contrôle d'accès peut être méticuleusement configuré, soit au niveau de la clé individuelle, soit pour l'ensemble de la bague de clés, garantissant que les autorisations sont précisément alignées avec les exigences de sécurité. +The [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) sert de stockage sécurisé pour les **clés cryptographiques**, qui sont essentielles pour des opérations telles que **chiffrer et déchiffrer des données sensibles**. Ces clés sont organisées au sein de key rings, permettant une gestion structurée. De plus, le contrôle d'accès peut être configuré de manière précise, soit au niveau d'une clé individuelle, soit pour l'ensemble du key ring, garantissant que les permissions sont parfaitement alignées avec les exigences de sécurité. -Les bagues de clés KMS sont par **défaut créées comme globales**, ce qui signifie que les clés à l'intérieur de cette bague de clés sont accessibles depuis n'importe quelle région. Cependant, il est possible de créer des bagues de clés spécifiques dans **des régions spécifiques**. +Les key rings KMS sont créés par **défaut en tant que globaux**, ce qui signifie que les clés à l'intérieur de ce key ring sont accessibles depuis n'importe quelle région. Cependant, il est possible de créer des key rings dans des **régions spécifiques**. -### Niveau de Protection des Clés +### Key Protection Level -- **Clés logicielles** : Les clés logicielles sont **créées et gérées par KMS entièrement dans le logiciel**. Ces clés ne sont **pas protégées par un module de sécurité matériel (HSM)** et peuvent être utilisées à des fins de **test et de développement**. Les clés logicielles ne sont **pas recommandées pour une utilisation en production** car elles offrent une faible sécurité et sont susceptibles aux attaques. -- **Clés hébergées dans le cloud** : Les clés hébergées dans le cloud sont **créées et gérées par KMS** dans le cloud en utilisant une infrastructure hautement disponible et fiable. Ces clés sont **protégées par des HSM**, mais les HSM ne sont **pas dédiés à un client spécifique**. Les clés hébergées dans le cloud conviennent à la plupart des cas d'utilisation en production. -- **Clés externes** : Les clés externes sont **créées et gérées en dehors de KMS**, et sont importées dans KMS pour être utilisées dans des opérations cryptographiques. Les clés externes **peuvent être stockées dans un module de sécurité matériel (HSM) ou une bibliothèque logicielle, selon la préférence du client**. +- **Software keys** : Les software keys sont **créées et gérées par KMS entièrement en logiciel**. Ces clés **ne sont pas protégées par un hardware security module (HSM)** et peuvent être utilisées pour des **tests et du développement**. Les software keys **ne sont pas recommandées pour la production** car elles offrent une sécurité faible et sont susceptibles d'être attaquées. +- **Cloud-hosted keys** : Les cloud-hosted keys sont **créées et gérées par KMS** dans le cloud en utilisant une infrastructure hautement disponible et fiable. Ces clés sont **protégées par des HSM**, mais les HSM **ne sont pas dédiés à un client spécifique**. Les cloud-hosted keys conviennent à la plupart des cas d'utilisation en production. +- **External keys** : Les external keys sont **créées et gérées en dehors de KMS**, et sont importées dans KMS pour être utilisées dans des opérations cryptographiques. Les external keys **peuvent être stockées dans un hardware security module (HSM) ou une bibliothèque logicielle, selon la préférence du client**. -### Objectifs des Clés +### Key Purposes -- **Chiffrement/déchiffrement symétrique** : Utilisé pour **chiffrer et déchiffrer des données en utilisant une seule clé pour les deux opérations**. Les clés symétriques sont rapides et efficaces pour chiffrer et déchiffrer de grands volumes de données. -- **Supporté** : [cryptoKeys.encrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt), [cryptoKeys.decrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/decrypt) -- **Signature asymétrique** : Utilisé pour une communication sécurisée entre deux parties sans partager la clé. Les clés asymétriques se présentent sous forme de paire, composée d'une **clé publique et d'une clé privée**. La clé publique est partagée avec d'autres, tandis que la clé privée est gardée secrète. -- **Supporté :** [cryptoKeyVersions.asymmetricSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricSign), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey) -- **Déchiffrement asymétrique** : Utilisé pour vérifier l'authenticité d'un message ou de données. Une signature numérique est créée à l'aide d'une clé privée et peut être vérifiée à l'aide de la clé publique correspondante. -- **Supporté :** [cryptoKeyVersions.asymmetricDecrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricDecrypt), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey) -- **Signature MAC** : Utilisé pour garantir **l'intégrité et l'authenticité des données en créant un code d'authentification de message (MAC) à l'aide d'une clé secrète**. HMAC est couramment utilisé pour l'authentification des messages dans les protocoles réseau et les applications logicielles. -- **Supporté :** [cryptoKeyVersions.macSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macSign), [cryptoKeyVersions.macVerify](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macVerify) +- **Symmetric encryption/decryption** : Utilisé pour **chiffrer et déchiffrer des données en utilisant une seule clé pour les deux opérations**. Les clés symétriques sont rapides et efficaces pour chiffrer et déchiffrer de grands volumes de données. +- **Supported** : [cryptoKeys.encrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt), [cryptoKeys.decrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/decrypt) +- **Asymmetric Signing** : Utilisé pour une communication sécurisée entre deux parties sans partage de la clé. Les clés asymétriques viennent par paire, constituées d'une **clé publique et d'une clé privée**. La clé publique est partagée, tandis que la clé privée reste secrète. +- **Supported:** [cryptoKeyVersions.asymmetricSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricSign), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey) +- **Asymmetric Decryption** : Utilisé pour vérifier l'authenticité d'un message ou de données. Une signature numérique est créée à l'aide d'une clé privée et peut être vérifiée avec la clé publique correspondante. +- **Supported:** [cryptoKeyVersions.asymmetricDecrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricDecrypt), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey) +- **MAC Signing** : Utilisé pour garantir **l'intégrité et l'authenticité des données en créant un message authentication code (MAC) à l'aide d'une clé secrète**. HMAC est couramment utilisé pour l'authentification des messages dans les protocoles réseau et les applications logicielles. +- **Supported:** [cryptoKeyVersions.macSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macSign), [cryptoKeyVersions.macVerify](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macVerify) -### Période de Rotation & Période Programmée pour la Destruction +### Rotation Period & Programmed for destruction period -Par **défaut**, chaque **90 jours** mais cela peut être **facilement** et **complètement personnalisé.** +Par **défaut**, tous les **90 jours**, mais cela peut être **facilement** et **entièrement personnalisé.** -La période "Programmée pour la destruction" est le **temps depuis que l'utilisateur demande la suppression de la clé** jusqu'à ce que la clé soit **supprimée**. Elle ne peut pas être modifiée après la création de la clé (par défaut 1 jour). +La période "Programmed for destruction" est le **temps écoulé depuis la demande de suppression de la clé** jusqu'à la suppression effective de la clé. Elle ne peut pas être modifiée après la création de la clé (valeur par défaut : 1 jour). -### Version Principale +### Primary Version -Chaque clé KMS peut avoir plusieurs versions, l'une d'elles doit être la **version par défaut**, celle-ci sera utilisée lorsqu'une **version n'est pas spécifiée lors de l'interaction avec la clé KMS**. +Chaque clé KMS peut avoir plusieurs versions ; l'une d'entre elles doit être la **version par défaut**, qui sera utilisée lorsqu'une **version n'est pas spécifiée lors des interactions avec la clé KMS**. -### Énumération +### CMEK permission model -Ayant **les autorisations pour lister les clés**, voici comment vous pouvez y accéder : +When objects in Cloud Storage are encrypted with CMEK, the decrypt/encrypt calls to KMS are done by the project's **Cloud Storage service agent whose email is service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)**, not directly by the end user reading the object. + +Cela signifie que, pour lire quelque chose chiffré par un CMEK : + +- L'agent de service Cloud Storage du projet doit avoir des permissions KMS sur la clé KMS utilisée (typiquement `roles/cloudkms.cryptoKeyEncrypterDecrypter`). +- L'utilisateur n'a besoin que des permissions de lecture d'objet (par exemple `storage.objects.get`). Il n'a pas besoin de permissions sur la clé KMS. + +Cela signifie que pour contrôler l'accès aux données chiffrées avec la clé KMS, il est nécessaire d'ajouter/supprimer des permissions KMS à l'agent de service Cloud Storage du projet. + +Notez qu'un binding au niveau du projet comme `roles/cloudkms.cryptoKeyEncrypterDecrypter` pour l'agent de service Storage permettra toujours le déchiffrement avec les clés du même projet. + +### Enumeration + +Having **permissions to list the keys** this is how you can access them: ```bash # List the global keyrings available gcloud kms keyrings list --location global @@ -61,13 +74,13 @@ gcloud kms decrypt --ciphertext-file=[INFILE] \ --keyring [KEYRING] \ --location global ``` -### Escalade de Privilèges +### Escalade de privilèges {{#ref}} ../gcp-privilege-escalation/gcp-kms-privesc.md {{#endref}} -### Post Exploitation +### Post-exploitation {{#ref}} ../gcp-post-exploitation/gcp-kms-post-exploitation.md