A partir de Windows Vista y Windows Server 2008, Microsoft rediseñó el Visor de eventos para usar un sistema de registro de eventos estructurado basado en XML. Esto significa que puede escribir consultas XPath para filtrar eventos con precisión, lo cual es mucho más poderoso que el filtrado básico de la interfaz gráfica. Esta guía cubre la sintaxis de consultas XPath para el Visor de eventos, patrones de consulta comunes, vistas personalizadas y cómo usar las mismas consultas con herramientas de línea de comandos y PowerShell.
Comprender la estructura XML del evento
Cada evento en el Registro de eventos de Windows se almacena como XML. Comprender esta estructura es la clave para escribir consultas XPath efectivas. Este es un evento típico:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Security-Auditing" Guid="{...}" />
<EventID>4624</EventID>
<Version>2</Version>
<Level>0</Level>
<Task>12544</Task>
<Opcode>0</Opcode>
<Keywords>0x8020000000000000</Keywords>
<TimeCreated SystemTime="2024-06-15T14:30:00.000000000Z" />
<EventRecordID>123456</EventRecordID>
<Channel>Security</Channel>
<Computer>DC01.corp.example.com</Computer>
<Security UserID="S-1-5-18" />
</System>
<EventData>
<Data Name="SubjectUserSid">S-1-5-18</Data>
<Data Name="SubjectUserName">DC01$</Data>
<Data Name="TargetUserName">john.doe</Data>
<Data Name="LogonType">10</Data>
<Data Name="IpAddress">192.168.1.100</Data>
</EventData>
</Event>
La consulta XPath apunta a elementos dentro de esta estructura XML.
Ingresar consultas XPath en el Visor de eventos
Método 1: Filtrar registro actual
- Abra el Visor de eventos (
eventvwr.msc) - Seleccione un registro (por ejemplo, Security)
- En el panel de Acciones, haga clic en Filtrar registro actual…
- Haga clic en la pestaña XML
- Marque Editar consulta manualmente
- Ingrese su consulta XPath dentro del elemento
<Select>:
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=4624)]]</Select>
</Query>
</QueryList>
Método 2: Crear una vista personalizada
Las vistas personalizadas son filtros guardados que persisten entre sesiones:
- En el Visor de eventos, haga clic en Crear vista personalizada en el panel de Acciones
- En la pestaña XML, marque Editar consulta manualmente
- Ingrese su consulta
- Asigne un nombre a la vista y guárdela
Las vistas personalizadas aparecen bajo Vistas personalizadas en el panel izquierdo y ejecutan la consulta cada vez que las selecciona.
Consultas XPath comunes
Filtrar por ID de evento
*[System[(EventID=4624)]]
Múltiples IDs de evento:
*[System[(EventID=4624 or EventID=4625 or EventID=4634)]]
Rango de IDs de evento:
*[System[(EventID >= 4624 and EventID <= 4634)]]
Filtrar por proveedor (origen)
*[System[Provider[@Name='Microsoft-Windows-Security-Auditing']]]
Filtrar por nivel (gravedad)
| Nivel | Significado |
|---|---|
| 1 | Crítico |
| 2 | Error |
| 3 | Advertencia |
| 4 | Información |
| 0 | LogAlways (Auditoría) |
*[System[(Level=1 or Level=2)]]
Esto filtra solo eventos críticos y de error.
Filtrar por tiempo
Últimas 24 horas (86400000 milisegundos):
*[System[TimeCreated[timediff(@SystemTime) <= 86400000]]]
Última hora (3600000 milisegundos):
*[System[TimeCreated[timediff(@SystemTime) <= 3600000]]]
Rango de fechas específico:
*[System[TimeCreated[@SystemTime>='2024-01-01T00:00:00.000Z' and @SystemTime<='2024-01-31T23:59:59.999Z']]]
Filtrar por nombre de equipo
*[System[Computer='DC01.corp.example.com']]
Filtrar por usuario (Security UserID)
*[System[Security[@UserID='S-1-5-21-1234567890-1234567890-1234567890-1001']]]
Filtrar por campos de EventData
*[EventData[Data[@Name='TargetUserName']='john.doe']]
Filtrar eventos de inicio de sesión para un usuario específico:
*[System[(EventID=4624)] and EventData[Data[@Name='TargetUserName']='john.doe']]
Filtrar por tipo de inicio de sesión (10 = Escritorio remoto):
*[System[(EventID=4624)] and EventData[Data[@Name='LogonType']='10']]
Combinar múltiples criterios
Eventos de inicio de sesión de seguridad para un usuario desde una IP específica en las últimas 24 horas:
*[System[(EventID=4624) and TimeCreated[timediff(@SystemTime) <= 86400000]] and EventData[Data[@Name='TargetUserName']='john.doe' and Data[@Name='IpAddress']='192.168.1.100']]
Todos los errores y advertencias de un origen específico en los últimos 7 días:
*[System[Provider[@Name='Microsoft-Windows-GroupPolicy'] and (Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 604800000]]]
Ejemplos prácticos de consultas
Encontrar intentos de inicio de sesión fallidos
*[System[(EventID=4625)]]
Intentos de inicio de sesión fallidos desde una IP específica:
*[System[(EventID=4625)] and EventData[Data[@Name='IpAddress']='192.168.1.50']]
Encontrar bloqueos de cuentas
*[System[(EventID=4740)]]
Encontrar sesiones de Escritorio remoto (RDP)
Eventos de inicio de sesión vía RDP (Tipo de inicio de sesión 10):
*[System[(EventID=4624)] and EventData[Data[@Name='LogonType']='10']]
Encontrar instalaciones de servicios
*[System[(EventID=7045)]]
Encontrar inicio y apagado del sistema
*[System[(EventID=6005 or EventID=6006 or EventID=6008 or EventID=6009)]]
Encontrar errores de procesamiento de directiva de grupo
*[System[Provider[@Name='Microsoft-Windows-GroupPolicy'] and (Level=2)]]
Uso de wevtutil desde la línea de comandos
El comando wevtutil le permite ejecutar consultas XPath desde la línea de comandos:
# Query the Security log for Event ID 4624
wevtutil qe Security /q:"*[System[(EventID=4624)]]" /c:10 /f:text
# Export matching events to a file
wevtutil qe Security /q:"*[System[(EventID=4625)]]" /f:xml > failed-logons.xml
# Count matching events
wevtutil qe Security /q:"*[System[(EventID=4624)]]" /c:999999 /f:text | find /c "Event"
Parámetros:
qe— Consultar eventos/q:— La consulta XPath/c:— Número máximo de eventos a devolver/f:— Formato de salida (text, xml o RenderedXml)/rd:true— Leer en dirección inversa (más recientes primero)
Consultar equipos remotos
wevtutil qe Security /q:"*[System[(EventID=4625)]]" /r:DC01.corp.example.com /u:CORP\admin /p:*
PowerShell Get-WinEvent
PowerShell proporciona la interfaz más flexible para consultas del registro de eventos.
Usando -FilterXPath
# Failed logon attempts in the last 24 hours
Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4625) and TimeCreated[timediff(@SystemTime) <= 86400000]]]"
# RDP logon events
Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4624)] and EventData[Data[@Name='LogonType']='10']]"
# Limit results
Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4624)]]" -MaxEvents 50
Usando -FilterHashtable (Sintaxis más simple)
Para consultas comunes, -FilterHashtable es más fácil de escribir:
# Events by ID and time
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4625
StartTime = (Get-Date).AddDays(-7)
EndTime = Get-Date
}
# Multiple Event IDs
Get-WinEvent -FilterHashtable @{
LogName = 'System'
Level = 2 # Error
ID = 7034, 7031, 7023
}
# Events from a specific provider
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
ProviderName = 'MSSQLSERVER'
Level = 2
}
Formato y exportación de resultados
# Format as table
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4625} -MaxEvents 20 |
Select-Object TimeCreated, Id, Message |
Format-Table -AutoSize
# Export to CSV
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4625} |
Select-Object TimeCreated, Id,
@{N='User';E={$_.Properties[5].Value}},
@{N='Source';E={$_.Properties[19].Value}} |
Export-Csv -Path "C:\failed-logons.csv" -NoTypeInformation
# Query remote computers
Get-WinEvent -ComputerName "DC01" -FilterHashtable @{LogName='Security'; ID=4625}
Consejos para construir consultas XPath
- Comience con el filtro de la interfaz gráfica — Use el diálogo de Filtrar registro actual con las pestañas básicas primero, luego cambie a la pestaña XML para ver la consulta generada.
- Use la pestaña Detalles del Visor de eventos — Haga clic en cualquier evento y cambie a la pestaña Detalles > Vista XML para ver la estructura XML exacta y los nombres de los campos.
- Pruebe incrementalmente — Construya consultas agregando un criterio a la vez. Comience con
*[System[(EventID=4624)]]y agregue filtros paso a paso. - Tenga cuidado con los problemas de espacios de nombres — La implementación de XPath del Visor de eventos no requiere prefijos de espacio de nombres, aunque los eventos usen el espacio de nombres del esquema de Microsoft.
- Rendimiento — Las consultas contra el registro de seguridad en servidores ocupados pueden ser lentas. Siempre use filtros de tiempo para reducir el alcance.
Resumen
Las consultas XPath en el Visor de eventos de Windows proporcionan un filtrado preciso y poderoso que va mucho más allá del filtro básico de la interfaz gráfica. La sintaxis de consulta apunta a la estructura XML de los eventos, permitiéndole filtrar por ID de evento, proveedor, gravedad, rango de tiempo, usuario, equipo y campos de datos personalizados del evento. Use la interfaz gráfica del Visor de eventos para análisis interactivo, wevtutil para scripting desde la línea de comandos y PowerShell Get-WinEvent para automatización y generación de informes. Comience examinando la estructura XML de un evento y luego construya su consulta paso a paso.