AWS - S3, Athena & Glacier Enum

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

S3

Το Amazon S3 είναι ένα υπηρεσία που σας επιτρέπει να αποθηκεύετε μεγάλες ποσότητες δεδομένων.

Το Amazon S3 παρέχει πολλές επιλογές για την επίτευξη της προστασίας των δεδομένων στην κατάσταση αδράνειας. Οι επιλογές περιλαμβάνουν Άδεια (Πολιτική), Κρυπτογράφηση (Πελάτης και Εξυπηρετητής), Έκδοση κάδου και Διαγραφή βάσει MFA. Ο χρήστης μπορεί να ενεργοποιήσει οποιαδήποτε από αυτές τις επιλογές για να επιτύχει την προστασία των δεδομένων. Η αντιγραφή δεδομένων είναι μια εσωτερική δυνατότητα της AWS, όπου το S3 αντιγράφει αυτόματα κάθε αντικείμενο σε όλες τις ζώνες διαθεσιμότητας και η οργάνωση δεν χρειάζεται να το ενεργοποιήσει σε αυτήν την περίπτωση.

Με τις άδειες που βασίζονται στους πόρους, μπορείτε να ορίσετε άδειες για υπο-καταλόγους του κάδου σας ξεχωριστά.

Έκδοση κάδου και διαγραφή βάσει MFA

Όταν η έκδοση κάδου είναι ενεργοποιημένη, οποιαδήποτε ενέργεια προσπαθεί να αλλάξει ένα αρχείο μέσα σε ένα αρχείο θα δημιουργήσει μια νέα έκδοση του αρχείου, διατηρώντας επίσης το προηγούμενο περιεχόμενο του ίδιου. Έτσι, δεν θα αντικαταστήσει το περιεχόμενό του.

Επιπλέον, η διαγραφή βάσει MFA θα εμποδίσει τις εκδόσεις του αρχείου στον κάδο S3 από το να διαγραφούν και επίσης την απενεργοποίηση της έκδοσης κάδου, έτσι ένας επιτιθέμενος δεν θα μπορεί να αλλάξει αυτά τα αρχεία.

Καταγραφή πρόσβασης S3

Είναι δυνατόν να ενεργοποιήσετε την καταγραφή πρόσβασης S3 (η οποία από προεπιλογή είναι απενεργοποιημένη) σε έναν κάδο και να αποθηκεύσετε τα αρχεία καταγραφής σε έναν διαφορετικό κάδο για να γνωρίζετε ποιος έχει πρόσβαση στον κάδο (και οι δύο κάδοι πρέπει να βρίσκονται στην ίδια περιοχή).

Προ-υπογεγραμμένες διευθύνσεις URL S3

Είναι δυνατόν να δημιουργήσετε μια προ-υπογεγραμμένη διεύθυνση URL που συνήθως μπορεί να χρησιμοποιηθεί για να έχετε πρόσβαση στο συγκεκριμένο αρχείο στον κάδο. Μια προ-υπογεγραμμένη διεύθυνση URL φαίνεται κάπως έτσι:

https://<bucket-name>.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa

Ένα προεγγεγραμμένο URL μπορεί να δημιουργηθεί από το cli χρησιμοποιώντας διαπιστευτήρια ενός αρχέτυπου με πρόσβαση στο αντικείμενο (αν ο λογαριασμός που χρησιμοποιείτε δεν έχει πρόσβαση, θα δημιουργηθεί ένα πιο σύντομο προεγγεγραμμένο URL, αλλά θα είναι άχρηστο).

aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'

Η μόνη απαιτούμενη άδεια για τη δημιουργία ενός προεγγεγραμμένου URL είναι η άδεια που δίνεται, οπότε για την προηγούμενη εντολή η μόνη άδεια που χρειάζεται ο κύριος είναι η s3:GetObject.

Είναι επίσης δυνατό να δημιουργηθούν προεγγεγραμμένα URL με άλλες άδειες:

import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='put_object',
Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600
)

Μηχανισμοί Κρυπτογράφησης S3

Το DEK σημαίνει Data Encryption Key και είναι το κλειδί που πάντα δημιουργείται και χρησιμοποιείται για την κρυπτογράφηση των δεδομένων.

