mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
+65
-16
@@ -10,16 +10,16 @@
|
||||
../aws-services/aws-secrets-manager-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Ανάγνωση Secrets
|
||||
### Read Secrets
|
||||
|
||||
Τα **secrets είναι ευαίσθητες πληροφορίες**, [δείτε τη σελίδα privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) για να μάθετε πώς να τα διαβάσετε.
|
||||
Τα **secrets καθεαυτά είναι ευαίσθητες πληροφορίες**, [check the privesc page](../aws-privilege-escalation/aws-secrets-manager-privesc.md) για να μάθετε πώς να τα διαβάσετε.
|
||||
|
||||
### DoS — Αλλαγή τιμής του Secret
|
||||
### DoS Change Secret Value
|
||||
|
||||
Αλλάζοντας την τιμή του secret μπορείς να **DoS όλα τα συστήματα που εξαρτώνται από αυτήν την τιμή.**
|
||||
Η αλλαγή της τιμής του secret μπορεί να **DoS όλα τα συστήματα που εξαρτώνται από αυτή την τιμή.**
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι οι προηγούμενες τιμές αποθηκεύονται επίσης, οπότε είναι εύκολο να επιστρέψετε στην προηγούμενη τιμή.
|
||||
> Σημειώστε ότι οι προηγούμενες τιμές αποθηκεύονται επίσης, οπότε είναι εύκολο απλά να επιστρέψετε στην προηγούμενη τιμή.
|
||||
```bash
|
||||
# Requires permission secretsmanager:PutSecretValue
|
||||
aws secretsmanager put-secret-value \
|
||||
@@ -28,19 +28,19 @@ aws secretsmanager put-secret-value \
|
||||
```
|
||||
### DoS Change KMS key
|
||||
|
||||
Αν ο attacker έχει την άδεια secretsmanager:UpdateSecret, μπορεί να ρυθμίσει το secret ώστε να χρησιμοποιεί ένα KMS key που ανήκει στον attacker. Αυτό το key αρχικά ρυθμίζεται με τέτοιο τρόπο ώστε οποιοσδήποτε να μπορεί να το προσπελάσει και να το χρησιμοποιήσει, επομένως η ενημέρωση του secret με το νέο key είναι δυνατή. Εάν το key δεν ήταν προσβάσιμο, το secret δεν θα μπορούσε να ενημερωθεί.
|
||||
Εάν ο attacker έχει την άδεια secretsmanager:UpdateSecret, μπορεί να διαμορφώσει το secret ώστε να χρησιμοποιεί ένα KMS key που ανήκει στον attacker. Αυτό το key αρχικά έχει ρυθμιστεί με τέτοιο τρόπο ώστε ο οποιοσδήποτε να μπορεί να το προσπελάσει και να το χρησιμοποιήσει, οπότε η ενημέρωση του secret με το νέο key είναι δυνατή. Εάν το key δεν ήταν προσβάσιμο, το secret δεν θα μπορούσε να ενημερωθεί.
|
||||
|
||||
Αφού αλλάξει το key για το secret, ο attacker τροποποιεί τη διαμόρφωση του key του ώστε μόνο ο ίδιος να έχει πρόσβαση. Με αυτόν τον τρόπο, στις επόμενες εκδόσεις του secret θα κρυπτογραφείται με το νέο key, και επειδή δεν υπάρχει πρόσβαση σε αυτό, η δυνατότητα ανάκτησης του secret θα χαθεί.
|
||||
Μετά την αλλαγή του key για το secret, ο attacker τροποποιεί τη διαμόρφωση του key του έτσι ώστε μόνο εκείνος να έχει πρόσβαση. Με αυτόν τον τρόπο, στις επόμενες εκδόσεις του secret θα κρυπτογραφηθεί με το νέο key, και αφού δεν υπάρχει πρόσβαση σε αυτό, η δυνατότητα ανάκτησης του secret θα χαθεί.
|
||||
|
||||
Είναι σημαντικό να σημειωθεί ότι αυτή η μη προσβασιμότητα θα συμβεί μόνο σε μεταγενέστερες εκδόσεις, μετά την αλλαγή του περιεχομένου του secret, αφού η τρέχουσα έκδοση εξακολουθεί να είναι κρυπτογραφημένη με το αρχικό KMS key.
|
||||
Είναι σημαντικό να σημειωθεί ότι αυτή η μη προσβασιμότητα θα συμβεί μόνο σε μεταγενέστερες εκδόσεις, αφού αλλάξει το περιεχόμενο του secret, καθώς η τρέχουσα έκδοση εξακολουθεί να είναι κρυπτογραφημένη με το αρχικό KMS key.
|
||||
```bash
|
||||
aws secretsmanager update-secret \
|
||||
--secret-id MyTestSecret \
|
||||
--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
|
||||
```
|
||||
### DoS Deleting Secret
|
||||
### DoS Διαγραφή μυστικού
|
||||
|
||||
Ο ελάχιστος αριθμός ημερών για να διαγραφεί ένα secret είναι 7
|
||||
Ο ελάχιστος αριθμός ημερών για να διαγραφεί ένα μυστικό είναι 7
|
||||
```bash
|
||||
aws secretsmanager delete-secret \
|
||||
--secret-id MyTestSecret \
|
||||
@@ -48,16 +48,16 @@ aws secretsmanager delete-secret \
|
||||
```
|
||||
## secretsmanager:RestoreSecret
|
||||
|
||||
Είναι δυνατή η επαναφορά ενός secret, η οποία επιτρέπει την αποκατάσταση των secrets που έχουν προγραμματιστεί για διαγραφή, αφού η ελάχιστη περίοδος διαγραφής για τα secrets είναι 7 ημέρες και η μέγιστη 30 ημέρες. Σε συνδυασμό με την άδεια secretsmanager:GetSecretValue, αυτό καθιστά δυνατή την ανάκτηση του περιεχομένου τους.
|
||||
Είναι δυνατόν να επαναφέρετε ένα secret, κάτι που επιτρέπει την επαναφορά secrets που έχουν προγραμματιστεί για διαγραφή, καθώς η ελάχιστη περίοδος διαγραφής για secrets είναι 7 ημέρες και η μέγιστη είναι 30 ημέρες. Σε συνδυασμό με την άδεια secretsmanager:GetSecretValue, αυτό καθιστά δυνατή την ανάκτηση του περιεχομένου τους.
|
||||
|
||||
Για να ανακτήσετε ένα secret που βρίσκεται στη διαδικασία διαγραφής, μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή:
|
||||
Για να ανακτήσετε ένα secret που βρίσκεται σε διαδικασία διαγραφής, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή:
|
||||
```bash
|
||||
aws secretsmanager restore-secret \
|
||||
--secret-id <Secret_Name>
|
||||
```
|
||||
## secretsmanager:DeleteResourcePolicy
|
||||
|
||||
Αυτή η ενέργεια επιτρέπει τη διαγραφή της πολιτικής πόρου που ελέγχει ποιος μπορεί να έχει πρόσβαση σε ένα μυστικό. Αυτό μπορεί να οδηγήσει σε DoS εάν η πολιτική πόρου είχε ρυθμιστεί ώστε να επιτρέπει πρόσβαση σε ένα συγκεκριμένο σύνολο χρηστών.
|
||||
Αυτή η ενέργεια επιτρέπει τη διαγραφή της πολιτικής πόρου που ελέγχει ποιος μπορεί να αποκτήσει πρόσβαση σε ένα secret. Αυτό μπορεί να οδηγήσει σε DoS εάν η πολιτική πόρου είχε διαμορφωθεί ώστε να επιτρέπει πρόσβαση σε ένα συγκεκριμένο σύνολο χρηστών.
|
||||
|
||||
Για να διαγράψετε την πολιτική πόρου:
|
||||
```bash
|
||||
@@ -66,11 +66,11 @@ aws secretsmanager delete-resource-policy \
|
||||
```
|
||||
## secretsmanager:UpdateSecretVersionStage
|
||||
|
||||
Οι καταστάσεις ενός secret χρησιμοποιούνται για τη διαχείριση των εκδόσεων ενός secret. AWSCURRENT σηματοδοτεί την ενεργή έκδοση που χρησιμοποιούν οι εφαρμογές, AWSPREVIOUS διατηρεί την προηγούμενη έκδοση ώστε να μπορείτε να επαναφέρετε αν χρειαστεί, και AWSPENDING χρησιμοποιείται στη διαδικασία rotation για να προετοιμάσει και να επικυρώσει μια νέα έκδοση πριν την κάνει την τρέχουσα.
|
||||
Οι καταστάσεις ενός μυστικού χρησιμοποιούνται για τη διαχείριση των εκδόσεων ενός μυστικού. AWSCURRENT σηματοδοτεί την ενεργή έκδοση που χρησιμοποιούν οι εφαρμογές, AWSPREVIOUS διατηρεί την προηγούμενη έκδοση ώστε να μπορείτε να κάνετε επαναφορά αν χρειαστεί, και AWSPENDING χρησιμοποιείται στη διαδικασία rotation για να προετοιμάσει και να επικυρώσει μια νέα έκδοση πριν την καταστήσει την τρέχουσα.
|
||||
|
||||
Οι εφαρμογές διαβάζουν πάντα την έκδοση με AWSCURRENT. Αν κάποιος μετακινήσει αυτήν την ετικέτα σε λάθος έκδοση, οι εφαρμογές θα χρησιμοποιήσουν μη έγκυρα credentials και ενδέχεται να αποτύχουν.
|
||||
Οι εφαρμογές διαβάζουν πάντα την έκδοση με AWSCURRENT. Αν κάποιος μετακινήσει αυτή την ετικέτα σε λάθος έκδοση, οι εφαρμογές θα χρησιμοποιήσουν άκυρα credentials και μπορεί να αποτύχουν.
|
||||
|
||||
Το AWSPREVIOUS δεν χρησιμοποιείται αυτόματα. Ωστόσο, αν το AWSCURRENT αφαιρεθεί ή ανατεθεί λανθασμένα, μπορεί να φαίνεται ότι όλα εξακολουθούν να λειτουργούν με την προηγούμενη έκδοση.
|
||||
AWSPREVIOUS δεν χρησιμοποιείται αυτόματα. Ωστόσο, αν το AWSCURRENT αφαιρεθεί ή ανατεθεί λανθασμένα, μπορεί να φαίνεται ότι όλα εξακολουθούν να τρέχουν με την προηγούμενη έκδοση.
|
||||
```bash
|
||||
aws secretsmanager update-secret-version-stage \
|
||||
--secret-id <your-secret-name-or-arn> \
|
||||
@@ -79,3 +79,52 @@ aws secretsmanager update-secret-version-stage \
|
||||
--remove-from-version-id <previous-version-id>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Μαζική Εξαγωγή Secrets μέσω BatchGetSecretValue (έως 20 ανά κλήση)
|
||||
|
||||
Κατάχρηση του Secrets Manager BatchGetSecretValue API για να ανακτήσεις έως 20 secrets σε ένα αίτημα. Αυτό μπορεί να μειώσει δραματικά τον όγκο κλήσεων API σε σύγκριση με την επανάληψη του GetSecretValue για κάθε secret. Εάν χρησιμοποιούνται φίλτρα (tags/name), απαιτείται επίσης η άδεια ListSecrets. Το CloudTrail εξακολουθεί να καταγράφει ένα event GetSecretValue για κάθε secret που ανακτάται στο batch.
|
||||
|
||||
Απαιτούμενα δικαιώματα
|
||||
- secretsmanager:BatchGetSecretValue
|
||||
- secretsmanager:GetSecretValue για κάθε στοχευμένο secret
|
||||
- secretsmanager:ListSecrets εάν χρησιμοποιείτε --filters
|
||||
- kms:Decrypt στα CMKs που χρησιμοποιούνται από τα secrets (αν δεν χρησιμοποιείται aws/secretsmanager)
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι η άδεια `secretsmanager:BatchGetSecretValue` από μόνη της δεν επαρκεί για την ανάκτηση των secrets — χρειάζεστε επίσης `secretsmanager:GetSecretValue` για κάθε secret που θέλετε να ανακτήσετε.
|
||||
|
||||
Εξαγωγή μέσω ρητής λίστας
|
||||
```bash
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--secret-id-list <secret1> <secret2> <secret3> \
|
||||
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'
|
||||
```
|
||||
Exfiltrate με φίλτρα (tag key/value ή name prefix)
|
||||
```bash
|
||||
# By tag key
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--filters Key=tag-key,Values=env \
|
||||
--max-results 20 \
|
||||
--query 'SecretValues[].{Name:Name,Val:SecretString}'
|
||||
|
||||
# By tag value
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--filters Key=tag-value,Values=prod \
|
||||
--max-results 20
|
||||
|
||||
# By name prefix
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--filters Key=name,Values=MyApp
|
||||
```
|
||||
Διαχείριση μερικών αποτυχιών
|
||||
```bash
|
||||
# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
|
||||
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>
|
||||
```
|
||||
Επιπτώσεις
|
||||
- Γρήγορο “smash-and-grab” πολλών secrets με λιγότερες κλήσεις API, πιθανώς παρακάμπτοντας ειδοποιήσεις ρυθμισμένες για αιχμές του GetSecretValue.
|
||||
- Τα CloudTrail logs εξακολουθούν να περιλαμβάνουν ένα GetSecretValue event ανά secret που ανακτήθηκε από το batch.
|
||||
|
||||
+4
-4
@@ -12,18 +12,18 @@
|
||||
|
||||
### `secretsmanager:GetSecretValue`
|
||||
|
||||
Ένας attacker με αυτήν την άδεια μπορεί να αποκτήσει την **αποθηκευμένη τιμή μέσα σε ένα secret** στο AWS **Secretsmanager**.
|
||||
Ένας attacker με αυτή την permission μπορεί να πάρει την **αποθηκευμένη τιμή μέσα σε ένα secret** στο AWS **Secretsmanager**.
|
||||
```bash
|
||||
aws secretsmanager get-secret-value --secret-id <secret_name> # Get value
|
||||
```
|
||||
**Πιθανός Αντίκτυπος:** Πρόσβαση σε ευαίσθητα δεδομένα εντός AWS Secrets Manager.
|
||||
**Πιθανός αντίκτυπος:** Πρόσβαση σε ευαίσθητα δεδομένα μέσα στην υπηρεσία AWS Secrets Manager.
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι ακόμη και με την άδεια `secretsmanager:BatchGetSecretValue`, ένας επιτιθέμενος θα χρειαστεί επίσης την `secretsmanager:GetSecretValue` για να ανακτήσει τα ευαίσθητα μυστικά.
|
||||
> Σημειώστε ότι ακόμη και με την άδεια `secretsmanager:BatchGetSecretValue`, ένας επιτιθέμενος θα χρειαζόταν επίσης την `secretsmanager:GetSecretValue` για να ανακτήσει τα ευαίσθητα secrets.
|
||||
|
||||
### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`)
|
||||
|
||||
Με τις προηγούμενες άδειες είναι δυνατό να **παραχωρηθεί πρόσβαση σε άλλους principals/accounts (ακόμη και εξωτερικούς)** ώστε να έχουν πρόσβαση στο **μυστικό**. Σημειώστε ότι για να **διαβαστούν μυστικά κρυπτογραφημένα** με ένα KMS key, ο χρήστης χρειάζεται επίσης να έχει **πρόσβαση στο KMS key** (περισσότερες πληροφορίες στη [KMS Enum page](../aws-services/aws-kms-enum.md)).
|
||||
Με τις παραπάνω άδειες είναι δυνατό να **δοθεί πρόσβαση σε άλλους principals/accounts (ακόμη και εξωτερικούς)** για να έχουν πρόσβαση στο **secret**. Σημειώστε ότι για να **διαβαστούν secrets κρυπτογραφημένα** με ένα KMS key, ο χρήστης χρειάζεται επίσης να έχει **πρόσβαση στο KMS key** (περισσότερες πληροφορίες στην [KMS Enum page](../aws-services/aws-kms-enum.md)).
|
||||
```bash
|
||||
aws secretsmanager list-secrets
|
||||
aws secretsmanager get-resource-policy --secret-id <secret_name>
|
||||
|
||||
Reference in New Issue
Block a user