Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

01 - Purple-Teaming Azure IAM

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Purple-Teaming Azure IAM

Nota da pasta 04 - Purple Teaming em Cloud e Containers, no Capítulo 19 (Purple Teaming Contínuo).
Trata do purple teaming de identidade no Azure e Entra ID, com técnicas testáveis de abuso de role assignment, abuso de app registration e consent phishing simulado, hipóteses, telemetria esperada e verificação de detecção.
Dialoga com o hunting de identidade do Capítulo 08, com o hunting em cloud e SaaS e com o BAS contínuo da pasta 03 deste capítulo.

1. Contexto e Posicionamento na Biblioteca

A identidade é o novo perímetro, e no Azure essa frase é literal: quem controla identidades e atribuições de papel controla a assinatura inteira, com pouca superfície de endpoint para o EDR observar. O purple teaming de IAM no Azure validará detecções que operam sobre logs de controle de plano, os audit logs e os sign-in logs do Entra ID, e essa validação exige testes que tocam apenas permissões e configurações, nunca dados. É um domínio em que a emulação é barata, a telemetria é nativa e o risco de dano é baixo quando o teste roda em tenant de laboratório, o que a torna a porta de entrada ideal para o purple teaming em cloud.

Esta nota cobre a superfície IAM com três famílias de técnicas testáveis, o desenho de hipóteses e a verificação de detecção. Dialoga com o hunting de identidade e autenticação do Capítulo 08, que descreve o que caçar, e com o hunting em cloud e SaaS do mesmo capítulo, que cobre os campos dos logs. O regime operacional é o mesmo do capítulo: tenant de teste dedicado, contas sintéticas, autorização formal e resultados no índice do painel de cobertura. Nenhum teste descrito deve rodar no tenant de produção.

2. A Superfície IAM no Azure e os Pré-Requisitos de Telemetria

A superfície de identidade do Azure se organiza em duas camadas que as detecções precisam distinguir. A camada do Entra ID, ex-Azure AD, concentra aplicativos, app registrations, atribuições de papel administrativo, políticas de acesso condicional e consentimento. A camada do Azure RBAC concentra atribuições de papel sobre assinaturas, grupos de recursos e recursos. As técnicas de abuso vivem na interação entre as camadas: um papel administrativo no Entra que permite consentir aplicativos em todo o tenant, por exemplo, é a peça central de uma cadeia de comprometimento que começa e termina sem tocar uma máquina virtual.

A telemetria essencial está nos logs nativos, e o pré-requisito do programa é tê-los ingeridos no SIEM com as mesmas regras de produção. Os audit logs do Entra registram eventos de controle de plano, como adição de membro a papel, criação de app registration e concessão de consentimento. Os sign-in logs registram cada autenticação com detalhes de risco, MFA e aplicativo. No lado do Azure RBAC, o Activity Log registra escritas de controle de plano, incluindo criação de role assignments. A tabela organiza as fontes e os eventos mais úteis para os testes desta nota.

Fonte de log Eventos úteis para os testes Observação
Entra AuditLogs Add member to role, Add service principal, Consent to application Campos initiatedBy e targetResources
Entra SignInLogs Autenticações com risco, falhas de MFA, logins de apps novos Campos riskLevel, appDisplayName
Azure Activity Log Create role assignment, Create/update role definition Categoria Administrative, caller
Diagnóstico de recursos Conforme o serviço alvo Raramente necessário nos testes de IAM

Os pré-requisitos operacionais completam a base. O tenant de teste precisa espelhar as configurações relevantes de produção, políticas de acesso condicional representativas, papéis nomeados iguais, e as contas de teste precisam de licenças que gerem os mesmos campos de log. Sem esse espelhamento mínimo, as regras testadas em laboratório comportam-se diferente em produção, e o resultado da rodada perde validade.

A leitura dos logs de identidade depende de um punhado de campos recorrentes, e a tabela fixa o vocabulário que as consultas de verificação desta nota usam.

Campo Onde aparece Uso na verificação
OperationName AuditLogs Identifica o evento, como Add member to role
initiatedBy AuditLogs Revela o actor da mudança, usuário ou service principal
targetResources AuditLogs Carrega o alvo da mudança e as propriedades alteradas
CorrelationId AuditLogs e SignInLogs Amarra eventos da mesma operação entre fontes
riskLevel SignInLogs Carrega o risco calculado da autenticação
caller Activity Log Identifica quem executou a escrita no Azure RBAC

3. Técnicas Testáveis e Telemetria Esperada

As três famílias de técnicas cobertas aqui representam os padrões de abuso de identidade mais frequentes em relatórios públicos de incidentes, e todas produzem telemetria determinística nos logs nativos. A tabela mapeia cada técnica, o teste correspondente e a telemetria esperada, servindo de roteiro de construção do conjunto de testes.

