AWS - S3 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

S3

For more information check:

AWS - S3, Athena & Glacier Enum

Sensitive Information

Κάποιες φορές θα μπορείτε να βρείτε ευαίσθητες πληροφορίες αναγνώσιμες μέσα στα buckets. Για παράδειγμα, terraform state secrets.

Pivoting

Διαφορετικές πλατφόρμες μπορεί να χρησιμοποιούν S3 για αποθήκευση ευαίσθητων assets.
Για παράδειγμα, airflow μπορεί να αποθηκεύει DAGs code εκεί, ή web pages μπορεί να σερβίρονται απευθείας από το S3. Ένας attacker με write permissions θα μπορούσε να modify the code στο bucket για να pivot σε άλλες πλατφόρμες, ή να takeover accounts τροποποιώντας JS αρχεία.

S3 Ransomware

Σε αυτό το σενάριο, ο attacker δημιουργεί ένα KMS (Key Management Service) key στον δικό του AWS account ή σε έναν άλλο compromised account. Έπειτα κάνει αυτό το key προσβάσιμο σε οποιονδήποτε στον κόσμο, επιτρέποντας σε οποιονδήποτε AWS user, role, ή account να κρυπτογραφήσει objects χρησιμοποιώντας αυτό το key. Ωστόσο, τα αντικείμενα δεν μπορούν να αποκρυπτογραφηθούν.

Ο attacker εντοπίζει ένα στοχοθετημένο S3 bucket και αποκτά write-level access σε αυτό με διάφορους τρόπους. Αυτό μπορεί να οφείλεται σε κακή διαμόρφωση του bucket που το εκθέτει δημόσια ή στο ότι ο attacker απέκτησε πρόσβαση στο AWS περιβάλλον. Ο attacker στοχεύει συνήθως buckets που περιέχουν ευαίσθητες πληροφορίες όπως προσωπικά αναγνωρίσιμα δεδομένα (PII), προστατευμένες ιατρικές πληροφορίες (PHI), logs, backups, κ.ά.

Για να καθορίσει αν το bucket μπορεί να στοχευτεί για ransomware, ο attacker ελέγχει τη διαμόρφωσή του. Αυτό περιλαμβάνει την επαλήθευση αν είναι ενεργοποιημένο το S3 Object Versioning και αν το multi-factor authentication delete (MFA delete) είναι ενεργοποιημένο. Αν το Object Versioning δεν είναι ενεργοποιημένο, ο attacker μπορεί να προχωρήσει. Αν το Object Versioning είναι ενεργοποιημένο αλλά το MFA delete είναι απενεργοποιημένο, ο attacker μπορεί να disable Object Versioning. Αν και το Object Versioning και το MFA delete είναι ενεργοποιημένα, γίνεται πιο δύσκολο για τον attacker να κάνει ransomware σε αυτό το συγκεκριμένο bucket.

Χρησιμοποιώντας το AWS API, ο attacker αντικαθιστά κάθε object στο bucket με ένα encrypted αντίγραφο χρησιμοποιώντας το δικό του KMS key. Αυτό ουσιαστικά κρυπτογραφεί τα δεδομένα στο bucket, καθιστώντας τα μη προσβάσιμα χωρίς το key.

Για να ασκήσει περαιτέρω πίεση, ο attacker προγραμματίζει τη διαγραφή του KMS key που χρησιμοποιήθηκε στην επίθεση. Αυτό δίνει στον στόχο ένα παράθυρο 7 ημερών για να ανακτήσει τα δεδομένα πριν το key διαγραφεί και τα δεδομένα χαθούν οριστικά.

Τέλος, ο attacker μπορεί να ανεβάσει ένα τελικό αρχείο, συνήθως ονομαζόμενο “ransom-note.txt”, που περιέχει οδηγίες προς τον στόχο για το πώς να ανακτήσει τα αρχεία του. Αυτό το αρχείο ανεβαίνει χωρίς κρυπτογράφηση, πιθανώς για να τραβήξει την προσοχή του στόχου και να τον ενημερώσει για την επίθεση ransomware.

SSE-C (Customer-Provided Key) Ransomware (Codefinger-like)

Μια άλλη παραλλαγή είναι η κατάχρηση του SSE-C (S3 server-side encryption with customer-provided keys). Με το SSE-C, ο client παρέχει το encryption key σε κάθε αίτημα και η AWS δεν αποθηκεύει το key. Αυτό σημαίνει ότι αν ένας attacker επανεγγράψει objects χρησιμοποιώντας το δικό του SSE-C key, τα δεδομένα του θύματος γίνονται μη αναγνώσιμα εκτός αν το θύμα μπορεί να παράσχει το attacker-controlled key.

  • Preconditions: Compromised AWS credentials (ή οποιοδήποτε principal με τα κατάλληλα permissions) και η ικανότητα να rewrite objects (π.χ., s3:PutObject στα target keys/prefixes). Αυτό συχνά συνοδεύεται από την ικανότητα να οριστούν destructive lifecycle policies (βλέπε παρακάτω), π.χ. s3:PutLifecycleConfiguration.
  • Attack chain:
  1. Attacker δημιουργεί ένα τυχαίο 256-bit key (AES-256) και το κρατάει.
  2. Attacker rewrites υπάρχοντα objects (ίδια object keys) χρησιμοποιώντας SSE-C headers ώστε το αποθηκευμένο object να είναι πλέον κρυπτογραφημένο με το attacker key.
  3. Το θύμα δεν μπορεί να κατεβάσει/αποκρυπτογραφήσει χωρίς να παρέχει το SSE-C key (ακόμα κι αν τα IAM permissions είναι εντάξει).
  4. Attacker μπορεί να διαγράψει το key (ή απλά να μην το παρέχει ποτέ) κάνοντας τα δεδομένα μη ανακτήσιμα.

