AWS - S3, Athena & Glacier 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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
S3
Amazon S3 είναι μια υπηρεσία που σας επιτρέπει να αποθηκεύετε μεγάλα ποσά δεδομένων.
Amazon S3 παρέχει πολλαπλές επιλογές για να επιτύχετε την προστασία των δεδομένων σε κατάσταση at rest. Οι επιλογές περιλαμβάνουν Permission (Policy), Encryption (Client and Server Side), Bucket Versioning και MFA based delete. Ο χρήστης μπορεί να ενεργοποιήσει οποιαδήποτε από αυτές τις επιλογές για να πετύχει την προστασία των δεδομένων. Η Data replication είναι μια εσωτερική λειτουργία της AWS όπου S3 automatically replicates each object across all the Availability Zones και ο οργανισμός δεν χρειάζεται να την ενεργοποιήσει σε αυτή την περίπτωση.
Με resource-based permissions, μπορείτε να ορίσετε permissions για υπο-φακέλους (sub-directories) του bucket σας ξεχωριστά.
Bucket Versioning and MFA based delete
Όταν το Bucket Versioning είναι ενεργοποιημένο, κάθε ενέργεια που προσπαθεί να τροποποιήσει ένα αρχείο μέσα σε ένα bucket θα δημιουργήσει μια νέα έκδοση του αρχείου, διατηρώντας επίσης και το προηγούμενο περιεχόμενο. Επομένως, δεν θα αντικαταστήσει το περιεχόμενο.
Επιπλέον, το MFA based delete θα εμποδίσει τη διαγραφή εκδόσεων αρχείων στο S3 bucket και επίσης την απενεργοποίηση του Bucket Versioning, έτσι ένας attacker δεν θα μπορεί να τροποποιήσει αυτά τα αρχεία.
S3 Access logs
Είναι δυνατόν να ενεργοποιήσετε S3 access logging (που από προεπιλογή είναι απενεργοποιημένο) για κάποιο bucket και να αποθηκεύσετε τα logs σε διαφορετικό bucket για να γνωρίζετε ποιος προσπελαύνει το bucket (και τα δύο buckets πρέπει να βρίσκονται στην ίδια region).
S3 Presigned URLs
Είναι δυνατόν να δημιουργηθεί ένα presigned URL που συνήθως μπορεί να χρησιμοποιηθεί για να έχετε πρόσβαση στο συγκεκριμένο αρχείο στο bucket. Ένα presigned 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
Ένα presigned URL μπορεί να δημιουργηθεί από το cli χρησιμοποιώντας credentials ενός principal που έχει πρόσβαση στο object (αν ο account που χρησιμοποιείτε δεν έχει πρόσβαση, θα δημιουργηθεί ένα συντομότερο presigned URL αλλά θα είναι άχρηστο)
aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'
Note
Η μόνη απαραίτητη άδεια για τη δημιουργία ενός presigned URL είναι η άδεια που παρέχεται, οπότε για την προηγούμενη εντολή η μόνη άδεια που χρειάζεται ο principal είναι
s3:GetObjectΕπίσης είναι δυνατό να δημιουργηθούν presigned URLs με άλλες άδειες:
import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='put_object',
Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600
)
S3 Encryption Mechanisms
DEK σημαίνει Κλειδί Κρυπτογράφησης Δεδομένων και είναι το κλειδί που πάντα δημιουργείται και χρησιμοποιείται για την κρυπτογράφηση των δεδομένων.
Server-side encryption with S3 managed keys, SSE-S3
Αυτή η επιλογή απαιτεί ελάχιστη διαμόρφωση και όλη η διαχείριση των κλειδιών κρυπτογράφησης γίνεται από την AWS. Το μόνο που χρειάζεται να κάνετε είναι να ανεβάσετε τα δεδομένα σας και το S3 θα χειριστεί όλα τα υπόλοιπα. Σε κάθε bucket σε λογαριασμό S3 ανατίθεται ένα bucket key.
- Κρυπτογράφηση:
- Object Data + created plaintext DEK –> Encrypted data (stored inside S3)
- Created plaintext DEK + S3 Master Key –> Encrypted DEK (stored inside S3) and plain text is deleted from memory
- Αποκρυπτογράφηση:
- Encrypted DEK + S3 Master Key –> Plaintext DEK
- Plaintext DEK + Encrypted data –> Object Data
Please, note that in this case the key is managed by AWS (rotation only every 3 years). If you use your own key you willbe able to rotate, disable and apply access control.
Server-side encryption with KMS managed keys, SSE-KMS
Αυτή η μέθοδος επιτρέπει στο S3 να χρησιμοποιεί την υπηρεσία διαχείρισης κλειδιών για να δημιουργήσει τα data encryption keys σας. Το KMS σας δίνει πολύ μεγαλύτερη ευελιξία στο πώς διαχειρίζεστε τα κλειδιά σας. Για παράδειγμα, μπορείτε να απενεργοποιήσετε, να περιστρέψετε και να εφαρμόσετε κανόνες πρόσβασης στο CMK, καθώς και να παρακολουθείτε τη χρήση τους μέσω του AWS Cloud Trail.
- Κρυπτογράφηση:
- S3 request data keys from KMS CMK
- KMS uses a CMK to generate the pair DEK plaintext and DEK encrypted and send them to S£
- S3 uses the paintext key to encrypt the data, store the encrypted data and the encrypted key and deletes from memory the plain text key
- Αποκρυπτογράφηση:
- S3 ask to KMS to decrypt the encrypted data key of the object
- KMS decrypt the data key with the CMK and send it back to S3
- S3 decrypts the object data
Server-side encryption with customer provided keys, SSE-C
Αυτή η επιλογή σας δίνει τη δυνατότητα να παρέχετε το δικό σας master key που ίσως χρησιμοποιείτε ήδη εκτός AWS. Το customer-provided key θα αποστέλλεται μαζί με τα δεδομένα σας στο S3, όπου το S3 θα εκτελεί την κρυπτογράφηση για εσάς.
- Κρυπτογράφηση:
- The user sends the object data + Customer key to S3
- The customer key is used to encrypt the data and the encrypted data is stored
- a salted HMAC value of the customer key is stored also for future key validation
- the customer key is deleted from memory
- Αποκρυπτογράφηση:
- The user send the customer key
- The key is validated against the HMAC value stored
- The customer provided key is then used to decrypt the data
Client-side encryption with KMS, CSE-KMS
Παρομοίως με το SSE-KMS, και αυτή η μέθοδος χρησιμοποιεί την υπηρεσία διαχείρισης κλειδιών για να δημιουργήσει τα data encryption keys σας. Ωστόσο, αυτή τη φορά το KMS καλείται από τον client και όχι από το S3. Η κρυπτογράφηση γίνεται στην πλευρά του client και τα κρυπτογραφημένα δεδομένα αποστέλλονται μετά στο S3 για αποθήκευση.
- Κρυπτογράφηση:
- Client request for a data key to KMS
- KMS returns the plaintext DEK and the encrypted DEK with the CMK
- Both keys are sent back
- The client then encrypts the data with the plaintext DEK and send to S3 the encrypted data + the encrypted DEK (which is saved as metadata of the encrypted data inside S3)
- Αποκρυπτογράφηση:
- The encrypted data with the encrypted DEK is sent to the client
- The client asks KMS to decrypt the encrypted key using the CMK and KMS sends back the plaintext DEK
- The client can now decrypt the encrypted data
Client-side encryption with customer provided keys, CSE-C
Με αυτόν τον μηχανισμό, μπορείτε να χρησιμοποιήσετε τα δικά σας keys και να αξιοποιήσετε έναν AWS-SDK client για να κρυπτογραφήσετε τα δεδομένα πριν τα στείλετε στο S3 για αποθήκευση.
- Κρυπτογράφηση:
- The client generates a DEK and encrypts the plaintext data
- Then, using it’s own custom CMK it encrypts the DEK
- submit the encrypted data + encrypted DEK to S3 where it’s stored
- Αποκρυπτογράφηση:
- S3 sends the encrypted data and DEK
- As the client already has the CMK used to encrypt the DEK, it decrypts the DEK and then uses the plaintext DEK to decrypt the data
Enumeration
Μία από τις παραδοσιακές κύριες μεθόδους για τον συμβιβασμό οργανισμών AWS ξεκινάει από τον συμβιβασμό δημόσια προσβάσιμων buckets. You can find public buckets enumerators in this page.
# Get buckets ACLs
aws s3api get-bucket-acl --bucket <bucket-name>
aws s3api get-object-acl --bucket <bucket-name> --key flag
# Get policy
aws s3api get-bucket-policy --bucket <bucket-name>
aws s3api get-bucket-policy-status --bucket <bucket-name> #if it's public
# list S3 buckets associated with a profile
aws s3 ls
aws s3api list-buckets
# list content of bucket (no creds)
aws s3 ls s3://bucket-name --no-sign-request
aws s3 ls s3://bucket-name --recursive --no-sign-request
# list content of bucket (with creds)
aws s3 ls s3://bucket-name
aws s3api list-objects-v2 --bucket <bucket-name>
aws s3api list-objects --bucket <bucket-name>
aws s3api list-object-versions --bucket <bucket-name>
# copy local folder to S3
aws s3 cp MyFolder s3://bucket-name --recursive
# delete
aws s3 rb s3://bucket-name –-force
# download a whole S3 bucket
aws s3 sync s3://<bucket>/ .
# move S3 bucket to different location
aws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1
# list the sizes of an S3 bucket and its contents
aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
##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 ACL
aws s3api get-bucket-acl --bucket <bucket-name> # Way 1 to get the ACL
aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://acl.json
aws s3api get-object-acl --bucket <bucket-name> --key flag #Way 2 to get the ACL
aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-policy file://objacl.json
##JSON ACL example
## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved.
{
"Owner": {
"DisplayName": "<DisplayName>",
"ID": "<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
dual-stack
Μπορείτε να αποκτήσετε πρόσβαση σε ένα S3 bucket μέσω ενός dual-stack endpoint χρησιμοποιώντας ένα virtual hosted-style ή ένα path-style endpoint name. Αυτά είναι χρήσιμα για πρόσβαση στο S3 μέσω IPv6.
Dual-stack endpoints χρησιμοποιούν την εξής σύνταξη:
bucketname.s3.dualstack.aws-region.amazonaws.coms3.dualstack.aws-region.amazonaws.com/bucketname
Privesc
Στην παρακάτω σελίδα μπορείτε να δείτε πώς να abuse S3 permissions to escalate privileges:
Unauthenticated Access
S3 Post Exploitation
Persistence
Άλλες ευπάθειες S3
S3 HTTP Cache Poisoning Issue
Σύμφωνα με αυτή την έρευνα ήταν δυνατό να αποθηκευτεί στην cache η απάντηση ενός αυθαίρετου bucket σαν να ανήκε σε άλλο. Αυτό θα μπορούσε να είχε χρησιμοποιηθεί για να τροποποιηθούν, για παράδειγμα, οι απαντήσεις σε αρχεία javascript και να συμβιβαστούν οποιεσδήποτε σελίδες που χρησιμοποιούν το S3 για αποθήκευση στατικού κώδικα.
Amazon Athena
Amazon Athena είναι μια διαδραστική υπηρεσία ερωτημάτων που κάνει εύκολο το να αναλύσετε δεδομένα απευθείας στο Amazon Simple Storage Service (Amazon S3) χρησιμοποιώντας το πρότυπο SQL.
Πρέπει να προετοιμάσετε έναν πίνακα relational DB με τη μορφή του περιεχομένου που θα εμφανίζεται στα S3 buckets που παρακολουθούνται. Έπειτα, το Amazon Athena θα μπορεί να γεμίσει τη βάση δεδομένων από τα logs, ώστε να μπορείτε να εκτελείτε ερωτήματα.
Amazon Athena υποστηρίζει τη δυνατότητα να εκτελεί queries σε δεδομένα S3 που είναι ήδη κρυπτογραφημένα και, αν διαμορφωθεί κατάλληλα, το Athena μπορεί επίσης να κρυπτογραφήσει τα αποτελέσματα του query, τα οποία μπορούν στη συνέχεια να αποθηκευτούν στο S3.
Αυτή η κρυπτογράφηση των αποτελεσμάτων είναι ανεξάρτητη από τα υποκείμενα δεδομένα S3 που ερωτήθηκαν, που σημαίνει ότι ακόμα και αν τα δεδομένα S3 δεν είναι κρυπτογραφημένα, τα αποτελέσματα των ερωτημάτων μπορούν να κρυπτογραφηθούν. Μερικά σημεία που πρέπει να γνωρίζετε είναι ότι το Amazon Athena υποστηρίζει μόνο δεδομένα που έχουν κρυπτογραφηθεί με τις εξής μεθόδους κρυπτογράφησης S3, SSE-S3, SSE-KMS, and CSE-KMS.
SSE-C και CSE-C δεν υποστηρίζονται. Επιπλέον, είναι σημαντικό να κατανοήσετε ότι το Amazon Athena θα εκτελεί ερωτήματα μόνο σε κρυπτογραφημένα αντικείμενα που βρίσκονται στην ίδια region με το ίδιο το query. Εάν χρειάζεται να κάνετε query σε δεδομένα S3 που έχουν κρυπτογραφηθεί χρησιμοποιώντας KMS, τότε απαιτούνται συγκεκριμένα permissions από τον χρήστη του Athena για να μπορέσει να εκτελέσει το query.
Enumeration
# Get catalogs
aws athena list-data-catalogs
# Get databases inside catalog
aws 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 results
aws athena list-query-executions
aws athena get-query-execution --query-execution-id <id> # Get query and meta of results
aws athena get-query-results --query-execution-id <id> # This will rerun the query and get the results
# Get workgroups & Prepared statements
aws athena list-work-groups
aws athena list-prepared-statements --work-group <wg-name>
aws athena get-prepared-statement --statement-name <name> --work-group <wg-name>
# Run query
aws athena start-query-execution --query-string <query>
Αναφορές
- https://cloudsecdocs.com/aws/defensive/tooling/cli/#s3
- https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

