GCP - KMS Enum

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

The Cloud Key Management Service λειτουργεί ως ασφαλής αποθήκη για cryptographic keys, που είναι απαραίτητα για ενέργειες όπως encrypting and decrypting sensitive data. Τα κλειδιά οργανώνονται μέσα σε key rings, επιτρέποντας δομημένη διαχείριση. Επιπλέον, ο έλεγχος πρόσβασης μπορεί να ρυθμιστεί με λεπτομέρεια, είτε σε επίπεδο μεμονωμένου κλειδιού είτε για ολόκληρο το key ring, εξασφαλίζοντας ότι οι άδειες ευθυγραμμίζονται με τις απαιτήσεις ασφαλείας.

Τα KMS key rings δημιουργούνται εξ ορισμού ως global, που σημαίνει ότι τα κλειδιά μέσα σε αυτό το key ring είναι προσβάσιμα από οποιαδήποτε region. Ωστόσο, είναι δυνατόν να δημιουργηθούν συγκεκριμένα key rings σε συγκεκριμένες περιοχές.

Key Protection Level

  • Software keys: Τα software keys δημιουργούνται και διαχειρίζονται από το KMS εξ ολοκλήρου σε software. Αυτά τα κλειδιά δεν προστατεύονται από κάποιο hardware security module (HSM) και μπορούν να χρησιμοποιηθούν για testing και development purposes. Τα software keys δεν συνιστώνται για παραγωγική χρήση επειδή παρέχουν χαμηλό επίπεδο ασφάλειας και είναι ευάλωτα σε επιθέσεις.
  • Cloud-hosted keys: Τα cloud-hosted keys δημιουργούνται και διαχειρίζονται από το KMS στο cloud χρησιμοποιώντας μια υψηλά διαθέσιμη και αξιόπιστη υποδομή. Αυτά τα κλειδιά προστατεύονται από HSMs, αλλά τα HSMs δεν είναι αφιερωμένα σε συγκεκριμένο πελάτη. Τα cloud-hosted keys είναι κατάλληλα για τις περισσότερες παραγωγικές χρήσεις.
  • External keys: Τα external keys δημιουργούνται και διαχειρίζονται εκτός του KMS, και εισάγονται στο KMS για χρήση σε κρυπτογραφικές λειτουργίες. Τα external keys μπορούν να αποθηκευτούν σε hardware security module (HSM) ή σε software library, ανάλογα με την προτίμηση του πελάτη.

Key Purposes

  • Symmetric encryption/decryption: Χρησιμοποιείται για την κρυπτογράφηση και αποκρυπτογράφηση δεδομένων χρησιμοποιώντας ένα ενιαίο κλειδί για τις δύο λειτουργίες. Τα symmetric keys είναι γρήγορα και αποδοτικά για την κρυπτογράφηση και αποκρυπτογράφηση μεγάλου όγκου δεδομένων.
  • Supported: cryptoKeys.encrypt, cryptoKeys.decrypt
  • Asymmetric Signing: Χρησιμοποιείται για ασφαλή επικοινωνία μεταξύ δύο μερών χωρίς κοινοποίηση του κλειδιού. Τα asymmetric keys έρχονται σε ζεύγος, αποτελούμενα από ένα public key και ένα private key. Το public key κοινοποιείται σε άλλους, ενώ το private key κρατιέται μυστικό.
  • Supported: cryptoKeyVersions.asymmetricSign, cryptoKeyVersions.getPublicKey
  • Asymmetric Decryption: Χρησιμοποιείται για την επαλήθευση της αυθεντικότητας ενός μηνύματος ή δεδομένων. Μια ψηφιακή υπογραφή δημιουργείται χρησιμοποιώντας ένα private key και μπορεί να επαληθευτεί με το αντίστοιχο public key.
  • Supported: cryptoKeyVersions.asymmetricDecrypt, cryptoKeyVersions.getPublicKey
  • MAC Signing: Χρησιμοποιείται για να εξασφαλίσει την ακεραιότητα και την αυθεντικότητα των δεδομένων δημιουργώντας ένα message authentication code (MAC) χρησιμοποιώντας ένα secret key. Το HMAC χρησιμοποιείται συνήθως για message authentication σε πρωτόκολλα δικτύου και εφαρμογές λογισμικού.
  • Supported: cryptoKeyVersions.macSign, cryptoKeyVersions.macVerify

Rotation Period & Programmed for destruction period

Από προεπιλογή, κάθε 90 ημέρες, αλλά μπορεί να προσαρμοστεί εύκολα και πλήρως.

Η περίοδος “Programmed for destruction” είναι ο χρόνος από τη στιγμή που ο χρήστης ζητάει τη διαγραφή του κλειδιού μέχρι το κλειδί να διαγραφεί. Δεν μπορεί να αλλάξει αφού το κλειδί δημιουργηθεί (προεπιλογή 1 ημέρα).

Primary Version

Κάθε KMS key μπορεί να έχει πολλές εκδόσεις, μία από αυτές πρέπει να είναι η default, η οποία θα χρησιμοποιείται όταν δεν καθορίζεται έκδοση κατά την αλληλεπίδραση με το KMS key.

CMEK permission model

Όταν αντικείμενα στο Cloud Storage είναι κρυπτογραφημένα με CMEK, οι κλήσεις decrypt/encrypt στο KMS γίνονται από το project’s Cloud Storage service agent whose email is service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com), όχι απευθείας από τον τελικό χρήστη που διαβάζει το αντικείμενο.

Αυτό σημαίνει ότι για να διαβαστεί κάτι κρυπτογραφημένο με CMEK:

  • Το project’s cloud storage service agent πρέπει να έχει δικαιώματα KMS πάνω στο χρησιμοποιούμενο KMS key (συνήθως roles/cloudkms.cryptoKeyEncrypterDecrypter).
  • Ο χρήστης χρειάζεται μόνο δικαιώματα ανάγνωσης αντικειμένου (για παράδειγμα storage.objects.get). Δεν χρειάζεται δικαιώματα πάνω στο KMS key.

Αυτό σημαίνει ότι για να ελεγχθεί η πρόσβαση σε κρυπτογραφημένα δεδομένα με το KMS key, χρειάζεται να προστεθούν/αφαιρεθούν δικαιώματα KMS στο project’s cloud storage service agent.

Σημειώστε ότι μια project-level binding όπως roles/cloudkms.cryptoKeyEncrypterDecrypter για το Storage service agent θα επιτρέψει ακόμη την αποκρυπτογράφηση με τα keys στο ίδιο project.

Enumeration

Εφόσον έχετε permissions to list the keys, έτσι μπορείτε να έχετε πρόσβαση σε αυτά:

# List the global keyrings available
gcloud kms keyrings list --location global
gcloud kms keyrings get-iam-policy <KEYRING>

# List the keys inside a keyring
gcloud kms keys list --keyring <KEYRING> --location <global/other_locations>
gcloud kms keys get-iam-policy <KEY>

# Encrypt a file using one of your keys
gcloud kms encrypt --ciphertext-file=[INFILE] \
--plaintext-file=[OUTFILE] \
--key [KEY] \
--keyring [KEYRING] \
--location global

# Decrypt a file using one of your keys
gcloud kms decrypt --ciphertext-file=[INFILE] \
--plaintext-file=[OUTFILE] \
--key [KEY] \
--keyring [KEYRING] \
--location global

Privilege Escalation

GCP - KMS Privesc

Post Exploitation

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