Técnica ATT&CK Teste controlado Telemetria esperada
T1098.003, Account Manipulation, additional cloud roles Atribuir papel administrativo a conta de teste em tenant de lab AuditLogs, Add member to role, com actor e alvo
T1098.001, additional cloud credentials Adicionar credencial a app registration de teste AuditLogs, Update application, certificado ou segredo novo
T1528, Steal Application Access Token Consentir aplicativo de teste com escopos elevados, consent phishing simulado AuditLogs, Consent to application, SignInLogs do app
T1078.004, valid accounts em cloud Autenticação da conta de teste de local e dispositivo incomuns SignInLogs com riskLevel e detalhes de dispositivo
T1580, cloud infrastructure discovery Enumerar role assignments e recursos com identidade de leitura Activity Log com operações de leitura em rajada

Cada teste tem guardrails explícitos, e os dois mais importantes valem destaque. O teste de consent phishing simulado usa um app registration criado no tenant de laboratório, com nome que não se pareça com marcas reais, para evitar qualquer confusão com campanha externa, e o consentimento é concedido por conta de teste que tem escopo limitado ao lab. O teste de desativação de MFA, quando incluído em programas avançados, é sempre o último da rodada, com política de reversão imediata, porque altera o estado de segurança do tenant de teste.

4. Hipóteses e Testes Purple Team

O desenho do teste parte de hipótese de detecção no mesmo formato do ciclo de hunting da biblioteca: se o adversário fizer X, então o log Y deve registrar Z e a regra R deve alertar. Três hipóteses de referência estruturam a rodada de IAM, e cada uma se decompõe em testes executáveis.

  • Se um administrador comprometido se auto-atribui um papel privilegiado, o AuditLogs deve registrar Add member to role com a conta como actor e o papel como alvo, e a regra de papel elevado fora de processo de mudança deve alertar.
  • Se o adversário persiste por credencial em app registration, o AuditLogs deve registrar Update application com adição de segredo ou certificado, e a regra de credencial nova em app com escopos sensíveis deve alertar.
  • Se a cadeia começa por consent phishing simulado, o AuditLogs deve registrar Consent to application com escopos elevados e o SignInLogs deve registrar a primeira autenticação do app, e a regra de consentimento com escopos de perigo deve alertar.

A execução dos testes em laboratório é direta, com portal, CLI ou PowerShell, e a escolha do instrumento deve seguir o que a detecção precisa observar. O bloco a seguir registra a sequência do teste de auto-atribuição de papel, com os parâmetros documentados para reprodutibilidade.

# Teste PT-AZ-01: auto-atribuição de papel administrativo em tenant de lab
# Pré-requisitos: conta de teste com User Administrator e PIM desabilitado no lab
# Variáveis: USER_OID e ROLE_ID do tenant de lab, nunca de produção

az login --tenant 00000000-1111-2222-3333-444444444444 --allow-no-subscriptions

# registrar o estado anterior da atribuição para a limpeza
az role assignment list --all --query "[].{p:principalId, r:roleDefinitionId}" > estado-anterior.json

# executar a atribuição de papel elevado à conta de teste
az role assignment create \
  --assignee-object-id "${USER_OID}" \
  --assignee-principal-type User \
  --role "Global Administrator" \
  --scope "/"

# registrar o horário exato do passo para a janela de verificação
date -u +"%Y-%m-%dT%H:%M:%SZ" >> janela-teste-pt-az-01.txt

O registro do horário em arquivo é o detalhe que viabiliza a verificação: a janela do teste no SIEM começa nesse timestamp menos a margem de ingestão e termina alguns minutos depois, e é dentro dela que os alertas são procurados.

5. Exemplo: Teste de Abuso de Privilégio e Verificação

A verificação do teste PT-AZ-01 consulta os audit logs do Entra na janela registrada. A consulta KQL a seguir exemplifica a busca pelo evento de atribuição de papel e pelos alertas da regra correspondente no Microsoft Sentinel, sendo o padrão adaptável a outros SIEMs.

// Verificação do teste PT-AZ-01 na janela registrada
AuditLogs
| where TimeGenerated between (datetime(2025-10-13 14:00) .. datetime(2025-10-13 14:20))
| where OperationName == "Add member to role"
| extend Actor = tostring(initiatedBy.user.userPrincipalName)
| extend Alvo = tostring(parse_json(tostring(TargetResources[0].modifiedProperties[0].newValue)))
| where Actor startswith "pt-" or Alvo has "Global Administrator"
| project TimeGenerated, Actor, Alvo, OperationName, CorrelationId

A leitura da ficha de resultado segue o padrão do capítulo. Se a consulta mostra o evento e o alerta da regra de papel elevado disparou, o resultado é detectado e a rodada registra a meta atingida. Se o evento existe e o alerta não veio, o resultado é só telemetria e a regra entra no backlog com a evidência anexada. Se nem o evento apareceu, o gap é de coleta, e o diagnóstico começa pelo conector do Entra no SIEM de laboratório. O corollário operacional é que a limpeza revoga a atribuição imediatamente após a verificação, com o estado anterior de referência salvo no primeiro passo do teste.