Κρυπτογράφηση στην πλευρά του διακομιστή με διαχείριση των κλειδιών από το S3, SSE-S3

Αυτή η επιλογή απαιτεί ελάχιστη διαμόρφωση και όλη η διαχείριση των κλειδιών κρυπτογράφησης που χρησιμοποιούνται γίνεται από το AWS. Το μόνο που χρειάζεται να κάνετε είναι να ανεβάσετε τα δεδομένα σας και το S3 θα χειριστεί όλα τα υπόλοιπα. Σε κάθε κάδο σε έναν λογαριασμό S3 αντιστοιχίζεται ένα κλειδί κάδου.

  • Κρυπτογράφηση:

  • Δεδομένα αντικειμένου + δημιουργημένο καθαρό κείμενο DEK --> Κρυπτογραφημένα δεδομένα (αποθηκευμένα μέσα στο S3)

  • Δημιουργημένο καθαρό κείμενο DEK + Κλειδί S3 Master --> Κρυπτογραφημένο DEK (αποθηκευμένο μέσα στο S3) και το καθαρό κείμενο διαγράφεται από τη μνήμη

  • Αποκρυπτογράφηση:

  • Κρυπτογραφημένο DEK + Κλειδί S3 Master --> Καθαρό κείμενο DEK

  • Καθαρό κείμενο DEK + Κρυπτογραφημένα δεδομένα --> Δεδομένα αντικειμένου

Παρακαλώ, σημειώστε ότι σε αυτήν την περίπτωση το κλειδί διαχειρίζεται από το AWS (περιστροφή μόνο κάθε 3 χρόνια). Εάν χρησιμοποιήσετε το δικό σας κλειδί, θα μπορείτε να το περιστρέφετε, να το απενεργοποιείτε και να εφαρμόζετε έλεγχο πρόσβασης.

Κρυπτογράφηση στην πλευρά του διακομιστή με διαχείριση των κλειδιών από το KMS, SSE-KMS

Αυτή η μέθοδος επιτρέπει στο S3 να χρησιμοποιεί την υπηρεσία διαχείρισης κλειδιών για τη δημιουργία των κλειδιών κρυπτογράφησης των δεδομένων σας. Το KMS σας παρέχει μεγαλύτερη ευελιξία στον τρόπο διαχείρισης των κλειδιών σας. Για παράδειγμα, μπορείτε να απενεργοποιήσετε, να περιστρέψετε και να εφαρμόσετε ελέγχους πρόσβασης στο CMK και να παρακολουθείτε τη χρήση τους χρησιμοποιώντας το AWS Cloud Trail.

  • Κρυπτογράφηση:

  • Το S3 ζητά τα κλειδιά δεδομένων από το KMS CMK

  • Το KMS χρησιμοποιεί ένα CMK για να δημιουργήσει το ζεύγος καθαρού κειμένου DEK και κρυπτογραφημένου DEK και τα στέλνει στο S3

  • Το S3 χρησιμοποιεί το καθαρό κλειδί για να κρυπτογραφήσει τα δεδομένα, αποθηκεύει τα κρυπτογραφημένα δεδομένα και το κρυπτογραφημένο κλειδί και διαγράφει από τη μνήμη το καθαρό κλειδί

  • Αποκρυπτογράφηση:

  • Το S3 ζητά από το KMS να αποκρυπτογραφήσει το κρυπτογραφημένο κλειδί δεδομένων του αντικειμένου

  • Το KMS αποκρυπτογραφεί το κλειδί δεδομένων με το CMK και το στέλνει πίσω στο S3

  • Το S3 αποκρυπτογραφεί τα δεδομένα του αντικειμένου

Κρυπτογράφηση στην πλευρά του διακομιστή με παρεχόμενα από τον πελάτη κλειδιά, SSE-C

