A partir do Windows Vista e Windows Server 2008, a Microsoft reprojetou o Visualizador de Eventos para usar um sistema de log de eventos estruturado baseado em XML. Isso significa que você pode escrever consultas XPath para filtrar eventos com precisão, o que é muito mais poderoso do que o filtro básico da interface gráfica. Este guia cobre a sintaxe de consultas XPath para o Visualizador de Eventos, padrões de consulta comuns, exibições personalizadas e como usar as mesmas consultas com ferramentas de linha de comando e PowerShell.
Compreendendo a estrutura XML do evento
Cada evento no Log de Eventos do Windows é armazenado como XML. Compreender essa estrutura é a chave para escrever consultas XPath eficazes. Aqui está um 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>
A consulta XPath visa elementos dentro dessa estrutura XML.
Inserindo consultas XPath no Visualizador de Eventos
Método 1: Filtrar log atual
- Abra o Visualizador de Eventos (
eventvwr.msc) - Selecione um log (por exemplo, Security)
- No painel de Ações, clique em Filtrar Log Atual…
- Clique na aba XML
- Marque Editar consulta manualmente
- Insira sua consulta XPath dentro do elemento
<Select>:
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=4624)]]</Select>
</Query>
</QueryList>
Método 2: Criar uma exibição personalizada
Exibições personalizadas são filtros salvos que persistem entre sessões:
- No Visualizador de Eventos, clique em Criar Exibição Personalizada no painel de Ações
- Na aba XML, marque Editar consulta manualmente
- Insira sua consulta
- Dê um nome à exibição e salve
As exibições personalizadas aparecem em Exibições Personalizadas no painel esquerdo e executam a consulta cada vez que você as seleciona.
Consultas XPath comuns
Filtrar por ID de evento
*[System[(EventID=4624)]]
Múltiplos IDs de evento:
*[System[(EventID=4624 or EventID=4625 or EventID=4634)]]
Intervalo de IDs de evento:
*[System[(EventID >= 4624 and EventID <= 4634)]]
Filtrar por provedor (origem)
*[System[Provider[@Name='Microsoft-Windows-Security-Auditing']]]
Filtrar por nível (gravidade)
| Nível | Significado |
|---|---|
| 1 | Crítico |
| 2 | Erro |
| 3 | Aviso |
| 4 | Informação |
| 0 | LogAlways (Auditoria) |
*[System[(Level=1 or Level=2)]]
Isto filtra apenas eventos críticos e de erro.
Filtrar por tempo
Últimas 24 horas (86400000 milissegundos):
*[System[TimeCreated[timediff(@SystemTime) <= 86400000]]]
Última hora (3600000 milissegundos):
*[System[TimeCreated[timediff(@SystemTime) <= 3600000]]]
Intervalo de datas específico:
*[System[TimeCreated[@SystemTime>='2024-01-01T00:00:00.000Z' and @SystemTime<='2024-01-31T23:59:59.999Z']]]
Filtrar por nome de computador
*[System[Computer='DC01.corp.example.com']]
Filtrar por usuário (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 logon para um usuário específico:
*[System[(EventID=4624)] and EventData[Data[@Name='TargetUserName']='john.doe']]
Filtrar por tipo de logon (10 = Área de Trabalho Remota):
*[System[(EventID=4624)] and EventData[Data[@Name='LogonType']='10']]
Combinando múltiplos critérios
Eventos de logon de segurança para um usuário de um IP específico nas ú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 os erros e avisos de uma origem específica nos últimos 7 dias:
*[System[Provider[@Name='Microsoft-Windows-GroupPolicy'] and (Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 604800000]]]
Exemplos práticos de consultas
Encontrar tentativas de logon falhadas
*[System[(EventID=4625)]]
Tentativas de logon falhadas de um IP específico:
*[System[(EventID=4625)] and EventData[Data[@Name='IpAddress']='192.168.1.50']]
Encontrar bloqueios de conta
*[System[(EventID=4740)]]
Encontrar sessões de Área de Trabalho Remota (RDP)
Eventos de logon via RDP (Tipo de Logon 10):
*[System[(EventID=4624)] and EventData[Data[@Name='LogonType']='10']]
Encontrar instalações de serviços
*[System[(EventID=7045)]]
Encontrar inicialização e desligamento do sistema
*[System[(EventID=6005 or EventID=6006 or EventID=6008 or EventID=6009)]]
Encontrar erros de processamento de Política de Grupo
*[System[Provider[@Name='Microsoft-Windows-GroupPolicy'] and (Level=2)]]
Usando wevtutil na linha de comando
O comando wevtutil permite executar consultas XPath na linha de comando:
# 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:— A consulta XPath/c:— Número máximo de eventos a retornar/f:— Formato de saída (text, xml ou RenderedXml)/rd:true— Ler na direção inversa (mais recentes primeiro)
Consultar computadores remotos
wevtutil qe Security /q:"*[System[(EventID=4625)]]" /r:DC01.corp.example.com /u:CORP\admin /p:*
PowerShell Get-WinEvent
O PowerShell fornece a interface mais flexível para consultas do log 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 (Sintaxe mais simples)
Para consultas comuns, -FilterHashtable é mais fácil de escrever:
# 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
}
Formatando e exportando 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}
Dicas para construir consultas XPath
- Comece com o filtro da interface gráfica — Use o diálogo de Filtrar Log Atual com as abas básicas primeiro, depois alterne para a aba XML para ver a consulta gerada.
- Use a aba Detalhes do Visualizador de Eventos — Clique em qualquer evento e alterne para a aba Detalhes > Exibição XML para ver a estrutura XML exata e os nomes dos campos.
- Teste incrementalmente — Construa consultas adicionando um critério por vez. Comece com
*[System[(EventID=4624)]]e adicione filtros passo a passo. - Atenção com problemas de namespace — A implementação XPath do Visualizador de Eventos não requer prefixos de namespace, mesmo que os eventos usem o namespace do esquema da Microsoft.
- Desempenho — Consultas contra o log de segurança em servidores movimentados podem ser lentas. Sempre use filtros de tempo para reduzir o escopo.
Resumo
As consultas XPath no Visualizador de Eventos do Windows fornecem filtragem precisa e poderosa que vai muito além do filtro básico da interface gráfica. A sintaxe de consulta visa a estrutura XML dos eventos, permitindo filtrar por ID de evento, provedor, gravidade, intervalo de tempo, usuário, computador e campos de dados personalizados do evento. Use a interface gráfica do Visualizador de Eventos para análise interativa, wevtutil para scripting na linha de comando e PowerShell Get-WinEvent para automação e geração de relatórios. Comece examinando a estrutura XML de um evento e depois construa sua consulta passo a passo.