mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor
This commit is contained in:
@@ -1,97 +1,117 @@
|
||||
# Az - Λογαριασμοί Αποθήκευσης & Blobs
|
||||
# Az - Storage Accounts & Blobs
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Βασικές Πληροφορίες
|
||||
|
||||
Οι Λογαριασμοί Αποθήκευσης Azure είναι θεμελιώδεις υπηρεσίες στο Microsoft Azure που παρέχουν κλιμακωτή, ασφαλή και εξαιρετικά διαθέσιμη cloud **αποθήκευση για διάφορους τύπους δεδομένων**, συμπεριλαμβανομένων των blobs (μεγάλων δυαδικών αντικειμένων), αρχείων, ουρών και πινάκων. Λειτουργούν ως δοχεία που ομαδοποιούν αυτές τις διαφορετικές υπηρεσίες αποθήκευσης κάτω από ένα ενιαίο όνομα χώρου για εύκολη διαχείριση.
|
||||
Azure Storage Accounts είναι βασικές υπηρεσίες στο Microsoft Azure που προσφέρουν επεκτάσιμη, ασφαλή και υψηλά διαθέσιμη cloud **αποθήκευση για διάφορους τύπους δεδομένων**, συμπεριλαμβανομένων των blobs (binary large objects), files, queues και tables. Λειτουργούν ως containers που ομαδοποιούν αυτές τις διαφορετικές υπηρεσίες αποθήκευσης κάτω από ένα μόνο namespace για εύκολη διαχείριση.
|
||||
|
||||
**Κύριες επιλογές διαμόρφωσης**:
|
||||
**Κύριες επιλογές ρυθμίσεων**:
|
||||
|
||||
- Κάθε λογαριασμός αποθήκευσης πρέπει να έχει ένα **μοναδικό όνομα σε όλους τους Azure**.
|
||||
- Κάθε λογαριασμός αποθήκευσης αναπτύσσεται σε μια **περιοχή** ή σε μια επεκταμένη ζώνη Azure.
|
||||
- Είναι δυνατή η επιλογή της **premium** έκδοσης του λογαριασμού αποθήκευσης για καλύτερη απόδοση.
|
||||
- Είναι δυνατή η επιλογή μεταξύ **4 τύπων πλεονασμού για προστασία** από αποτυχίες rack, δίσκου και κέντρου δεδομένων.
|
||||
- Κάθε storage account πρέπει να έχει ένα **μοναδικό όνομα σε όλο το Azure**.
|
||||
- Κάθε storage account αναπτύσσεται σε μια **region** ή σε μια Azure extended zone
|
||||
- Είναι δυνατό να επιλεγεί η **premium** έκδοση του storage account για καλύτερη απόδοση
|
||||
- Είναι δυνατό να επιλεγεί ανάμεσα σε **4 τύπους redundancy για προστασία** από αποτυχίες rack, drive και datacenter.
|
||||
|
||||
**Επιλογές διαμόρφωσης ασφαλείας**:
|
||||
**Επιλογές ρυθμίσεων ασφάλειας**:
|
||||
|
||||
- **Απαιτεί ασφαλή μεταφορά για τις λειτουργίες REST API**: Απαιτεί TLS σε οποιαδήποτε επικοινωνία με την αποθήκευση.
|
||||
- **Επιτρέπει την ενεργοποίηση ανώνυμης πρόσβασης σε μεμονωμένα δοχεία**: Αν όχι, δεν θα είναι δυνατή η ενεργοποίηση ανώνυμης πρόσβασης στο μέλλον.
|
||||
- **Ενεργοποίηση πρόσβασης με κλειδί λογαριασμού αποθήκευσης**: Αν όχι, η πρόσβαση με Κοινά Κλειδιά θα απαγορευτεί.
|
||||
- **Ελάχιστη έκδοση TLS**.
|
||||
- **Επιτρεπόμενη έκταση για λειτουργίες αντιγραφής**: Επιτρέπεται από οποιονδήποτε λογαριασμό αποθήκευσης, από οποιονδήποτε λογαριασμό αποθήκευσης από τον ίδιο ενοικιαστή Entra ή από λογαριασμό αποθήκευσης με ιδιωτικά endpoints στο ίδιο εικονικό δίκτυο.
|
||||
- **Require secure transfer for REST API operations**: Απαιτεί TLS σε οποιαδήποτε επικοινωνία με το storage
|
||||
- **Allows enabling anonymous access on individual containers**: Αν όχι, δεν θα είναι δυνατό να ενεργοποιηθεί anonymous access στο μέλλον
|
||||
- **Enable storage account key access**: Αν όχι, η πρόσβαση με Shared Keys θα απαγορεύεται
|
||||
- **Minimum TLS version**
|
||||
- **Permitted scope for copy operations**: Επιτρέπεται από οποιοδήποτε storage account, από οποιοδήποτε storage account του ίδιου Entra tenant ή από storage account με private endpoints στο ίδιο virtual network.
|
||||
|
||||
**Επιλογές Αποθήκευσης Blob**:
|
||||
**Επιλογές Blob Storage**:
|
||||
|
||||
- **Επιτρέπεται η διασυνοριακή αναπαραγωγή**.
|
||||
- **Επίπεδο πρόσβασης**: Hot (συχνά προσβάσιμα δεδομένα), Cool και Cold (σπάνια προσβάσιμα δεδομένα).
|
||||
- **Allow cross-tenant replication**
|
||||
- **Access tier**: Hot (συχνά προσπελάσιμα δεδομένα), Cool και Cold (σπάνια προσπελάσιμα δεδομένα)
|
||||
|
||||
**Επιλογές Δικτύωσης**:
|
||||
**Επιλογές δικτύωσης**:
|
||||
|
||||
- **Πρόσβαση δικτύου**:
|
||||
- Επιτρέπεται από όλα τα δίκτυα.
|
||||
- Επιτρέπεται από επιλεγμένα εικονικά δίκτυα και διευθύνσεις IP.
|
||||
- Απενεργοποίηση δημόσιας πρόσβασης και χρήση ιδιωτικής πρόσβασης.
|
||||
- **Ιδιωτικά endpoints**: Επιτρέπει μια ιδιωτική σύνδεση στον λογαριασμό αποθήκευσης από ένα εικονικό δίκτυο.
|
||||
- **Network access**:
|
||||
- Επιτρέπεται από όλα τα δίκτυα
|
||||
- Επιτρέπεται από επιλεγμένα virtual networks και IP διευθύνσεις
|
||||
- Απενεργοποίηση public access και χρήση private access
|
||||
- **Private endpoints**: Επιτρέπουν μια ιδιωτική σύνδεση στο storage account από ένα virtual network
|
||||
|
||||
**Επιλογές Προστασίας Δεδομένων**:
|
||||
**Επιλογές προστασίας δεδομένων**:
|
||||
|
||||
- **Ανάκτηση σε συγκεκριμένο χρόνο για δοχεία**: Επιτρέπει την αποκατάσταση δοχείων σε προηγούμενη κατάσταση.
|
||||
- Απαιτεί ενεργοποίηση της εκδοχής, της ροής αλλαγών και της ήπιας διαγραφής blob.
|
||||
- **Ενεργοποίηση ήπιας διαγραφής για blobs**: Ενεργοποιεί μια περίοδο διατήρησης σε ημέρες για διαγραμμένα blobs (ακόμη και αν έχουν αντικατασταθεί).
|
||||
- **Ενεργοποίηση ήπιας διαγραφής για δοχεία**: Ενεργοποιεί μια περίοδο διατήρησης σε ημέρες για διαγραμμένα δοχεία.
|
||||
- **Ενεργοποίηση ήπιας διαγραφής για κοινές χρήσεις αρχείων**: Ενεργοποιεί μια περίοδο διατήρησης σε ημέρες για διαγραμμένες κοινές χρήσεις αρχείων.
|
||||
- **Ενεργοποίηση εκδοχής για blobs**: Διατηρεί προηγούμενες εκδόσεις των blobs σας.
|
||||
- **Ενεργοποίηση ροής αλλαγών blob**: Διατηρεί αρχεία καταγραφής δημιουργίας, τροποποίησης και διαγραφής αλλαγών στα blobs.
|
||||
- **Ενεργοποίηση υποστήριξης αμεταβλητότητας επιπέδου εκδοχής**: Σας επιτρέπει να ορίσετε πολιτική διατήρησης βάσει χρόνου σε επίπεδο λογαριασμού που θα ισχύει για όλες τις εκδόσεις blob.
|
||||
- Η υποστήριξη αμεταβλητότητας επιπέδου εκδοχής και η ανάκτηση σε συγκεκριμένο χρόνο για δοχεία δεν μπορούν να ενεργοποιηθούν ταυτόχρονα.
|
||||
- **Point-in-time restore for containers**: Επιτρέπει την επαναφορά containers σε προηγούμενη κατάσταση
|
||||
- Απαιτεί να είναι ενεργοποιημένα το versioning, το change feed, και το blob soft delete.
|
||||
- **Enable soft delete for blobs**: Ενεργοποιεί περίοδο διατήρησης σε ημέρες για διαγραμμένα blobs (ακόμη και αν αντικαταστάθηκαν)
|
||||
- **Enable soft delete for containers**: Ενεργοποιεί περίοδο διατήρησης σε ημέρες για διαγραμμένα containers
|
||||
- **Enable soft delete for file shares**: Ενεργοποιεί περίοδο διατήρησης σε ημέρες για διαγραμμένα file shares
|
||||
- **Enable versioning for blobs**: Διατηρεί προηγούμενες εκδόσεις των blobs
|
||||
- **Enable blob change feed**: Κρατά αρχεία καταγραφής των δημιουργιών, τροποποιήσεων και διαγραφών των blobs
|
||||
- **Enable version-level immutability support**: Σας επιτρέπει να ορίσετε πολιτική διατήρησης με βάση τον χρόνο σε επίπεδο account που θα εφαρμόζεται σε όλες τις εκδόσεις blob.
|
||||
- Η version-level immutability support και το point-in-time restore για containers δεν μπορούν να ενεργοποιηθούν ταυτόχρονα.
|
||||
|
||||
**Επιλογές Διαμόρφωσης Κρυπτογράφησης**:
|
||||
**Επιλογές κρυπτογράφησης**:
|
||||
|
||||
- **Τύπος κρυπτογράφησης**: Είναι δυνατή η χρήση κλειδιών που διαχειρίζεται η Microsoft (MMK) ή κλειδιών που διαχειρίζεται ο πελάτης (CMK).
|
||||
- **Ενεργοποίηση κρυπτογράφησης υποδομής**: Επιτρέπει την διπλή κρυπτογράφηση των δεδομένων "για περισσότερη ασφάλεια".
|
||||
- **Encryption type**: Είναι δυνατό να χρησιμοποιηθούν Microsoft-managed keys (MMK) ή Customer-managed keys (CMK)
|
||||
- **Enable infrastructure encryption**: Επιτρέπει διπλή κρυπτογράφηση των δεδομένων "για περισσότερη ασφάλεια"
|
||||
|
||||
### Τερματικά Αποθήκευσης
|
||||
### Τερματικά αποθήκευσης
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="197">Υπηρεσία Αποθήκευσης</th><th>Τερματικό</th></tr></thead><tbody><tr><td><strong>Αποθήκευση Blob</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Αποθήκευση Data Lake</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Αποθήκευση Ουρών</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Αποθήκευση Πινάκων</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="197">Υπηρεσία Αποθήκευσης</th><th>Τερματικό</th></tr></thead><tbody><tr><td><strong>Blob storage</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Data Lake Storage</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Queue storage</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Table storage</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
|
||||
### Δημόσια Έκθεση
|
||||
|
||||
Εάν η "Επιτρέπεται η δημόσια πρόσβαση Blob" είναι **ενεργοποιημένη** (απενεργοποιημένη από προεπιλογή), κατά τη δημιουργία ενός δοχείου είναι δυνατή η:
|
||||
Αν η επιλογή "Allow Blob public access" είναι **enabled** (απενεργοποιημένη από προεπιλογή), κατά τη δημιουργία ενός container είναι δυνατό να:
|
||||
|
||||
- Παροχή **δημόσιας πρόσβασης για ανάγνωση blobs** (πρέπει να γνωρίζετε το όνομα).
|
||||
- **Λίστα των blobs του δοχείου** και **ανάγνωση** τους.
|
||||
- Να είναι πλήρως **ιδιωτικό**.
|
||||
- Δώσετε **public access για ανάγνωση blobs** (πρέπει να γνωρίζετε το όνομα).
|
||||
- **Λίστα blobs του container** και **ανάγνωση** αυτών.
|
||||
- Το κάνετε πλήρως **private**
|
||||
|
||||
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Σύνδεση με την Αποθήκευση
|
||||
#### Έλεγχος ανώνυμης έκθεσης blob
|
||||
|
||||
Εάν βρείτε οποιαδήποτε **αποθήκευση** στην οποία μπορείτε να συνδεθείτε, μπορείτε να χρησιμοποιήσετε το εργαλείο [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) για να το κάνετε.
|
||||
- Εντοπισμός storage accounts που μπορούν να εκθέσουν δεδομένα: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Αν η `allowBlobPublicAccess` είναι `false` δεν μπορείτε να κάνετε τα containers δημόσια.
|
||||
- Επιθεώρηση επικίνδυνων λογαριασμών για επιβεβαίωση της ρύθμισης και άλλων αδύναμων ρυθμίσεων: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- Απαρίθμηση έκθεσης σε επίπεδο container όπου η ρύθμιση είναι ενεργοποιημένη:
|
||||
```bash
|
||||
az storage container list --account-name <acc> \
|
||||
--query '[].{name:name, access:properties.publicAccess}'
|
||||
```
|
||||
- `"Blob"`: επιτρέπονται ανώνυμες αναγνώσεις **μόνο όταν είναι γνωστό το όνομα του blob** (χωρίς λίστα).
|
||||
- `"Container"`: ανώνυμη **λίστα + ανάγνωση** κάθε blob.
|
||||
- `null`: ιδιωτικό; απαιτείται authentication.
|
||||
- **Αποδείξτε πρόσβαση** χωρίς διαπιστευτήρια:
|
||||
- Αν `publicAccess` είναι `Container`, η ανώνυμη λίστα λειτουργεί: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- Για τόσο το `Blob` όσο και το `Container`, η ανώνυμη λήψη blob λειτουργεί όταν το όνομα είναι γνωστό:
|
||||
```bash
|
||||
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
|
||||
# or via raw HTTP
|
||||
curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
|
||||
```
|
||||
### Σύνδεση στην αποθήκευση
|
||||
|
||||
## Πρόσβαση στην Αποθήκευση <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
If you find any **storage** you can connect to you could use the tool [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) to do so.
|
||||
|
||||
## Πρόσβαση στην αποθήκευση <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
### RBAC
|
||||
|
||||
Είναι δυνατή η χρήση των αρχών Entra ID με **ρόλους RBAC** για πρόσβαση στους λογαριασμούς αποθήκευσης και είναι η συνιστώμενη μέθοδος.
|
||||
It's possible to use Entra ID principals with **RBAC roles** to access storage accounts and it's the recommended way.
|
||||
|
||||
### Κλειδιά Πρόσβασης
|
||||
### Access Keys
|
||||
|
||||
Οι λογαριασμοί αποθήκευσης έχουν κλειδιά πρόσβασης που μπορούν να χρησιμοποιηθούν για την πρόσβαση σε αυτούς. Αυτό παρέχει **πλήρη πρόσβαση στον λογαριασμό αποθήκευσης.**
|
||||
The storage accounts have access keys that can be used to access it. This provides f**ull access to the storage account.**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **Κοινά Κλειδιά & Ελαφριά Κοινά Κλειδιά**
|
||||
### **Shared Keys & Lite Shared Keys**
|
||||
|
||||
Είναι δυνατή η [**δημιουργία Κοινών Κλειδιών**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) υπογεγραμμένων με τα κλειδιά πρόσβασης για την εξουσιοδότηση πρόσβασης σε ορισμένους πόρους μέσω μιας υπογεγραμμένης διεύθυνσης URL.
|
||||
It's possible to [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) signed with the access keys to authorize access to certain resources via a signed URL.
|
||||
|
||||
> [!NOTE]
|
||||
> Σημειώστε ότι το μέρος `CanonicalizedResource` αντιπροσωπεύει τον πόρο υπηρεσιών αποθήκευσης (URI). Και αν οποιοδήποτε μέρος στη διεύθυνση URL είναι κωδικοποιημένο, θα πρέπει επίσης να είναι κωδικοποιημένο μέσα στο `CanonicalizedResource`.
|
||||
> Σημειώστε ότι το τμήμα `CanonicalizedResource` αντιπροσωπεύει τον πόρο της υπηρεσίας αποθήκευσης (URI). Και αν οποιοδήποτε τμήμα στο URL είναι κωδικοποιημένο, θα πρέπει επίσης να είναι κωδικοποιημένο μέσα στο `CanonicalizedResource`.
|
||||
|
||||
> [!NOTE]
|
||||
> Αυτό **χρησιμοποιείται από προεπιλογή από το `az` cli** για την πιστοποίηση αιτημάτων. Για να το κάνετε να χρησιμοποιεί τα διαπιστευτήρια της αρχής Entra ID, υποδείξτε την παράμετρο `--auth-mode login`.
|
||||
> Αυτό **χρησιμοποιείται από προεπιλογή από το `az` cli** για την αυθεντικοποίηση των αιτημάτων. Για να το κάνετε να χρησιμοποιήσει τα credentials του Entra ID principal δηλώστε την παράμετρο `--auth-mode login`.
|
||||
|
||||
- Είναι δυνατή η δημιουργία ενός **κοινού κλειδιού για τις υπηρεσίες blob, queue και file** υπογράφοντας τις παρακάτω πληροφορίες:
|
||||
- Είναι δυνατό να δημιουργηθεί ένα **shared key για blob, queue και file services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-Encoding + "\n" +
|
||||
@@ -108,7 +128,7 @@ Range + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Είναι δυνατόν να δημιουργήσετε ένα **κοινό κλειδί για τις υπηρεσίες πίνακα** υπογράφοντας τις παρακάτω πληροφορίες:
|
||||
- Είναι δυνατό να δημιουργηθεί ένας **shared key for table services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -116,7 +136,7 @@ Content-Type + "\n" +
|
||||
Date + "\n" +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Είναι δυνατόν να δημιουργηθεί ένα **lite shared key για τις υπηρεσίες blob, queue και file** υπογράφοντας τις παρακάτω πληροφορίες:
|
||||
- Είναι δυνατό να δημιουργηθεί ένα **lite shared key for blob, queue and file services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -125,12 +145,12 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Είναι δυνατόν να δημιουργηθεί ένα **lite shared key για τις υπηρεσίες πίνακα** υπογράφοντας τις παρακάτω πληροφορίες:
|
||||
- Είναι δυνατό να δημιουργηθεί ένα **lite shared key for table services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
```
|
||||
Στη συνέχεια, για να χρησιμοποιήσετε το κλειδί, μπορεί να γίνει στην κεφαλίδα Authorization ακολουθώντας τη σύνταξη:
|
||||
Έπειτα, για να χρησιμοποιηθεί το κλειδί, αυτό μπορεί να γίνει στην κεφαλίδα Authorization ακολουθώντας τη σύνταξη:
|
||||
```bash
|
||||
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
|
||||
#e.g.
|
||||
@@ -144,73 +164,76 @@ Content-Length: 0
|
||||
```
|
||||
### **Shared Access Signature** (SAS)
|
||||
|
||||
Οι Κοινές Υπογραφές Πρόσβασης (SAS) είναι ασφαλείς, περιορισμένες χρονικά διευθύνσεις URL που **παρέχουν συγκεκριμένα δικαιώματα πρόσβασης σε πόρους** σε έναν λογαριασμό Azure Storage χωρίς να εκθέτουν τα κλειδιά πρόσβασης του λογαριασμού. Ενώ τα κλειδιά πρόσβασης παρέχουν πλήρη διαχειριστική πρόσβαση σε όλους τους πόρους, το SAS επιτρέπει λεπτομερή έλεγχο καθορίζοντας δικαιώματα (όπως ανάγνωση ή εγγραφή) και ορίζοντας χρόνο λήξης.
|
||||
Shared Access Signatures (SAS) είναι ασφαλείς, χρονικά περιορισμένα URLs που **παρέχουν συγκεκριμένα δικαιώματα πρόσβασης σε πόρους** σε έναν Azure Storage λογαριασμό χωρίς να αποκαλύπτουν τα κλειδιά πρόσβασης του λογαριασμού. Ενώ τα κλειδιά πρόσβασης παρέχουν πλήρη διαχειριστική πρόσβαση σε όλους τους πόρους, το SAS επιτρέπει πιο λεπτομερή έλεγχο καθορίζοντας δικαιώματα (π.χ. ανάγνωση ή εγγραφή) και χρόνο λήξης.
|
||||
|
||||
#### Τύποι SAS
|
||||
|
||||
- **User delegation SAS**: Δημιουργείται από έναν **Entra ID principal** που θα υπογράψει το SAS και θα εκχωρήσει τα δικαιώματα από τον χρήστη στο SAS. Μπορεί να χρησιμοποιηθεί μόνο με **blob και data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Είναι δυνατή η **ανάκληση** όλων των παραγόμενων SAS που έχουν εκχωρηθεί από χρήστες.
|
||||
- Ακόμα και αν είναι δυνατό να παραχθεί ένα delegation SAS με "περισσότερα" δικαιώματα από αυτά που έχει ο χρήστης. Ωστόσο, αν ο principal δεν τα έχει, δεν θα λειτουργήσει (χωρίς privesc).
|
||||
- **Service SAS**: Υπογράφεται χρησιμοποιώντας ένα από τα **access keys** του λογαριασμού αποθήκευσης. Μπορεί να χρησιμοποιηθεί για να παραχωρήσει πρόσβαση σε συγκεκριμένους πόρους σε μια μόνο υπηρεσία αποθήκευσης. Αν το κλειδί ανανεωθεί, το SAS θα σταματήσει να λειτουργεί.
|
||||
- **Account SAS**: Υπογράφεται επίσης με ένα από τα **access keys** του λογαριασμού αποθήκευσης. Παρέχει πρόσβαση σε πόρους σε όλες τις υπηρεσίες ενός λογαριασμού αποθήκευσης (Blob, Queue, Table, File) και μπορεί να περιλαμβάνει λειτουργίες σε επίπεδο υπηρεσίας.
|
||||
- **User delegation SAS**: Δημιουργείται από έναν **Entra ID principal** που θα υπογράψει το SAS και θα εκχωρήσει τα δικαιώματα από τον χρήστη στο SAS. Μπορεί να χρησιμοποιηθεί μόνο με **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Είναι δυνατόν να **ανακληθούν** όλα τα δημιουργημένα user delegated SAS.
|
||||
- Είναι δυνατή η δημιουργία ενός delegation SAS με "περισσότερα" δικαιώματα από αυτά που έχει ο χρήστης. Ωστόσο, αν ο principal δεν τα διαθέτει, δεν θα λειτουργήσει (no privesc).
|
||||
- **Service SAS**: Υπογράφεται χρησιμοποιώντας ένα από τα **access keys** του storage account. Μπορεί να χρησιμοποιηθεί για να δοθεί πρόσβαση σε συγκεκριμένους πόρους σε μία μόνο storage υπηρεσία. Αν το κλειδί ανανεωθεί, το SAS θα παύσει να λειτουργεί.
|
||||
- **Account SAS**: Επίσης υπογράφεται με ένα από τα **access keys** του storage account. Παρέχει πρόσβαση σε πόρους σε όλο το storage account services (Blob, Queue, Table, File) και μπορεί να περιλαμβάνει λειτουργίες σε επίπεδο υπηρεσίας.
|
||||
|
||||
Μια διεύθυνση URL SAS που υπογράφεται με ένα **access key** φαίνεται έτσι:
|
||||
A SAS URL υπογεγραμμένο από ένα **access key** μοιάζει με αυτό:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
||||
|
||||
Μια διεύθυνση URL SAS που υπογράφεται ως **user delegation** φαίνεται έτσι:
|
||||
A SAS URL υπογεγραμμένο ως **user delegation** μοιάζει με αυτό:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D`
|
||||
|
||||
Σημειώστε μερικές **http params**:
|
||||
Σημειώστε μερικά **http params**:
|
||||
|
||||
- Η παράμετρος **`se`** υποδεικνύει την **ημερομηνία λήξης** του SAS
|
||||
- Η παράμετρος **`sp`** υποδεικνύει τα **δικαιώματα** του SAS
|
||||
- Η **`sig`** είναι η **υπογραφή** που επικυρώνει το SAS
|
||||
- Το **`se`** param υποδεικνύει την **ημερομηνία λήξης** του SAS
|
||||
- Το **`sp`** param υποδεικνύει τα **δικαιώματα** του SAS
|
||||
- Το **`sig`** είναι η **υπογραφή** που επικυρώνει το SAS
|
||||
|
||||
#### Δικαιώματα SAS
|
||||
|
||||
Κατά την παραγωγή ενός SAS, είναι απαραίτητο να υποδειχθούν τα δικαιώματα που θα παραχωρεί. Ανάλογα με το αντικείμενο πάνω στο οποίο παράγεται το SAS, μπορεί να περιλαμβάνονται διαφορετικά δικαιώματα. Για παράδειγμα:
|
||||
Κατά τη δημιουργία ενός SAS πρέπει να καθοριστούν τα δικαιώματα που θα παραχωρεί. Ανάλογα με το αντικείμενο πάνω στο οποίο δημιουργείται το SAS, μπορεί να περιλαμβάνονται διαφορετικά δικαιώματα. Για παράδειγμα:
|
||||
|
||||
- (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete
|
||||
|
||||
## SFTP Support for Azure Blob Storage
|
||||
|
||||
Η Azure Blob Storage υποστηρίζει τώρα το Πρωτόκολλο Μεταφοράς Αρχείων SSH (SFTP), επιτρέποντας ασφαλή μεταφορά και διαχείριση αρχείων απευθείας στην Blob Storage χωρίς να απαιτούνται προσαρμοσμένες λύσεις ή προϊόντα τρίτων.
|
||||
Azure Blob Storage τώρα υποστηρίζει το SSH File Transfer Protocol (SFTP), επιτρέποντας ασφαλή μεταφορά αρχείων και διαχείριση απευθείας στο Blob Storage χωρίς να απαιτούνται προσαρμοσμένες λύσεις ή προϊόντα τρίτων.
|
||||
|
||||
### Κύρια Χαρακτηριστικά
|
||||
### Βασικά Χαρακτηριστικά
|
||||
|
||||
- Υποστήριξη Πρωτοκόλλου: Το SFTP λειτουργεί με λογαριασμούς Blob Storage που είναι διαμορφωμένοι με ιεραρχικό χώρο ονομάτων (HNS). Αυτό οργανώνει τα blobs σε καταλόγους και υποκαταλόγους για ευκολότερη πλοήγηση.
|
||||
- Ασφάλεια: Το SFTP χρησιμοποιεί τοπικές ταυτότητες χρηστών για την αυθεντικοποίηση και δεν ενσωματώνεται με RBAC ή ABAC. Κάθε τοπικός χρήστης μπορεί να αυθεντικοποιηθεί μέσω:
|
||||
- Κωδικών πρόσβασης που δημιουργούνται από την Azure
|
||||
- Δημόσιων-ιδιωτικών ζευγών κλειδιών SSH
|
||||
- Λεπτομερή Δικαιώματα: Δικαιώματα όπως Ανάγνωση, Εγγραφή, Διαγραφή και Λίστα μπορούν να εκχωρηθούν σε τοπικούς χρήστες για έως 100 κοντέινερ.
|
||||
- Δικτυακές Σκέψεις: Οι συνδέσεις SFTP γίνονται μέσω της θύρας 22. Η Azure υποστηρίζει δικτυακές διαμορφώσεις όπως τείχη προστασίας, ιδιωτικά endpoints ή εικονικά δίκτυα για την ασφάλιση της κυκλοφορίας SFTP.
|
||||
- Protocol Support: Το SFTP λειτουργεί με Blob Storage accounts που έχουν ρυθμιστεί με hierarchical namespace (HNS). Αυτό οργανώνει τα blobs σε directories και subdirectories για ευκολότερη πλοήγηση.
|
||||
- Security: Το SFTP χρησιμοποιεί local user identities για authentication και δεν ενσωματώνεται με RBAC ή ABAC. Κάθε local user μπορεί να αυθεντικοποιηθεί μέσω:
|
||||
- Azure-generated passwords
|
||||
- Public-private SSH key pairs
|
||||
- Granular Permissions: Δικαιώματα όπως Read, Write, Delete και List μπορούν να ανατεθούν σε local users για έως και 100 containers.
|
||||
- Networking Considerations: Οι SFTP συνδέσεις γίνονται μέσω της θύρας 22. Το Azure υποστηρίζει ρυθμίσεις δικτύου όπως firewalls, private endpoints ή virtual networks για να ασφαλίσει την SFTP κίνηση.
|
||||
|
||||
### Απαιτήσεις Ρύθμισης
|
||||
### Απαιτήσεις Εγκατάστασης
|
||||
|
||||
- Ιεραρχικός Χώρος Ονομάτων: Το HNS πρέπει να είναι ενεργοποιημένο κατά τη δημιουργία του λογαριασμού αποθήκευσης.
|
||||
- Υποστηριζόμενη Κρυπτογράφηση: Απαιτείται η έγκριση κρυπτογραφικών αλγορίθμων από τον Κύκλο Ζωής Ανάπτυξης Ασφαλείας της Microsoft (SDL) (π.χ. rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- Ρύθμιση SFTP:
|
||||
- Ενεργοποιήστε το SFTP στον λογαριασμό αποθήκευσης.
|
||||
- Δημιουργήστε τοπικές ταυτότητες χρηστών με κατάλληλα δικαιώματα.
|
||||
- Ρυθμίστε τους καταλόγους αρχικής τοποθεσίας για τους χρήστες για να καθορίσετε την αρχική τους τοποθεσία εντός του κοντέινερ.
|
||||
- Hierarchical Namespace: Το HNS πρέπει να είναι ενεργοποιημένο κατά τη δημιουργία του storage account.
|
||||
- Supported Encryption: Απαιτούνται κρυπτογραφικοί αλγόριθμοι εγκεκριμένοι από το Microsoft Security Development Lifecycle (SDL) (π.χ., rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- SFTP Configuration:
|
||||
- Ενεργοποίηση του SFTP στον storage account.
|
||||
- Δημιουργία local user identities με τα κατάλληλα permissions.
|
||||
- Ρύθμιση home directories για τους χρήστες ώστε να ορίζεται η αρχική τους θέση μέσα στο container.
|
||||
|
||||
### Δικαιώματα
|
||||
|
||||
| Δικαίωμα | Σύμβολο | Περιγραφή |
|
||||
| Permission | Symbol | Description |
|
||||
| ---------------------- | ------ | ------------------------------------ |
|
||||
| **Ανάγνωση** | `r` | Ανάγνωση περιεχομένου αρχείου. |
|
||||
| **Εγγραφή** | `w` | Μεταφόρτωση αρχείων και δημιουργία καταλόγων. |
|
||||
| **Λίστα** | `l` | Λίστα περιεχομένων καταλόγων. |
|
||||
| **Διαγραφή** | `d` | Διαγραφή αρχείων ή καταλόγων. |
|
||||
| **Δημιουργία** | `c` | Δημιουργία αρχείων ή καταλόγων. |
|
||||
| **Τροποποίηση Ιδιοκτησίας** | `o` | Αλλαγή του κατόχου χρήστη ή ομάδας. |
|
||||
| **Τροποποίηση Δικαιωμάτων** | `p` | Αλλαγή ACLs σε αρχεία ή καταλόγους. |
|
||||
| **Read** | `r` | Ανάγνωση του περιεχομένου αρχείου. |
|
||||
| **Write** | `w` | Αποστολή αρχείων και δημιουργία directories. |
|
||||
| **List** | `l` | Λίστα περιεχομένων των directories. |
|
||||
| **Delete** | `d` | Διαγραφή αρχείων ή directories. |
|
||||
| **Create** | `c` | Δημιουργία αρχείων ή directories. |
|
||||
| **Modify Ownership** | `o` | Αλλαγή ιδιοκτήτη χρήστη ή ομάδας. |
|
||||
| **Modify Permissions** | `p` | Αλλαγή ACLs σε αρχεία ή directories. |
|
||||
|
||||
## Enumeration
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
|
||||
<details>
|
||||
<summary>az cli enumeration</summary>
|
||||
```bash
|
||||
# Get storage accounts
|
||||
az storage account list #Get the account name from here
|
||||
@@ -327,10 +350,15 @@ az storage account local-user list \
|
||||
--account-name <storage-account-name> \
|
||||
--resource-group <resource-group-name>
|
||||
```
|
||||
</details>
|
||||
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```bash
|
||||
|
||||
<details>
|
||||
<summary>Az PowerShell enumeration</summary>
|
||||
```powershell
|
||||
# Get storage accounts
|
||||
Get-AzStorageAccount | fl
|
||||
# Get rules to access the storage account
|
||||
@@ -387,28 +415,30 @@ New-AzStorageBlobSASToken `
|
||||
-Permission racwdl `
|
||||
-ExpiryTime (Get-Date "2024-12-31T23:59:00Z")
|
||||
```
|
||||
</details>
|
||||
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Κοινές Χρήσεις Αρχείων
|
||||
### Κοινόχρηστα Αρχεία
|
||||
|
||||
{{#ref}}
|
||||
az-file-shares.md
|
||||
{{#endref}}
|
||||
|
||||
## Κλιμάκωση Δικαιωμάτων
|
||||
## Κλιμάκωση Προνομίων
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-storage-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Μετά την Εκμετάλλευση
|
||||
## Μετά την εκμετάλλευση
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-blob-storage-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## Επιμονή
|
||||
## Διατήρηση πρόσβασης
|
||||
|
||||
{{#ref}}
|
||||
../az-persistence/az-storage-persistence.md
|
||||
@@ -419,5 +449,9 @@ az-file-shares.md
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction)
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support](https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support)
|
||||
- [Holiday Hack Challenge 2025: Blob Storage (Storage Secrets)](https://0xdf.gitlab.io/holidayhack2025/act1/blob-storage)
|
||||
- [https://learn.microsoft.com/en-us/cli/azure/storage/account](https://learn.microsoft.com/en-us/cli/azure/storage/account)
|
||||
- [https://learn.microsoft.com/en-us/cli/azure/storage/container](https://learn.microsoft.com/en-us/cli/azure/storage/container)
|
||||
- [https://learn.microsoft.com/en-us/cli/azure/storage/blob](https://learn.microsoft.com/en-us/cli/azure/storage/blob)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user