Translated ['', 'src/pentesting-cloud/gcp-security/gcp-post-exploitation

This commit is contained in:
Translator
2026-03-04 11:34:15 +00:00
parent 2196204963
commit 3e5c93ec82
2 changed files with 63 additions and 36 deletions

View File

@@ -12,11 +12,11 @@
### `cloudkms.cryptoKeyVersions.destroy` ### `cloudkms.cryptoKeyVersions.destroy`
Ένας επιτιθέμενος με αυτήν την άδεια θα μπορούσε να καταστρέψει μια έκδοση του KMS. Για να το κάνετε αυτό, πρέπει πρώτα να απενεργοποιήσετε το κλειδί και στη συνέχεια να το καταστρέψετε: Ένας attacker με αυτό το permission θα μπορούσε να καταστρέψει μια έκδοση του KMS. Για να το κάνετε αυτό πρέπει πρώτα να disable το key και μετά να το destroy:
<details> <details>
<summary>Απενεργοποίηση και καταστροφή έκδοσης κλειδιού (Python)</summary> <summary>Disable and destroy key version (Python)</summary>
```python ```python
# pip install google-cloud-kms # pip install google-cloud-kms
@@ -65,24 +65,38 @@ destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version)
### KMS Ransomware ### KMS Ransomware
Στο AWS είναι δυνατόν να **steal a KMS key** πλήρως, τροποποιώντας την KMS resource policy και επιτρέποντας μόνο στον λογαριασμό του επιτιθέμενου να χρησιμοποιεί το κλειδί. Εφόσον αυτές οι resource policies δεν υπάρχουν στο GCP, αυτό δεν είναι δυνατό. Στο AWS είναι δυνατό να γίνει πλήρης **steal a KMS key** τροποποιώντας το KMS resource policy και επιτρέποντας μόνο στον attacker account να χρησιμοποιήσει το key. Εφόσον αυτές οι resource policies δεν υπάρχουν στο GCP, αυτό δεν είναι δυνατό.
Ωστόσο, υπάρχει ένας άλλος τρόπος για να πραγματοποιηθεί παγκόσμιο KMS Ransomware, που θα περιλάμβανε τα ακόλουθα βήματα: Ωστόσο, υπάρχει ένας άλλος τρόπος για να εκτελέσετε ένα παγκόσμιο KMS Ransomware, ο οποίος θα περιελάμβανε τα ακόλουθα βήματα:
- Δημιουργήστε μια νέα **έκδοση του κλειδιού με υλικό κλειδιού** εισαγόμενο από τον επιτιθέμενο - Δημιουργήστε μια νέα **version of the key with a key material** που εισάγεται από τον attacker
```bash ```bash
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY] gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
``` ```
- Ορίστε το ως **προεπιλεγμένη έκδοση** (για μελλοντικά δεδομένα που θα κρυπτογραφηθούν) - Ορίστε το ως **default version** (για μελλοντικά δεδομένα που θα κρυπτογραφηθούν)
- **Επανακρυπτογραφήστε τα παλαιότερα δεδομένα** που είχαν κρυπτογραφηθεί με την προηγούμενη έκδοση, χρησιμοποιώντας τη νέα. - **Επανακρυπτογραφήστε παλαιότερα δεδομένα** κρυπτογραφημένα με την προηγούμενη έκδοση χρησιμοποιώντας τη νέα.
- **Διαγράψτε το KMS key** - **Διαγράψτε το KMS key**
- Τώρα μόνο ο attacker, που έχει το original key material, θα μπορεί να αποκρυπτογραφήσει τα κρυπτογραφημένα δεδομένα - Τώρα μόνο ο attacker, που έχει το original key material, θα μπορούσε να αποκρυπτογραφήσει τα κρυπτογραφημένα δεδομένα
#### Εδώ είναι τα βήματα για την εισαγωγή μιας νέας έκδοσης και την απενεργοποίηση/διαγραφή των παλαιότερων δεδομένων: #### Cloud Storage + 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)**, όχι απευθείας από τον τελικό χρήστη που διαβάζει το αντικείμενο.
This means that to read something encrypted by a CMEK:
- The project's cloud storage service agent must have KMS permissions over the used KMS key (typically `roles/cloudkms.cryptoKeyEncrypterDecrypter`).
- The user only needs object read permissions (for example `storage.objects.get`). He doesn't need permissions over the KMS key.
Αυτό σημαίνει ότι για να ελέγξετε την πρόσβαση στα κρυπτογραφημένα δεδομένα με το KMS key χρειάζεται να προσθέσετε/remove KMS permissions στον project's cloud storage service agent.
Note that there is a project-level binding like `roles/cloudkms.cryptoKeyEncrypterDecrypter` for the Storage service agent will still allow decrypt with the keys in the same project.
#### Here are the steps to import a new version and disable/delete the older data:
<details> <details>
<summary>Εισαγωγή νέας key version και διαγραφή της παλιάς</summary> <summary>Εισαγωγή νέας έκδοσης key και διαγραφή παλιάς έκδοσης</summary>
```bash ```bash
# Encrypt something with the original key # Encrypt something with the original key
echo "This is a sample text to encrypt" > /tmp/my-plaintext-file.txt echo "This is a sample text to encrypt" > /tmp/my-plaintext-file.txt
@@ -162,7 +176,7 @@ gcloud kms keys versions destroy \
<details> <details>
<summary>Κρυπτογράφηση δεδομένων με συμμετρικό κλειδί (Python)</summary> <summary>Κρυπτογραφήστε δεδομένα με συμμετρικό κλειδί (Python)</summary>
```python ```python
from google.cloud import kms from google.cloud import kms
import base64 import base64
@@ -271,7 +285,7 @@ verified = verify_asymmetric_signature(project_id, location_id, key_ring_id, key
print('Verified:', verified) print('Verified:', verified)
``` ```
### `cloudkms.cryptoKeyVersions.restore` ### `cloudkms.cryptoKeyVersions.restore`
Η άδεια `cloudkms.cryptoKeyVersions.restore` επιτρέπει σε μια ταυτότητα να επαναφέρει μια έκδοση κλειδιού που προηγουμένως είχε προγραμματιστεί για καταστροφή ή είχε απενεργοποιηθεί στο Cloud KMS, επαναφέροντάς την σε ενεργή και χρησιμοποιήσιμη κατάσταση. Το δικαίωμα `cloudkms.cryptoKeyVersions.restore` επιτρέπει σε μια ταυτότητα να επαναφέρει μια έκδοση κλειδιού που προηγουμένως είχε προγραμματιστεί για καταστροφή ή είχε απενεργοποιηθεί στο Cloud KMS, επαναφέροντάς την σε ενεργή και χρησιμοποιήσιμη κατάσταση.
```bash ```bash
gcloud kms keys versions restore <VERSION_ID> \ gcloud kms keys versions restore <VERSION_ID> \
--key=<KEY_NAME> \ --key=<KEY_NAME> \

View File

@@ -4,40 +4,53 @@
## KMS ## KMS
Η [**Υπηρεσία Διαχείρισης Κλειδιών Cloud**](https://cloud.google.com/kms/docs/) λειτουργεί ως ασφαλής αποθήκευση για **κρυπτογραφικά κλειδιά**, τα οποία είναι απαραίτητα για λειτουργίες όπως **η κρυπτογράφηση και η αποκρυπτογράφηση ευαίσθητων δεδομένων**. Αυτά τα κλειδιά οργανώνονται μέσα σε δαχτυλίδια κλειδιών, επιτρέποντας τη δομημένη διαχείριση. Επιπλέον, ο έλεγχος πρόσβασης μπορεί να ρυθμιστεί με ακρίβεια, είτε σε επίπεδο μεμονωμένου κλειδιού είτε για ολόκληρο το δαχτυλίδι κλειδιών, διασφαλίζοντας ότι οι άδειες είναι ακριβώς ευθυγραμμισμένες με τις απαιτήσεις ασφαλείας. The [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) λειτουργεί ως ασφαλής αποθήκη για **cryptographic keys**, που είναι απαραίτητα για ενέργειες όπως **encrypting and decrypting sensitive data**. Τα κλειδιά οργανώνονται μέσα σε key rings, επιτρέποντας δομημένη διαχείριση. Επιπλέον, ο έλεγχος πρόσβασης μπορεί να ρυθμιστεί με λεπτομέρεια, είτε σε επίπεδο μεμονωμένου κλειδιού είτε για ολόκληρο το key ring, εξασφαλίζοντας ότι οι άδειες ευθυγραμμίζονται με τις απαιτήσεις ασφαλείας.
Τα δαχτυλίδια κλειδιών KMS δημιουργούνται **κατά προεπιλογή ως παγκόσμια**, που σημαίνει ότι τα κλειδιά μέσα σε αυτό το δαχτυλίδι είναι προσβάσιμα από οποιαδήποτε περιοχή. Ωστόσο, είναι δυνατή η δημιουργία συγκεκριμένων δαχτυλιδιών κλειδιών σε **συγκεκριμένες περιοχές**. Τα KMS key rings δημιουργούνται εξ ορισμού ως global, που σημαίνει ότι τα κλειδιά μέσα σε αυτό το key ring είναι προσβάσιμα από οποιαδήποτε region. Ωστόσο, είναι δυνατόν να δημιουργηθούν συγκεκριμένα key rings σε συγκεκριμένες περιοχές.
### Επίπεδο Προστασίας Κλειδιών ### Key Protection Level
- **Κλειδιά λογισμικού**: Τα κλειδιά λογισμικού δημιουργούνται και διαχειρίζονται **εντελώς από το KMS σε λογισμικό**. Αυτά τα κλειδιά **δεν προστατεύονται από κανένα υλικό ασφαλείας (HSM)** και μπορούν να χρησιμοποιηθούν για **δοκιμές και αναπτυξιακούς σκοπούς**. Τα κλειδιά λογισμικού **δεν συνιστώνται για παραγωγή** επειδή παρέχουν χαμηλή ασφάλεια και είναι ευάλωτα σε επιθέσεις. - **Software keys**: Τα software keys **δημιουργούνται και διαχειρίζονται από το KMS εξ ολοκλήρου σε software**. Αυτά τα κλειδιά **δεν προστατεύονται από κάποιο hardware security module (HSM)** και μπορούν να χρησιμοποιηθούν για **testing και development purposes**. Τα software keys **δεν συνιστώνται για παραγωγική χρήση** επειδή παρέχουν χαμηλό επίπεδο ασφάλειας και είναι ευάλωτα σε επιθέσεις.
- **Κλειδιά που φιλοξενούνται στο Cloud**: Τα κλειδιά που φιλοξενούνται στο Cloud δημιουργούνται και διαχειρίζονται **από το KMS** στο cloud χρησιμοποιώντας μια εξαιρετικά διαθέσιμη και αξιόπιστη υποδομή. Αυτά τα κλειδιά **προστατεύονται από HSM**, αλλά τα HSM **δεν είναι αφιερωμένα σε συγκεκριμένο πελάτη**. Τα κλειδιά που φιλοξενούνται στο Cloud είναι κατάλληλα για τις περισσότερες περιπτώσεις χρήσης παραγωγής. - **Cloud-hosted keys**: Τα cloud-hosted keys **δημιουργούνται και διαχειρίζονται από το KMS** στο cloud χρησιμοποιώντας μια υψηλά διαθέσιμη και αξιόπιστη υποδομή. Αυτά τα κλειδιά **προστατεύονται από HSMs**, αλλά τα HSMs **δεν είναι αφιερωμένα σε συγκεκριμένο πελάτη**. Τα cloud-hosted keys είναι κατάλληλα για τις περισσότερες παραγωγικές χρήσεις.
- **Εξωτερικά κλειδιά**: Τα εξωτερικά κλειδιά δημιουργούνται και διαχειρίζονται εκτός του KMS και εισάγονται στο KMS για χρήση σε κρυπτογραφικές λειτουργίες. Τα εξωτερικά κλειδιά **μπορούν να αποθηκευτούν σε ένα υλικό ασφαλείας (HSM) ή σε μια βιβλιοθήκη λογισμικού, ανάλογα με την προτίμηση του πελάτη**. - **External keys**: Τα external keys **δημιουργούνται και διαχειρίζονται εκτός του KMS**, και εισάγονται στο KMS για χρήση σε κρυπτογραφικές λειτουργίες. Τα external keys **μπορούν να αποθηκευτούν σε hardware security module (HSM) ή σε software library, ανάλογα με την προτίμηση του πελάτη**.
### Σκοποί Κλειδιών ### Key Purposes
- **Συμμετρική κρυπτογράφηση/αποκρυπτογράφηση**: Χρησιμοποιείται για **να κρυπτογραφεί και να αποκρυπτογραφεί δεδομένα χρησιμοποιώντας ένα μόνο κλειδί για και τις δύο λειτουργίες**. Τα συμμετρικά κλειδιά είναι γρήγορα και αποδοτικά για την κρυπτογράφηση και την αποκρυπτογράφηση μεγάλων όγκων δεδομένων. - **Symmetric encryption/decryption**: Χρησιμοποιείται για **την κρυπτογράφηση και αποκρυπτογράφηση δεδομένων χρησιμοποιώντας ένα ενιαίο κλειδί για τις δύο λειτουργίες**. Τα symmetric keys είναι γρήγορα και αποδοτικά για την κρυπτογράφηση και αποκρυπτογράφηση μεγάλου όγκου δεδομένων.
- **Υποστηρίζεται**: [cryptoKeys.encrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt), [cryptoKeys.decrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/decrypt) - **Supported**: [cryptoKeys.encrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt), [cryptoKeys.decrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/decrypt)
- **Ασύμμετρη Υπογραφή**: Χρησιμοποιείται για ασφαλή επικοινωνία μεταξύ δύο μερών χωρίς να μοιράζονται το κλειδί. Τα ασύμμετρα κλειδιά έρχονται σε ζεύγη, αποτελούμενα από ένα **δημόσιο κλειδί και ένα ιδιωτικό κλειδί**. Το δημόσιο κλειδί μοιράζεται με άλλους, ενώ το ιδιωτικό κλειδί διατηρείται μυστικό. - **Asymmetric Signing**: Χρησιμοποιείται για ασφαλή επικοινωνία μεταξύ δύο μερών χωρίς κοινοποίηση του κλειδιού. Τα asymmetric keys έρχονται σε ζεύγος, αποτελούμενα από ένα **public key και ένα private key**. Το public key κοινοποιείται σε άλλους, ενώ το private key κρατιέται μυστικό.
- **Υποστηρίζεται:** [cryptoKeyVersions.asymmetricSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricSign), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey) - **Supported:** [cryptoKeyVersions.asymmetricSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricSign), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
- **Ασύμμετρη Αποκρυπτογράφηση**: Χρησιμοποιείται για να επαληθεύσει την αυθεντικότητα ενός μηνύματος ή δεδομένων. Μια ψηφιακή υπογραφή δημιουργείται χρησιμοποιώντας ένα ιδιωτικό κλειδί και μπορεί να επαληθευτεί χρησιμοποιώντας το αντίστοιχο δημόσιο κλειδί. - **Asymmetric Decryption**: Χρησιμοποιείται για την επαλήθευση της αυθεντικότητας ενός μηνύματος ή δεδομένων. Μια ψηφιακή υπογραφή δημιουργείται χρησιμοποιώντας ένα private key και μπορεί να επαληθευτεί με το αντίστοιχο public key.
- **Υποστηρίζεται:** [cryptoKeyVersions.asymmetricDecrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricDecrypt), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey) - **Supported:** [cryptoKeyVersions.asymmetricDecrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricDecrypt), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
- **Υπογραφή MAC**: Χρησιμοποιείται για να διασφαλίσει **την ακεραιότητα και την αυθεντικότητα των δεδομένων δημιουργώντας έναν κωδικό αυθεντικοποίησης μηνύματος (MAC) χρησιμοποιώντας ένα μυστικό κλειδί**. Το HMAC χρησιμοποιείται συνήθως για την αυθεντικοποίηση μηνυμάτων σε πρωτόκολλα δικτύου και λογισμικό εφαρμογών. - **MAC Signing**: Χρησιμοποιείται για να εξασφαλίσει **την ακεραιότητα και την αυθεντικότητα των δεδομένων δημιουργώντας ένα message authentication code (MAC) χρησιμοποιώντας ένα secret key**. Το HMAC χρησιμοποιείται συνήθως για message authentication σε πρωτόκολλα δικτύου και εφαρμογές λογισμικού.
- **Υποστηρίζεται:** [cryptoKeyVersions.macSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macSign), [cryptoKeyVersions.macVerify](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macVerify) - **Supported:** [cryptoKeyVersions.macSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macSign), [cryptoKeyVersions.macVerify](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macVerify)
### Περίοδος Περιστροφής & Προγραμματισμένη για καταστροφή περίοδος ### Rotation Period & Programmed for destruction period
Κατά **προεπιλογή**, κάθε **90 ημέρες** αλλά μπορεί να **προσαρμοστεί εύκολα** και **εντελώς**. Από **προεπιλογή**, κάθε **90 ημέρες**, αλλά μπορεί να **προσαρμοστεί εύκολα και πλήρως.**
Η περίοδος "Προγραμματισμένη για καταστροφή" είναι ο **χρόνος από τη στιγμή που ο χρήστης ζητά να διαγραφεί το κλειδί** μέχρι το κλειδί να **διαγραφεί**. Δεν μπορεί να αλλάξει μετά τη δημιουργία του κλειδιού (προεπιλογή 1 ημέρα). Η περίοδος "Programmed for destruction" είναι ο **χρόνος από τη στιγμή που ο χρήστης ζητάει τη διαγραφή του κλειδιού** μέχρι το κλειδί να **διαγραφεί**. Δεν μπορεί να αλλάξει αφού το κλειδί δημιουργηθεί (προεπιλογή 1 ημέρα).
### Κύρια Έκδοση ### Primary Version
Κάθε κλειδί KMS μπορεί να έχει πολλές εκδόσεις, μία από αυτές πρέπει να είναι η **προεπιλεγμένη**, αυτή θα είναι η χρησιμοποιούμενη όταν **δεν καθορίζεται έκδοση κατά την αλληλεπίδραση με το κλειδί KMS**. Κάθε 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**, έτσι μπορείτε να έχετε πρόσβαση σε αυτά:
```bash ```bash
# List the global keyrings available # List the global keyrings available
gcloud kms keyrings list --location global gcloud kms keyrings list --location global
@@ -61,13 +74,13 @@ gcloud kms decrypt --ciphertext-file=[INFILE] \
--keyring [KEYRING] \ --keyring [KEYRING] \
--location global --location global
``` ```
### Ανάβαση Δικαιωμάτων ### Privilege Escalation
{{#ref}} {{#ref}}
../gcp-privilege-escalation/gcp-kms-privesc.md ../gcp-privilege-escalation/gcp-kms-privesc.md
{{#endref}} {{#endref}}
### Μετά την Εκμετάλλευση ### Post Exploitation
{{#ref}} {{#ref}}
../gcp-post-exploitation/gcp-kms-post-exploitation.md ../gcp-post-exploitation/gcp-kms-post-exploitation.md