Auditoria da Configuração do Azure Active Directory
Quando Usar
- Ao realizar uma avaliação de segurança da configuração de identidade de um locatário Azure
- Quando auditorias de compliance exigem revisão de políticas de autenticação, aplicação de MFA e atribuições de funções
- Ao integrar um novo locatário Azure após fusão ou aquisição
- Ao investigar atividade de entrada suspeita ou contas comprometidas
- Ao validar se as políticas de acesso condicional protegem adequadamente contra ataques baseados em identidade
Não use para auditoria de Active Directory local (use PingCastle ou BloodHound AD), para auditoria de RBAC no nível de recurso do Azure sem contexto de identidade, ou para detecção de ameaças em tempo real (use Microsoft Defender for Identity).
Pré-requisitos
- Função de Leitor Global ou Leitor de Segurança no locatário do Microsoft Entra ID de destino
- SDK do Microsoft Graph PowerShell instalado (
Install-Module Microsoft.Graph) - CLI do Az autenticada no locatário de destino (
az login --tenant TENANT_ID) - ScoutSuite configurado com o provedor Azure para avaliação automatizada
- Acesso aos logs de auditoria e logs de entrada do Azure AD (exige Azure AD Premium P1/P2)
Fluxo de Trabalho
Etapa 1: Enumerar Configuração do Locatário e Padrões de Segurança
Avalie as configurações básicas de segurança de identidade do locatário, incluindo padrões de segurança e status de autenticação legada.
# Conectar ao Microsoft Graph
Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All"
# Obter detalhes do locatário
Get-MgOrganization | Select-Object DisplayName, Id, VerifiedDomains
# Verificar se os Padrões de Segurança estão ativados
Get-MgPolicyIdentitySecurityDefaultEnforcementPolicy | Select-Object IsEnabled
# Listar políticas de métodos de autenticação
Get-MgPolicyAuthenticationMethodPolicy | ConvertTo-Json -Depth 5
# Verificar status de autenticação legada via Acesso Condicional
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.ClientAppTypes -contains "exchangeActiveSync" -or
$_.Conditions.ClientAppTypes -contains "other"
} | Select-Object DisplayName, State
Etapa 2: Auditar Atribuições de Funções Privilegiadas
Revise as atribuições de funções de diretório para identificar usuários com privilégios excessivos, contas administrativas permanentes e configurações de função arriscadas.
# Listar todas as atribuições 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 as atribuições de funções privilegiadas usando a API Graph
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?\$expand=principal" \
--query "value[*].{Role:roleDefinitionId, Principal:principal.displayName, PrincipalType:[email protected]}" \
-o table
# Verificar usuários com múltiplas funções de administrador
az ad user list --query "[].{UPN:userPrincipalName, DisplayName:displayName}" -o table
# Listar service principals com atribuições de funções de administrador
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?\$filter=principalOrganizationId eq 'TENANT_ID'" \
-o json
Etapa 3: Revisar Políticas de Acesso Condicional
Audite as políticas de acesso condicional em busca de lacunas de cobertura, especialmente em relação à aplicação de MFA, conformidade de dispositivos e restrições baseadas em localização.
# Listar todas as políticas de Acesso Condicional
Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, State, @{
N='GrantControls'; E={$_.GrantControls.BuiltInControls -join ', '}
} | Format-Table -AutoSize
# Identificar políticas no modo somente relatório (não aplicadas)
Get-MgIdentityConditionalAccessPolicy | Where-Object {$_.State -eq "enabledForReportingButNotEnforced"} |
Select-Object DisplayName
# Verificar cobertura de aplicação de MFA
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.GrantControls.BuiltInControls -contains "mfa"
} | Select-Object DisplayName, State, @{
N='Users'; E={$_.Conditions.Users.IncludeUsers -join ', '}
}
# Encontrar políticas que excluem grupos (possível bypass)
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.Users.ExcludeGroups.Count -gt 0
} | Select-Object DisplayName, @{
N='ExcludedGroups'; E={$_.Conditions.Users.ExcludeGroups -join ', '}
}
Etapa 4: Identificar Contas Obsoletas e Usuários Convidados
Encontre contas que não realizaram login recentemente, contas desabilitadas com atribuições de funções ativas e configurações arriscadas de usuários convidados.
# Encontrar usuários que não fizeram login nos últimos 90+ dias
az ad user list --query "[?signInActivity.lastSignInDateTime < '2025-11-25T00:00:00Z'].{UPN:userPrincipalName, LastSignIn:signInActivity.lastSignInDateTime, Enabled:accountEnabled}" -o table
# Listar todos os usuários convidados
az ad user list --filter "userType eq 'Guest'" \
--query "[].{UPN:userPrincipalName, DisplayName:displayName, CreatedDate:createdDateTime}" \
-o table
# Encontrar usuários convidados com funções privilegiadas
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?\$expand=principal" \
--query "value[?principal.userType=='Guest'].{Role:roleDefinitionId,Guest:principal.userPrincipalName}" \
-o table
# Verificar contas com MFA desabilitado
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/reports/authenticationMethods/userRegistrationDetails" \
--query "value[?!isMfaRegistered].{UPN:userPrincipalName,MfaRegistered:isMfaRegistered}" \
-o table
Etapa 5: Analisar Logs de Entrada para Atividade Arriscada
Revise os logs de entrada para identificar padrões de autenticação anômalos, desafios de MFA com falha e detecções de entrada arriscadas.
# Obter entradas arriscadas dos últimos 7 dias
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[*].{User:userPrincipalName,Risk:riskLevelDuringSignIn,IP:ipAddress,App:appDisplayName,Status:status.errorCode}" \
-o table
# Obter entradas de locais desconhecidos
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$filter=riskEventTypes_v2/any(r:r eq 'unfamiliarFeatures')" \
--query "value[*].{User:userPrincipalName,Location:location.city,IP:ipAddress}" \
-o table
# Verificar entradas de autenticação legada
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[*].{User:userPrincipalName,ClientApp:clientAppUsed,Status:status.errorCode}" \
-o table
Etapa 6: Executar Avaliação Automatizada com ScoutSuite
Execute o ScoutSuite para verificações automatizadas abrangentes em toda a configuração do locatário Azure.
# Executar ScoutSuite contra o Azure
python3 -m ScoutSuite azure --cli \
--report-dir ./scoutsuite-azure-report \
--all-subscriptions
# Revisar o relatório HTML gerado
open ./scoutsuite-azure-report/azure-report.html
Conceitos-chave
| Termo | Definição |
|---|---|
| Microsoft Entra ID | Serviço de gerenciamento de identidade e acesso em nuvem da Microsoft, anteriormente Azure Active Directory, que fornece autenticação e autorização |
| Acesso Condicional | Mecanismo de políticas que avalia sinais (usuário, dispositivo, localização, risco) para impor controles de acesso como MFA, conformidade de dispositivo ou bloquear acesso |
| Padrões de Segurança | Configurações básicas de proteção de identidade da Microsoft que impõem registro de MFA, bloqueiam autenticação legada e protegem ações privilegiadas |
| Gerenciamento de Identidades Privilegiadas | Recurso do Azure AD Premium P2 que permite acesso privilegiado just-in-time com fluxos de aprovação e ativação de função com limite de tempo |
| Autenticação Legada | Protocolos de autenticação mais antigos (POP3, IMAP, SMTP, ActiveSync) que não suportam MFA e são comumente explorados em ataques de credenciais |
| Entrada Arriscada | Detecção de anomalias de entrada pelo Microsoft Entra Identity Protection, incluindo viagens impossíveis, locais desconhecidos e IPs associados a malware |
Ferramentas e Sistemas
- Microsoft Graph API: Interface programática principal para consultar configuração, políticas, funções e logs de auditoria do Entra ID
- Microsoft Graph PowerShell SDK: Módulo PowerShell para gerenciamento do Entra ID e tarefas de auditoria de segurança
- ScoutSuite: Ferramenta de auditoria multicloud com suporte ao provedor Azure para verificações de IAM, armazenamento, rede e identidade
- AzureADRecon: Ferramenta comunitária para reconhecimento abrangente do Azure AD e geração de relatórios de avaliação de segurança
- Microsoft Defender for Identity: Solução de segurança baseada em nuvem para detectar ameaças baseadas em identidade e credenciais comprometidas
Cenários Comuns
Cenário: Avaliação de Segurança de Locatário Azure Pós-aquisição
Contexto: Após adquirir uma empresa, a equipe de segurança precisa avaliar a postura de identidade do locatário Azure antes de integrá-lo ao Entra ID corporativo.
Abordagem:
- Enumerar todos os Administradores Globais e verificar contas pessoais em funções de administrador
- Revisar políticas de acesso condicional para verificar se o MFA é aplicado para todos os usuários, não apenas para administradores
- Identificar usuários convidados com acesso privilegiado que podem indicar excesso de permissões de fornecedores terceiros
- Verificar contas obsoletas (sem login por 90+ dias) que podem ser alvos de ataques de credenciais
- Revisar logs de entrada para uso de autenticação legada que burla o MFA
- Verificar se os Padrões de Segurança ou políticas de CA equivalentes bloqueiam protocolos de autenticação legada
- Produzir um relatório de risco com etapas de remediação priorizadas antes da integração do locatário
Armadilhas: O Azure AD Premium P2 é necessário para detecções de entrada arriscada e PIM. Se o locatário adquirido usar uma camada de licença inferior, muitos recursos de proteção de identidade ficarão indisponíveis. Usuários convidados de locatários parceiros podem ter acesso implícito por meio de grupos dinâmicos que não são visíveis em consultas padrão de atribuição de funções.
Formato de Saída
Relatório de Auditoria de Segurança do Azure Active Directory
===============================================================
Locatário: acme-acquired.onmicrosoft.com
ID do Locatário: a1b2c3d4-e5f6-7890-abcd-ef1234567890
Data da Auditoria: 2026-02-23
Licença: Azure AD Premium P2
CONFIGURAÇÃO DE IDENTIDADE:
Padrões de Segurança: Desabilitado (Acesso Condicional em uso)
Políticas de Acesso Condicional: 12 (8 aplicadas, 3 somente relatório, 1 desabilitada)
Autenticação Legada Bloqueada: Parcial (bloqueada apenas para administradores)
ACESSO PRIVILEGIADO:
Administradores Globais: 8 (recomendado: <= 4)
Atribuições de administrador permanentes: 6 (sem necessidade de ativação PIM)
Service principals com administrador: 3
Usuários convidados com funções privilegiadas: 2
HIGIENE DE CONTAS:
Total de usuários: 1.247
Contas obsoletas (90+ dias): 89
Usuários convidados: 234
Usuários sem MFA registrado: 156
RISCO DE ENTRADA:
Entradas arriscadas (últimos 30 dias): 34
Entradas com autenticação legada (últimos 7 dias): 67
Detecções de viagem impossível: 5
Entradas de locais desconhecidos: 12
DESCOBERTAS CRÍTICAS:
1. 8 Administradores Globais com atribuições permanentes (use PIM)
2. Autenticação legada não bloqueada para usuários não administradores
3. 156 usuários sem registro de MFA
4. 2 usuários convidados com função de Administrador de Função Privilegiada