Example (conceptual) CLI usage:

# Upload/overwrite an object encrypted with attacker-provided SSE-C key
aws s3 cp ./file s3://<BUCKET>/<KEY> \
--sse-c AES256 \
--sse-c-key <BASE64_32_BYTES>

# Download requires providing the same key again
aws s3 cp s3://<BUCKET>/<KEY> ./file \
--sse-c AES256 \
--sse-c-key <BASE64_32_BYTES>
Προσθήκη Πίεσης: Κατάχρηση “Timer” του lifecycle

Για να αφαιρέσουν επιλογές ανάκτησης (όπως παλιές εκδόσεις), οι επιτιθέμενοι μπορούν να συνδυάσουν επανεγγραφές SSE-C με κανόνες κύκλου ζωής που λήγουν αντικείμενα και/ή διαγράφουν noncurrent versions μετά από μικρό χρονικό διάστημα:

  • s3:PutLifecycleConfiguration στο bucket επιτρέπει σε έναν επιτιθέμενο να προγραμματίσει διαγραφές χωρίς να εκτελεί ρητές εντολές delete για κάθε αντικείμενο/έκδοση.
  • Αυτό είναι ιδιαίτερα αποτελεσματικό όταν versioning είναι ενεργοποιημένο, επειδή μπορεί να αφαιρέσει την “προηγούμενη καλή έκδοση” που διαφορετικά θα επέτρεπε ανάκτηση.
Ανίχνευση & Αντιμετώπιση
  • Προτιμήστε SSE-KMS (ή SSE-S3) αντί του SSE-C, εκτός αν έχετε ισχυρό λειτουργικό λόγο να επιτρέψετε SSE-C.
  • Παρακολουθήστε/ειδοποιήστε για αιτήσεις PutObject που χρησιμοποιούν headers SSE-C (CloudTrail data events για S3).
  • Παρακολουθήστε/ειδοποιήστε για απροσδόκητα PutBucketLifecycleConfiguration (αλλαγές lifecycle).
  • Παρακολουθήστε/ειδοποιήστε για ξαφνικές κορυφώσεις στη δραστηριότητα υπεγγραφής (ίδια keys που ενημερώνονται γρήγορα) και διαγραφές delete-marker/εκδόσεων.
  • Περιορίστε δικαιώματα υψηλού κινδύνου: Περιορίστε το s3:PutObject σε απαραίτητα prefixes· περιορίστε αυστηρά τα s3:PutLifecycleConfiguration και s3:PutBucketVersioning; εξετάστε την απαίτηση MFA για ευαίσθητες διαχειριστικές ενέργειες (όπου εφαρμόζεται) και χρησιμοποιήστε ξεχωριστούς admin ρόλους με εγκρίσεις.
  • Στάση ανάκτησης: Χρησιμοποιήστε versioning, backups, και αμετάβλητα/εκτός σύνδεσης αντίγραφα (S3 replication σε προστατευμένο account, backup vaults, κ.λπ.); προστατέψτε τις noncurrent versions από επιθετικές διαγραφές και φυλάξτε τις αλλαγές lifecycle με SCPs / guardrails.

s3:RestoreObject

Ένας επιτιθέμενος με το δικαίωμα s3:RestoreObject μπορεί να επανενεργοποιήσει αντικείμενα που έχουν αρχειοθετηθεί στο Glacier ή στο Deep Archive, καθιστώντας τα προσωρινά προσβάσιμα. Αυτό επιτρέπει την ανάκτηση και την εξαγωγή (exfiltration) ιστορικά αρχειοθετημένων δεδομένων (backups, snapshots, logs, certifications, παλιά secrets) που κανονικά θα ήταν εκτός προσβασιμότητας. Εάν ο επιτιθέμενος συνδυάσει αυτό το δικαίωμα με δικαιώματα ανάγνωσης (π.χ. s3:GetObject), μπορεί να αποκτήσει πλήρη αντίγραφα ευαίσθητων δεδομένων.

aws s3api restore-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY> \
--restore-request '{
"Days": <NUMBER_OF_DAYS>,
"GlacierJobParameters": { "Tier": "Standard" }
}'

s3:Delete*

Ένας attacker με την άδεια s3:Delete* μπορεί να διαγράψει objects, versions και ολόκληρα buckets, να διαταράξει backups και να προκαλέσει άμεση και μη αναστρέψιμη απώλεια δεδομένων, καταστροφή αποδεικτικών στοιχείων και συμβιβασμό των backup ή recovery artifacts.

# Delete an object from a bucket
aws s3api delete-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY>

# Delete a specific version
aws s3api delete-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY> \
--version-id <VERSION_ID>

# Delete a bucket
aws s3api delete-bucket \
--bucket <BUCKET_NAME>

Για περισσότερες πληροφορίες Δείτε την αρχική έρευνα.

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