Назад | Перейти на главную страницу

Неожиданные результаты фильтра запросов XML для журнала событий безопасности

Ребята,

Я пытаюсь создать настраиваемый фильтр XML / Xpath для средства просмотра журнала событий Windows, чтобы исключить бесчисленные «СИСТЕМНЫЕ» входы в систему из представления журнала безопасности. Мне удалось зайти так далеко с помощью Блог Technet о фильтрации 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>

Но вопреки всем ожиданиям у меня все еще есть такие события (среди прочих, конечно) в поле зрения:

<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>

Мне трудно понять, почему событие с атрибутом TargetUserSid для S-1-5-18 было включено в представление, а не должно быть. Это работает и в другом направлении - если я определю фильтр как *[EventData[Data[@Name='TargetUserSid'] and (Data='S-1-5-18')]], Я вижу, как "проскальзывают" события с другим TargetUserSid.

Выбор другого (длинного) SID из объекта домена, похоже, работает должным образом и дает мне представление о событиях, для которых TargetUserSid установлен только соответствующим образом.

Я также пробовал фильтровать другие атрибуты, такие как TargetUserName, но только для того, чтобы столкнуться с аналогичными проблемами.

Приветствуются любые подсказки о том, как исправить мой запрос или рабочие примеры подобных случаев.

Попробуй это:

<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>

Я наблюдал то же самое в ОС Windows 10 Desktop. Конкретный запрос, как показано ниже, вместо того, чтобы давать указанные события, приводит ко всем событиям создания процесса. Однако тот же запрос хорошо работает в ОС 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>

Мое обходное решение - разделить значения атрибутов поиска, примерно так:

<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>