Αυτή η επιλογή σας δίνει τη δυνατότητα να χρησιμοποιήσετε το δικό σας κύριο κλειδί που ίσως ήδη χρησιμοποιείτε εκτός του AWS. Το κλειδί που παρέχετε ως πελάτης θα σταλεί με τα δεδομένα σας στο S3, όπου το S3 θα πραγματοποιήσει την κρυπτογράφηση για εσάς.

  • Κρυπτογράφηση:

  • Ο χρήστης στέλνει τα δεδομένα αντικειμένου + το κλειδί του πελάτη στο S3

  • Το κλειδί του πελάτη χρησιμοποιείται για να κρυπτογραφήσει τα δεδομένα και τα κρυπτογραφημένα δεδομένα αποθηκεύονται

  • Αποθηκεύεται επίσης μια αλατωμένη τιμή HMAC του κλειδιού του πελάτη για μελλοντικό έλεγχο του κλειδιού

  • Το κλειδί του πελάτη διαγράφεται από τη μνήμη

  • Αποκρυπτογράφηση:

  • Ο χρήστης στέλνει το κλειδί του πελάτη

  • Το κλειδί επικυρώνεται έναντι της αποθηκευμένης τιμής HMAC

  • Το κλειδί που παρέχεται από τον πελάτη χρησιμοποιείται στη συνέχεια για να αποκρυπτογραφήσει τα δεδομένα

