O portal Purview (Auditoria → Pesquisa) permite que você pesquise o Log de Auditoria Unificado e exporte os resultados para CSV. O evento completo fica em uma coluna, AuditData, como um blob JSON. Para obter um JSON limpo, um evento por linha, use o PowerShell do Exchange Online e o Search-UnifiedAuditLog. O script está abaixo. A retenção padrão das auditorias é de 180 dias; Audit (Premium) mantém por um ano por padrão.
O Log de Auditoria Unificado cobre Exchange, SharePoint, OneDrive, Teams e atividades administrativas em um só lugar. Em um comprometimento de e-mail comercial, é onde as regras de caixa de entrada, encaminhamento e downloads em massa aparecem. Prime Core tem 79 regras de detecção para dados de auditoria do Microsoft 365, mapeadas para 33 técnicas do MITRE ATT&CK. Entre elas: regras de encaminhamento que desviam e-mails (T1114.003), permissões adicionais de caixa de correio (T1098.002) e dados extraídos do SharePoint (T1213.002).
Antes de começar
A auditoria está ativada? Está por padrão para a maioria dos locatários, mas verifique:
Connect-ExchangeOnline
Get-AdminAuditLogConfig | Format-List UnifiedAuditLogIngestionEnabled
True é o que você quer. Se estiver False, nada foi gravado, e ativá-lo não será retroativo.
Papéis. Você precisa da função Audit Logs ou View-Only Audit Logs. Você também precisa do módulo ExchangeOnlineManagement (Install-Module ExchangeOnlineManagement).
Latência. Os eventos não aparecem instantaneamente. A maioria aparece dentro de uma ou duas horas, alguns demoram mais. Se você está atrás de algo desta manhã, pode não ser pesquisável ainda.
Exportar com PowerShell
Search-UnifiedAuditLog retorna no máximo 5.000 registros por chamada. Com um ID de sessão e ReturnLargeSet, você pode paginar até 50.000 por pesquisa. Este loop faz isso e escreve o AuditData de cada registro, já em JSON, como uma linha:
$session = [guid]::NewGuid().ToString()
$out = "ual_2026-10-19.jsonl"
do {
$batch = Search-UnifiedAuditLog -StartDate "2026-10-19 00:00" -EndDate "2026-10-20 00:00" `
-SessionId $session -SessionCommand ReturnLargeSet -ResultSize 5000
$batch | ForEach-Object { $_.AuditData } | Add-Content $out
} while ($batch.Count -eq 5000)
O log armazena tempos em UTC. Lembre-se disso ao definir a janela.
O que procurar
| Operação | Por que importa |
|---|---|
| New-InboxRule, Set-InboxRule, UpdateInboxRules | Regras que encaminham, movem ou excluem e-mails; verifique os parâmetros em AuditData |
| Set-Mailbox com ForwardingSmtpAddress | Encaminhamento ao nível da caixa de correio para um endereço externo |
| Add-MailboxPermission, Add-RecipientPermission | Alguém ganhando acesso a outra caixa de correio |
| MailItemsAccessed | Quais mensagens foram realmente lidas; chave para delimitar uma violação |
| FileDownloaded, FileSyncDownloadedFull explosões | Download em massa do SharePoint ou OneDrive |
| Consentimento a um aplicativo | Um aplicativo desonesto concedido acesso a e-mails ou arquivos |
A sequência clássica de BEC: um login de um local novo, então, em minutos, uma regra de caixa de entrada que move respostas da equipe financeira para uma pasta obscura.
Carregar, sanitizar e revisar em LogTotal
- Carregar. Abrir logtotal.com e soltar o arquivo .jsonl.
- Sanitizar.
- Revisar.
Quando algo dá errado
| Sintoma | Causa provável | Fix |
|---|---|---|
| Search-UnifiedAuditLog não é reconhecido | Não conectado ao PowerShell do Exchange Online | Conectar ao ExchangeOnline primeiro |
| Sem resultados | Auditorias desligadas, eventos muito novos, ou fora de retenção | Verifique a ingestão; espere; verifique seu nível de auditoria |
| Exatamente 5.000 resultados | Limite por chamada atingido sem uma sessão | Utilize o loop de sessão acima |
| Parado em 50.000 | Limite de sessão | Divida a janela em pedaços menores |
| Acesso negado | Função de auditoria ausente | Peça por View-Only Audit Logs |
FAQ
Isso não é o mesmo que os logs de login do Entra?
Eles se sobrepõem: o UAL tem eventos de UserLoggedIn. Mas para detalhes de autenticação (MFA, Acesso Condicional, risco), os logs de login do Entra são muito mais ricos. Exporte ambos.
E quanto à API de Atividade de Gestão?
Essa é a rota para coleta contínua em um SIEM. Para uma investigação pontual, PowerShell é mais simples.