mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 19:32:24 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -418,6 +418,7 @@
|
||||
- [Az - Queue Storage](pentesting-cloud/azure-security/az-services/az-queue-enum.md)
|
||||
- [Az - Service Bus](pentesting-cloud/azure-security/az-services/az-servicebus-enum.md)
|
||||
- [Az - SQL](pentesting-cloud/azure-security/az-services/az-sql.md)
|
||||
- [Az - Static Web Applications](pentesting-cloud/azure-security/az-services/az-static-web-apps.md)
|
||||
- [Az - Storage Accounts & Blobs](pentesting-cloud/azure-security/az-services/az-storage.md)
|
||||
- [Az - Table Storage](pentesting-cloud/azure-security/az-services/az-table-storage.md)
|
||||
- [Az - Virtual Machines & Network](pentesting-cloud/azure-security/az-services/vms/README.md)
|
||||
@@ -461,6 +462,7 @@
|
||||
- [Az - Queue Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-queue-privesc.md)
|
||||
- [Az - Service Bus Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md)
|
||||
- [Az - Virtual Machines & Network Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md)
|
||||
- [Az - Static Web App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md)
|
||||
- [Az - Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-storage-privesc.md)
|
||||
- [Az - SQL Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-sql-privesc.md)
|
||||
- [Az - Persistence](pentesting-cloud/azure-security/az-persistence/README.md)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject`
|
||||
|
||||
Ένας επιτιθέμενος με αυτές τις άδειες σε ενδιαφέροντα buckets μπορεί να είναι σε θέση να καταλάβει πόρους και να αναβαθμίσει τα προνόμια.
|
||||
Ένας επιτιθέμενος με αυτές τις άδειες σε ενδιαφέροντα buckets μπορεί να είναι σε θέση να καταλάβει πόρους και να κλιμακώσει προνόμια.
|
||||
|
||||
Για παράδειγμα, ένας επιτιθέμενος με αυτές τις **άδειες σε ένα cloudformation bucket** που ονομάζεται "cf-templates-nohnwfax6a6i-us-east-1" θα είναι σε θέση να καταλάβει την ανάπτυξη. Η πρόσβαση μπορεί να δοθεί με την ακόλουθη πολιτική:
|
||||
```json
|
||||
@@ -45,17 +45,17 @@
|
||||
|
||||
Αυτές είναι οι άδειες για **λήψη και ανέβασμα αντικειμένων στο S3**. Πολλές υπηρεσίες μέσα στο AWS (και εκτός αυτού) χρησιμοποιούν αποθήκευση S3 για να αποθηκεύσουν **αρχεία ρυθμίσεων**.\
|
||||
Ένας επιτιθέμενος με **δικαιώματα ανάγνωσης** σε αυτά μπορεί να βρει **ευαίσθητες πληροφορίες** σε αυτά.\
|
||||
Ένας επιτιθέμενος με **δικαιώματα εγγραφής** σε αυτά θα μπορούσε να **τροποποιήσει τα δεδομένα για να εκμεταλλευτεί κάποια υπηρεσία και να προσπαθήσει να κλιμακώσει τα δικαιώματα**.\
|
||||
Ένας επιτιθέμενος με **δικαιώματα εγγραφής** σε αυτά θα μπορούσε να **τροποποιήσει τα δεδομένα για να καταχραστεί κάποια υπηρεσία και να προσπαθήσει να κλιμακώσει τα δικαιώματα**.\
|
||||
Αυτά είναι μερικά παραδείγματα:
|
||||
|
||||
- Αν μια EC2 instance αποθηκεύει τα **δεδομένα χρήστη σε ένα S3 bucket**, ένας επιτιθέμενος θα μπορούσε να το τροποποιήσει για να **εκτελέσει αυθαίρετο κώδικα μέσα στην EC2 instance**.
|
||||
- Εάν μια EC2 instance αποθηκεύει τα **δεδομένα χρήστη σε ένα S3 bucket**, ένας επιτιθέμενος θα μπορούσε να το τροποποιήσει για να **εκτελέσει αυθαίρετο κώδικα μέσα στην EC2 instance**.
|
||||
|
||||
### `s3:PutObject`, `s3:GetObject` (προαιρετικό) πάνω από το αρχείο κατάστασης terraform
|
||||
### `s3:PutObject`, `s3:GetObject` (προαιρετικά) πάνω από το αρχείο κατάστασης terraform
|
||||
|
||||
Είναι πολύ συνηθισμένο τα [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) αρχεία κατάστασης να αποθηκεύονται σε blob storage παρόχων cloud, π.χ. AWS S3. Η κατάληξη αρχείου για ένα αρχείο κατάστασης είναι `.tfstate`, και τα ονόματα των buckets συχνά αποκαλύπτουν ότι περιέχουν αρχεία κατάστασης terraform. Συνήθως, κάθε λογαριασμός AWS έχει ένα τέτοιο bucket για να αποθηκεύει τα αρχεία κατάστασης που δείχνουν την κατάσταση του λογαριασμού.
|
||||
Επίσης, συνήθως, σε πραγματικούς λογαριασμούς σχεδόν πάντα όλοι οι προγραμματιστές έχουν `s3:*` και μερικές φορές ακόμη και οι επιχειρηματικοί χρήστες έχουν `s3:Put*`.
|
||||
|
||||
Έτσι, αν έχετε τις άδειες που αναφέρονται πάνω από αυτά τα αρχεία, υπάρχει ένα επιθετικός διαδρομή που σας επιτρέπει να αποκτήσετε RCE στην pipeline με τα δικαιώματα του `terraform` - τις περισσότερες φορές `AdministratorAccess`, κάνοντάς σας τον διαχειριστή του λογαριασμού cloud. Επίσης, μπορείτε να χρησιμοποιήσετε αυτή τη διαδρομή για να κάνετε μια επίθεση άρνησης υπηρεσίας κάνοντάς το `terraform` να διαγράψει νόμιμους πόρους.
|
||||
Έτσι, αν έχετε τις άδειες που αναφέρονται πάνω από αυτά τα αρχεία, υπάρχει ένα επιθετικός παράγοντας που σας επιτρέπει να αποκτήσετε RCE στην pipeline με τα δικαιώματα του `terraform` - τις περισσότερες φορές `AdministratorAccess`, κάνοντάς σας τον διαχειριστή του λογαριασμού cloud. Επίσης, μπορείτε να χρησιμοποιήσετε αυτόν τον παράγοντα για να κάνετε μια επίθεση άρνησης υπηρεσίας κάνοντάς το `terraform` να διαγράψει νόμιμους πόρους.
|
||||
|
||||
Ακολουθήστε την περιγραφή στην ενότητα *Abusing Terraform State Files* της σελίδας *Terraform Security* για άμεσα χρησιμοποιήσιμο κώδικα εκμετάλλευσης:
|
||||
|
||||
@@ -65,7 +65,7 @@ pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files
|
||||
|
||||
### `s3:PutBucketPolicy`
|
||||
|
||||
Ένας επιτιθέμενος, που πρέπει να είναι **από τον ίδιο λογαριασμό**, αν όχι το σφάλμα `The specified method is not allowed will trigger`, με αυτή την άδεια θα είναι σε θέση να παραχωρήσει στον εαυτό του περισσότερες άδειες πάνω από το bucket(s) επιτρέποντάς του να διαβάσει, να γράψει, να τροποποιήσει, να διαγράψει και να εκθέσει buckets.
|
||||
Ένας επιτιθέμενος, που πρέπει να είναι **από τον ίδιο λογαριασμό**, αν όχι, το σφάλμα `The specified method is not allowed will trigger`, με αυτή την άδεια θα είναι σε θέση να παραχωρήσει στον εαυτό του περισσότερες άδειες πάνω από το bucket(s) επιτρέποντάς του να διαβάσει, να γράψει, να τροποποιήσει, να διαγράψει και να εκθέσει buckets.
|
||||
```bash
|
||||
# Update Bucket policy
|
||||
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
|
||||
|
||||
@@ -124,7 +124,7 @@ az webapp deployment user set \
|
||||
--user-name hacktricks \
|
||||
--password 'W34kP@ssw0rd123!'
|
||||
```
|
||||
Τότε, μπορείτε να χρησιμοποιήσετε αυτά τα διαπιστευτήρια για να **έχετε πρόσβαση στις πλατφόρμες SCM και FTP**. Αυτός είναι επίσης ένας εξαιρετικός τρόπος για να διατηρήσετε την επιμονή.
|
||||
Τότε, μπορείτε να χρησιμοποιήσετε αυτά τα διαπιστευτήρια για να **πρόσβαση στις πλατφόρμες SCM και FTP**. Αυτός είναι επίσης ένας εξαιρετικός τρόπος για να διατηρήσετε την επιμονή.
|
||||
|
||||
Θυμηθείτε ότι για να αποκτήσετε πρόσβαση στην πλατφόρμα SCM από το **web πρέπει να αποκτήσετε πρόσβαση στο `<SCM-URL>/BasicAuth`**.
|
||||
|
||||
@@ -186,7 +186,7 @@ curl "<SCM-URL>/wwwroot/App_Data/jobs/" \
|
||||
curl "https://nodewebapp-agamcvhgg3gkd3hs.scm.canadacentral-01.azurewebsites.net/wwwroot/App_Data/jobs/continuous/job_name/rev.js" \
|
||||
--user '<username>:<password>'
|
||||
```
|
||||
- Δημιουργήστε **συνεχή Webjob**:
|
||||
- Δημιουργία **συνεχούς Webjob**:
|
||||
```bash
|
||||
# Using Azure permissions
|
||||
az rest \
|
||||
@@ -263,10 +263,10 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
|
||||
- **`Microsoft.Web/sites/config/list/action`**: Στη συνέχεια, εκτελέστε `az webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>`
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι έχοντας την άδεια `Microsoft.Web/sites/config/list/action` και τα διαπιστευτήρια SCM είναι πάντα δυνατό να αναπτύξετε σε μια webapp (ακόμα και αν είχε ρυθμιστεί να χρησιμοποιεί έναν τρίτο πάροχο) όπως αναφέρθηκε σε προηγούμενη ενότητα.
|
||||
> Σημειώστε ότι έχοντας την άδεια `Microsoft.Web/sites/config/list/action` και τα διαπιστευτήρια SCM είναι πάντα δυνατό να αναπτύξετε σε μια webapp (ακόμη και αν είχε ρυθμιστεί να χρησιμοποιεί έναν τρίτο πάροχο) όπως αναφέρθηκε σε προηγούμενη ενότητα.
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι έχοντας τις παρακάτω άδειες είναι επίσης **δυνατό να εκτελέσετε ένα αυθαίρετο κοντέινερ** ακόμα και αν η webapp είχε ρυθμιστεί διαφορετικά.
|
||||
> Σημειώστε ότι έχοντας τις παρακάτω άδειες είναι επίσης **δυνατό να εκτελέσετε ένα αυθαίρετο κοντέινερ** ακόμη και αν η webapp είχε ρυθμιστεί διαφορετικά.
|
||||
|
||||
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
|
||||
|
||||
|
||||
@@ -4,22 +4,111 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Azure Function Apps** είναι μια **χωρίς διακομιστή υπηρεσία υπολογισμού** που σας επιτρέπει να εκτελείτε μικρά κομμάτια κώδικα, που ονομάζονται **functions**, χωρίς να διαχειρίζεστε την υποκείμενη υποδομή. Είναι σχεδιασμένα να εκτελούν κώδικα σε απάντηση σε διάφορους ενεργοποιητές, όπως **HTTP requests, timers, ή events από άλλες υπηρεσίες Azure** όπως Blob Storage ή Event Hubs. Οι Function Apps υποστηρίζουν πολλές γλώσσες προγραμματισμού, συμπεριλαμβανομένων των C#, Python, JavaScript και Java, καθιστώντας τις ευέλικτες για την κατασκευή **event-driven applications**, αυτοματοποίηση ροών εργασίας ή ενσωμάτωση υπηρεσιών. Είναι οικονομικές, καθώς συνήθως πληρώνετε μόνο για τον χρόνο υπολογισμού που χρησιμοποιείται όταν εκτελείται ο κώδικάς σας.
|
||||
**Azure Function Apps** είναι μια **serverless compute service** που σας επιτρέπει να εκτελείτε μικρά κομμάτια κώδικα, που ονομάζονται **functions**, χωρίς να διαχειρίζεστε την υποκείμενη υποδομή. Είναι σχεδιασμένα να εκτελούν κώδικα σε απάντηση σε διάφορους ενεργοποιητές, όπως **HTTP requests, timers, ή events από άλλες υπηρεσίες Azure** όπως Blob Storage ή Event Hubs. Τα Function Apps υποστηρίζουν πολλές γλώσσες προγραμματισμού, συμπεριλαμβανομένων των C#, Python, JavaScript και Java, καθιστώντας τα ευέλικτα για την κατασκευή **event-driven applications**, αυτοματοποίηση ροών εργασίας ή ενσωμάτωση υπηρεσιών. Είναι οικονομικά αποδοτικά, καθώς συνήθως πληρώνετε μόνο για τον χρόνο υπολογισμού που χρησιμοποιείται όταν εκτελείται ο κώδικας σας.
|
||||
|
||||
> [!NOTE]
|
||||
> Σημειώστε ότι **Functions είναι ένα υποσύνολο των App Services**, επομένως, πολλές από τις δυνατότητες που συζητούνται εδώ θα χρησιμοποιηθούν επίσης από εφαρμογές που δημιουργούνται ως Azure Apps (`webapp` στο cli).
|
||||
|
||||
### Different Plans
|
||||
|
||||
- **Flex Consumption Plan**: Προσφέρει **δυναμική, event-driven κλιμάκωση** με τιμολόγηση pay-as-you-go, προσθέτοντας ή αφαιρώντας παραδείγματα λειτουργιών με βάση τη ζήτηση. Υποστηρίζει **virtual networking** και **pre-provisioned instances** για να μειώσει τις κρύες εκκινήσεις, καθιστώντας το κατάλληλο για **μεταβλητά φορτία εργασίας** που δεν απαιτούν υποστήριξη κοντέινερ.
|
||||
- **Traditional Consumption Plan**: Η προεπιλεγμένη χωρίς διακομιστή επιλογή, όπου **πληρώνετε μόνο για τους υπολογιστικούς πόρους όταν εκτελούνται οι λειτουργίες**. Κλιμακώνεται αυτόματα με βάση τα εισερχόμενα γεγονότα και περιλαμβάνει **βελτιστοποιήσεις κρύας εκκίνησης**, αλλά δεν υποστηρίζει αναπτύξεις κοντέινερ. Ιδανικό για **διαλείποντα φορτία εργασίας** που απαιτούν αυτόματη κλιμάκωση.
|
||||
- **Premium Plan**: Σχεδιασμένο για **σταθερή απόδοση**, με **prewarmed workers** για την εξάλειψη των κρύων εκκινήσεων. Προσφέρει **εκτεταμένους χρόνους εκτέλεσης, virtual networking**, και υποστηρίζει **custom Linux images**, καθιστώντας το ιδανικό για **mission-critical applications** που χρειάζονται υψηλή απόδοση και προηγμένες δυνατότητες.
|
||||
- **Dedicated Plan**: Λειτουργεί σε αφιερωμένες εικονικές μηχανές με **προβλέψιμο τιμολόγιο** και υποστηρίζει χειροκίνητη ή αυτόματη κλιμάκωση. Επιτρέπει την εκτέλεση πολλών εφαρμογών στο ίδιο σχέδιο, παρέχει **υπολογιστική απομόνωση**, και εξασφαλίζει **ασφαλή πρόσβαση στο δίκτυο** μέσω App Service Environments, καθιστώντας το ιδανικό για **μακροχρόνιες εφαρμογές** που χρειάζονται συνεπή κατανομή πόρων.
|
||||
- **Flex Consumption Plan**: Προσφέρει **dynamic, event-driven scaling** με τιμολόγηση pay-as-you-go, προσθέτοντας ή αφαιρώντας παραδείγματα λειτουργιών με βάση τη ζήτηση. Υποστηρίζει **virtual networking** και **pre-provisioned instances** για να μειώσει τις κρύες εκκινήσεις, καθιστώντας το κατάλληλο για **variable workloads** που δεν απαιτούν υποστήριξη κοντέινερ.
|
||||
- **Traditional Consumption Plan**: Η προεπιλεγμένη serverless επιλογή, όπου **πληρώνετε μόνο για τους υπολογιστικούς πόρους όταν εκτελούνται οι λειτουργίες**. Αυξάνεται αυτόματα με βάση τα εισερχόμενα γεγονότα και περιλαμβάνει **cold start optimizations**, αλλά δεν υποστηρίζει αναπτύξεις κοντέινερ. Ιδανικό για **intermittent workloads** που απαιτούν αυτόματη κλιμάκωση.
|
||||
- **Premium Plan**: Σχεδιασμένο για **consistent performance**, με **prewarmed workers** για να εξαλείψει τις κρύες εκκινήσεις. Προσφέρει **extended execution times, virtual networking**, και υποστηρίζει **custom Linux images**, καθιστώντας το ιδανικό για **mission-critical applications** που χρειάζονται υψηλή απόδοση και προηγμένες δυνατότητες.
|
||||
- **Dedicated Plan**: Λειτουργεί σε αφιερωμένες εικονικές μηχανές με **predictable billing** και υποστηρίζει χειροκίνητη ή αυτόματη κλιμάκωση. Επιτρέπει την εκτέλεση πολλών εφαρμογών στο ίδιο σχέδιο, παρέχει **compute isolation**, και εξασφαλίζει **secure network access** μέσω App Service Environments, καθιστώντας το ιδανικό για **long-running applications** που χρειάζονται συνεπή κατανομή πόρων.
|
||||
- **Container Apps**: Επιτρέπει την ανάπτυξη **containerized function apps** σε ένα διαχειριζόμενο περιβάλλον, παράλληλα με μικροϋπηρεσίες και APIs. Υποστηρίζει προσαρμοσμένες βιβλιοθήκες, μετανάστευση κληρονομημένων εφαρμογών, και **GPU processing**, εξαλείφοντας τη διαχείριση του Kubernetes cluster. Ιδανικό για **event-driven, scalable containerized applications**.
|
||||
|
||||
### **Storage Buckets**
|
||||
|
||||
Όταν δημιουργείτε μια νέα Function App που δεν είναι κοντεϊνερized (αλλά δίνετε τον κώδικα για εκτέλεση), τα **δε
|
||||
Όταν δημιουργείτε μια νέα Function App που δεν είναι κοντεϊνεροποιημένη (αλλά δίνετε τον κώδικα για εκτέλεση), τα **δεδομένα του κώδικα και άλλα σχετικά με τη Function θα αποθηκευτούν σε έναν λογαριασμό Storage**. Από προεπιλογή, η διαδικτυακή κονσόλα θα δημιουργήσει έναν νέο ανά λειτουργία για να αποθηκεύσει τον κώδικα.
|
||||
|
||||
Επιπλέον, τροποποιώντας τον κώδικα μέσα στο bucket (στα διάφορα φορμά που μπορεί να αποθηκευτεί), ο **κώδικας της εφαρμογής θα τροποποιηθεί στον νέο και θα εκτελείται** την επόμενη φορά που θα κληθεί η Function.
|
||||
|
||||
> [!CAUTION]
|
||||
> Αυτό είναι πολύ ενδιαφέρον από την προοπτική ενός επιτιθέμενου καθώς η **πρόσβαση εγγραφής σε αυτό το bucket** θα επιτρέψει σε έναν επιτιθέμενο να **συμβιβάσει τον κώδικα και να κλιμακώσει τα δικαιώματα** στις διαχειριζόμενες ταυτότητες μέσα στην Function App.
|
||||
>
|
||||
> Περισσότερα σχετικά με αυτό στην **ενότητα κλιμάκωσης δικαιωμάτων**.
|
||||
|
||||
Είναι επίσης δυνατό να βρείτε τα **master και functions keys** αποθηκευμένα στον λογαριασμό storage στο κοντέινερ **`azure-webjobs-secrets`** μέσα στον φάκελο **`<app-name>`** στα αρχεία JSON που μπορείτε να βρείτε μέσα.
|
||||
|
||||
Σημειώστε ότι οι Functions επιτρέπουν επίσης την αποθήκευση του κώδικα σε μια απομακρυσμένη τοποθεσία απλά υποδεικνύοντας το URL της.
|
||||
|
||||
### Networking
|
||||
|
||||
Χρησιμοποιώντας έναν HTTP trigger:
|
||||
|
||||
- Είναι δυνατό να δώσετε **πρόσβαση σε μια λειτουργία από όλο το Διαδίκτυο** χωρίς να απαιτείται καμία πιστοποίηση ή να δώσετε πρόσβαση με βάση το IAM. Αν και είναι επίσης δυνατό να περιορίσετε αυτή την πρόσβαση.
|
||||
- Είναι επίσης δυνατό να **δώσετε ή να περιορίσετε την πρόσβαση** σε μια Function App από **ένα εσωτερικό δίκτυο (VPC)**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Αυτό είναι πολύ ενδιαφέρον από την προοπτική ενός επιτιθέμενου καθώς μπορεί να είναι δυνατό να **pivot σε εσωτερικά δίκτυα** από μια ευάλωτη Function που είναι εκτεθειμένη στο Διαδίκτυο.
|
||||
|
||||
### **Function App Settings & Environment Variables**
|
||||
|
||||
Είναι δυνατό να ρυθμίσετε μεταβλητές περιβάλλοντος μέσα σε μια εφαρμογή, οι οποίες μπορεί να περιέχουν ευαίσθητες πληροφορίες. Επιπλέον, από προεπιλογή οι env μεταβλητές **`AzureWebJobsStorage`** και **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (μεταξύ άλλων) δημιουργούνται. Αυτές είναι ιδιαίτερα ενδιαφέρουσες γιατί **περιέχουν το κλειδί λογαριασμού για τον έλεγχο με ΠΛΗΡΕΙΣ άδειες τον λογαριασμό storage που περιέχει τα δεδομένα της εφαρμογής**. Αυτές οι ρυθμίσεις είναι επίσης απαραίτητες για την εκτέλεση του κώδικα από τον λογαριασμό Storage.
|
||||
|
||||
Αυτές οι env μεταβλητές ή παράμετροι ρύθμισης ελέγχουν επίσης πώς η Function εκτελεί τον κώδικα, για παράδειγμα αν **`WEBSITE_RUN_FROM_PACKAGE`** υπάρχει, θα υποδεικνύει το URL όπου βρίσκεται ο κώδικας της εφαρμογής.
|
||||
|
||||
### **Function Sandbox**
|
||||
|
||||
Μέσα στο linux sandbox ο πηγαίος κώδικας βρίσκεται στο **`/home/site/wwwroot`** στο αρχείο **`function_app.py`** (αν χρησιμοποιείται python) ο χρήστης που εκτελεί τον κώδικα είναι **`app`** (χωρίς δικαιώματα sudo).
|
||||
|
||||
Σε μια **Windows** function που χρησιμοποιεί NodeJS, ο κώδικας βρισκόταν στο **`C:\home\site\wwwroot\HttpTrigger1\index.js`**, το όνομα χρήστη ήταν **`mawsFnPlaceholder8_f_v4_node_20_x86`** και ήταν μέρος των **groups**: `Mandatory Label\High Mandatory Level Label`, `Everyone`, `BUILTIN\Users`, `NT AUTHORITY\INTERACTIVE`, `CONSOLE LOGON`, `NT AUTHORITY\Authenticated Users`, `NT AUTHORITY\This Organization`, `BUILTIN\IIS_IUSRS`, `LOCAL`, `10-30-4-99\Dwas Site Users`.
|
||||
|
||||
### **Managed Identities & Metadata**
|
||||
|
||||
Ακριβώς όπως [**VMs**](vms/index.html), οι Functions μπορούν να έχουν **Managed Identities** 2 τύπων: System assigned και User assigned.
|
||||
|
||||
Η **system assigned** θα είναι μια διαχειριζόμενη ταυτότητα που **μόνο η λειτουργία** που έχει ανατεθεί θα μπορεί να χρησιμοποιήσει, ενώ οι **user assigned** διαχειριζόμενες ταυτότητες είναι διαχειριζόμενες ταυτότητες που **οποιαδήποτε άλλη υπηρεσία Azure θα μπορεί να χρησιμοποιήσει**.
|
||||
|
||||
> [!NOTE]
|
||||
> Ακριβώς όπως στις [**VMs**](vms/index.html), οι Functions μπορούν να έχουν **1 system assigned** διαχειριζόμενη ταυτότητα και **πολλές user assigned**, επομένως είναι πάντα σημαντικό να προσπαθείτε να βρείτε όλες αυτές αν συμβιβάσετε τη λειτουργία γιατί μπορεί να μπορείτε να κλιμακώσετε τα δικαιώματα σε πολλές διαχειριζόμενες ταυτότητες από μόνο μία Function.
|
||||
>
|
||||
> Αν δεν χρησιμοποιείται καμία διαχειριζόμενη ταυτότητα συστήματος αλλά μία ή περισσότερες διαχειριζόμενες ταυτότητες χρηστών είναι συνδεδεμένες σε μια λειτουργία, από προεπιλογή δεν θα μπορείτε να αποκτήσετε κανένα token.
|
||||
|
||||
Είναι δυνατό να χρησιμοποιήσετε τα [**PEASS scripts**](https://github.com/peass-ng/PEASS-ng) για να αποκτήσετε tokens από την προεπιλεγμένη διαχειριζόμενη ταυτότητα από το metadata endpoint. Ή μπορείτε να τα αποκτήσετε **χειροκίνητα** όπως εξηγείται σε:
|
||||
|
||||
{% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %}
|
||||
|
||||
Σημειώστε ότι πρέπει να βρείτε έναν τρόπο να **ελέγξετε όλες τις Managed Identities που έχει συνδεδεμένες μια λειτουργία** καθώς αν δεν το υποδείξετε, το metadata endpoint θα **χρησιμοποιεί μόνο την προεπιλεγμένη** (ελέγξτε τον προηγούμενο σύνδεσμο για περισσότερες πληροφορίες).
|
||||
|
||||
## Access Keys
|
||||
|
||||
> [!NOTE]
|
||||
> Σημειώστε ότι δεν υπάρχουν άδειες RBAC για να δώσετε πρόσβαση σε χρήστες να καλέσουν τις λειτουργίες. Η **κλήση της λειτουργίας εξαρτάται από τον ενεργοποιητή** που επιλέχθηκε κατά τη δημιουργία της και αν επιλέχθηκε ένας HTTP Trigger, μπορεί να χρειαστεί να χρησιμοποιήσετε ένα **access key**.
|
||||
|
||||
Όταν δημιουργείτε ένα endpoint μέσα σε μια λειτουργία χρησιμοποιώντας έναν **HTTP trigger**, είναι δυνατό να υποδείξετε το **access key authorization level** που απαιτείται για να ενεργοποιήσετε τη λειτουργία. Διατίθενται τρεις επιλογές:
|
||||
|
||||
- **ANONYMOUS**: **Όλοι** μπορούν να έχουν πρόσβαση στη λειτουργία μέσω του URL.
|
||||
- **FUNCTION**: Το endpoint είναι προσβάσιμο μόνο σε χρήστες που χρησιμοποιούν ένα **function, host ή master key**.
|
||||
- **ADMIN**: Το endpoint είναι προσβάσιμο μόνο σε χρήστες με ένα **master key**.
|
||||
|
||||
**Τύποι κλειδιών:**
|
||||
|
||||
- **Function Keys:** Τα κλειδιά λειτουργίας μπορεί να είναι είτε προεπιλεγμένα είτε καθορισμένα από τον χρήστη και έχουν σχεδιαστεί για να παρέχουν πρόσβαση αποκλειστικά σε **συγκεκριμένα endpoints λειτουργίας** εντός μιας Function App επιτρέποντας μια πιο λεπτομερή πρόσβαση στα endpoints.
|
||||
- **Host Keys:** Τα κλειδιά host, τα οποία μπορεί επίσης να είναι προεπιλεγμένα ή καθορισμένα από τον χρήστη, παρέχουν πρόσβαση σε **όλα τα endpoints λειτουργίας εντός μιας Function App με επίπεδο πρόσβασης FUNCTION**.
|
||||
- **Master Key:** Το master key (`_master`) χρησιμεύει ως διοικητικό κλειδί που προσφέρει αυξημένα δικαιώματα, συμπεριλαμβανομένης της πρόσβασης σε όλα τα endpoints λειτουργίας (συμπεριλαμβανομένου του επιπέδου πρόσβασης ADMIN). Αυτό το **κλειδί δεν μπορεί να ανακληθεί.**
|
||||
- **System Keys:** Τα συστήματα κλειδιά είναι **διαχειριζόμενα από συγκεκριμένες επεκτάσεις** και απαιτούνται για την πρόσβαση σε webhook endpoints που χρησιμοποιούνται από εσωτερικά στοιχεία. Παραδείγματα περιλαμβάνουν τον Event Grid trigger και τις Durable Functions, οι οποίες χρησιμοποιούν συστήματα κλειδιά για να αλληλεπιδρούν με τις αντίστοιχες APIs τους με ασφάλεια.
|
||||
|
||||
> [!TIP]
|
||||
> Παράδειγμα για πρόσβαση σε ένα endpoint API λειτουργίας χρησιμοποιώντας ένα κλειδί:
|
||||
>
|
||||
> `https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>`
|
||||
|
||||
### Basic Authentication
|
||||
|
||||
Ακριβώς όπως στις App Services, οι Functions υποστηρίζουν επίσης βασική πιστοποίηση για σύνδεση στο **SCM** και **FTP** για την ανάπτυξη κώδικα χρησιμοποιώντας ένα **όνομα χρήστη και κωδικό πρόσβασης σε ένα URL** που παρέχεται από την Azure. Περισσότερες πληροφορίες σχετικά με αυτό σε:
|
||||
|
||||
{{#ref}}
|
||||
az-app-services.md
|
||||
{{#endref}}
|
||||
|
||||
### Github Based Deployments
|
||||
|
||||
Όταν μια λειτουργία δημιουργείται από ένα Github repo, η διαδικτυακή κονσόλα Azure επιτρέπει να **δημιουργηθεί αυτόματα ένα Github Workflow σε ένα συγκεκριμένο αποθετήριο** έτσι ώστε κάθε φορά που αυτό το αποθετήριο ενημερώνεται, ο κώδικας της λειτουργίας να ενημερώνεται. Στην πραγματικότητα, το Github Action yaml για μια python function φαίνεται έτσι:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Github Action Yaml</summary>
|
||||
```yaml
|
||||
# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action
|
||||
# More GitHub Actions for Azure: https://github.com/Azure/actions
|
||||
@@ -103,7 +192,7 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
|
||||
```
|
||||
</details>
|
||||
|
||||
Επιπλέον, μια **Διαχειριζόμενη Ταυτότητα** δημιουργείται ώστε η Github Action από το αποθετήριο να μπορεί να συνδεθεί στο Azure με αυτή. Αυτό γίνεται με τη δημιουργία ενός Ομοσπονδιακού διαπιστευτηρίου πάνω στη **Διαχειριζόμενη Ταυτότητα** επιτρέποντας στον **Εκδότη** `https://token.actions.githubusercontent.com` και τον **Αναγνωριστή Υποκειμένου** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
|
||||
Επιπλέον, μια **Διαχειριζόμενη Ταυτότητα** δημιουργείται ώστε η Github Action από το αποθετήριο να μπορεί να συνδεθεί στο Azure με αυτή. Αυτό γίνεται με τη δημιουργία ενός Ομοσπονδιακού διαπιστευτηρίου πάνω στη **Διαχειριζόμενη Ταυτότητα** επιτρέποντας στον **Εκδότη** `https://token.actions.githubusercontent.com` και τον **Αναγνωριστικό Υποκειμένου** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
|
||||
|
||||
> [!CAUTION]
|
||||
> Επομένως, οποιοσδήποτε συμβιβάσει αυτό το αποθετήριο θα μπορεί να συμβιβάσει τη λειτουργία και τις Διαχειριζόμενες Ταυτότητες που είναι συνδεδεμένες με αυτή.
|
||||
|
||||
Reference in New Issue
Block a user