Κρυπτογράφηση στην πλευρά του πελάτη με το KMS, CSE ```bash # Get buckets ACLs aws s3api get-bucket-acl --bucket aws s3api get-object-acl --bucket --key flagGet policyaws s3api get-bucket-policy --bucket aws s3api get-bucket-policy-status --bucket #if it's publiclist S3 buckets associated with a profileaws s3 ls aws s3api list-bucketslist content of bucket (no creds)aws s3 ls s3://bucket-name --no-sign-request aws s3 ls s3://bucket-name --recursivelist content of bucket (with creds)aws s3 ls s3://bucket-name aws s3api list-objects-v2 --bucket aws s3api list-objects --bucket aws s3api list-object-versions --bucketcopy local folder to S3aws s3 cp MyFolder s3://bucket-name --recursivedeleteaws s3 rb s3://bucket-name –-forcedownload a whole S3 bucketaws s3 sync s3:/// .move S3 bucket to different locationaws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1list the sizes of an S3 bucket and its contentsaws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"Update Bucket policyaws s3api put-bucket-policy --policy file:///root/policy.json --bucket ##JSON policy example { "Id": "Policy1568185116930", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1568184932403", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": "arn:aws:s3:::welcome", "Principal": "" }, { "Sid": "Stmt1568185007451", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::welcome/", "Principal": "*" } ] }Update bucket ACLaws s3api get-bucket-acl --bucket # Way 1 to get the ACL aws s3api put-bucket-acl --bucket --access-control-policy file://acl.jsonaws s3api get-object-acl --bucket --key flag #Way 2 to get the ACL aws s3api put-object-acl --bucket --key flag --access-control-policy file://objacl.json##JSON ACL exampleMake sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved.{ "Owner": { "DisplayName": "", "ID": "" }, "Grants": [ { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" }, "Permission": "FULL_CONTROL" } ] }An ACL should give you the permission WRITE_ACP to be able to put a new ACL### Διπλής στοίβας <a href="#dual-stack-endpoints-description" id="dual-stack-endpoints-description"></a>Μπορείτε να αποκτήσετε πρόσβαση σε ένα κάδο S3 μέσω ενός σημείου πρόσβασης διπλής στοίβας χρησιμοποιώντας ένα εικονικό όνομα σημείου πρόσβασης σε στυλ φιλοξενούμενου ή ένα όνομα σημείου πρόσβασης σε στυλ διαδρομής. Αυτά είναι χρήσιμα για να αποκτήσετε πρόσβαση στο S3 μέσω του IPv6.Τα σημεία πρόσβασης διπλής στοίβας χρησιμοποιούν την ακόλουθη σύνταξη:* `bucketname.s3.dualstack.aws-region.amazonaws.com`* `s3.dualstack.aws-region.amazonaws.com/bucketname`### Ανέλεγκτη πρόσβαση<div data-gb-custom-block data-tag="content-ref" data-url='../../aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md'>[aws-s3-unauthenticated-enum.md](../../aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md)</div>### Εκμετάλλευση μετά από παραβίαση<div data-gb-custom-block data-tag="content-ref" data-url='../aws-post-exploitation/aws-s3-post-exploitation.md'>[aws-s3-post-exploitation.md](../aws-post-exploitation/aws-s3-post-exploitation.md)</div>### Διατήρηση<div data-gb-custom-block data-tag="content-ref" data-url='../aws-persistence/aws-s3-persistence.md'>[aws-s3-persistence.md](../aws-persistence/aws-s3-persistence.md)</div>## Άλλες ευπάθειες του S3### Πρόβλημα δηλητηρίασης της προσωρινής μνήμης HTTP του S3 <a href="#heading-s3-http-desync-cache-poisoning-issue" id="heading-s3-http-desync-cache-poisoning-issue"></a>[**Σύμφωνα με αυτήν την έρευνα**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) ήταν δυνατό να κρυφογραφηθεί η απόκριση ενός αυθαίρετου κάδου ως να ανήκε σε διαφορετικό. Αυτό θα μπορούσε να καταχραστεί για να αλλάξει, για παράδειγμα, τις αποκρίσεις αρχείων JavaScript και να παραβιάσει αυθαίρετες σελίδες που χρησιμοποιούν το S3 για να αποθηκεύουν στατικό κώδικα.## Amazon AthenaΤο Amazon Athena είναι ένα διαδραστικό υπηρεσία ερωτήσεων που διευκολύνει την ανάλυση δεδομένων απευθείας στην υπηρεσία αποθήκευσης απλού κειμένου της Amazon (Amazon **S3**) χρησιμοποιώντας την τυπική **SQL**.Πρέπει να **προετοιμάσετε μια σχεσιακή πίνακα βάσης δεδομένων** με τη μορφή του περιεχομένου που θα εμφανιστεί στους παρακολουθούμενους κάδους S3. Στη συνέχεια, το Amazon Athena θα μπορεί να γεμίσει τη βάση δεδομένων από τα αρχεία καταγραφής, ώστε να μπορείτε να την ερωτήσετε.Το Amazon Athena υποστηρίζει τη **δυνατότητα ερωτήσεων σε δεδομένα S3 που έχουν ήδη κρυπτογραφηθεί** και αν έχει ρυθμιστεί έτσι, **το Athena μπορεί επίσης να κρυπτογραφήσει τα αποτελέσματα της ερώτησης που μπορούν στη συνέχεια να αποθηκευτούν στο S3**.**Αυτή η κρυπτογράφηση των αποτελεσμάτων είναι ανεξάρτητη από τα καταγραφόμενα κρυπτογραφημένα δεδομένα S3**, πράγμα που σημαίνει ότι ακόμη και αν τα δεδομένα S3 δεν είναι κρυπτογραφημένα, τα αποτελέσματα της ερώτησης μπορούν να κρυπτογραφηθούν. Μερικά σημεία που πρέπει να γνωρίζετε είναι ότι το Amazon Athena υποστηρίζει μόνο δεδομένα που έχουν κρυπτογραφηθεί με τις εξής μεθόδους κρυπτογράφησης S3, SSE-S3, SSE-KMS και CSE-KMS.Οι SSE-C και CSE-E δεν υποστηρίζονται. Επιπλέον, είναι σημαντικό να κατανοήσετε ότι το Amazon Athena θα εκτελέσει ερωτήσεις μόνο εναντίον **κρυπτογραφημένων αντικειμένων που βρίσκονται στην ίδια περιοχή με την ερώτηση ίδια**. Εάν χρειάζεστε να ερωτήσετε δεδομένα S3 που έχουν κρυπτογραφηθεί χρησιμοποιώντας το KMS, τότε απαιτούνται συγκεκριμένες άδειες από τον χρήστη Athena για να τους επιτραπεί να εκτελέσουν την ερώτηση.```bash# Get catalogsaws athena list-data-catalogs# Get databases inside catalogaws athena list-databases --catalog-name <catalog-name>aws athena list-table-metadata --catalog-name <catalog-name> --database-name <db-name># Get query executions, queries and resultsaws athena list-query-executionsaws athena get-query-execution --query-execution-id <id> # Get query and meta of resultsaws athena get-query-results --query-execution-id <id> # This will rerun the query and get the results# Get workgroups & Prepared statementsaws athena list-work-groupsaws athena list-prepared-statements --work-group <wg-name>aws athena get-prepared-statement --statement-name <name> --work-group <wg-name># Run queryaws athena start-query-execution --query-string <query>Αναφορέςhttps://cloudsecdocs.com/aws/defensive/tooling/cli/#s3https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html

Last updated