From d2afceaa1a48773075871bd7f6c60fac6f67b738 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 4 Mar 2026 11:27:14 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/gcp-security/gcp-post-exploitation --- .../gcp-kms-post-exploitation.md | 38 ++++++++---- .../gcp-security/gcp-services/gcp-kms-enum.md | 59 +++++++++++-------- 2 files changed, 62 insertions(+), 35 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 edbad2d03..c7c5b3aa2 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 @@ Encontre informações básicas sobre KMS em: ### `cloudkms.cryptoKeyVersions.destroy` -Um atacante com essa permissão poderia destruir uma versão de chave do KMS. Para fazer isso, primeiro você precisa desabilitar a chave e então destruí-la: +Um atacante com essa permissão poderia destruir uma versão do KMS. Para fazer isso, primeiro você precisa desabilitar a chave e então destruí-la:
-Desabilitar e destruir a versão da chave (Python) +Desabilitar e destruir versão da chave (Python) ```python # pip install google-cloud-kms @@ -65,24 +65,38 @@ destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version) ### KMS Ransomware -No AWS é possível roubar completamente uma KMS key modificando a KMS resource policy e permitindo que apenas a conta do atacante use a chave. Como essas resource policies não existem no GCP, isso não é possível. +Na AWS é possível completamente **steal a KMS key** ao modificar a KMS resource policy e permitir que apenas a conta do atacante use a chave. Como essas políticas de recurso não existem no GCP, isso não é possível. No entanto, existe outra forma de realizar um KMS Ransomware global, que envolveria os seguintes passos: -- Criar uma nova **versão da chave com um key material** importado pelo atacante +- Criar uma nova **versão da chave com material da chave** importado pelo atacante ```bash gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY] ``` -- Defina-a como **versão padrão** (para dados futuros que serão encriptados) -- **Reencriptar dados antigos** encriptados com a versão anterior usando a nova. -- **Excluir a KMS key** -- Agora apenas o atacante, que possui o key material original, poderá descriptografar os dados encriptados +- Defina-a como **versão padrão** (para dados futuros que serão criptografados) +- **Re-criptografar dados antigos** criptografados com a versão anterior usando a nova. +- **Excluir a chave KMS** +- Agora somente o atacante, que possui o material da chave original, poderá descriptografar os dados criptografados -#### Aqui estão os passos para importar uma nova versão e desativar/excluir os dados antigos: +#### Cloud Storage + CMEK modelo de permissões + +Quando objetos no Cloud Storage são criptografados com CMEK, as chamadas de decrypt/encrypt para o KMS são feitas pelo agente de serviço do Cloud Storage do projeto cujo e-mail é service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)**, não diretamente pelo usuário final que lê o objeto. + +Isso significa que, para ler algo criptografado por um CMEK: + +- O agente de serviço do Cloud Storage do projeto deve ter permissões KMS sobre a chave KMS usada (tipicamente `roles/cloudkms.cryptoKeyEncrypterDecrypter`). +- O usuário só precisa de permissões de leitura do objeto (por exemplo `storage.objects.get`). Ele não precisa de permissões sobre a chave KMS. + +Isso significa que, para controlar o acesso aos dados criptografados com a chave KMS, é necessário adicionar/remover permissões KMS ao agente de serviço do Cloud Storage do projeto. + +Note que um binding a nível de projeto como `roles/cloudkms.cryptoKeyEncrypterDecrypter` para o agente de serviço do Storage ainda permitirá descriptografar com as chaves no mesmo projeto. + + +#### Aqui estão os passos para importar uma nova versão e desabilitar/excluir os dados antigos:
-Importar nova versão da key e excluir versão antiga +Importar nova versão da chave e excluir a versão antiga ```bash # Encrypt something with the original key echo "This is a sample text to encrypt" > /tmp/my-plaintext-file.txt @@ -271,7 +285,7 @@ verified = verify_asymmetric_signature(project_id, location_id, key_ring_id, key print('Verified:', verified) ``` ### `cloudkms.cryptoKeyVersions.restore` -A permissão `cloudkms.cryptoKeyVersions.restore` permite que uma identidade restaure uma versão de chave que foi anteriormente agendada para destruição ou desativada no Cloud KMS, tornando-a ativa e utilizável. +A permissão `cloudkms.cryptoKeyVersions.restore` permite que uma identidade restaure uma versão de chave que foi previamente agendada para destruição ou desabilitada no Cloud KMS, retornando-a a um estado ativo e utilizável. ```bash gcloud kms keys versions restore \ --key= \ @@ -280,7 +294,7 @@ gcloud kms keys versions restore \ --project= ``` ### `cloudkms.cryptoKeyVersions.update` -A permissão `cloudkms.cryptoKeyVersions.update` permite que uma identidade modifique os atributos ou o estado de uma versão específica de chave no Cloud KMS, por exemplo, habilitando-a ou desabilitando-a. +A permissão `cloudkms.cryptoKeyVersions.update` permite que uma identidade modifique os atributos ou o estado de uma versão de chave específica no Cloud KMS, por exemplo, habilitando-a ou desabilitando-a. ```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 d02f530fc..dcdb6f82e 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 @@ -4,38 +4,51 @@ ## KMS -O [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) serve como um armazenamento seguro para **chaves criptográficas**, que são essenciais para operações como **criptografar e descriptografar dados sensíveis**. Essas chaves são organizadas dentro de anéis de chaves, permitindo uma gestão estruturada. Além disso, o controle de acesso pode ser meticulosamente configurado, seja no nível de chave individual ou para todo o anel de chaves, garantindo que as permissões estejam precisamente alinhadas com os requisitos de segurança. +The [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) serve como um armazenamento seguro para **chaves criptográficas**, que são essenciais para operações como **encriptar e descriptografar dados sensíveis**. Essas chaves são organizadas dentro de key rings, permitindo um gerenciamento estruturado. Além disso, o controle de acesso pode ser configurado minuciosamente, seja no nível da chave individual ou de todo o key ring, garantindo que as permissões estejam precisamente alinhadas com os requisitos de segurança. -Os anéis de chaves KMS são **criados por padrão como globais**, o que significa que as chaves dentro desse anel de chaves são acessíveis de qualquer região. No entanto, é possível criar anéis de chaves específicos em **regiões específicas**. +KMS key rings são, por **padrão, criados como global**, o que significa que as chaves dentro desse key ring são acessíveis de qualquer região. No entanto, é possível criar key rings em **regiões específicas**. -### Nível de Proteção da Chave +### Key Protection Level -- **Chaves de software**: Chaves de software são **criadas e gerenciadas pelo KMS inteiramente em software**. Essas chaves **não são protegidas por nenhum módulo de segurança de hardware (HSM)** e podem ser usadas para **testes e desenvolvimento**. Chaves de software **não são recomendadas para uso em produção** porque oferecem baixa segurança e são suscetíveis a ataques. -- **Chaves hospedadas na nuvem**: Chaves hospedadas na nuvem são **criadas e gerenciadas pelo KMS** na nuvem usando uma infraestrutura altamente disponível e confiável. Essas chaves são **protegidas por HSMs**, mas os HSMs **não são dedicados a um cliente específico**. Chaves hospedadas na nuvem são adequadas para a maioria dos casos de uso em produção. -- **Chaves externas**: Chaves externas são **criadas e gerenciadas fora do KMS**, e são importadas para o KMS para uso em operações criptográficas. Chaves externas **podem ser armazenadas em um módulo de segurança de hardware (HSM) ou em uma biblioteca de software, dependendo da preferência do cliente**. +- **Software keys**: Software keys são **criadas e gerenciadas pelo KMS inteiramente em software**. Essas chaves **não são protegidas por nenhum módulo de segurança de hardware (HSM)** e podem ser usadas para **testes e desenvolvimento**. Software keys **não são recomendadas para produção** porque oferecem baixa segurança e são suscetíveis a ataques. +- **Cloud-hosted keys**: Cloud-hosted keys são **criadas e gerenciadas pelo KMS** na nuvem usando uma infraestrutura altamente disponível e confiável. Essas chaves são **protegidas por HSMs**, mas os HSMs **não são dedicados a um cliente específico**. Cloud-hosted keys são adequadas para a maioria dos casos de uso em produção. +- **External keys**: External keys são **criadas e gerenciadas fora do KMS**, e são importadas para o KMS para uso em operações criptográficas. External keys **podem ser armazenadas em um módulo de segurança de hardware (HSM) ou em uma biblioteca de software, dependendo da preferência do cliente**. -### Propósitos da Chave +### Key Purposes -- **Criptografia/Descriptografia simétrica**: Usada para **criptografar e descriptografar dados usando uma única chave para ambas as operações**. Chaves simétricas são rápidas e eficientes para criptografar e descriptografar grandes volumes de dados. -- **Suportado**: [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) -- **Assinatura assimétrica**: Usada para comunicação segura entre duas partes sem compartilhar a chave. Chaves assimétricas vêm em um par, consistindo de uma **chave pública e uma chave privada**. A chave pública é compartilhada com outros, enquanto a chave privada é mantida em segredo. -- **Suportado:** [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) -- **Descriptografia assimétrica**: Usada para verificar a autenticidade de uma mensagem ou dado. Uma assinatura digital é criada usando uma chave privada e pode ser verificada usando a chave pública correspondente. -- **Suportado:** [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) -- **Assinatura MAC**: Usada para garantir **integridade e autenticidade dos dados criando um código de autenticação de mensagem (MAC) usando uma chave secreta**. HMAC é comumente usado para autenticação de mensagens em protocolos de rede e aplicações de software. -- **Suportado:** [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**: Usado para **encriptar e descriptografar dados usando uma única chave para ambas as operações**. Chaves simétricas são rápidas e eficientes para encriptar e descriptografar grandes volumes de dados. +- **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**: Usado para comunicação segura entre duas partes sem compartilhar a chave. Chaves assimétricas vêm em par, consistindo de uma **chave pública e uma chave privada**. A chave pública é compartilhada com outros, enquanto a chave privada é mantida em segredo. +- **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**: Usado para verificar a autenticidade de uma mensagem ou dado. Uma assinatura digital é criada usando uma chave privada e pode ser verificada usando a chave pública correspondente. +- **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**: Usado para garantir **integridade e autenticidade dos dados criando um message authentication code (MAC) usando uma chave secreta**. HMAC é comumente usado para autenticação de mensagens em protocolos de rede e aplicações de software. +- **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) -### Período de Rotação & Período Programado para Destruição +### Rotation Period & Programmed for destruction period -Por **padrão**, a cada **90 dias**, mas pode ser **facilmente** e **completamente personalizado.** +Por **padrão**, cada **90 dias**, mas pode ser **facilmente** e **completamente personalizado**. -O período "Programado para destruição" é o **tempo desde que o usuário solicita a exclusão da chave** até que a chave seja **excluída**. Não pode ser alterado após a criação da chave (padrão de 1 dia). +O período "Programmed for destruction" é o **tempo desde que o usuário solicita a exclusão da chave** até que a chave seja **excluída**. Não pode ser alterado após a criação da chave (padrão 1 dia). -### Versão Primária +### Primary Version -Cada chave KMS pode ter várias versões, uma delas deve ser a **padrão**, que será a usada quando uma **versão não for especificada ao interagir com a chave KMS**. +Cada chave KMS pode ter várias versões; uma delas deve ser a **padrão**, que será a utilizada quando **uma versão não for especificada ao interagir com a chave KMS**. -### Enumeração +### CMEK permission model + +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. + +Isso significa que, para ler algo criptografado por um CMEK: + +- O agente de serviço do Cloud Storage do projeto deve ter permissões KMS sobre a chave KMS usada (tipicamente `roles/cloudkms.cryptoKeyEncrypterDecrypter`). +- O usuário precisa apenas de permissões de leitura do objeto (por exemplo `storage.objects.get`). Ele não precisa de permissões sobre a chave KMS. + +Isso significa que, para controlar o acesso aos dados criptografados com a chave KMS, é necessário adicionar/remover permissões KMS ao agente de serviço do Cloud Storage do projeto. + +Observe que uma vinculação em nível de projeto como `roles/cloudkms.cryptoKeyEncrypterDecrypter` para o agente do serviço do Cloud Storage ainda permitirá descriptografar com as chaves no mesmo projeto. + +### Enumeration Tendo **permissões para listar as chaves**, é assim que você pode acessá-las: ```bash @@ -61,13 +74,13 @@ gcloud kms decrypt --ciphertext-file=[INFILE] \ --keyring [KEYRING] \ --location global ``` -### Escalação de Privilégios +### Escalada de Privilégios {{#ref}} ../gcp-privilege-escalation/gcp-kms-privesc.md {{#endref}} -### Pós Exploração +### Pós-Exploração {{#ref}} ../gcp-post-exploitation/gcp-kms-post-exploitation.md