O teste de consent phishing simulado segue o mesmo ciclo, com uma peculiaridade de desenho: ele também valida o controle preventivo, não apenas o detectivo. Se o tenant de lab tem a política de bloqueio de consentimento de usuário configurada, o teste deve falhar por controle, e esse é um desfecho positivo que a ficha registra como bloqueado. Se o consentimento passa, a detecção deve alertar, e o gap de prevenção e o de detecção são registrados em campos distintos, porque geram trabalhos diferentes em times diferentes.

6. Automação das Rodadas de Identidade

A rodada de identidade automatiza bem porque os testes são chamadas de API idempotentes e a telemetria é nativa. O job semanal do BAS contínuo pode incluir o conjunto de IAM da mesma forma que inclui o conjunto de endpoint, com os testes executados por script versionado, a janela registrada automaticamente e a classificação publicada no índice de resultados. O bloco a seguir esboça a rotina em pseudocódigo de agendador.

Rotina semanal de identidade, tenant de lab:
  1. verificar saúde dos conectores do Entra no SIEM de lab
  2. executar PT-AZ-01, auto-atribuição de papel, registrar janela
  3. executar PT-AZ-02, credencial nova em app registration, registrar janela
  4. executar PT-AZ-03, consentimento de app de teste, registrar janela
  5. executar PT-AZ-04, autenticação com perfil de risco sintético
  6. aguardar janela de ingestão de 10 minutos
  7. para cada teste, classificar detectado, só telemetria ou não detectado
  8. revogar todas as atribuições e credenciais criadas e confirmar a revogação
  9. publicar resultados no índice BASResults e calcular regressões

O passo 8 é o que separa a automação responsável da imprudente, e a verificação da revogação é obrigatória, não presumida. Um job que cria papéis elevados e falha silenciosamente na limpeza transforma o tenant de lab em alvo interno, e por isso a confirmação de revogação entra no índice como registro de passo, com status próprio e alarme quando falha.

A verificação da limpeza também cabe em consulta, e o padrão a seguir confere que nenhuma atribuição criada pela rodada permanece ativa no tenant de lab.

// Verificação de limpeza: atribuições de papel restantes da rodada
AuditLogs
| where TimeGenerated > ago(1d)
| where OperationName in ("Add member to role", "Remove member from role")
| summarize Adicoes = countif(OperationName == "Add member to role"),
            Remocoes = countif(OperationName == "Remove member from role")
  by iniciador = tostring(initiatedBy.user.userPrincipalName)
| where iniciador startswith "pt-"
| extend Limpo = Adicoes == Remocoes

A coluna calculada de estado limpo é o registro de passo 8 em forma de evidência, e qualquer linha com valor falso aciona o alarme de limpeza da rodada. O mesmo padrão se aplica a credenciais de app registration e a consentimentos concedidos, com os OperationName correspondentes, e os três checkpoints de limpeza entram no relatório da rodada como itens próprios.

7. Erros Comuns e Pontos de Atenção

  • Executar os testes no tenant de produção por conveniência, mesmo com contas de teste, pois a telemetria real e os alertas reais de produção não são o ambiente de validação; tenant de lab espelhado é requisito.
  • Conceder a contas de teste mais privilégio do que o teste exige, reproduzindo no lab o problema que o programa combate; privilégio mínimo também vale para os testes.
  • Usar nomes de aplicativo e domínios que imitem marcas reais no teste de consent phishing, criando risco de confusão com campanha externa; nomes de lab são explícitos e documentados.
  • Esquecer a revogação de papéis, credenciais e consentimentos ao fim da rodada, acumulando exposição no lab; a confirmação de revogação é passo registrado.
  • Julgar regras de identidade sem checar a saúde do conector de logs no SIEM, culpando a regra por um gap de ingestão; saúde de coleta é pré-verificação da rodada.
  • Ignorar as políticas de acesso condicional no desenho do teste, validando detecções contra um tenant sem as proteções que a produção tem; o espelhamento mínimo inclui essas políticas.

8. Integração com o Restante da Biblioteca

Os resultados das rodadas de identidade alimentam o índice e o painel de cobertura da pasta 03, e as regras ajustadas retornam ao conjunto do ator prioritário quando a cadeia do adversário envolve identidade cloud, como é comum em atores de espionagem e de crime financeiro. O hunting de identidade do Capítulo 08 fornece as queries de caça que complementam as regras, e o gap que a rodada expõe em caça, comportamento testado que nenhuma query cobre, vira hipótese de hunting no fluxo do Capítulo 07. A nota de emulação em Kubernetes complementa o quadro cloud com o plano de dados dos clusters, e a nota de CI/CD fecha o ciclo com o gate de detecção.

Para a governança, a rodada de identidade é o artefato que conecta a CTI aos donos de IAM: as técnicas testadas vêm dos relatórios de ator prioritário, e os gaps encontrados viram requisitos concretos de hardening de identidade, como redução de papéis globais, PIM em papéis administrativos e política de consentimento restrita. Essa conversão de resultado de teste em requisito de controle é o que dá ao purple teaming em cloud o seu papel no programa integrado da biblioteca.