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

  1. Abra o Visualizador de Eventos (eventvwr.msc)
  2. Selecione um log (por exemplo, Security)
  3. No painel de Ações, clique em Filtrar Log Atual…
  4. Clique na aba XML
  5. Marque Editar consulta manualmente
  6. 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:

  1. No Visualizador de Eventos, clique em Criar Exibição Personalizada no painel de Ações
  2. Na aba XML, marque Editar consulta manualmente
  3. Insira sua consulta
  4. 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ívelSignificado
1Crítico
2Erro
3Aviso
4Informação
0LogAlways (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

  1. 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.
  2. 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.
  3. Teste incrementalmente — Construa consultas adicionando um critério por vez. Comece com *[System[(EventID=4624)]] e adicione filtros passo a passo.
  4. 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.
  5. 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.