Investigación del registro de auditoría unificado (BEC)
Leer el registro de auditoría unificado en un BEC: el JSON AuditData, las operaciones que filtrar y cómo SessionId y UniqueTokenId enlazan acciones.
En resumen. En una exportación del UAL, las columnas CSV son un índice; la prueba está en el JSON AuditData. Para un BEC, filtre por una lista corta de operaciones (New-InboxRule, Set-InboxRule, UpdateInboxRules, Set-Mailbox, MailItemsAccessed, Send, SoftDelete/HardDelete, SearchQueryInitiatedExchange, FileDownloaded, Consent to application., User registered security info) y después lea los campos propios de cada carga de trabajo. El pivote que convierte la sospecha en atribución es AppAccessContext.AADSessionId y UniqueTokenId, que coinciden con el Session ID y el Unique token identifier del inicio de sesión de Entra.
El registro de auditoría unificado recoge en un solo lugar la actividad de usuarios y administradores de Exchange Online, SharePoint, OneDrive, Entra ID, Teams y otros servicios. Esa amplitud es también su dificultad: una sola exportación del tenant puede contener cientos de miles de filas, de las que el BEC son unas pocas docenas. Esta es la guía de campo que me habría gustado tener la primera vez.
Anatomía de una fila exportada
Una exportación del portal de Purview tiene las columnas RecordId, CreationDate, RecordType, Operation, UserId, AuditData, AssociatedAdminUnits, AssociatedAdminUnitsNames. Una exportación de PowerShell Search-UnifiedAuditLog | Export-Csv tiene columnas parecidas (RecordType, CreationDate, UserIds, Operations, AuditData, ResultIndex, ResultCount, Identity…). En ambas, AuditData es una cadena JSON con el registro completo.
Campos habituales de AuditData:
| Campo | Significado | Notas |
|---|---|---|
CreationTime | Hora del evento, UTC | A menudo sin Z final |
Id | Identificador del registro | Úselo para deduplicar exportaciones solapadas |
Operation | Qué ocurrió | Las mayúsculas y el punto final varían (Consent to application.) |
Workload | Exchange, SharePoint, OneDrive, AzureActiveDirectory… | |
UserId | Quién lo hizo | UPN, o una identidad del sistema |
ClientIP / ClientIPAddress / ActorIpAddress | IP de origen | Puede incluir puerto o corchetes ([2001:db8::1]:443) |
ResultStatus | Succeeded, True, Success… | Varía según la carga de trabajo |
AppAccessContext | AADSessionId, UniqueTokenId, IssuedAtTime | El vínculo con el inicio de sesión |
El UAL no tiene geolocalización. El país y la red se obtienen cruzando la IP con los registros de inicio de sesión de Entra, o con una consulta externa.
Las operaciones que importan en un BEC
| Operación | Carga de trabajo | Por qué importa | Campos que leer |
|---|---|---|---|
New-InboxRule, Set-InboxRule, Enable-InboxRule | Exchange | Reglas creadas con PowerShell u Outlook en la web | Parameters: Name, ForwardTo, RedirectTo, DeleteMessage, MoveToFolder, SubjectOrBodyContainsWords, From |
UpdateInboxRules | Exchange | Reglas creadas desde el cliente de escritorio de Outlook | OperationProperties: RuleName, RuleActions, RuleCondition |
Set-Mailbox | Exchange | Reenvío del buzón (SMTP), cambios de auditoría | ForwardingSmtpAddress, ForwardingAddress, DeliverToMailboxAndForward, AuditEnabled |
Add-MailboxPermission, Add-RecipientPermission | Exchange | Delegación para persistir | User, AccessRights |
MailItemsAccessed | Exchange | Qué mensajes se leyeron o sincronizaron | OperationProperties.MailAccessType (Bind/Sync), Folders, OperationCount, ClientInfoString |
Send, SendAs, SendOnBehalf | Exchange | Correo enviado desde el buzón | Item.Subject, Item.InternetMessageId |
SoftDelete, HardDelete, MoveToDeletedItems | Exchange | Borrado de huellas | AffectedItems, Folder |
SearchQueryInitiatedExchange | Exchange | Qué buscó el atacante | QueryText (hay que activar el registro) |
FileDownloaded, FileSyncDownloadedFull | SharePoint / OneDrive | Robo de datos | SourceFileName, SiteUrl, UserAgent |
UserLoggedIn, UserLoginFailed | AzureActiveDirectory | Inicios de sesión replicados en el UAL | ExtendedProperties, DeviceProperties.SessionId |
Consent to application., Add delegated permission grant. | AzureActiveDirectory | Consentimiento ilícito | ModifiedProperties (ConsentAction.Permissions, ConsentContext.IsAdminConsent) |
User registered security info, Update user. | AzureActiveDirectory | Método MFA del atacante | ModifiedProperties (StrongAuthentication…) |
Set-AdminAuditLogConfig, Set-MailboxAuditBypassAssociation | Exchange | Manipulación de la auditoría | UnifiedAuditLogIngestionEnabled, AuditBypassEnabled |
La página de Microsoft sobre las actividades del registro de auditoría es la referencia completa. Dos trampas: los nombres de operación de Entra ID suelen terminar en punto, y Parameters es una matriz de pares {Name, Value}, no un objeto, así que una ruta JSON ingenua no lo encuentra.
Por qué las reglas aparecen de dos formas
Una regla de bandeja de entrada creada en Outlook en la web o con PowerShell queda registrada como New-InboxRule con Parameters legibles. Una regla creada en el cliente de escritorio de Outlook queda como UpdateInboxRules, con OperationProperties como RuleActions y RuleCondition, menos estructuradas. Busque ambas. El artículo reglas de bandeja de entrada maliciosas y reenvío detalla los parámetros que hay que leer.
El pivote por sesión
Microsoft inserta un identificador de sesión (sid) y un identificador único de token (uti) en los tokens que emite, y los muestra en los registros como identificadores vinculables. Según Microsoft Learn:
| Notificación | Registro de inicio de sesión de Entra | Auditoría de Exchange Online | Auditoría de SharePoint / Teams |
|---|---|---|---|
sid | Session ID | SessionId / AppAccessContext.AADSessionId | AppAccessContext.AADSessionId |
uti | Unique token identifier | AppAccessContext.UniqueTokenId | AppAccessContext.UniqueTokenId |
iat | Date | AppAccessContext.IssuedAtTime | AppAccessContext.IssuedAtTime |
El procedimiento:
- En los registros de inicio de sesión de Entra, identifique el inicio de sesión sospechoso y copie su Session ID (en una reutilización, la sesión que aparece desde dos redes).
- En la exportación del UAL, conserve todos los registros cuyo
AADSessionIdoSessionIdcoincida. - Añada los registros cuyo
UniqueTokenIdcoincida con un token emitido a la IP del atacante. - Añada los registros procedentes de la IP del atacante para todo lo que los dos filtros anteriores no capten.
Microsoft advierte de que los identificadores vinculables faltan en algunas entradas agregadas y en registros de procesos en segundo plano, así que el paso 4 no es opcional. Otro matiz: con el phishing AiTM, la sesión robada es la que abrió la víctima, de modo que el identificador por sí solo no separa atacante y víctima. Lo que los separa es la red desde la que llega cada acción (AiTM y reutilización de tokens).
Errores habituales
- Exportaciones truncadas. Exactamente 50.000 filas significa el tope de la exportación Standard, no el final de los datos.
- Duplicados. Las búsquedas solapadas duplican registros; deduplique por
Id. - Daños de la hoja de cálculo. Excel reformatea fechas y puede partir o truncar celdas JSON largas. Procese el CSV mediante código.
- Zonas horarias.
CreationDateyCreationTimeestán en UTC; Outlook muestra la hora local. Indique UTC en el informe. - Registros con retraso. Suelen aparecer entre 60 y 90 minutos después del evento; una exportación hecha justo tras la contención puede perder las últimas acciones.
- Eventos ausentes.
SearchQueryInitiated*está desactivado por defecto;MailItemsAccesseddepende de la licencia y de la configuración de auditoría del buzón (retención y lagunas).
A escala
Para unos pocos miles de filas, PowerShell y ConvertFrom-Json bastan. Para una exportación de todo el tenant, analizar AuditData fila a fila, cruzar con los inicios de sesión por IP y sesión y agrupar por cuenta es exactamente lo que automatiza M365 Forensics: lee las dos capas del CSV, normaliza los nombres de operación (Add service principal. = Add service principal), quita los puertos de las IP, extrae AADSessionId/UniqueTokenId, toma el país y el ASN de los inicios de sesión con la misma IP y genera un hallazgo crítico «Acciones realizadas desde la sesión o la IP del atacante» cuando acciones del UAL llevan los identificadores de un inicio de sesión sospechoso. El paso a paso muestra cómo leer el resultado.
Preguntas frecuentes
¿Dónde está el detalle de un registro del registro de auditoría unificado?
En la columna AuditData de la exportación. Es un objeto JSON cuyos campos dependen de la carga de trabajo: Parameters para los cmdlets de administración de Exchange, OperationProperties y Folders para MailItemsAccessed, ModifiedProperties para los eventos de Entra ID, SourceFileName y SiteUrl para SharePoint.
¿Puedo vincular un registro del registro de auditoría unificado con un inicio de sesión de Entra ID?
A menudo, sí. Los registros de Exchange, SharePoint y Teams llevan AppAccessContext.AADSessionId y UniqueTokenId, que coinciden con el Session ID y el Unique token identifier del inicio de sesión de Entra que emitió el token. Algunos registros agregados o de segundo plano no los incluyen.