Resultados inesperados de um filtro de consulta XML para o log de eventos de segurança

7

Gente,

Estou tentando criar um filtro XML / Xpath personalizado para o visualizador de Log de Eventos do Windows para excluir os inúmeros Logons "SYSTEM" da exibição do log de segurança. Eu consegui chegar até aqui com a ajuda do Blog de Technet sobre filtragem de XML :

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[(EventID=4624)]] 
      and
      *[EventData[Data[@Name='TargetUserSid'] and  (Data!='S-1-5-18')]]
</Select>
  </Query>
</QueryList>

Mas contra todas as expectativas ainda tenho eventos como este (entre outros, é claro) na visão:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" />
    <EventID>4624</EventID>
    <Version>0</Version>
    <Level>0</Level>
    <Task>12544</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8020000000000000</Keywords>
    <TimeCreated SystemTime="2013-07-18T15:12:55.797049800Z" />
    <EventRecordID>199135861</EventRecordID>
    <Correlation />
    <Execution ProcessID="496" ThreadID="3028" />
    <Channel>Security</Channel>
    <Computer>SBS.domain.local</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="SubjectUserSid">S-1-0-0</Data>
    <Data Name="SubjectUserName">-</Data>
    <Data Name="SubjectDomainName">-</Data>
    <Data Name="SubjectLogonId">0x0</Data>
    <Data Name="TargetUserSid">S-1-5-18</Data>
    <Data Name="TargetUserName">SBS$</Data>
    <Data Name="TargetDomainName">DOMAIN</Data>
    <Data Name="TargetLogonId">0x684af79a</Data>
    <Data Name="LogonType">3</Data>
    <Data Name="LogonProcessName">Kerberos</Data>
    <Data Name="AuthenticationPackageName">Kerberos</Data>
    <Data Name="WorkstationName">
    </Data>
    <Data Name="LogonGuid">{9D5E970C-928D-E3FD-8D96-09044670F33E}</Data>
    <Data Name="TransmittedServices">-</Data>
    <Data Name="LmPackageName">-</Data>
    <Data Name="KeyLength">0</Data>
    <Data Name="ProcessId">0x0</Data>
    <Data Name="ProcessName">-</Data>
    <Data Name="IpAddress">fe80::cc18:cb50:1710:c2a7</Data>
    <Data Name="IpPort">6413</Data>
  </EventData>
</Event>

Tenho dificuldade em entender por que um evento com o atributo TargetUserSid do S-1-5-18 foi incluído na exibição enquanto não deveria. Ele também funciona na outra direção - se eu definir o filtro como *[EventData[Data[@Name='TargetUserSid'] and (Data='S-1-5-18')]] , vejo eventos com um "TargetUserSid" diferente.

A escolha de um SID (longo) diferente de um objeto de domínio parece funcionar como esperado e me fornece uma visualização apenas com os eventos com TargetUserSid definidos.

Eu também tentei filtrar outros atributos como TargetUserName, mas apenas para encontrar problemas semelhantes.

Qualquer sugestão sobre como corrigir minha consulta ou exemplos de casos semelhantes é muito apreciada.

    
por the-wabbit 18.07.2013 / 17:40

2 respostas

4

Tente isto:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[(EventID=4608)]]</Select>
    <Suppress Path="Security">*[EventData[Data[@Name="TargetUserSid"] = "S-1-5-18"]]</Suppress>
  </Query>
</QueryList>
    
por 19.07.2013 / 14:18
0

Eu observei o mesmo no Windows 10 Desktop OS. Uma consulta específica como abaixo, em vez de fornecer eventos especificados, resulta em todos os eventos de criação do processo. No entanto, a mesma consulta funciona bem no sistema operacional do Server 2012.

 <QueryList>
 <Query Id="0" Path="Security">
   <Select Path="Security">
        *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\process0.exe'  or Data='C:\Windows\System32\process1.exe' or Data='C:\Windows\process2.exe')]]
        and 
        *[System[(EventID=4688)]]
    </Select>
 </Query>
</QueryList>

Minha solução alternativa é separar os valores do atributo de pesquisa, algo assim:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
        (*[EventData[Data[@Name='NewProcessName'] ='C:\Windows\System32\process0.exe']] 
         or
         *[EventData[Data[@Name='NewProcessName'] ='C:\Windows\process1.exe']]
         or
         *[EventData[Data[@Name='NewProcessName'] = 'C:\Windows\process2.exe']])
        and 
        *[System[(EventID=4688)]]
    </Select>
  </Query>
</QueryList>
    
por 13.05.2018 / 14:03