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-services/aws-s3-a
This commit is contained in:
@@ -4,36 +4,36 @@
|
||||
|
||||
## S3
|
||||
|
||||
Το Amazon S3 είναι μια υπηρεσία που σας επιτρέπει να **αποθηκεύετε μεγάλες ποσότητες δεδομένων**.
|
||||
Amazon S3 είναι μια υπηρεσία που σας επιτρέπει να **αποθηκεύετε μεγάλα ποσά δεδομένων**.
|
||||
|
||||
Το Amazon S3 παρέχει πολλές επιλογές για να επιτευχθεί η **προστασία** των δεδομένων σε κατάσταση αδράνειας. Οι επιλογές περιλαμβάνουν **Άδεια** (Πολιτική), **Κρυπτογράφηση** (Client και Server Side), **Έκδοση Bucket** και **διαγραφή** με βάση το **MFA**. Ο **χρήστης μπορεί να ενεργοποιήσει** οποιαδήποτε από αυτές τις επιλογές για να επιτύχει την προστασία των δεδομένων. Η **αναπαραγωγή δεδομένων** είναι μια εσωτερική δυνατότητα της AWS όπου το **S3 αναπαράγει αυτόματα κάθε αντικείμενο σε όλες τις Ζώνες Διαθεσιμότητας** και η οργάνωση δεν χρειάζεται να την ενεργοποιήσει σε αυτή την περίπτωση.
|
||||
Amazon S3 παρέχει πολλαπλές επιλογές για να επιτύχετε την **προστασία** των δεδομένων σε REST. Οι επιλογές περιλαμβάνουν **Permission** (Policy), **Encryption** (Client and Server Side), **Bucket Versioning** και **MFA** **based delete**. Ο **χρήστης μπορεί να ενεργοποιήσει** οποιαδήποτε από αυτές τις επιλογές για να επιτύχει την προστασία των δεδομένων. Η **Data replication** είναι μια εσωτερική λειτουργία από την AWS όπου **S3 αντιγράφει αυτόματα κάθε αντικείμενο σε όλες τις Availability Zones** και ο οργανισμός δεν χρειάζεται να την ενεργοποιήσει σε αυτή την περίπτωση.
|
||||
|
||||
Με τις άδειες που βασίζονται σε πόρους, μπορείτε να ορίσετε άδειες για υποκαταλόγους του bucket σας ξεχωριστά.
|
||||
With resource-based permissions, you can define permissions for sub-directories of your bucket separately.
|
||||
|
||||
### Έκδοση Bucket και διαγραφή με βάση το MFA
|
||||
### Bucket Versioning and MFA based delete
|
||||
|
||||
Όταν η έκδοση bucket είναι ενεργοποιημένη, οποιαδήποτε ενέργεια που προσπαθεί να αλλάξει ένα αρχείο μέσα σε ένα αρχείο θα δημιουργήσει μια νέα έκδοση του αρχείου, διατηρώντας επίσης το προηγούμενο περιεχόμενο του ίδιου. Επομένως, δεν θα αντικαταστήσει το περιεχόμενό του.
|
||||
When bucket versioning is enabled, any action that tries to alter a file inside a file will generate a new version of the file, keeping also the previous content of the same. Therefore, it won't overwrite its content.
|
||||
|
||||
Επιπλέον, η διαγραφή με βάση το MFA θα αποτρέψει τις εκδόσεις αρχείων στο bucket S3 από το να διαγραφούν και επίσης την απενεργοποίηση της Έκδοσης Bucket, έτσι ώστε ένας επιτιθέμενος να μην μπορεί να αλλάξει αυτά τα αρχεία.
|
||||
Moreover, MFA based delete will prevent versions of file in the S3 bucket from being deleted and also Bucket Versioning from being disabled, so an attacker won't be able to alter these files.
|
||||
|
||||
### S3 Access logs
|
||||
|
||||
Είναι δυνατόν να **ενεργοποιήσετε τα αρχεία καταγραφής πρόσβασης S3** (τα οποία από προεπιλογή είναι απενεργοποιημένα) σε κάποιο bucket και να αποθηκεύσετε τα αρχεία καταγραφής σε ένα διαφορετικό bucket για να γνωρίζετε ποιος έχει πρόσβαση στο bucket (και τα δύο buckets πρέπει να βρίσκονται στην ίδια περιοχή).
|
||||
It's possible to **enable S3 access login** (which by default is disabled) to some bucket and save the logs in a different bucket to know who is accessing the bucket (both buckets must be in the same region).
|
||||
|
||||
### S3 Presigned URLs
|
||||
|
||||
Είναι δυνατόν να δημιουργήσετε μια προεγκεκριμένη διεύθυνση URL που μπορεί συνήθως να χρησιμοποιηθεί για **πρόσβαση στο συγκεκριμένο αρχείο** στο bucket. Μια **προεγκεκριμένη διεύθυνση URL φαίνεται έτσι**:
|
||||
It's possible to generate a presigned URL that can usually be used to **access the specified file** in the bucket. A **presigned URL looks like this**:
|
||||
```
|
||||
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 αλλά θα είναι άχρηστο)
|
||||
Ένα presigned URL μπορεί να **δημιουργηθεί από το cli χρησιμοποιώντας credentials ενός principal με πρόσβαση στο αντικείμενο** (εάν ο λογαριασμός που χρησιμοποιείτε δεν έχει πρόσβαση, θα δημιουργηθεί ένα πιο σύντομο presigned URL αλλά θα είναι άχρηστο)
|
||||
```bash
|
||||
aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'
|
||||
```
|
||||
> [!NOTE]
|
||||
> Η μόνη απαιτούμενη άδεια για τη δημιουργία ενός presigned URL είναι η άδεια που παρέχεται, οπότε για την προηγούμενη εντολή η μόνη άδεια που χρειάζεται ο κύριος είναι `s3:GetObject`
|
||||
> Η μόνη απαιτούμενη άδεια για τη δημιουργία ενός presigned URL είναι η άδεια που δίνεται, οπότε στην προηγούμενη εντολή η μόνη άδεια που χρειάζεται ο principal είναι `s3:GetObject`
|
||||
|
||||
Είναι επίσης δυνατή η δημιουργία presigned URLs με **άλλες άδειες**:
|
||||
Είναι επίσης δυνατό να δημιουργηθούν presigned URLs με **άλλες άδειες**:
|
||||
```python
|
||||
import boto3
|
||||
url = boto3.client('s3').generate_presigned_url(
|
||||
@@ -42,99 +42,99 @@ Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
|
||||
ExpiresIn=3600
|
||||
)
|
||||
```
|
||||
### S3 Μηχανισμοί Κρυπτογράφησης
|
||||
### Μηχανισμοί κρυπτογράφησης S3
|
||||
|
||||
**DEK σημαίνει Κλειδί Κρυπτογράφησης Δεδομένων** και είναι το κλειδί που δημιουργείται πάντα και χρησιμοποιείται για την κρυπτογράφηση των δεδομένων.
|
||||
**DEK σημαίνει Κλειδί Κρυπτογράφησης Δεδομένων (Data Encryption Key)** και είναι το κλειδί που πάντα δημιουργείται και χρησιμοποιείται για την κρυπτογράφηση δεδομένων.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Κρυπτογράφηση από τον διακομιστή με κλειδιά διαχειριζόμενα από το S3, SSE-S3</strong></summary>
|
||||
<summary><strong>Server-side κρυπτογράφηση με διαχειριζόμενα κλειδιά S3, SSE-S3</strong></summary>
|
||||
|
||||
Αυτή η επιλογή απαιτεί ελάχιστη διαμόρφωση και όλη η διαχείριση των κλειδιών κρυπτογράφησης που χρησιμοποιούνται διαχειρίζεται από την AWS. Το μόνο που χρειάζεται να κάνετε είναι να **ανεβάσετε τα δεδομένα σας και το S3 θα αναλάβει όλες τις άλλες πτυχές**. Κάθε κάδος σε έναν λογαριασμό S3 ανατίθεται σε ένα κλειδί κάδου.
|
||||
Αυτή η επιλογή απαιτεί ελάχιστη ρύθμιση και όλη η διαχείριση των κλειδιών κρυπτογράφησης γίνεται από την AWS. Το μόνο που χρειάζεται να κάνετε είναι να **ανεβάσετε τα δεδομένα σας και το S3 θα χειριστεί όλα τα υπόλοιπα**. Σε κάθε bucket σε έναν λογαριασμό S3 ανατίθεται ένα bucket key.
|
||||
|
||||
- Κρυπτογράφηση:
|
||||
- Δεδομένα Αντικειμένου + δημιουργημένο κλειδί DEK σε απλή μορφή --> Κρυπτογραφημένα δεδομένα (αποθηκευμένα μέσα στο S3)
|
||||
- Δημιουργημένο κλειδί DEK σε απλή μορφή + Κύριο Κλειδί S3 --> Κρυπτογραφημένο DEK (αποθηκευμένο μέσα στο S3) και το απλό κείμενο διαγράφεται από τη μνήμη
|
||||
- Object Data + δημιουργημένο plaintext DEK --> Κρυπτογραφημένα δεδομένα (αποθηκεύονται μέσα στο S3)
|
||||
- Created plaintext DEK + S3 Master Key --> Encrypted DEK (αποθηκεύεται μέσα στο S3) και το plain text διαγράφεται από τη μνήμη
|
||||
- Αποκρυπτογράφηση:
|
||||
- Κρυπτογραφημένο DEK + Κύριο Κλειδί S3 --> Κλειδί DEK σε απλή μορφή
|
||||
- Κλειδί DEK σε απλή μορφή + Κρυπτογραφημένα δεδομένα --> Δεδομένα Αντικειμένου
|
||||
- Encrypted DEK + S3 Master Key --> Plaintext DEK
|
||||
- Plaintext DEK + Encrypted data --> Object Data
|
||||
|
||||
Παρακαλώ σημειώστε ότι σε αυτή την περίπτωση **το κλειδί διαχειρίζεται από την AWS** (περιστροφή μόνο κάθε 3 χρόνια). Αν χρησιμοποιήσετε το δικό σας κλειδί, θα μπορείτε να περιστρέφετε, να απενεργοποιείτε και να εφαρμόζετε έλεγχο πρόσβασης.
|
||||
Παρακαλώ σημειώστε ότι σε αυτή την περίπτωση **το κλειδί διαχειρίζεται από την AWS** (rotation μόνο κάθε 3 χρόνια). Εάν χρησιμοποιήσετε το δικό σας κλειδί θα μπορείτε να το περιστρέψετε, να το απενεργοποιήσετε και να εφαρμόσετε έλεγχο πρόσβασης.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Κρυπτογράφηση από τον διακομιστή με κλειδιά διαχειριζόμενα από το KMS, SSE-KMS</strong></summary>
|
||||
<summary><strong>Server-side κρυπτογράφηση με KMS διαχειριζόμενα κλειδιά, SSE-KMS</strong></summary>
|
||||
|
||||
Αυτή η μέθοδος επιτρέπει στο S3 να χρησιμοποιεί την υπηρεσία διαχείρισης κλειδιών για να δημιουργήσει τα κλειδιά κρυπτογράφησης δεδομένων σας. Το KMS σας δίνει πολύ μεγαλύτερη ευελιξία στο πώς διαχειρίζεστε τα κλειδιά σας. Για παράδειγμα, μπορείτε να απενεργοποιήσετε, να περιστρέψετε και να εφαρμόσετε ελέγχους πρόσβασης στο CMK, και να παραγγείλετε κατά της χρήσης τους χρησιμοποιώντας το AWS Cloud Trail.
|
||||
Αυτή η μέθοδος επιτρέπει στο S3 να χρησιμοποιήσει το Key Management Service για να δημιουργήσει τα data encryption keys σας. Το KMS σας δίνει πολύ μεγαλύτερη ευελιξία στον τρόπο διαχείρισης των κλειδιών σας. Για παράδειγμα, μπορείτε να απενεργοποιήσετε, να περιστρέψετε και να εφαρμόσετε ελέγχους πρόσβασης στο CMK, καθώς και να καταγράψετε/ελέγξετε τη χρήση τους μέσω AWS CloudTrail.
|
||||
|
||||
- Κρυπτογράφηση:
|
||||
- Το S3 ζητά κλειδιά δεδομένων από το KMS CMK
|
||||
- Το KMS χρησιμοποιεί ένα CMK για να δημιουργήσει το ζεύγος DEK σε απλή μορφή και DEK κρυπτογραφημένο και τα στέλνει στο S3
|
||||
- Το S3 χρησιμοποιεί το κλειδί σε απλή μορφή για να κρυπτογραφήσει τα δεδομένα, αποθηκεύει τα κρυπτογραφημένα δεδομένα και το κρυπτογραφημένο κλειδί και διαγράφει από τη μνήμη το κλειδί σε απλή μορφή
|
||||
- Το S3 ζητά data keys από το KMS CMK
|
||||
- Το KMS χρησιμοποιεί ένα CMK για να δημιουργήσει το ζευγάρι plaintext DEK και DEK encrypted και τα στέλνει στο S3
|
||||
- Το S3 χρησιμοποιεί το plaintext key για να κρυπτογραφήσει τα δεδομένα, αποθηκεύει τα κρυπτογραφημένα δεδομένα και το κρυπτογραφημένο κλειδί και διαγράφει από τη μνήμη το plain text key
|
||||
- Αποκρυπτογράφηση:
|
||||
- Το S3 ζητά από το KMS να αποκρυπτογραφήσει το κρυπτογραφημένο κλειδί δεδομένων του αντικειμένου
|
||||
- Το KMS αποκρυπτογραφεί το κλειδί δεδομένων με το CMK και το στέλνει πίσω στο S3
|
||||
- Το S3 ζητά από το KMS να αποκρυπτογραφήσει το encrypted data key του αντικειμένου
|
||||
- Το KMS αποκρυπτογραφεί το data key με το CMK και το επιστρέφει στο S3
|
||||
- Το S3 αποκρυπτογραφεί τα δεδομένα του αντικειμένου
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Κρυπτογράφηση από τον διακομιστή με κλειδιά που παρέχονται από τον πελάτη, SSE-C</strong></summary>
|
||||
<summary><strong>Server-side κρυπτογράφηση με πελάτη-παρεχόμενα κλειδιά, SSE-C</strong></summary>
|
||||
|
||||
Αυτή η επιλογή σας δίνει την ευκαιρία να παρέχετε το δικό σας κύριο κλειδί που μπορεί ήδη να χρησιμοποιείτε εκτός της AWS. Το κλειδί που παρέχεται από τον πελάτη θα σταλεί μαζί με τα δεδομένα σας στο S3, όπου το S3 θα εκτελέσει την κρυπτογράφηση για εσάς.
|
||||
Αυτή η επιλογή σας δίνει τη δυνατότητα να παρέχετε το δικό σας master key που μπορεί ήδη να χρησιμοποιείτε εκτός AWS. Το customer-provided key σας θα αποστέλλεται μαζί με τα δεδομένα σας στο S3, όπου το S3 θα εκτελεί την κρυπτογράφηση για εσάς.
|
||||
|
||||
- Κρυπτογράφηση:
|
||||
- Ο χρήστης στέλνει τα δεδομένα του αντικειμένου + Κλειδί Πελάτη στο S3
|
||||
- Το κλειδί πελάτη χρησιμοποιείται για να κρυπτογραφήσει τα δεδομένα και τα κρυπτογραφημένα δεδομένα αποθηκεύονται
|
||||
- μια αλατισμένη τιμή HMAC του κλειδιού πελάτη αποθηκεύεται επίσης για μελλοντική επικύρωση του κλειδιού
|
||||
- το κλειδί πελάτη διαγράφεται από τη μνήμη
|
||||
- Ο χρήστης στέλνει τα object data + Customer key στο S3
|
||||
- Το customer key χρησιμοποιείται για να κρυπτογραφήσει τα δεδομένα και τα κρυπτογραφημένα δεδομένα αποθηκεύονται
|
||||
- Μια salted HMAC τιμή του customer key αποθηκεύεται επίσης για μελλοντική επικύρωση κλειδιού
|
||||
- Το customer key διαγράφεται από τη μνήμη
|
||||
- Αποκρυπτογράφηση:
|
||||
- Ο χρήστης στέλνει το κλειδί πελάτη
|
||||
- Το κλειδί επικυρώνεται σε σχέση με την αποθηκευμένη τιμή HMAC
|
||||
- Το κλειδί που παρέχεται από τον πελάτη χρησιμοποιείται στη συνέχεια για να αποκρυπτογραφήσει τα δεδομένα
|
||||
- Ο χρήστης στέλνει το customer key
|
||||
- Το κλειδί επικυρώνεται έναντι της αποθηκευμένης HMAC τιμής
|
||||
- Το customer provided key χρησιμοποιείται στη συνέχεια για την αποκρυπτογράφηση των δεδομένων
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Κρυπτογράφηση από τον πελάτη με KMS, CSE-KMS</strong></summary>
|
||||
<summary><strong>Client-side κρυπτογράφηση με KMS, CSE-KMS</strong></summary>
|
||||
|
||||
Παρόμοια με το SSE-KMS, αυτό χρησιμοποιεί επίσης την υπηρεσία διαχείρισης κλειδιών για να δημιουργήσει τα κλειδιά κρυπτογράφησης δεδομένων σας. Ωστόσο, αυτή τη φορά το KMS καλείται μέσω του πελάτη και όχι του S3. Η κρυπτογράφηση πραγματοποιείται από τον πελάτη και τα κρυπτογραφημένα δεδομένα αποστέλλονται στο S3 για αποθήκευση.
|
||||
Παρομοίως με το SSE-KMS, αυτή η μέθοδος χρησιμοποιεί επίσης το Key Management Service για να δημιουργήσει τα data encryption keys σας. Ωστόσο, αυτή τη φορά το KMS καλείται μέσω του client και όχι του S3. Η κρυπτογράφηση πραγματοποιείται client-side και τα κρυπτογραφημένα δεδομένα αποστέλλονται στο S3 για αποθήκευση.
|
||||
|
||||
- Κρυπτογράφηση:
|
||||
- Ο πελάτης ζητά ένα κλειδί δεδομένων από το KMS
|
||||
- Το KMS επιστρέφει το DEK σε απλή μορφή και το κρυπτογραφημένο DEK με το CMK
|
||||
- Ο client αιτείται data key από το KMS
|
||||
- Το KMS επιστρέφει το plaintext DEK και το encrypted DEK με το CMK
|
||||
- Και τα δύο κλειδιά επιστρέφονται
|
||||
- Ο πελάτης στη συνέχεια κρυπτογραφεί τα δεδομένα με το DEK σε απλή μορφή και στέλνει στο S3 τα κρυπτογραφημένα δεδομένα + το κρυπτογραφημένο DEK (το οποίο αποθηκεύεται ως μεταδεδομένα των κρυπτογραφημένων δεδομένων μέσα στο S3)
|
||||
- Ο client κρυπτογραφεί τα δεδομένα με το plaintext DEK και στέλνει στο S3 τα encrypted data + το encrypted DEK (το οποίο αποθηκεύεται ως metadata των κρυπτογραφημένων δεδομένων στο S3)
|
||||
- Αποκρυπτογράφηση:
|
||||
- Τα κρυπτογραφημένα δεδομένα με το κρυπτογραφημένο DEK αποστέλλονται στον πελάτη
|
||||
- Ο πελάτης ζητά από το KMS να αποκρυπτογραφήσει το κρυπτογραφημένο κλειδί χρησιμοποιώντας το CMK και το KMS στέλνει πίσω το DEK σε απλή μορφή
|
||||
- Ο πελάτης μπορεί τώρα να αποκρυπτογραφήσει τα κρυπτογραφημένα δεδομένα
|
||||
- Τα encrypted data με το encrypted DEK αποστέλλονται στον client
|
||||
- Ο client ζητά από το KMS να αποκρυπτογραφήσει το encrypted key χρησιμοποιώντας το CMK και το KMS επιστρέφει το plaintext DEK
|
||||
- Ο client μπορεί τώρα να αποκρυπτογραφήσει τα κρυπτογραφημένα δεδομένα
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Κρυπτογράφηση από τον πελάτη με κλειδιά που παρέχονται από τον πελάτη, CSE-C</strong></summary>
|
||||
<summary><strong>Client-side κρυπτογράφηση με πελάτη-παρεχόμενα κλειδιά, CSE-C</strong></summary>
|
||||
|
||||
Χρησιμοποιώντας αυτόν τον μηχανισμό, μπορείτε να αξιοποιήσετε τα δικά σας παρεχόμενα κλειδιά και να χρησιμοποιήσετε έναν πελάτη AWS-SDK για να κρυπτογραφήσετε τα δεδομένα σας πριν τα στείλετε στο S3 για αποθήκευση.
|
||||
Χρησιμοποιώντας αυτόν τον μηχανισμό, μπορείτε να χρησιμοποιήσετε τα δικά σας παρεχόμενα κλειδιά και έναν AWS-SDK client για να κρυπτογραφήσετε τα δεδομένα σας πριν τα στείλετε στο S3 για αποθήκευση.
|
||||
|
||||
- Κρυπτογράφηση:
|
||||
- Ο πελάτης δημιουργεί ένα DEK και κρυπτογραφεί τα δεδομένα σε απλή μορφή
|
||||
- Στη συνέχεια, χρησιμοποιώντας το δικό του προσαρμοσμένο CMK, κρυπτογραφεί το DEK
|
||||
- υποβάλλει τα κρυπτογραφημένα δεδομένα + το κρυπτογραφημένο DEK στο S3 όπου αποθηκεύεται
|
||||
- Ο client δημιουργεί ένα DEK και κρυπτογραφεί τα plaintext δεδομένα
|
||||
- Έπειτα, χρησιμοποιώντας το δικό του custom CMK, κρυπτογραφεί το DEK
|
||||
- Υποβάλλει τα encrypted data + encrypted DEK στο S3 όπου αποθηκεύονται
|
||||
- Αποκρυπτογράφηση:
|
||||
- Το S3 στέλνει τα κρυπτογραφημένα δεδομένα και το DEK
|
||||
- Καθώς ο πελάτης έχει ήδη το CMK που χρησιμοποιήθηκε για να κρυπτογραφήσει το DEK, αποκρυπτογραφεί το DEK και στη συνέχεια χρησιμοποιεί το DEK σε απλή μορφή για να αποκρυπτογραφήσει τα δεδομένα
|
||||
- Το S3 στέλνει τα encrypted data και το DEK
|
||||
- Εφόσον ο client ήδη έχει το CMK που χρησιμοποιήθηκε για την κρυπτογράφηση του DEK, το αποκρυπτογραφεί και στη συνέχεια χρησιμοποιεί το plaintext DEK για να αποκρυπτογραφήσει τα δεδομένα
|
||||
|
||||
</details>
|
||||
|
||||
### **Αριθμητική**
|
||||
### **Enumeration**
|
||||
|
||||
Ένας από τους παραδοσιακούς κύριους τρόπους για να παραβιαστούν οι οργανισμοί AWS ξεκινά με την παραβίαση κάδων που είναι δημόσια προσβάσιμοι. **Μπορείτε να βρείτε** [**δημόσιους αριθμητές κάδων σε αυτή τη σελίδα**](../aws-unauthenticated-enum-access/#s3-buckets)**.**
|
||||
Ένας από τους παραδοσιακούς κύριους τρόπους παραβίασης οργανισμών AWS ξεκινά με τον συμβιβασμό δημόσια προσβάσιμων buckets. **Μπορείτε να βρείτε** [**public buckets enumerators in this page**](../aws-unauthenticated-enum-access/index.html#s3-buckets)**.**
|
||||
```bash
|
||||
# Get buckets ACLs
|
||||
aws s3api get-bucket-acl --bucket <bucket-name>
|
||||
@@ -229,16 +229,16 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
|
||||
```
|
||||
### dual-stack <a href="#dual-stack-endpoints-description" id="dual-stack-endpoints-description"></a>
|
||||
|
||||
Μπορείτε να αποκτήσετε πρόσβαση σε ένα S3 bucket μέσω ενός dual-stack endpoint χρησιμοποιώντας ένα virtual hosted-style ή ένα path-style endpoint name. Αυτά είναι χρήσιμα για την πρόσβαση στο S3 μέσω IPv6.
|
||||
Μπορείτε να αποκτήσετε πρόσβαση σε ένα S3 bucket μέσω ενός dual-stack endpoint χρησιμοποιώντας ένα virtual hosted-style ή ένα path-style endpoint name. Αυτά είναι χρήσιμα για πρόσβαση στο S3 μέσω IPv6.
|
||||
|
||||
Οι dual-stack endpoints χρησιμοποιούν την εξής σύνταξη:
|
||||
Dual-stack endpoints χρησιμοποιούν την εξής σύνταξη:
|
||||
|
||||
- `bucketname.s3.dualstack.aws-region.amazonaws.com`
|
||||
- `s3.dualstack.aws-region.amazonaws.com/bucketname`
|
||||
|
||||
### Privesc
|
||||
|
||||
Στην επόμενη σελίδα μπορείτε να ελέγξετε πώς να **καταχραστείτε τις άδειες S3 για να κλιμακώσετε τα προνόμια**:
|
||||
Στην ακόλουθη σελίδα μπορείτε να δείτε πώς να **abuse S3 permissions to escalate privileges**:
|
||||
|
||||
{{#ref}}
|
||||
../aws-privilege-escalation/aws-s3-privesc/README.md
|
||||
@@ -262,23 +262,23 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
|
||||
../aws-persistence/aws-s3-persistence/README.md
|
||||
{{#endref}}
|
||||
|
||||
## Other S3 vulns
|
||||
## Άλλες ευπάθειες S3
|
||||
|
||||
### S3 HTTP Cache Poisoning Issue <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) ήταν δυνατό να αποθηκευτεί η απάντηση ενός αυθαίρετου bucket σαν να ανήκε σε ένα διαφορετικό. Αυτό θα μπορούσε να έχει καταχραστεί για να αλλάξει, για παράδειγμα, τις απαντήσεις αρχείων javascript και να συμβιβάσει αυθαίρετες σελίδες χρησιμοποιώντας το S3 για την αποθήκευση στατικού κώδικα.
|
||||
[**Σύμφωνα με αυτή την έρευνα**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) ήταν δυνατό να αποθηκευτεί στην cache η απάντηση ενός αυθαίρετου bucket σαν να ανήκε σε διαφορετικό. Αυτό θα μπορούσε να έχει χρησιμοποιηθεί για να τροποποιήσει, για παράδειγμα, τις απαντήσεις αρχείων JavaScript και να θέσει σε κίνδυνο αυθαίρετες σελίδες που χρησιμοποιούν το S3 για την αποθήκευση στατικού κώδικα.
|
||||
|
||||
## Amazon Athena
|
||||
|
||||
Το Amazon Athena είναι μια διαδραστική υπηρεσία ερωτημάτων που διευκολύνει την **ανάλυση δεδομένων** απευθείας στην Υπηρεσία Απλής Αποθήκευσης Amazon (Amazon **S3**) **χρησιμοποιώντας** τυπικό **SQL**.
|
||||
Amazon Athena είναι μια διαδραστική υπηρεσία ερωτημάτων που καθιστά εύκολο να **αναλύσετε δεδομένα** απευθείας στο Amazon Simple Storage Service (Amazon **S3**) **χρησιμοποιώντας** το πρότυπο **SQL**.
|
||||
|
||||
Πρέπει να **ετοιμάσετε έναν πίνακα σχεσιακής βάσης δεδομένων** με τη μορφή του περιεχομένου που θα εμφανιστεί στα παρακολουθούμενα S3 buckets. Και στη συνέχεια, το Amazon Athena θα είναι σε θέση να γεμίσει τη βάση δεδομένων από τα logs, ώστε να μπορείτε να κάνετε ερωτήματα.
|
||||
Πρέπει να **ετοιμάσετε έναν σχεσιακό πίνακα DB** με τη μορφή του περιεχομένου που πρόκειται να εμφανιστεί στα παρακολουθούμενα S3 buckets. Στη συνέχεια, το Amazon Athena θα μπορεί να γεμίσει τη βάση από τα logs, ώστε να μπορείτε να εκτελείτε ερωτήματα.
|
||||
|
||||
Το Amazon Athena υποστηρίζει την **ικανότητα να ερωτά δεδομένα S3 που είναι ήδη κρυπτογραφημένα** και αν έχει ρυθμιστεί να το κάνει, **το Athena μπορεί επίσης να κρυπτογραφεί τα αποτελέσματα του ερωτήματος που μπορούν στη συνέχεια να αποθηκευτούν στο S3**.
|
||||
Το Amazon Athena υποστηρίζει την **ικανότητα εκτέλεσης ερωτημάτων σε δεδομένα S3 που είναι ήδη κρυπτογραφημένα** και, αν έχει ρυθμιστεί έτσι, **το Athena μπορεί επίσης να κρυπτογραφήσει τα αποτελέσματα του ερωτήματος τα οποία στη συνέχεια μπορούν να αποθηκευτούν στο S3**.
|
||||
|
||||
**Αυτή η κρυπτογράφηση των αποτελεσμάτων είναι ανεξάρτητη από τα υποκείμενα κρυπτογραφημένα δεδομένα S3**, που σημαίνει ότι ακόμη και αν τα δεδομένα S3 δεν είναι κρυπτογραφημένα, τα ερωτηθέντα αποτελέσματα μπορούν να είναι κρυπτογραφημένα. Μερικά σημεία που πρέπει να γνωρίζετε είναι ότι το Amazon Athena υποστηρίζει μόνο δεδομένα που έχουν **κρυπτογραφηθεί** με τις **εξής μεθόδους κρυπτογράφησης S3**, **SSE-S3, SSE-KMS, και CSE-KMS**.
|
||||
**Αυτή η κρυπτογράφηση των αποτελεσμάτων είναι ανεξάρτητη από τα υποκείμενα δεδομένα S3 που ερωτώνται**, πράγμα που σημαίνει ότι ακόμη και αν τα δεδομένα S3 δεν είναι κρυπτογραφημένα, τα αποτελέσματα των ερωτημάτων μπορούν να κρυπτογραφηθούν. Ένα ζήτημα που πρέπει να γνωρίζετε είναι ότι το Amazon Athena υποστηρίζει μόνο δεδομένα που έχουν **κρυπτογραφηθεί** με τις **εξής μεθόδους κρυπτογράφησης S3**, **SSE-S3, SSE-KMS, και CSE-KMS**.
|
||||
|
||||
Το SSE-C και το CSE-E δεν υποστηρίζονται. Επιπλέον, είναι σημαντικό να κατανοήσετε ότι το Amazon Athena θα εκτελεί μόνο ερωτήματα κατά **κρυπτογραφημένα αντικείμενα που βρίσκονται στην ίδια περιοχή με το ερώτημα**. Εάν χρειάζεστε να ερωτήσετε δεδομένα S3 που έχουν κρυπτογραφηθεί χρησιμοποιώντας KMS, τότε απαιτούνται συγκεκριμένες άδειες από τον χρήστη Athena για να τους επιτραπεί να εκτελέσουν το ερώτημα.
|
||||
Οι SSE-C και CSE-C δεν υποστηρίζονται. Επιπλέον, είναι σημαντικό να κατανοήσετε ότι το Amazon Athena θα εκτελεί ερωτήματα μόνο σε **κρυπτογραφημένα αντικείμενα που βρίσκονται στην ίδια region με το ίδιο το ερώτημα**. Εάν χρειάζεται να ερωτήσετε δεδομένα S3 που έχουν κρυπτογραφηθεί χρησιμοποιώντας KMS, απαιτούνται συγκεκριμένα permissions από τον χρήστη του Athena για να μπορέσει να εκτελέσει το ερώτημα.
|
||||
|
||||
### Enumeration
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user