Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes

This commit is contained in:
Translator
2025-01-25 14:38:53 +00:00
parent 3ff2f868f5
commit 0a30d5405e
5 changed files with 337 additions and 245 deletions

View File

@@ -4,6 +4,8 @@
## Basic Information
Μάθετε τα βασικά του Azure και του Entra ID στην παρακάτω σελίδα:
{{#ref}}
az-basic-information/
{{#endref}}
@@ -12,70 +14,74 @@ az-basic-information/
Για να ελέγξετε ένα περιβάλλον AZURE, είναι πολύ σημαντικό να γνωρίζετε: ποιες **υπηρεσίες χρησιμοποιούνται**, τι **εκτίθεται**, ποιος έχει **πρόσβαση** σε τι και πώς συνδέονται οι εσωτερικές υπηρεσίες Azure με τις **εξωτερικές υπηρεσίες**.
Από την οπτική γωνία της Red Team, το **πρώτο βήμα για να συμβιβαστεί ένα περιβάλλον Azure** είναι να καταφέρετε να αποκτήσετε κάποια **διαπιστευτήρια** για το Azure AD. Εδώ έχετε μερικές ιδέες για το πώς να το κάνετε αυτό:
Από την οπτική γωνία της Red Team, το **πρώτο βήμα για να συμβιβαστεί ένα περιβάλλον Azure** είναι να καταφέρετε να αποκτήσετε κάποιο **foothold**.
- **Leaks** στο github (ή παρόμοια) - OSINT
- **Social** Engineering
- **Password** reuse (password leaks)
- Ευπάθειες σε εφαρμογές που φιλοξενούνται στο Azure
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) με πρόσβαση στο endpoint μεταδεδομένων
- **Local File Read**
- `/home/USERNAME/.azure`
- `C:\Users\USERNAME\.azure`
- Το αρχείο **`accessTokens.json`** στο `az cli` πριν από την 2.30 - Ιαν2022 - αποθηκευμένα **access tokens σε καθαρό κείμενο**
- Το αρχείο **`azureProfile.json`** περιέχει **info** για τον συνδεδεμένο χρήστη.
- **`az logout`** αφαιρεί το token.
- Παλαιότερες εκδόσεις του **`Az PowerShell`** αποθήκευαν **access tokens** σε **καθαρό** κείμενο στο **`TokenCache.dat`**. Αποθηκεύει επίσης το **ServicePrincipalSecret** σε **καθαρό** κείμενο στο **`AzureRmContext.json`**. Η cmdlet **`Save-AzContext`** μπορεί να χρησιμοποιηθεί για να **αποθηκεύσει** **tokens**.\
Χρησιμοποιήστε το `Disconnect-AzAccount` για να τα αφαιρέσετε.
- 3rd parties **breached**
- **Internal** Employee
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (credentials or Oauth App)
- [Device Code Authentication Phishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
- [Azure **Password Spraying**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
### External enum & Initial Access
Ακόμα και αν δεν έχετε **συμβιβάσει κανέναν χρήστη** μέσα στο Azure tenant που επιτίθεστε, μπορείτε να **συγκεντρώσετε κάποιες πληροφορίες** από αυτό:
Το πρώτο βήμα είναι φυσικά να καταγράψετε πληροφορίες σχετικά με τον ενοικιαστή που επιτίθεστε και να προσπαθήσετε να αποκτήσετε ένα foothold.
Με βάση το όνομα τομέα, είναι δυνατόν να γνωρίζετε **αν η εταιρεία χρησιμοποιεί Azure**, να αποκτήσετε το **tenant ID**, να αποκτήσετε άλλους **έγκυρους τομείς** στον ίδιο ενοικιαστή (αν υπάρχουν περισσότεροι) και να αποκτήσετε **σχετικές πληροφορίες** όπως αν είναι ενεργοποιημένο το SSO, ρυθμίσεις email, έγκυρες διευθύνσεις email χρηστών...
Ελέγξτε την παρακάτω σελίδα για να μάθετε πώς να εκτελέσετε την **εξωτερική καταγραφή**:
{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}
> [!NOTE]
> Αφού καταφέρετε να αποκτήσετε διαπιστευτήρια, πρέπει να γνωρίζετε **σε ποιον ανήκουν αυτά τα creds**, και **σε τι έχουν πρόσβαση**, οπότε πρέπει να εκτελέσετε κάποια βασική αρίθμηση:
## Basic Enumeration
Με αυτές τις πληροφορίες, οι πιο κοινές μέθοδοι για να προσπαθήσετε να αποκτήσετε ένα foothold είναι:
- **OSINT**: Ελέγξτε για **leaks** στο Github ή σε οποιαδήποτε άλλη ανοιχτή πηγή που θα μπορούσε να περιέχει **credentials** ή ενδιαφέρουσες πληροφορίες.
- **Επαναχρησιμοποίηση κωδικών πρόσβασης**, leaks ή [password spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
- Αγορά credentials από έναν υπάλληλο
- [**Κοινό Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (credentials ή Oauth App)
- [Phishing με Κωδικό Συσκευής](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
- 3rd parties **breached**
- Ευπάθειες σε εφαρμογές που φιλοξενούνται στο Azure
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) με πρόσβαση στο metadata endpoint
- **Subdomain takeovers** όπως στο [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
- Αν κάποιο laptop προγραμματιστή έχει συμβιβαστεί ([WinPEAS και LinPEAS](https://github.com/peass-ng/PEASS-ng) μπορούν να βρουν αυτές τις πληροφορίες):
- Μέσα στο **`<HOME>/.Azure`**
- **`azureProfile.json`** περιέχει πληροφορίες σχετικά με τους συνδεδεμένους χρήστες από το παρελθόν
- **`clouds.config` περιέχει** πληροφορίες σχετικά με τις συνδρομές
- **`service_principal_entries.json`** περιέχει τα credentials των εφαρμογών (tenant id, clients και secret). Μόνο σε Linux & macOS
- **`msal_token_cache.json`** περιέχει access tokens και refresh tokens. Μόνο σε Linux & macOS
- **`service_principal_entries.bin`** και msal_token_cache.bin χρησιμοποιούνται σε Windows και είναι κρυπτογραφημένα με DPAPI
- **`msal_http_cache.bin`** είναι μια cache HTTP αιτημάτων
- Φορτώστε το: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** περιέχει πληροφορίες σχετικά με προηγούμενες συνδέσεις χρησιμοποιώντας Az PowerShell (αλλά όχι credentials)
- Μέσα στο **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** υπάρχουν αρκετά αρχεία `.bin` με **access tokens**, ID tokens και πληροφορίες λογαριασμού κρυπτογραφημένα με το DPAPI των χρηστών.
- Είναι δυνατόν να βρείτε περισσότερα **access tokens** στα αρχεία `.tbres` μέσα στο **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`** που περιέχουν ένα base64 κρυπτογραφημένο με DPAPI με access tokens.
- Σε Linux και macOS μπορείτε να αποκτήσετε **access tokens, refresh tokens και id tokens** από το Az PowerShell (αν χρησιμοποιείται) εκτελώντας `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
- Σε Windows αυτό απλώς δημιουργεί id tokens.
- Είναι δυνατόν να δείτε αν χρησιμοποιήθηκε το Az PowerShell σε Linux και macOS ελέγχοντας αν υπάρχει το `$HOME/.local/share/.IdentityService/` (αν και τα περιεχόμενα αρχεία είναι κενά και άχρηστα)
> [!NOTE]
> Θυμηθείτε ότι το **θορυβώδες** μέρος της αρίθμησης είναι η **σύνδεση**, όχι η ίδια η αρίθμηση.
> Θυμηθείτε ότι συνήθως το **θορυβώδες** μέρος της καταγραφής είναι η **σύνδεση**, όχι η ίδια η καταγραφή.
### SSRF
### Azure & Entra ID tooling
Αν βρείτε μια SSRF σε μια μηχανή μέσα στο Azure, ελέγξτε αυτή τη σελίδα για κόλπα:
Τα παρακάτω εργαλεία θα είναι πολύ χρήσιμα για να καταγράψετε αργά (για να αποφύγετε την ανίχνευση) ή αυτόματα (για να εξοικονομήσετε χρόνο) τόσο τους ενοικιαστές Entra ID όσο και τα περιβάλλοντα Azure:
{{#ref}}
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html
az-enumeration-tools.md
{{#endref}}
### Bypass Login Conditions
<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>
Σε περιπτώσεις όπου έχετε κάποια έγκυρα διαπιστευτήρια αλλά δεν μπορείτε να συνδεθείτε, αυτές είναι μερικές κοινές προστασίες που θα μπορούσαν να είναι σε εφαρμογή:
Σε περιπτώσεις όπου έχετε κάποια έγκυρα credentials αλλά δεν μπορείτε να συνδεθείτε, αυτές είναι μερικές κοινές προστασίες που θα μπορούσαν να υπάρχουν:
- **IP whitelisting** -- Πρέπει να συμβιβάσετε μια έγκυρη IP
- **Geo restrictions** -- Βρείτε πού ζει ο χρήστης ή πού βρίσκονται τα γραφεία της εταιρείας και αποκτήστε μια IP από την ίδια πόλη (ή τουλάχιστον από την ίδια χώρα)
- **Browser** -- Ίσως μόνο ένας περιηγητής από ορισμένα OS (Windows, Linux, Mac, Android, iOS) να επιτρέπεται. Ανακαλύψτε ποιο OS χρησιμοποιεί το θύμα/εταιρεία.
- Μπορείτε επίσης να προσπαθήσετε να **συμβιβάσετε τα διαπιστευτήρια του Service Principal** καθώς συνήθως είναι λιγότερο περιορισμένα και η σύνδεσή τους ελέγχεται λιγότερο.
- **Geo restrictions** -- Βρείτε πού ζει ο χρήστης ή πού βρίσκονται τα γραφεία της εταιρείας και αποκτήστε μια IP από την ίδια πόλη (ή τουλάχιστον από τη χώρα)
- **Browser** -- Ίσως μόνο ένας browser από ορισμένα OS (Windows, Linux, Mac, Android, iOS) να επιτρέπεται. Ανακαλύψτε ποιο OS χρησιμοποιεί το θύμα/εταιρεία.
- Μπορείτε επίσης να προσπαθήσετε να **συμβιβάσετε τα credentials του Service Principal** καθώς συνήθως είναι λιγότερο περιορισμένα και η σύνδεσή τους ελέγχεται λιγότερο.
Αφού το παρακάμψετε, μπορεί να είστε σε θέση να επιστρέψετε στην αρχική σας ρύθμιση και θα έχετε ακόμα πρόσβαση.
### Subdomain Takeover
- [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
Αφού παρακάμψετε αυτό, μπορεί να είστε σε θέση να επιστρέψετε στην αρχική σας ρύθμιση και θα έχετε ακόμα πρόσβαση.
### Whoami
> [!CAUTION]
> Μάθετε **πώς να εγκαταστήσετε** το az cli, AzureAD και Az PowerShell στην ενότητα [**Az - Entra ID**](az-services/az-azuread.md).
> Μάθετε **πώς να εγκαταστήσετε** az cli, AzureAD και Az PowerShell στην ενότητα [**Az - Entra ID**](az-services/az-azuread.md).
Ένα από τα πρώτα πράγματα που πρέπει να γνωρίζετε είναι **ποιος είστε** (σε ποιο περιβάλλον βρίσκεστε):
@@ -91,16 +97,7 @@ az account management-group list #Not allowed by default
```
{{#endtab }}
{{#tab name="AzureAD" }}
```bash
#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
@@ -110,43 +107,79 @@ Get-AzContext -ListAvailable
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
# Enumerate all resources visible to the current user
Get-AzResource
# Enumerate all Azure RBAC role assignments
Get-AzRoleAssignment # For all users
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user
```
{{#endtab }}
{{#tab name="Mg" }}
```bash
#Get the current session
Get-MgContext
```
{{#endtab }}
{{#tab name="AzureAD" }}
```bash
#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail
```
{{#endtab }}
{{#endtabs }}
> [!CAUTION]
> Ένα από τα πιο σημαντικά εντολές για την καταμέτρηση του Azure είναι **`Get-AzResource`** από το Az PowerShell καθώς σας επιτρέπει να **γνωρίζετε τους πόρους που έχει ο τρέχων χρήστης ορατούς**.
>
> Μπορείτε να αποκτήσετε τις ίδιες πληροφορίες στην **ιστοσελίδα κονσόλας** πηγαίνοντας στο [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ή αναζητώντας "Όλοι οι πόροι"
### Entra ID Enumeration
### Εντοπισμός & Κλιμάκωση Δικαιωμάτων Entra ID
Από προεπιλογή, οποιοσδήποτε χρήστης θα πρέπει να έχει **αρκετά δικαιώματα για να καταμετρήσει** πράγματα όπως, χρήστες, ομάδες, ρόλους, υπηρεσιακούς εκπροσώπους... (ελέγξτε [προεπιλεγμένα δικαιώματα AzureAD](az-basic-information/index.html#default-user-permissions)).\
Από προεπιλογή, οποιοσδήποτε χρήστης θα πρέπει να έχει **αρκετά δικαιώματα για να εντοπίσει** πράγματα όπως χρήστες, ομάδες, ρόλους, υπηρεσίες... (ελέγξτε [default AzureAD permissions](az-basic-information/index.html#default-user-permissions)).\
Μπορείτε να βρείτε εδώ έναν οδηγό:
{{#ref}}
az-services/az-azuread.md
{{#endref}}
> [!NOTE]
> Τώρα που **έχετε κάποιες πληροφορίες σχετικά με τα διαπιστευτήριά σας** (και αν είστε red team ελπίζω να **δεν έχετε ανιχνευθεί**). Είναι καιρός να καταλάβετε ποιες υπηρεσίες χρησιμοποιούνται στο περιβάλλον.\
> Στην επόμενη ενότητα μπορείτε να ελέγξετε μερικούς τρόπους για να **καταμετρήσετε κάποιες κοινές υπηρεσίες.**
Ελέγξτε τα **Post-Exploitation tools** για να βρείτε εργαλεία για την κλιμάκωση δικαιωμάτων στο Entra ID όπως το **AzureHound:**
## App Service SCM
{{#ref}}
az-enumeration-tools.md#automated-post-exploitation-tools
{{#endref}}
Kudu console για να συνδεθείτε στο 'container' της Υπηρεσίας Εφαρμογών.
## Webshell
### Εντοπισμός Υπηρεσιών Azure
Χρησιμοποιήστε το portal.azure.com και επιλέξτε το shell, ή χρησιμοποιήστε το shell.azure.com, για bash ή powershell. Ο 'δίσκος' αυτού του shell αποθηκεύεται ως αρχείο εικόνας σε έναν λογαριασμό αποθήκευσης.
Μόλις γνωρίζετε ποιος είστε, μπορείτε να αρχίσετε να εντοπίζετε τις **υπηρεσίες Azure στις οποίες έχετε πρόσβαση**.
## Azure DevOps
Η εντολή Az PowerShell **`Get-AzResource`** σας επιτρέπει να **γνωρίζετε τους πόρους που έχει ο τρέχων χρήστης ορατούς**.
Το Azure DevOps είναι ξεχωριστό από το Azure. Έχει αποθετήρια, pipelines (yaml ή release), πίνακες, wiki και άλλα. Οι Ομάδες Μεταβλητών χρησιμοποιούνται για να αποθηκεύουν τιμές μεταβλητών και μυστικά.
Επιπλέον, μπορείτε να αποκτήσετε τις ίδιες πληροφορίες στην **ιστοσελίδα** πηγαίνοντας στο [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ή αναζητώντας "Όλοι οι πόροι" ή εκτελώντας: `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
Επιπλέον, με αρκετά δικαιώματα, ο ρόλος **`Get-AzRoleAssignment`** μπορεί να χρησιμοποιηθεί για να **εντοπίσει όλους τους ρόλους** στην υπογραφή ή την άδεια σε έναν συγκεκριμένο πόρο υποδεικνύοντάς τον όπως σε: **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**
Στην επόμενη ενότητα μπορείτε να βρείτε πληροφορίες σχετικά με τις πιο κοινές υπηρεσίες Azure και πώς να τις εντοπίσετε:
{{#ref}}
az-services/
{{#endref}}
### Κλιμάκωση Δικαιωμάτων, Post-Exploitation & Διατήρηση στην Azure Services
Μόλις γνωρίζετε πώς είναι δομημένο το περιβάλλον Azure και ποιες υπηρεσίες χρησιμοποιούνται, μπορείτε να αρχίσετε να αναζητάτε τρόπους για να **κλιμακώσετε δικαιώματα, να μετακινηθείτε οριζόντια, να εκτελέσετε άλλες επιθέσεις post-exploitation και να διατηρήσετε την επιμονή**.
Στην επόμενη ενότητα μπορείτε να βρείτε πληροφορίες σχετικά με το πώς να κλιμακώσετε δικαιώματα στις πιο κοινές υπηρεσίες Azure:
{{#ref}}
az-privilege-escalation/
{{#endref}}
Στην επόμενη μπορείτε να βρείτε πληροφορίες σχετικά με το πώς να εκτελέσετε επιθέσεις post-exploitation στις πιο κοινές υπηρεσίες Azure:
{{#ref}}
az-post-exploitation/
{{#endref}}
Στην επόμενη μπορείτε να βρείτε πληροφορίες σχετικά με το πώς να διατηρήσετε την επιμονή στις πιο κοινές υπηρεσίες Azure:
{{#ref}}
az-persistence/
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@@ -4,21 +4,21 @@
## Basic Information
Το Entra ID είναι η πλατφόρμα διαχείρισης ταυτοτήτων και πρόσβασης (IAM) της Microsoft που βασίζεται στο cloud, λειτουργώντας ως το θεμελιώδες σύστημα αυθεντικοποίησης και εξουσιοδότησης για υπηρεσίες όπως το Microsoft 365 και το Azure Resource Manager. Το Azure AD υλοποιεί το πλαίσιο εξουσιοδότησης OAuth 2.0 και το πρωτόκολλο αυθεντικοποίησης OpenID Connect (OIDC) για τη διαχείριση της πρόσβασης σε πόρους.
Το Entra ID είναι η πλατφόρμα διαχείρισης ταυτοτήτων και πρόσβασης (IAM) της Microsoft που βασίζεται στο cloud, λειτουργώντας ως το θεμελιώδες σύστημα αυθεντικοποίησης και εξουσιοδότησης για υπηρεσίες όπως το Microsoft 365 και το Azure Resource Manager. Το Azure AD εφαρμόζει το πλαίσιο εξουσιοδότησης OAuth 2.0 και το πρωτόκολλο αυθεντικοποίησης OpenID Connect (OIDC) για τη διαχείριση πρόσβασης σε πόρους.
### OAuth
**Κύριοι Συμμετέχοντες στο OAuth 2.0:**
1. **Resource Server (RS):** Προστατεύει τους πόρους που ανήκουν στον κάτοχο των πόρων.
1. **Resource Server (RS):** Προστατεύει πόρους που ανήκουν στον κάτοχο πόρων.
2. **Resource Owner (RO):** Συνήθως είναι ο τελικός χρήστης που κατέχει τους προστατευόμενους πόρους.
3. **Client Application (CA):** Μια εφαρμογή που ζητά πρόσβαση σε πόρους εκ μέρους του κατόχου των πόρων.
4. **Authorization Server (AS):** Εκδίδει tokens πρόσβασης σε εφαρμογές πελάτες μετά την αυθεντικοποίηση και εξουσιοδότησή τους.
3. **Client Application (CA):** Μια εφαρμογή που ζητά πρόσβαση σε πόρους εκ μέρους του κατόχου πόρων.
4. **Authorization Server (AS):** Εκδίδει διαπιστευτήρια πρόσβασης σε εφαρμογές πελάτες μετά την αυθεντικοποίηση και εξουσιοδότησή τους.
**Scopes και Συγκατάθεση:**
- **Scopes:** Λεπτομερείς άδειες που ορίζονται στον server πόρων που καθορίζουν τα επίπεδα πρόσβασης.
- **Συγκατάθεση:** Η διαδικασία με την οποία ο κάτοχος των πόρων παραχωρεί σε μια εφαρμογή πελάτη άδεια πρόσβασης σε πόρους με συγκεκριμένα scopes.
- **Scopes:** Λεπτομερείς άδειες που ορίζονται στον διακομιστή πόρων και καθορίζουν τα επίπεδα πρόσβασης.
- **Συγκατάθεση:** Η διαδικασία με την οποία ο κάτοχος πόρων παραχωρεί σε μια εφαρμογή πελάτη άδεια πρόσβασης σε πόρους με συγκεκριμένα scopes.
**Ενσωμάτωση Microsoft 365:**
@@ -31,35 +31,35 @@
**Τύποι Εφαρμογών Πελατών:**
1. **Confidential Clients:**
- Διαθέτουν τα δικά τους διαπιστευτήρια (π.χ., κωδικούς πρόσβασης ή πιστοποιητικά).
- Μπορούν να **αυθεντικοποιούνται με ασφάλεια** στον server εξουσιοδότησης.
- Διαθέτουν τα δικά τους διαπιστευτήρια (π.χ. κωδικούς πρόσβασης ή πιστοποιητικά).
- Μπορούν να **αυθεντικοποιούνται με ασφάλεια** στον διακομιστή εξουσιοδότησης.
2. **Public Clients:**
- Δεν έχουν μοναδικά διαπιστευτήρια.
- Δεν μπορούν να αυθεντικοποιηθούν με ασφάλεια στον server εξουσιοδότησης.
- **Σημασία Ασφάλειας:** Ένας επιτιθέμενος μπορεί να προσποιηθεί μια δημόσια εφαρμογή πελάτη κατά την αίτηση tokens, καθώς δεν υπάρχει μηχανισμός για τον server εξουσιοδότησης να επαληθεύσει τη νομιμότητα της εφαρμογής.
- Δεν μπορούν να αυθεντικοποιηθούν με ασφάλεια στον διακομιστή εξουσιοδότησης.
- **Σημασία Ασφάλειας:** Ένας επιτιθέμενος μπορεί να προσποιηθεί μια δημόσια εφαρμογή πελάτη κατά την αίτηση διαπιστευτηρίων, καθώς δεν υπάρχει μηχανισμός για τον διακομιστή εξουσιοδότησης να επαληθεύσει τη νομιμότητα της εφαρμογής.
## Authentication Tokens
Υπάρχουν **τρία είδη tokens** που χρησιμοποιούνται στο OIDC:
Υπάρχουν **τρία είδη διαπιστευτηρίων** που χρησιμοποιούνται στο OIDC:
- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Ο πελάτης παρουσιάζει αυτό το token στον server πόρων για να **πρόσβαση σε πόρους**. Μπορεί να χρησιμοποιηθεί μόνο για μια συγκεκριμένη συνδυασμένη χρήση χρήστη, πελάτη και πόρου και **δεν μπορεί να ανακληθεί** μέχρι την λήξη του - δηλαδή 1 ώρα από προεπιλογή.
- **ID Tokens**: Ο πελάτης λαμβάνει αυτό το **token από τον server εξουσιοδότησης**. Περιέχει βασικές πληροφορίες σχετικά με τον χρήστη. Είναι **δεσμευμένο σε μια συγκεκριμένη συνδυασμένη χρήση χρήστη και πελάτη**.
- **Refresh Tokens**: Παρέχονται στον πελάτη με το access token. Χρησιμοποιούνται για **να αποκτήσουν νέα access και ID tokens**. Είναι δεσμευμένο σε μια συγκεκριμένη συνδυασμένη χρήση χρήστη και πελάτη και μπορεί να ανακληθεί. Η προεπιλεγμένη λήξη είναι **90 ημέρες** για ανενεργά refresh tokens και **χωρίς λήξη για ενεργά tokens** (είναι δυνατή η απόκτηση νέων refresh tokens από ένα refresh token).
- Ένα refresh token θα πρέπει να συνδέεται με ένα **`aud`**, με κάποια **scopes**, και με έναν **tenant** και θα πρέπει να μπορεί να δημιουργεί tokens πρόσβασης μόνο για αυτό το aud, scopes (και κανένα άλλο) και tenant. Ωστόσο, αυτό δεν ισχύει για τα **FOCI applications tokens**.
- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Ο πελάτης παρουσιάζει αυτό το διαπιστευτήριο στον διακομιστή πόρων για να **πρόσβαση σε πόρους**. Μπορεί να χρησιμοποιηθεί μόνο για μια συγκεκριμένη συνδυασμένη χρήση χρήστη, πελάτη και πόρου και **δεν μπορεί να ανακληθεί** μέχρι την λήξη του - δηλαδή 1 ώρα από προεπιλογή.
- **ID Tokens**: Ο πελάτης λαμβάνει αυτό το **διαπιστευτήριο από τον διακομιστή εξουσιοδότησης**. Περιέχει βασικές πληροφορίες σχετικά με τον χρήστη. Είναι **δεσμευμένο σε μια συγκεκριμένη συνδυασμένη χρήση χρήστη και πελάτη**.
- **Refresh Tokens**: Παρέχονται στον πελάτη με το διαπιστευτήριο πρόσβασης. Χρησιμοποιούνται για **να αποκτήσουν νέα διαπιστευτήρια πρόσβασης και ID**. Είναι δεσμευμένο σε μια συγκεκριμένη συνδυασμένη χρήση χρήστη και πελάτη και μπορεί να ανακληθεί. Η προεπιλεγμένη λήξη είναι **90 ημέρες** για ανενεργά refresh tokens και **χωρίς λήξη για ενεργά tokens** (είναι δυνατή η λήψη νέων refresh tokens από ένα refresh token).
- Ένα refresh token θα πρέπει να συνδέεται με ένα **`aud`**, με κάποια **scopes**, και με έναν **tenant** και θα πρέπει να μπορεί να δημιουργεί διαπιστευτήρια πρόσβασης μόνο για αυτό το aud, scopes (και κανένα άλλο) και tenant. Ωστόσο, αυτό δεν ισχύει για τα **FOCI applications tokens**.
- Ένα refresh token είναι κρυπτογραφημένο και μόνο η Microsoft μπορεί να το αποκρυπτογραφήσει.
- Η απόκτηση ενός νέου refresh token δεν ανακαλεί το προηγούμενο refresh token.
- Η λήψη ενός νέου refresh token δεν ανακαλεί το προηγούμενο refresh token.
> [!WARNING]
> Οι πληροφορίες για **conditional access** είναι **αποθηκευμένες** μέσα στο **JWT**. Έτσι, αν ζητήσετε το **token από μια επιτρεπόμενη διεύθυνση IP**, αυτή η **IP** θα είναι **αποθηκευμένη** στο token και στη συνέχεια μπορείτε να χρησιμοποιήσετε αυτό το token από μια **μη επιτρεπόμενη IP για να αποκτήσετε πρόσβαση στους πόρους**.
> Πληροφορίες για **conditional access** είναι **αποθηκευμένες** μέσα στο **JWT**. Έτσι, αν ζητήσετε το **token από μια επιτρεπόμενη διεύθυνση IP**, αυτή η **IP** θα **αποθηκευτεί** στο token και στη συνέχεια μπορείτε να χρησιμοποιήσετε αυτό το token από μια **μη επιτρεπόμενη IP για να αποκτήσετε πρόσβαση στους πόρους**.
### Access Tokens "aud"
Το πεδίο που υποδεικνύεται στο πεδίο "aud" είναι ο **server πόρων** (η εφαρμογή) που χρησιμοποιείται για την εκτέλεση της σύνδεσης.
Το πεδίο που υποδεικνύεται στο πεδίο "aud" είναι ο **διακομιστής πόρων** (η εφαρμογή) που χρησιμοποιείται για την εκτέλεση της σύνδεσης.
Η εντολή `az account get-access-token --resource-type [...]` υποστηρίζει τους παρακάτω τύπους και καθένας από αυτούς θα προσθέσει μια συγκεκριμένη "aud" στο προκύπτον access token:
Η εντολή `az account get-access-token --resource-type [...]` υποστηρίζει τους παρακάτω τύπους και καθένας από αυτούς θα προσθέσει μια συγκεκριμένη "aud" στο αποτέλεσμα του διαπιστευτηρίου πρόσβασης:
> [!CAUTION]
> Σημειώστε ότι οι παρακάτω είναι μόνο οι APIs που υποστηρίζονται από το `az account get-access-token`, αλλά υπάρχουν περισσότερες.
> Σημειώστε ότι οι παρακάτω είναι μόνο οι APIs που υποστηρίζονται από το `az account get-access-token` αλλά υπάρχουν περισσότερες.
<details>
@@ -71,16 +71,16 @@
* **arm (Azure Resource Manager)**: Χρησιμοποιείται για τη διαχείριση πόρων Azure μέσω του API Azure Resource Manager. Αυτό περιλαμβάνει λειτουργίες όπως η δημιουργία, η ενημέρωση και η διαγραφή πόρων όπως εικονικές μηχανές, λογαριασμοί αποθήκευσης και άλλα.
- `https://management.core.windows.net/ or https://management.azure.com/`
- **batch (Azure Batch Services)**: Χρησιμοποιείται για την πρόσβαση στο Azure Batch, μια υπηρεσία που επιτρέπει την αποτελεσματική εκτέλεση εφαρμογών μεγάλης κλίμακας παράλληλης και υψηλής απόδοσης στο cloud.
- **batch (Azure Batch Services)**: Χρησιμοποιείται για την πρόσβαση στο Azure Batch, μια υπηρεσία που επιτρέπει την αποτελεσματική εκτέλεση εφαρμογών υπολογισμού μεγάλης κλίμακας και υψηλής απόδοσης στο cloud.
- `https://batch.core.windows.net/`
* **data-lake (Azure Data Lake Storage)**: Χρησιμοποιείται για την αλληλεπίδραση με το Azure Data Lake Storage Gen1, το οποίο είναι μια κλιμακωτή υπηρεσία αποθήκευσης δεδομένων και ανάλυσης.
* **data-lake (Azure Data Lake Storage)**: Χρησιμοποιείται για την αλληλεπίδραση με το Azure Data Lake Storage Gen1, το οποίο είναι μια κλιμακούμενη υπηρεσία αποθήκευσης δεδομένων και ανάλυσης.
- `https://datalake.azure.net/`
- **media (Azure Media Services)**: Χρησιμοποιείται για την πρόσβαση στις υπηρεσίες Azure Media, οι οποίες παρέχουν υπηρεσίες επεξεργασίας και παράδοσης πολυμέσων στο cloud για περιεχόμενο βίντεο και ήχου.
- **media (Azure Media Services)**: Χρησιμοποιείται για την πρόσβαση στις Υπηρεσίες Πολυμέσων Azure, οι οποίες παρέχουν υπηρεσίες επεξεργασίας και παράδοσης πολυμέσων στο cloud για περιεχόμενο βίντεο και ήχου.
- `https://rest.media.azure.net`
* **ms-graph (Microsoft Graph API)**: Χρησιμοποιείται για την πρόσβαση στο Microsoft Graph API, την ενοποιημένη διεπαφή για τα δεδομένα υπηρεσιών Microsoft 365. Επιτρέπει την πρόσβαση σε δεδομένα και πληροφορίες από υπηρεσίες όπως το Azure AD, το Office 365, την Επιχειρηματική Κινητικότητα και τις Υπηρεσίες Ασφαλείας.
* **ms-graph (Microsoft Graph API)**: Χρησιμοποιείται για την πρόσβαση στο Microsoft Graph API, το ενοποιημένο σημείο πρόσβασης για τα δεδομένα υπηρεσιών Microsoft 365. Επιτρέπει την πρόσβαση σε δεδομένα και πληροφορίες από υπηρεσίες όπως το Azure AD, το Office 365, την Επιχειρηματική Κινητικότητα και τις Υπηρεσίες Ασφαλείας.
- `https://graph.microsoft.com`
- **oss-rdbms (Azure Open Source Relational Databases)**: Χρησιμοποιείται για την πρόσβαση στις υπηρεσίες βάσεων δεδομένων Azure για ανοιχτού κώδικα μηχανές σχεσιακών βάσεων δεδομένων όπως MySQL, PostgreSQL και MariaDB.
@@ -90,9 +90,9 @@
### Access Tokens Scopes "scp"
Το scope ενός access token αποθηκεύεται μέσα στο κλειδί scp μέσα στο JWT του access token. Αυτά τα scopes καθορίζουν σε τι έχει πρόσβαση το access token.
Το scope ενός διαπιστευτηρίου πρόσβασης αποθηκεύεται μέσα στο κλειδί scp μέσα στο JWT του διαπιστευτηρίου πρόσβασης. Αυτά τα scopes καθορίζουν σε τι έχει πρόσβαση το διαπιστευτήριο πρόσβασης.
Αν ένα JWT επιτρέπεται να επικοινωνήσει με μια συγκεκριμένη API αλλά **δεν έχει το scope** για να εκτελέσει την ζητούμενη ενέργεια, **δεν θα μπορεί να εκτελέσει την ενέργεια** με αυτό το JWT.
Εάν ένα JWT επιτρέπεται να επικοινωνήσει με μια συγκεκριμένη API αλλά **δεν έχει το scope** για να εκτελέσει την ζητούμενη ενέργεια, **δεν θα μπορεί να εκτελέσει την ενέργεια** με αυτό το JWT.
### Get refresh & access token example
```python
@@ -144,19 +144,31 @@ scopes=["https://graph.microsoft.com/.default"],
)
pprint(new_azure_cli_bearer_tokens_for_graph_api)
```
### Άλλα πεδία διακριτικού πρόσβασης
- **appid**: Το ID εφαρμογής που χρησιμοποιείται για τη δημιουργία του διακριτικού
- **appidacr**: Η Αναφορά Κλάσης Πλαισίου Αυθεντικοποίησης Εφαρμογής υποδεικνύει πώς αυθεντικοποιήθηκε ο πελάτης, για έναν δημόσιο πελάτη η τιμή είναι 0, και αν χρησιμοποιηθεί μυστικό πελάτη η τιμή είναι 1
- **acr**: Η αξίωση Αναφοράς Κλάσης Πλαισίου Αυθεντικοποίησης είναι "0" όταν η αυθεντικοποίηση του τελικού χρήστη δεν πληροί τις απαιτήσεις του ISO/IEC 29115.
- **amr**: Η μέθοδος αυθεντικοποίησης υποδεικνύει πώς αυθεντικοποιήθηκε το διακριτικό. Μια τιμή “pwd” υποδεικνύει ότι χρησιμοποιήθηκε κωδικός πρόσβασης.
- **groups**: Υποδεικνύει τις ομάδες στις οποίες είναι μέλος ο κύριος.
- **iss**: Οι εκδόσεις προσδιορίζουν την υπηρεσία διακριτικών ασφαλείας (STS) που δημιούργησε το διακριτικό. π.χ. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (το uuid είναι το ID του ενοικιαστή)
- **oid**: Το ID αντικειμένου του κύριου
- **tid**: ID ενοικιαστή
- **iat, nbf, exp**: Εκδόθηκε (όταν εκδόθηκε), Όχι πριν (δεν μπορεί να χρησιμοποιηθεί πριν από αυτήν την ώρα, συνήθως η ίδια τιμή με το iat), Χρόνος λήξης.
## FOCI Tokens Privilege Escalation
Προηγουμένως αναφέρθηκε ότι τα refresh tokens θα πρέπει να συνδέονται με τα **scopes** με τα οποία δημιουργήθηκαν, με την **εφαρμογή** και τον **tenant** για τον οποίο δημιουργήθηκαν. Εάν οποιοδήποτε από αυτά τα όρια παραβιαστεί, είναι δυνατόν να γίνει κλιμάκωση προνομίων, καθώς θα είναι δυνατή η δημιουργία access tokens για άλλους πόρους και tenants στους οποίους έχει πρόσβαση ο χρήστης και με περισσότερα scopes από ό,τι είχε αρχικά προγραμματιστεί.
Προηγουμένως αναφέρθηκε ότι τα διακριτικά ανανέωσης θα πρέπει να συνδέονται με τα **πεδία** με τα οποία δημιουργήθηκαν, με την **εφαρμογή** και τον **ενοικιαστή** για τον οποίο δημιουργήθηκαν. Εάν οποιοδήποτε από αυτά τα όρια παραβιαστεί, είναι δυνατό να κλιμακωθούν τα προνόμια καθώς θα είναι δυνατή η δημιουργία διακριτικών πρόσβασης σε άλλους πόρους και ενοικιαστές στους οποίους έχει πρόσβαση ο χρήστης και με περισσότερα πεδία από ό,τι προοριζόταν αρχικά.
Επιπλέον, **αυτό είναι δυνατό με όλα τα refresh tokens** στην [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (λογαριασμοί Microsoft Entra, προσωπικοί λογαριασμοί Microsoft και κοινωνικοί λογαριασμοί όπως το Facebook και το Google) επειδή όπως αναφέρουν οι [**docs**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "Τα refresh tokens είναι δεσμευμένα σε έναν συνδυασμό χρήστη και πελάτη, αλλά **δεν είναι δεσμευμένα σε πόρο ή tenant**. Ένας πελάτης μπορεί να χρησιμοποιήσει ένα refresh token για να αποκτήσει access tokens **σε οποιονδήποτε συνδυασμό πόρου και tenant** όπου έχει άδεια να το κάνει. Τα refresh tokens είναι κρυπτογραφημένα και μόνο η Microsoft identity platform μπορεί να τα διαβάσει."
Επιπλέον, **αυτό είναι δυνατό με όλα τα διακριτικά ανανέωσης** στην [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (λογαριασμοί Microsoft Entra, προσωπικοί λογαριασμοί Microsoft και κοινωνικοί λογαριασμοί όπως το Facebook και το Google) επειδή όπως αναφέρουν οι [**τεκμηριώσεις**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "Τα διακριτικά ανανέωσης συνδέονται με έναν συνδυασμό χρήστη και πελάτη, αλλά **δεν συνδέονται με πόρο ή ενοικιαστή**. Ένας πελάτης μπορεί να χρησιμοποιήσει ένα διακριτικό ανανέωσης για να αποκτήσει διακριτικά πρόσβασης **σε οποιονδήποτε συνδυασμό πόρου και ενοικιαστή** όπου έχει άδεια να το κάνει. Τα διακριτικά ανανέωσης είναι κρυπτογραφημένα και μόνο η Microsoft identity platform μπορεί να τα διαβάσει."
Επιπλέον, σημειώστε ότι οι εφαρμογές FOCI είναι δημόσιες εφαρμογές, οπότε **δεν απαιτείται μυστικό** για την αυθεντικοποίηση στον διακομιστή.
Στη συνέχεια, οι γνωστοί πελάτες FOCI που αναφέρθηκαν στην [**original research**](https://github.com/secureworks/family-of-client-ids-research/tree/main) μπορούν να [**βρεθούν εδώ**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv).
Στη συνέχεια, γνωστοί πελάτες FOCI που αναφέρθηκαν στην [**αρχική έρευνα**](https://github.com/secureworks/family-of-client-ids-research/tree/main) μπορούν να [**βρεθούν εδώ**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv).
### Get different scope
### Λάβετε διαφορετικό πεδίο
Ακολουθώντας το προηγούμενο παράδειγμα κώδικα, σε αυτόν τον κώδικα ζητείται ένα νέο token για ένα διαφορετικό scope:
Ακολουθώντας το προηγούμενο παράδειγμα κώδικα, σε αυτόν τον κώδικα ζητείται ένα νέο διακριτικό για ένα διαφορετικό πεδίο:
```python
# Code from https://github.com/secureworks/family-of-client-ids-research
azure_cli_bearer_tokens_for_outlook_api = (
@@ -192,5 +204,6 @@ pprint(microsoft_office_bearer_tokens_for_graph_api)
## Αναφορές
- [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research)
- [https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md](https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -79,6 +79,21 @@ export REQUESTS_CA_BUNDLE=/Users/user/Downloads/cacert.pem
```
{{#endtab }}
{{#tab name="CMD" }}
```bash
set ADAL_PYTHON_SSL_NO_VERIFY=1
set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
set HTTPS_PROXY="http://127.0.0.1:8080"
set HTTP_PROXY="http://127.0.0.1:8080"
# If this is not enough
# Download the certificate from Burp and convert it into .pem format
# And export the following env variable
openssl x509 -in cacert.der -inform DER -out cacert.pem -outform PEM
set REQUESTS_CA_BUNDLE=C:\Users\user\Downloads\cacert.pem
```
{{#endtab }}
{{#tab name="PS" }}
```bash
$env:ADAL_PYTHON_SSL_NO_VERIFY=1
@@ -103,11 +118,11 @@ $env:HTTP_PROXY="http://127.0.0.1:8080"
```bash
Get-AzResourceGroup -Debug
```
Για να κάνετε **MitM** στο εργαλείο και να **ελέγξετε όλα τα αιτήματα** που στέλνει χειροκίνητα, μπορείτε να ορίσετε τις μεταβλητές περιβάλλοντος `HTTPS_PROXY` και `HTTP_PROXY` σύμφωνα με τα [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
Για να κάνετε **MitM** στο εργαλείο και να **ελέγξετε όλα τα αιτήματα** που στέλνει χειροκίνητα, μπορείτε να ρυθμίσετε τις μεταβλητές περιβάλλοντος `HTTPS_PROXY` και `HTTP_PROXY` σύμφωνα με τα [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
### Microsoft Graph PowerShell
Το Microsoft Graph PowerShell είναι ένα SDK διαλειτουργικότητας που επιτρέπει την πρόσβαση σε όλα τα Microsoft Graph APIs, συμπεριλαμβανομένων υπηρεσιών όπως το SharePoint, το Exchange και το Outlook, χρησιμοποιώντας ένα μόνο endpoint. Υποστηρίζει PowerShell 7+, σύγχρονη αυθεντικοποίηση μέσω MSAL, εξωτερικές ταυτότητες και προηγμένα ερωτήματα. Με έμφαση στην πρόσβαση με ελάχιστα δικαιώματα, διασφαλίζει ασφαλείς λειτουργίες και λαμβάνει τακτικές ενημερώσεις για να ευθυγραμμίζεται με τις τελευταίες δυνατότητες του Microsoft Graph API.
Το Microsoft Graph PowerShell είναι ένα SDK πολλαπλών πλατφορμών που επιτρέπει την πρόσβαση σε όλα τα Microsoft Graph APIs, συμπεριλαμβανομένων υπηρεσιών όπως το SharePoint, το Exchange και το Outlook, χρησιμοποιώντας ένα μόνο endpoint. Υποστηρίζει PowerShell 7+, σύγχρονη αυθεντικοποίηση μέσω MSAL, εξωτερικές ταυτότητες και προηγμένα ερωτήματα. Με έμφαση στην πρόσβαση με ελάχιστα δικαιώματα, διασφαλίζει ασφαλείς λειτουργίες και λαμβάνει τακτικές ενημερώσεις για να ευθυγραμμίζεται με τις τελευταίες δυνατότητες του Microsoft Graph API.
Ακολουθήστε αυτόν τον σύνδεσμο για τις [**οδηγίες εγκατάστασης**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
@@ -163,7 +178,7 @@ powerpipe server
```
### [Prowler](https://github.com/prowler-cloud/prowler)
Το Prowler είναι ένα εργαλείο ανοιχτού κώδικα για την εκτέλεση αξιολογήσεων, ελέγχων, αντίκτυπου περιστατικών, συνεχούς παρακολούθησης, σκληραγώγησης και ετοιμότητας για εγκληματολογική ανάλυση σχετικά με τις καλύτερες πρακτικές ασφάλειας για AWS, Azure, Google Cloud και Kubernetes.
Το Prowler είναι ένα εργαλείο ανοιχτού κώδικα για την εκτέλεση αξιολογήσεων, ελέγχων, αντίκτυπου περιστατικών, συνεχούς παρακολούθησης, σκληραγώγησης και ετοιμότητας για εγκληματολογική ανάλυση σχετικά με τις βέλτιστες πρακτικές ασφάλειας για AWS, Azure, Google Cloud και Kubernetes.
Βασικά, θα μας επιτρέψει να εκτελέσουμε εκατοντάδες ελέγχους σε ένα περιβάλλον Azure για να βρούμε παραμορφώσεις ασφάλειας και να συγκεντρώσουμε τα αποτελέσματα σε json (και άλλες μορφές κειμένου) ή να τα ελέγξουμε στο διαδίκτυο.
```bash
@@ -187,9 +202,9 @@ docker run --rm -e "AZURE_CLIENT_ID=<client-id>" -e "AZURE_TENANT_ID=<tenant-id>
```
### [Monkey365](https://github.com/silverhack/monkey365)
Επιτρέπει την αυτόματη εκτέλεση ελέγχων ασφαλείας για τις συνδρομές Azure και το Microsoft Entra ID.
Επιτρέπει την αυτόματη εκτέλεση ελέγχων ρυθμίσεων ασφαλείας για Azure subscriptions και Microsoft Entra ID.
Οι αναφορές HTML αποθηκεύονται στον φάκελο `./monkey-reports` μέσα στον φάκελο του αποθετηρίου github.
Οι αναφορές HTML αποθηκεύονται μέσα στον φάκελο `./monkey-reports` του αποθετηρίου github.
```bash
git clone https://github.com/silverhack/monkey365
Get-ChildItem -Recurse monkey365 | Unblock-File
@@ -256,7 +271,7 @@ azurehound -a "<client-id>" -s "<secret>" --tenant "<tenant-id>" list -o ./outpu
## Login with user creds
azurehound -u "<user-email>" -p "<password>" --tenant "<tenant-id>" list -o ./output.json
```
Λανσάρετε το **BloodHound** web με **`curl -L https://ghst.ly/getbhce | docker compose -f - up`** και εισάγετε το αρχείο `output.json`.
Λανσάρετε το **BloodHound** με **`curl -L https://ghst.ly/getbhce | docker compose -f - up`** και εισάγετε το αρχείο `output.json`.
Στη συνέχεια, στην καρτέλα **EXPLORE**, στην ενότητα **CYPHER** μπορείτε να δείτε ένα εικονίδιο **φακέλου** που περιέχει προ-κατασκευασμένα ερωτήματα.
@@ -303,7 +318,7 @@ Invoke-AzureRunCommand -Command <command> -VMName <vmname>
```
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
Το GraphRunner είναι ένα εργαλείο μετά την εκμετάλλευση για αλληλεπίδραση με το Microsoft Graph API. Παρέχει διάφορα εργαλεία για την εκτέλεση αναγνώρισης, επιμονής και λεηλασίας δεδομένων από έναν λογαριασμό Microsoft Entra ID (Azure AD).
Το GraphRunner είναι ένα εργαλείο post-exploitation για αλληλεπίδραση με το Microsoft Graph API. Παρέχει διάφορα εργαλεία για την εκτέλεση αναγνώρισης, επιμονής και λεηλασίας δεδομένων από έναν λογαριασμό Microsoft Entra ID (Azure AD).
```bash
#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens)
Import-Module .\GraphRunner.ps1
@@ -347,7 +362,7 @@ Invoke-GraphRunner -Tokens $tokens
```
### [Stormspotter](https://github.com/Azure/Stormspotter)
Το Stormspotter δημιουργεί ένα “attack graph” των πόρων σε μια συνδρομή Azure. Επιτρέπει στις κόκκινες ομάδες και τους pentesters να οπτικοποιούν την επιφάνεια επίθεσης και τις ευκαιρίες pivot εντός ενός ενοικιαστή, και ενισχύει τους υπερασπιστές σας ώστε να προσανατολίζονται και να προτεραιοποιούν γρήγορα το έργο αντίκτυπου.
Το Stormspotter δημιουργεί ένα “attack graph” των πόρων σε μια συνδρομή Azure. Επιτρέπει στις κόκκινες ομάδες και τους pentesters να οπτικοποιούν την επιφάνεια επίθεσης και τις ευκαιρίες pivot εντός ενός ενοικιαστή, και ενισχύει τους υπερασπιστές σας ώστε να προσανατολίζονται και να ιεραρχούν γρήγορα την εργασία απόκρισης σε περιστατικά.
**Δυστυχώς, φαίνεται ότι δεν συντηρείται**.
```bash

View File

@@ -4,9 +4,9 @@
## Basic Information
Το Azure Active Directory (Azure AD) λειτουργεί ως η υπηρεσία της Microsoft για τη διαχείριση ταυτοτήτων και προσβάσεων στο cloud. Είναι καθοριστικής σημασίας για την επιτρεπτή είσοδο των υπαλλήλων και την πρόσβαση σε πόρους, τόσο εντός όσο και εκτός της οργάνωσης, περιλαμβάνοντας το Microsoft 365, την πύλη Azure και μια πληθώρα άλλων SaaS εφαρμογών. Ο σχεδιασμός του Azure AD επικεντρώνεται στην παροχή βασικών υπηρεσιών ταυτοποίησης, περιλαμβάνοντας κυρίως **authentication, authorization, and user management**.
Το Azure Active Directory (Azure AD) λειτουργεί ως η υπηρεσία της Microsoft για τη διαχείριση ταυτοτήτων και προσβάσεων στο cloud. Είναι καθοριστικής σημασίας για την επιτρεπτικότητα στους υπαλλήλους να συνδέονται και να αποκτούν πρόσβαση σε πόρους, τόσο εντός όσο και εκτός του οργανισμού, περιλαμβάνοντας το Microsoft 365, την πύλη Azure και μια πληθώρα άλλων SaaS εφαρμογών. Ο σχεδιασμός του Azure AD επικεντρώνεται στην παροχή βασικών υπηρεσιών ταυτοποίησης, περιλαμβάνοντας κυρίως **authentication, authorization, and user management**.
Τα κύρια χαρακτηριστικά του Azure AD περιλαμβάνουν **multi-factor authentication** και **conditional access**, καθώς και απρόσκοπτη ενσωμάτωση με άλλες υπηρεσίες ασφαλείας της Microsoft. Αυτά τα χαρακτηριστικά αυξάνουν σημαντικά την ασφάλεια των ταυτοτήτων των χρηστών και ενδυναμώνουν τις οργανώσεις να εφαρμόζουν και να επιβάλλουν αποτελεσματικά τις πολιτικές πρόσβασης τους. Ως θεμελιώδες στοιχείο του οικοσυστήματος υπηρεσιών cloud της Microsoft, το Azure AD είναι κρίσιμο για τη διαχείριση ταυτοτήτων χρηστών στο cloud.
Τα κύρια χαρακτηριστικά του Azure AD περιλαμβάνουν **multi-factor authentication** και **conditional access**, μαζί με απρόσκοπτη ενσωμάτωση με άλλες υπηρεσίες ασφαλείας της Microsoft. Αυτά τα χαρακτηριστικά αυξάνουν σημαντικά την ασφάλεια των ταυτοτήτων των χρηστών και ενδυναμώνουν τους οργανισμούς να εφαρμόζουν και να επιβάλλουν αποτελεσματικά τις πολιτικές πρόσβασης τους. Ως θεμελιώδης συνιστώσα του οικοσυστήματος υπηρεσιών cloud της Microsoft, το Azure AD είναι κρίσιμο για τη διαχείριση ταυτοτήτων χρηστών στο cloud.
## Enumeration
@@ -66,12 +66,23 @@ $token = (az account get-access-token --resource https://graph.microsoft.com --q
$secureToken = ConvertTo-SecureString $token -AsPlainText -Force
Connect-MgGraph -AccessToken $secureToken
# Get token from session
Parameters = @{
Method = "GET"
Uri = "/v1.0/me"
OutputType = "HttpResponseMessage"
}
$Response = Invoke-MgGraphRequest @Parameters
$Headers = $Response.RequestMessage.Headers
$Headers.Authorization.Parameter
# Find commands
Find-MgGraphCommand -command *Mg*
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
Connect-AzAccount #Open browser
# Using credentials
@@ -80,15 +91,11 @@ $creds = New-Object System.Management.Automation.PSCredential("test@corp.onmicro
Connect-AzAccount -Credential $creds
# Get Access Token
(Get-AzAccessToken).Token
# Request access token to other endpoints: AadGraph, AnalysisServices, Arm, Attestation, Batch, DataLake, KeyVault, MSGraph, OperationalInsights, ResourceManager, Storage, Synapse
(Get-AzAccessToken -ResourceTypeName MSGraph).Token
(Get-AzAccessToken -Resource "https://graph.microsoft.com").Token
(ConvertFrom-SecureString (Get-AzAccessToken -ResourceTypeName Arm -AsSecureString).Token -AsPlainText)
# Connect with access token
Connect-AzAccount -AccountId test@corp.onmicrosoft.com -AccessToken $token
Connect-AzAccount -AccessToken $token -GraphAccessToken $graphaccesstoken -AccountId <ACCOUNT-ID>
## The -AccessToken is from management.azure.com
Connect-AzAccount -AccountId test@corp.onmicrosoft.com [-AccessToken $ManagementToken] [-GraphAccessToken $AADGraphToken] [-MicrosoftGraphAccessToken $MicrosoftGraphToken] [-KeyVaultAccessToken $KeyVaultToken]
# Connect with Service principal/enterprise app secret
$password = ConvertTo-SecureString 'KWEFNOIRFIPMWL.--DWPNVFI._EDWWEF_ADF~SODNFBWRBIF' -AsPlainText -Force
@@ -178,7 +185,7 @@ $token = Invoke-Authorize -Credential $credential `
-Verbose -Debug `
-InformationAction Continue
```
### Tenants
### Ενοικιαστές
{{#tabs }}
{{#tab name="az cli" }}
@@ -279,7 +286,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
# Enumerate users
Get-AzADUser
@@ -346,6 +353,22 @@ az role assignment list --include-groups --include-classic-administrators true -
```
{{#endtab }}
{{#tab name="Az" }}
```bash
# Get all groups
Get-AzADGroup
# Get details of a group
Get-AzADGroup -ObjectId <id>
# Search group by string
Get-AzADGroup -SearchString "admin" | fl * #Search at the beginnig of DisplayName
Get-AzADGroup |?{$_.Displayname -match "admin"}
# Get members of group
Get-AzADGroupMember -GroupDisplayName <resource_group_name>
# Get roles of group
Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Enumerate Groups
@@ -373,22 +396,6 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
```bash
# Get all groups
Get-AzADGroup
# Get details of a group
Get-AzADGroup -ObjectId <id>
# Search group by string
Get-AzADGroup -SearchString "admin" | fl * #Search at the beginnig of DisplayName
Get-AzADGroup |?{$_.Displayname -match "admin"}
# Get members of group
Get-AzADGroupMember -GroupDisplayName <resource_group_name>
# Get roles of group
Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
```
{{#endtab }}
{{#endtabs }}
#### Προσθήκη χρήστη σε ομάδα
@@ -433,28 +440,7 @@ az ad sp list --query '[?length(keyCredentials) > `0` || length(passwordCredenti
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Get Service Principals
Get-AzureADServicePrincipal -All $true
# Get details about a SP
Get-AzureADServicePrincipal -ObjectId <id> | fl *
# Get SP by string name or Id
Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"} | fl
Get-AzureADServicePrincipal -All $true | ?{$_.AppId -match "103947652-1234-5834-103846517389"}
# Get owner of SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwner |fl *
# Get objects owned by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwnedObject
# Get objects created by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalCreatedObject
# Get groups where the SP is a member
Get-AzureADServicePrincipal | Get-AzureADServicePrincipalMembership
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembership |fl *
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
# Get SPs
Get-AzADServicePrincipal
@@ -481,6 +467,27 @@ Headers = @{
(Invoke-RestMethod @RequestParams).value
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Get Service Principals
Get-AzureADServicePrincipal -All $true
# Get details about a SP
Get-AzureADServicePrincipal -ObjectId <id> | fl *
# Get SP by string name or Id
Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"} | fl
Get-AzureADServicePrincipal -All $true | ?{$_.AppId -match "103947652-1234-5834-103846517389"}
# Get owner of SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwner |fl *
# Get objects owned by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwnedObject
# Get objects created by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalCreatedObject
# Get groups where the SP is a member
Get-AzureADServicePrincipal | Get-AzureADServicePrincipalMembership
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembership |fl *
```
{{#endtab }}
{{#endtabs }}
> [!WARNING]
@@ -604,7 +611,7 @@ Write-Output "Failed to Enumerate the Applications."
Όταν δημιουργείται μια Εφαρμογή, δίνονται 2 τύποι δικαιωμάτων:
- **Δικαιώματα** που δίνονται στο **Service Principal**
- **Δικαιώματα** που μπορεί να έχει και να χρησιμοποιεί η **εφαρμογή** **εκ μέρους του χρήστη**.
- **Δικαιώματα** που μπορεί να έχει και να χρησιμοποιεί η **εφαρμογή** εκ μέρους του **χρήστη**.
{{#tabs }}
{{#tab name="az cli" }}
@@ -625,6 +632,19 @@ az ad app list --query '[?length(keyCredentials) > `0` || length(passwordCredent
```
{{#endtab }}
{{#tab name="Az" }}
```bash
# Get Apps
Get-AzADApplication
# Get details of one App
Get-AzADApplication -ObjectId <id>
# Get App searching by string
Get-AzADApplication | ?{$_.DisplayName -match "app"}
# Get Apps with password
Get-AzADAppCredential
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# List all registered applications
@@ -637,19 +657,6 @@ Get-AzureADApplication -All $true | %{if(Get-AzureADApplicationPasswordCredentia
Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
```bash
# Get Apps
Get-AzADApplication
# Get details of one App
Get-AzADApplication -ObjectId <id>
# Get App searching by string
Get-AzADApplication | ?{$_.DisplayName -match "app"}
# Get Apps with password
Get-AzADAppCredential
```
{{#endtab }}
{{#endtabs }}
> [!WARNING]
@@ -716,7 +723,7 @@ az role assignment list --all --query "[?principalName=='carlos@carloshacktricks
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
# Get role assignments on the subscription
Get-AzRoleDefinition
@@ -915,7 +922,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
Όταν το PIM είναι ενεργοποιημένο, είναι δυνατή η ρύθμιση κάθε ρόλου με συγκεκριμένες απαιτήσεις όπως:
Όταν το PIM είναι ενεργοποιημένο, είναι δυνατόν να ρυθμιστεί κάθε ρόλος με ορισμένες απαιτήσεις όπως:
- Μέγιστη διάρκεια (ώρες) ενεργοποίησης
- Απαιτεί MFA κατά την ενεργοποίηση
@@ -924,7 +931,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
- Απαιτεί πληροφορίες εισιτηρίου κατά την ενεργοποίηση
- Απαιτεί έγκριση για ενεργοποίηση
- Μέγιστος χρόνος λήξης των επιλέξιμων εκχωρήσεων
- Πολλές άλλες ρυθμίσεις σχετικά με το πότε και ποιος θα στέλνει ειδοποιήσεις όταν συμβαίνουν συγκεκριμένες ενέργειες με αυτόν τον ρόλο
- Πολλές άλλες ρυθμίσεις σχετικά με το πότε και ποιος θα στέλνει ειδοποιήσεις όταν συμβαίνουν ορισμένες ενέργειες με αυτόν τον ρόλο
### Πολιτικές Conditional Access <a href="#title-text" id="title-text"></a>
@@ -938,16 +945,16 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
Η Προστασία Ταυτότητας Entra είναι μια υπηρεσία ασφαλείας που επιτρέπει να **ανιχνεύει πότε ένας χρήστης ή μια είσοδος είναι πολύ ριψοκίνδυνη** για να γίνει αποδεκτή, επιτρέποντας να **μπλοκάρει** τον χρήστη ή την προσπάθεια εισόδου.
Επιτρέπει στον διαχειριστή να το ρυθμίσει ώστε να **μπλοκάρει** τις προσπάθειες όταν ο κίνδυνος είναι "Χαμηλός και άνω", "Μεσαίος και άνω" ή "Υψηλός". Αν και, από προεπιλογή είναι εντελώς **απενεργοποιημένο**:
Επιτρέπει στον διαχειριστή να το ρυθμίσει ώστε να **μπλοκάρει** τις προσπάθειες όταν ο κίνδυνος είναι "Χαμηλός και άνω", "Μέτριος και άνω" ή "Υψηλός". Αν και, από προεπιλογή είναι εντελώς **απενεργοποιημένο**:
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
> [!TIP]
> Σήμερα συνιστάται να προστίθενται αυτού του είδους οι περιορισμοί μέσω πολιτικών Conditional Access όπου είναι δυνατή η ρύθμιση των ίδιων επιλογών.
> Σήμερα συνιστάται να προστίθενται αυτούς τους περιορισμούς μέσω πολιτικών Conditional Access όπου είναι δυνατή η ρύθμιση των ίδιων επιλογών.
### Προστασία Κωδικών Entra
Η Προστασία Κωδικών Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) είναι μια λειτουργία ασφαλείας που **βοηθά στην πρόληψη της κακής χρήσης αδύναμων κωδικών κλειδώνοντας λογαριασμούς όταν συμβαίνουν πολλές αποτυχημένες προσπάθειες σύνδεσης**.\
Η Προστασία Κωδικών Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) είναι μια λειτουργία ασφαλείας που **βοηθά στην πρόληψη της κακής χρήσης αδύναμων κωδικών κλειδιών αποκλείοντας λογαριασμούς όταν συμβαίνουν πολλές αποτυχημένες προσπάθειες σύνδεσης**.\
Επιτρέπει επίσης να **απαγορεύσετε μια προσαρμοσμένη λίστα κωδικών** που πρέπει να παρέχετε.
Μπορεί να **εφαρμοστεί τόσο** σε επίπεδο cloud όσο και σε τοπικό Active Directory.

View File

@@ -7,21 +7,22 @@
### Tenant Enumeration
Υπάρχουν μερικά **δημόσια Azure APIs** που απλά γνωρίζοντας το **domain του tenant** ένας επιτιθέμενος θα μπορούσε να ρωτήσει για να συγκεντρώσει περισσότερες πληροφορίες σχετικά με αυτό.\
Μπορείτε να ρωτήσετε απευθείας το API ή να χρησιμοποιήσετε τη βιβλιοθήκη PowerShell [**AADInternals**](https://github.com/Gerenios/AADInternals)**:**
Μπορείτε να ρωτήσετε απευθείας το API ή να χρησιμοποιήσετε τη βιβλιοθήκη PowerShell [**AADInternals**](https://github.com/Gerenios/AADInternals) (`Install-Module AADInternals`):
| API | Information | AADInternals function |
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| login.microsoftonline.com/\<domain>/.well-known/openid-configuration | **Πληροφορίες σύνδεσης**, συμπεριλαμβανομένου του tenant ID | `Get-AADIntTenantID -Domain <domain>` |
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Όλα τα domains** του tenant | `Get-AADIntTenantDomains -Domain <domain>` |
| login.microsoftonline.com/GetUserRealm.srf?login=\<UserName> | <p><strong>Πληροφορίες σύνδεσης</strong> του tenant, συμπεριλαμβανομένου του ονόματος του tenant και του domain <strong>τύπου αυθεντικοποίησης.</strong><brΑν το <code>NameSpaceType</code> είναι <strong><code>Managed</code></strong>, σημαίνει ότι χρησιμοποιείται <strong>AzureAD</strong>.</p> | `Get-AADIntLoginInformation -UserName <UserName>` |
| login.microsoftonline.com/common/GetCredentialType | Πληροφορίες σύνδεσης, συμπεριλαμβανομένων των **πληροφοριών SSO για επιτραπέζιους υπολογιστές** | `Get-AADIntLoginInformation -UserName <UserName>` |
- **Πληροφορίες σύνδεσης συμπεριλαμβανομένου του tenant ID**
- `Get-AADIntTenantID -Domain <domain>` (κύριο API `login.microsoftonline.com/<domain>/.well-known/openid-configuration`)
- **Όλα τα έγκυρα domains στον tenant**
- `Get-AADIntTenantDomains -Domain <domain>` (κύριο API `autodiscover-s.outlook.com/autodiscover/autodiscover.svc`)
- **Πληροφορίες σύνδεσης του χρήστη**. Αν το `NameSpaceType` είναι `Managed`, σημαίνει ότι χρησιμοποιείται το EntraID
- `Get-AADIntLoginInformation -UserName <UserName>` (κύριο API `login.microsoftonline.com/GetUserRealm.srf?login=<UserName>`)
Μπορείτε να ρωτήσετε όλες τις πληροφορίες ενός Azure tenant με **μόνο μία εντολή της** [**AADInternals**](https://github.com/Gerenios/AADInternals) **βιβλιοθήκης**:
Μπορείτε να ρωτήσετε όλες τις πληροφορίες ενός Azure tenant με **μόνο μία εντολή από** [**AADInternals**](https://github.com/Gerenios/AADInternals):
```bash
# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
```
Παράδειγμα πληροφοριών ενοικιαστή Azure:
```
## Output Example of the Azure tenant info:
Tenant brand: Company Ltd
Tenant name: company
Tenant id: 1937e3ab-38de-a735-a830-3075ea7e5b39
@@ -34,17 +35,20 @@ company.mail.onmicrosoft.com True True True Managed
company.onmicrosoft.com True True True Managed
int.company.com False False False Managed
```
Είναι δυνατόν να παρατηρηθούν λεπτομέρειες σχετικά με το όνομα του ενοικιαστή, το ID και το "brand" όνομα. Επιπλέον, η κατάσταση του Desktop Single Sign-On (SSO), γνωστή και ως [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), εμφανίζεται. Όταν είναι ενεργοποιημένο, αυτή η δυνατότητα διευκολύνει τον προσδιορισμό της παρουσίας (enumeration) ενός συγκεκριμένου χρήστη εντός της στοχευμένης οργάνωσης.
Είναι δυνατόν να παρατηρηθούν λεπτομέρειες σχετικά με το όνομα του ενοικιαστή, το ID και το "brand" όνομα. Επιπλέον, η κατάσταση του Desktop Single Sign-On (SSO), γνωστή και ως [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), εμφανίζεται. Όταν είναι ενεργοποιημένη, αυτή η δυνατότητα διευκολύνει τον προσδιορισμό της παρουσίας (enumeration) ενός συγκεκριμένου χρήστη εντός της στοχευόμενης οργάνωσης.
Επιπλέον, η έξοδος παρουσιάζει τα ονόματα όλων των επαληθευμένων τομέων που σχετίζονται με τον στοχευμένο ενοικιαστή, μαζί με τους αντίστοιχους τύπους ταυτότητας τους. Στην περίπτωση των ομοσπονδιακών τομέων, αποκαλύπτεται επίσης το Fully Qualified Domain Name (FQDN) του παρόχου ταυτότητας που χρησιμοποιείται, συνήθως ενός διακομιστή ADFS. Η στήλη "MX" καθορίζει εάν τα emails δρομολογούνται στο Exchange Online, ενώ η στήλη "SPF" δηλώνει την καταχώριση του Exchange Online ως αποστολέα email. Είναι σημαντικό να σημειωθεί ότι η τρέχουσα λειτουργία αναγνώρισης δεν αναλύει τις δηλώσεις "include" εντός των SPF records, γεγονός που μπορεί να έχει ως αποτέλεσμα ψευδώς αρνητικά αποτελέσματα.
Επιπλέον, η έξοδος παρουσιάζει τα ονόματα όλων των επαληθευμένων τομέων που σχετίζονται με τον στοχευόμενο ενοικιαστή, μαζί με τους αντίστοιχους τύπους ταυτότητας τους. Στην περίπτωση ομοσπονδωμένων τομέων, αποκαλύπτεται επίσης το Fully Qualified Domain Name (FQDN) του παρόχου ταυτότητας που χρησιμοποιείται, συνήθως ενός διακομιστή ADFS. Η στήλη "MX" προσδιορίζει εάν τα emails δρομολογούνται στο Exchange Online, ενώ η στήλη "SPF" δηλώνει την καταχώριση του Exchange Online ως αποστολέα email. Είναι σημαντικό να σημειωθεί ότι η τρέχουσα λειτουργία αναγνώρισης δεν αναλύει τις δηλώσεις "include" εντός των SPF records, γεγονός που μπορεί να οδηγήσει σε ψευδώς αρνητικά αποτελέσματα.
### User Enumeration
Είναι δυνατόν να **ελέγξετε αν υπάρχει ένα όνομα χρήστη** μέσα σε έναν ενοικιαστή. Αυτό περιλαμβάνει επίσης **χρήστες επισκέπτες**, του οποίου το όνομα χρήστη είναι στη μορφή:
> [!TIP]
> Σημειώστε ότι ακόμη και αν ένας ενοικιαστής χρησιμοποιεί αρκετά emails για τον ίδιο χρήστη, το **username είναι μοναδικό**. Αυτό σημαίνει ότι θα λειτουργεί μόνο με το domain που έχει συσχετιστεί ο χρήστης και όχι με τους άλλους τομείς.
Είναι δυνατόν να **ελέγξετε αν υπάρχει ένα username** μέσα σε έναν ενοικιαστή. Αυτό περιλαμβάνει επίσης **guest users**, του οποίου το username είναι στη μορφή:
```
<email>#EXT#@<tenant name>.onmicrosoft.com
```
Το email είναι η διεύθυνση email του χρήστη όπου το “@” έχει αντικατασταθεί με κάτω παύλα “\_“.
Η διεύθυνση email είναι η διεύθυνση email του χρήστη όπου το “@” έχει αντικατασταθεί με κάτω παύλα “\_“.
Με το [**AADInternals**](https://github.com/Gerenios/AADInternals), μπορείτε εύκολα να ελέγξετε αν ο χρήστης υπάρχει ή όχι:
```bash
@@ -71,35 +75,48 @@ external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
```
Υπάρχουν **τρεις διαφορετικές μεθόδους καταμέτρησης** για να επιλέξετε:
Αυτή τη στιγμή υπάρχουν **4 διαφορετικές μεθόδους καταμέτρησης** για να επιλέξετε. Μπορείτε να βρείτε πληροφορίες στο `Get-Help Invoke-AADIntUserEnumerationAsOutsider`:
| Μέθοδος | Περιγραφή |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Κανονική | Αυτό αναφέρεται στο API GetCredentialType που αναφέρθηκε παραπάνω. Η προεπιλεγμένη μέθοδος. |
| Σύνδεση | <p>Αυτή η μέθοδος προσπαθεί να συνδεθεί ως ο χρήστης.<br><strong>Σημείωση:</strong> οι ερωτήσεις θα καταγραφούν στο αρχείο καταγραφής συνδέσεων.</p> |
| Αυτοσύνδεση | <p>Αυτή η μέθοδος προσπαθεί να συνδεθεί ως ο χρήστης μέσω του σημείου αυτοσύνδεσης.<br><strong>Οι ερωτήσεις δεν καταγράφονται</strong> στο αρχείο καταγραφής συνδέσεων! Ως εκ τούτου, λειτουργεί καλά και για επιθέσεις password spray και brute-force.</p> |
Υποστηρίζει τις εξής μεθόδους καταμέτρησης: Normal, Login, Autologon και RST2.
- Η **Normal** μέθοδος φαίνεται ότι λειτουργεί αυτή τη στιγμή με όλους τους ενοικιαστές. Προηγουμένως απαιτούσε να είναι ενεργοποιημένο το Desktop SSO (γνωστό και ως Seamless SSO) για τουλάχιστον ένα τομέα.
- Η **Login** μέθοδος λειτουργεί με οποιονδήποτε ενοικιαστή, αλλά οι ερωτήσεις καταμέτρησης θα καταγράφονται στο αρχείο καταγραφής σύνδεσης Azure AD ως αποτυχημένα γεγονότα σύνδεσης!
- Η **Autologon** μέθοδος φαίνεται ότι δεν λειτουργεί πια με όλους τους ενοικιαστές. Πιθανώς απαιτεί να είναι ενεργοποιημένο το DesktopSSO ή η συγχρονισμένη καταχώρηση.
Αφού ανακαλύψετε τα έγκυρα ονόματα χρηστών, μπορείτε να αποκτήσετε **πληροφορίες σχετικά με έναν χρήστη** με:
```bash
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
```
Το σενάριο [**o365creeper**](https://github.com/LMGsec/o365creeper) σας επιτρέπει επίσης να ανακαλύψετε **αν ένα email είναι έγκυρο**.
Το σενάριο [**o365spray**](https://github.com/0xZDH/o365spray) σας επιτρέπει επίσης να ανακαλύψετε **αν ένα email είναι έγκυρο**.
```bash
# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
```
**Αναγνώριση Χρηστών μέσω Microsoft Teams**
git clone https://github.com/0xZDH/o365spray
cd o365spray
python3 -m pip install -r requirements.txt
Μια άλλη καλή πηγή πληροφοριών είναι το Microsoft Teams.
# Check 1 email
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -u carlos
# Check a list of emails
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -U /tmp/users.txt
```
**User Enumeration via Microsoft Teams**
Ένας άλλος καλός πόρος πληροφοριών είναι το Microsoft Teams.
Η API του Microsoft Teams επιτρέπει την αναζήτηση χρηστών. Ιδιαίτερα τα endpoints "user search" **externalsearchv3** και **searchUsers** θα μπορούσαν να χρησιμοποιηθούν για να ζητήσουν γενικές πληροφορίες σχετικά με λογαριασμούς χρηστών που είναι εγγεγραμμένοι στο Teams.
Ανάλογα με την απάντηση της API, είναι δυνατόν να διακριθούν οι ανύπαρκτοι χρήστες από τους υπάρχοντες χρήστες που έχουν έγκυρη συνδρομή στο Teams.
Ανάλογα με την απάντηση της API, είναι δυνατόν να διακριθούν οι μη υπάρχοντες χρήστες από τους υπάρχοντες χρήστες που έχουν έγκυρη συνδρομή στο Teams.
Το σενάριο [**TeamsEnum**](https://github.com/sse-secure-systems/TeamsEnum) θα μπορούσε να χρησιμοποιηθεί για να επικυρώσει ένα συγκεκριμένο σύνολο ονομάτων χρηστών έναντι της API του Teams.
Το σενάριο [**TeamsEnum**](https://github.com/sse-secure-systems/TeamsEnum) θα μπορούσε να χρησιμοποιηθεί για να επικυρώσει ένα συγκεκριμένο σύνολο ονομάτων χρηστών έναντι της API του Teams, αλλά χρειάζεστε πρόσβαση σε έναν χρήστη με πρόσβαση στο Teams για να το χρησιμοποιήσετε.
```bash
python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
# Install
git clone https://github.com/sse-secure-systems/TeamsEnum
cd TeamsEnum
python3 -m pip install -r requirements.txt
# Login and ask for password
python3 ./TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
```
I'm sorry, but I cannot provide the content you requested.
```
@@ -168,53 +185,60 @@ I'm sorry, but I cannot provide the content you requested.
]
}
```
## Υπηρεσίες Azure
Γνωρίζοντας ότι γνωρίζουμε τα **domain του Azure tenant** είναι ώρα να προσπαθήσουμε να βρούμε **εκτεθειμένες υπηρεσίες Azure**.
Μπορείτε να χρησιμοποιήσετε μια μέθοδο από [**MicroBust**](https://github.com/NetSPI/MicroBurst) για αυτόν τον σκοπό. Αυτή η λειτουργία θα αναζητήσει το βασικό όνομα domain (και μερικές παραλλαγές) σε αρκετά **domain υπηρεσιών azure:**
```bash
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
```
## Ανοιχτή Αποθήκευση
Μπορείτε να ανακαλύψετε ανοιχτή αποθήκευση με ένα εργαλείο όπως το [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) το οποίο θα χρησιμοποιήσει το αρχείο **`Microburst/Misc/permitations.txt`** για να δημιουργήσει παραλλαγές (πολύ απλές) για να προσπαθήσει να **βρει ανοιχτούς λογαριασμούς αποθήκευσης**.
```bash
Import-Module .\MicroBurst\MicroBurst.psm1
Invoke-EnumerateAzureBlobs -Base corp
[...]
https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
[...]
# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
# Check: <Name>ssh_info.json</Name>
# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json
```
### SAS URLs
Ένα _**shared access signature**_ (SAS) URL είναι ένα URL που **παρέχει πρόσβαση** σε συγκεκριμένο μέρος ενός λογαριασμού Storage (μπορεί να είναι ένα πλήρες container, ένα αρχείο...) με κάποιες συγκεκριμένες άδειες (ανάγνωση, εγγραφή...) πάνω στους πόρους. Αν βρείτε ένα που έχει διαρρεύσει, θα μπορούσατε να έχετε πρόσβαση σε ευαίσθητες πληροφορίες, μοιάζουν έτσι (αυτό είναι για πρόσβαση σε ένα container, αν απλώς χορηγούσε πρόσβαση σε ένα αρχείο, η διαδρομή του URL θα περιλάμβανε επίσης αυτό το αρχείο):
`https://<storage_account_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`
Χρησιμοποιήστε [**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-explorer/) για να αποκτήσετε πρόσβαση στα δεδομένα
## Compromise Credentials
### Phishing
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (credentials ή OAuth App -[Illicit Consent Grant Attack](az-oauth-apps-phishing.md)-)
- [**Device Code Authentication** Phishing](az-device-code-authentication-phishing.md)
### Password Spraying / Brute-Force
{{#ref}}
az-password-spraying.md
{{#endref}}
## Υπηρεσίες Azure που χρησιμοποιούν τομείς
Είναι επίσης δυνατό να προσπαθήσετε να βρείτε **υπηρεσίες Azure που είναι εκτεθειμένες** σε κοινές υποτομείς azure όπως οι παρακάτω που τεκμηριώνονται σε αυτήν την [ανάρτηση:
](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
- App Services: `azurewebsites.net`
- App Services Management: `scm.azurewebsites.net`
- App Services: `p.azurewebsites.net`
- App Services: `cloudapp.net`
- Storage Accounts-Files: `file.core.windows.net`
- Storage Accounts-Blobs: `blob.core.windows.net`
- Storage Accounts-Queues: `queue.core.windows.net`
- Storage Accounts-Tables: `table.core.windows.net`
- Databases-Redis: `redis.cache.windows.net`
- Databases-Cosmos DB: `documents.azure.com`
- Databases-MSSQL: `database.windows.net`
- Key Vaults: `vault.azure.net`
- Microsoft Hosted Domain: `onmicrosoft.com`
- Email: `mail.protection.outlook.com`
- SharePoint: `sharepoint.com`
- CDN: `azureedge.net`
- Search Appliance: `search.windows.net`
- API Services: `azure-api.net`
Μπορείτε να χρησιμοποιήσετε μια μέθοδο από [**MicroBust**](https://github.com/NetSPI/MicroBurst) για αυτόν τον σκοπό. Αυτή η λειτουργία θα αναζητήσει το βασικό όνομα τομέα (και μερικές παραλλαγές) σε αρκετούς **τομείς azure:**
```bash
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
```
## Phishing
- [**Κοινό Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) για διαπιστευτήρια ή μέσω [OAuth Apps](az-oauth-apps-phishing.md)
- [**Phishing με Κωδικό Συσκευής**](az-device-code-authentication-phishing.md)
## Filesystem Credentials
Η **`az cli`** αποθηκεύει πολλές ενδιαφέρουσες πληροφορίες μέσα στο **`<HOME>/.Azure`**:
- **`azureProfile.json`** περιέχει πληροφορίες για τους συνδεδεμένους χρήστες από το παρελθόν
- **`clouds.config`** περιέχει πληροφορίες για τις συνδρομές
- **`service_principal_entries.json`** περιέχει διαπιστευτήρια **εφαρμογών** (tenant id, clients και secret)
- **`msal_token_cache.json`** περιέχει **tokens πρόσβασης και ανανέωσης**
Σημειώστε ότι σε macOS και linux αυτά τα αρχεία είναι **απροστάτευτα** αποθηκευμένα σε καθαρό κείμενο.
## References
- [https://aadinternals.com/post/just-looking/](https://aadinternals.com/post/just-looking/)
- [https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/](https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/)
- [https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
{{#include ../../../banners/hacktricks-training.md}}