Auditoría de la Configuración de Azure Active Directory
Cuándo Usarlo
- Al realizar una evaluación de seguridad de la configuración de identidad de un inquilino de Azure
- Cuando las auditorías de cumplimiento requieren revisar políticas de autenticación, aplicación de MFA y asignaciones de roles
- Al incorporar un nuevo inquilino de Azure después de una fusión o adquisición
- Al investigar actividad de inicio de sesión sospechosa o cuentas comprometidas
- Al validar que las políticas de acceso condicional protejan adecuadamente contra ataques de identidad
No usar para auditoría de Active Directory local (usar PingCastle o BloodHound AD), para auditoría RBAC a nivel de recursos de Azure sin contexto de identidad, ni para detección de amenazas en tiempo real (usar Microsoft Defender for Identity).
Prerrequisitos
- Rol de Lector Global o Lector de Seguridad en el inquilino de Microsoft Entra ID de destino
- SDK de Microsoft Graph PowerShell instalado (
Install-Module Microsoft.Graph) - CLI de Az autenticada en el inquilino de destino (
az login --tenant TENANT_ID) - ScoutSuite con proveedor de Azure configurado para evaluación automatizada
- Acceso a registros de auditoría y registros de inicio de sesión de Azure AD (requiere Azure AD Premium P1/P2)
Flujo de Trabajo
Paso 1: Enumerar Configuración del Inquilino y Valores Predeterminados de Seguridad
Evaluar la configuración de seguridad de identidad base del inquilino, incluidos los valores predeterminados de seguridad y el estado de autenticación heredada.
# Conectar a Microsoft Graph
Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All"
# Obtener detalles del inquilino
Get-MgOrganization | Select-Object DisplayName, Id, VerifiedDomains
# Verificar si los Valores Predeterminados de Seguridad están habilitados
Get-MgPolicyIdentitySecurityDefaultEnforcementPolicy | Select-Object IsEnabled
# Listar políticas de métodos de autenticación
Get-MgPolicyAuthenticationMethodPolicy | ConvertTo-Json -Depth 5
# Verificar estado de autenticación heredada mediante Acceso Condicional
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.ClientAppTypes -contains "exchangeActiveSync" -or
$_.Conditions.ClientAppTypes -contains "other"
} | Select-Object DisplayName, State
Paso 2: Auditar Asignaciones de Roles Privilegiados
Revisar las asignaciones de roles de directorio para identificar usuarios con privilegios excesivos, cuentas de administrador permanentes y configuraciones de roles riesgosas.
# Listar todas las asignaciones de Administrador Global
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/directoryRoles/filterByIds" \
--body '{"ids":["62e90394-69f5-4237-9190-012177145e10"]}' | \
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/directoryRoles?filter=displayName eq 'Global Administrator'" \
--query "value[0].id" -o tsv
# Listar todas las asignaciones de roles privilegiados usando la API de Graph
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?\$expand=principal" \
--query "value[*].{Rol:roleDefinitionId, Principal:principal.displayName, TipoDePrincipal:[email protected]}" \
-o table
# Verificar usuarios con múltiples roles de administrador
az ad user list --query "[].{UPN:userPrincipalName, Nombre:displayName}" -o table
# Listar entidades de servicio con asignaciones de roles de administrador
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?\$filter=principalOrganizationId eq 'TENANT_ID'" \
-o json
Paso 3: Revisar Políticas de Acceso Condicional
Auditar las políticas de acceso condicional en busca de brechas de cobertura, particularmente en la aplicación de MFA, cumplimiento del dispositivo y restricciones basadas en ubicación.
# Listar todas las políticas de Acceso Condicional
Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, State, @{
N='ControlesDeConcesión'; E={$_.GrantControls.BuiltInControls -join ', '}
} | Format-Table -AutoSize
# Identificar políticas en modo solo informe (no aplicadas)
Get-MgIdentityConditionalAccessPolicy | Where-Object {$_.State -eq "enabledForReportingButNotEnforced"} |
Select-Object DisplayName
# Verificar cobertura de aplicación de MFA
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.GrantControls.BuiltInControls -contains "mfa"
} | Select-Object DisplayName, State, @{
N='Usuarios'; E={$_.Conditions.Users.IncludeUsers -join ', '}
}
# Encontrar políticas que excluyen grupos (posible omisión)
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.Users.ExcludeGroups.Count -gt 0
} | Select-Object DisplayName, @{
N='GruposExcluidos'; E={$_.Conditions.Users.ExcludeGroups -join ', '}
}
Paso 4: Identificar Cuentas Inactivas y Usuarios Invitados
Encontrar cuentas que no han iniciado sesión recientemente, cuentas deshabilitadas con asignaciones de roles activas y configuraciones de usuario invitado riesgosas.
# Encontrar usuarios que no han iniciado sesión en 90+ días
az ad user list --query "[?signInActivity.lastSignInDateTime < '2025-11-25T00:00:00Z'].{UPN:userPrincipalName, UltimoInicio:signInActivity.lastSignInDateTime, Habilitado:accountEnabled}" -o table
# Listar todos los usuarios invitados
az ad user list --filter "userType eq 'Guest'" \
--query "[].{UPN:userPrincipalName, Nombre:displayName, FechaCreacion:createdDateTime}" \
-o table
# Encontrar usuarios invitados con roles privilegiados
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?\$expand=principal" \
--query "value[?principal.userType=='Guest'].{Rol:roleDefinitionId,Invitado:principal.userPrincipalName}" \
-o table
# Verificar cuentas con MFA deshabilitado
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/reports/authenticationMethods/userRegistrationDetails" \
--query "value[?!isMfaRegistered].{UPN:userPrincipalName,MfaRegistrado:isMfaRegistered}" \
-o table
Paso 5: Analizar Registros de Inicio de Sesión para Actividad Riesgosa
Revisar registros de inicio de sesión para identificar patrones de autenticación anómalos, desafíos de MFA fallidos y detecciones de inicio de sesión riesgoso.
# Obtener inicios de sesión riesgosos de los últimos 7 días
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$filter=riskLevelDuringSignIn ne 'none' and createdDateTime ge 2026-02-16T00:00:00Z" \
--query "value[*].{Usuario:userPrincipalName,Riesgo:riskLevelDuringSignIn,IP:ipAddress,Aplicacion:appDisplayName,Estado:status.errorCode}" \
-o table
# Obtener inicios de sesión desde ubicaciones desconocidas
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$filter=riskEventTypes_v2/any(r:r eq 'unfamiliarFeatures')" \
--query "value[*].{Usuario:userPrincipalName,Ubicacion:location.city,IP:ipAddress}" \
-o table
# Verificar inicios de sesión con autenticación heredada
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$filter=clientAppUsed ne 'Browser' and clientAppUsed ne 'Mobile Apps and Desktop clients'" \
--query "value[*].{Usuario:userPrincipalName,Cliente:clientAppUsed,Estado:status.errorCode}" \
-o table
Paso 6: Ejecutar Evaluación Automatizada con ScoutSuite
Ejecutar ScoutSuite para verificaciones automatizadas completas en la configuración del inquilino de Azure.
# Ejecutar ScoutSuite contra Azure
python3 -m ScoutSuite azure --cli \
--report-dir ./scoutsuite-azure-report \
--all-subscriptions
# Revisar el informe HTML generado
open ./scoutsuite-azure-report/azure-report.html
Conceptos Clave
| Término | Definición |
|---|---|
| Microsoft Entra ID | Servicio de gestión de identidades y accesos en la nube de Microsoft, anteriormente Azure Active Directory, que proporciona autenticación y autorización |
| Acceso Condicional | Motor de políticas que evalúa señales (usuario, dispositivo, ubicación, riesgo) para aplicar controles de acceso como MFA, cumplimiento del dispositivo o bloquear el acceso |
| Valores Predeterminados de Seguridad | Configuración de protección de identidad base de Microsoft que aplica el registro de MFA, bloquea la autenticación heredada y protege acciones privilegiadas |
| Privileged Identity Management | Característica de Azure AD Premium P2 que permite acceso privilegiado justo a tiempo con flujos de trabajo de aprobación y activación de roles con límite de tiempo |
| Autenticación Heredada | Protocolos de autenticación antiguos (POP3, IMAP, SMTP, ActiveSync) que no admiten MFA y son comúnmente explotados para ataques de credenciales |
| Inicio de Sesión Riesgoso | Detección de anomalías de inicio de sesión de Microsoft Entra Identity Protection que incluye viajes imposibles, ubicaciones desconocidas y direcciones IP vinculadas a malware |
Herramientas y Sistemas
- API de Microsoft Graph: Interfaz programática principal para consultar la configuración, políticas, roles y registros de auditoría de Entra ID
- SDK de Microsoft Graph PowerShell: Módulo de PowerShell para gestión de Entra ID y tareas de auditoría de seguridad
- ScoutSuite: Herramienta de auditoría multinube con soporte para proveedor de Azure para IAM, almacenamiento, redes y verificaciones de identidad
- AzureADRecon: Herramienta comunitaria para reconocimiento integral de Azure AD y generación de informes de evaluación de seguridad
- Microsoft Defender for Identity: Solución de seguridad basada en la nube para detectar amenazas basadas en identidad y credenciales comprometidas
Escenarios Comunes
Escenario: Evaluación de Seguridad de un Inquilino de Azure Posterior a una Adquisición
Contexto: Después de adquirir una empresa, el equipo de seguridad necesita evaluar la postura de identidad del inquilino de Azure antes de integrarlo con el Entra ID corporativo.
Enfoque:
- Enumerar todos los Administradores Globales y verificar si hay cuentas personales en roles de administrador
- Revisar las políticas de acceso condicional para verificar que MFA esté aplicado para todos los usuarios, no solo para administradores
- Identificar usuarios invitados con acceso privilegiado que puedan indicar permisos excesivos de proveedores externos
- Verificar cuentas inactivas (sin inicio de sesión en 90+ días) que podrían ser objetivos de ataques de credenciales
- Revisar registros de inicio de sesión para uso de autenticación heredada que omite MFA
- Verificar que los Valores Predeterminados de Seguridad o políticas de CA equivalentes bloqueen protocolos de autenticación heredados
- Producir un informe de riesgos con pasos de remediación priorizados antes de la integración del inquilino
Errores Comunes: Azure AD Premium P2 es necesario para detecciones de inicio de sesión riesgoso y PIM. Si el inquilino adquirido usa un nivel de licencia inferior, muchas funciones de protección de identidad no estarán disponibles. Los usuarios invitados de inquilinos asociados pueden tener acceso implícito a través de grupos dinámicos que no son visibles en las consultas estándar de asignación de roles.
Formato de Salida
Informe de Auditoría de Seguridad de Azure Active Directory
=============================================================
Inquilino: acme-acquired.onmicrosoft.com
ID de Inquilino: a1b2c3d4-e5f6-7890-abcd-ef1234567890
Fecha de Auditoría: 2026-02-23
Licencia: Azure AD Premium P2
CONFIGURACIÓN DE IDENTIDAD:
Valores Predeterminados de Seguridad: Deshabilitados (Acceso Condicional en uso)
Políticas de Acceso Condicional: 12 (8 aplicadas, 3 solo informe, 1 deshabilitada)
Autenticación Heredada Bloqueada: Parcial (bloqueada solo para administradores)
ACCESO PRIVILEGIADO:
Administradores Globales: 8 (recomendado: <= 4)
Asignaciones de administración permanentes: 6 (sin activación de PIM requerida)
Entidades de servicio con rol admin: 3
Usuarios invitados con roles privilegiados: 2
HIGIENE DE CUENTAS:
Total de usuarios: 1,247
Cuentas inactivas (90+ días): 89
Usuarios invitados: 234
Usuarios sin MFA registrado: 156
RIESGO DE INICIO DE SESIÓN:
Inicios de sesión riesgosos (últimos 30 días): 34
Inicios de sesión con auth heredada (últimos 7 días): 67
Detecciones de viaje imposible: 5
Inicios de sesión desde ubicaciones desconocidas: 12
HALLAZGOS CRÍTICOS:
1. 8 Administradores Globales con asignaciones permanentes (usar PIM)
2. La autenticación heredada no está bloqueada para usuarios no administradores
3. 156 usuarios sin registro de MFA
4. 2 usuarios invitados con el rol de Administrador de Roles Privilegiados