Я пытаюсь вернуть запись в журнале событий из Windows журнала безопасности, используя xPath (в PowerShell, в пользовательском интерфейсе просмотра событий), но не удается.
Этот запрос не работает, так как он возвращает событие с нулевым результатом, хотя в журнале есть соответствующие записи:
Get-WinEvent -FilterXPath "*[EventData[Data[@Name='CommandLine']='-ExecutionPolicy ByPass -File Do-Something.ps1']]" -LogName Security
Синтаксис запроса выглядит нормально, так как изменение значения запроса вернет ожидаемые результаты:
Get-WinEvent -FilterXPath "*[EventData[Data[@Name='CommandLine']='\??\C:\Windows\system32\conhost.exe 0xffffffff -ForceV1']]" -LogName Security
То же результаты, если отформатированы как -Filter XML.
Альтернативная стратегия запросов работает, хотя с большими журналами вообще неэффективна:
Get-WinEvent -LogName Security | Where-Object -Property Message -match '-ExecutionPolicy ByPass -File Do-Something.ps1'
Так что, похоже, что-то есть в xPath значение запроса, которое не совсем кошерное. Я не знаю что это. Чего мне не хватает?
Вот EventData для желаемого попадания:
- <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>4688</EventID>
<Version>2</Version>
<Level>0</Level>
<Task>13312</Task>
<Opcode>0</Opcode>
<Keywords>0x8020000000000000</Keywords>
<TimeCreated SystemTime="2020-02-19T15:17:13.982780900Z" />
<EventRecordID>SCRUBBED</EventRecordID>
<Correlation />
<Execution ProcessID="4" ThreadID="256" />
<Channel>Security</Channel>
<Computer>SCRUBBED</Computer>
<Security />
</System>
- <EventData>
<Data Name="SubjectUserSid">SCRUBBED</Data>
<Data Name="SubjectUserName">SCRUBBED</Data>
<Data Name="SubjectDomainName">SCRUBBED</Data>
<Data Name="SubjectLogonId">SCRUBBED</Data>
<Data Name="NewProcessId">SCRUBBED</Data>
<Data Name="NewProcessName">C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Data>
<Data Name="TokenElevationType">%%1937</Data>
<Data Name="ProcessId">0x41c</Data>
<Data Name="CommandLine">-ExecutionPolicy ByPass -File Do-Something.ps1</Data>
<Data Name="TargetUserSid">S-1-0-0</Data>
<Data Name="TargetUserName">-</Data>
<Data Name="TargetDomainName">-</Data>
<Data Name="TargetLogonId">0x0</Data>
<Data Name="ParentProcessName">C:\Windows\System32\gpscript.exe</Data>
<Data Name="MandatoryLabel">SCRUBBED</Data>
</EventData>
</Event>
Вот EventData для другого попадания, которое работает, но мне не интересно:
- <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>4688</EventID>
<Version>2</Version>
<Level>0</Level>
<Task>13312</Task>
<Opcode>0</Opcode>
<Keywords>0x8020000000000000</Keywords>
<TimeCreated SystemTime="2020-02-19T15:21:21.753690000Z" />
<EventRecordID>SCRUBBED</EventRecordID>
<Correlation />
<Execution ProcessID="4" ThreadID="96" />
<Channel>Security</Channel>
<Computer>SCRUBBED</Computer>
<Security />
</System>
- <EventData>
<Data Name="SubjectUserSid">SCRUBBED</Data>
<Data Name="SubjectUserName">SCRUBBED</Data>
<Data Name="SubjectDomainName">SCRUBBED</Data>
<Data Name="SubjectLogonId">SCRUBBED</Data>
<Data Name="NewProcessId">SCRUBBED</Data>
<Data Name="NewProcessName">C:\Windows\System32\conhost.exe</Data>
<Data Name="TokenElevationType">%%1936</Data>
<Data Name="ProcessId">0x690</Data>
<Data Name="CommandLine">\??\C:\Windows\system32\conhost.exe 0xffffffff -ForceV1</Data>
<Data Name="TargetUserSid">S-1-0-0</Data>
<Data Name="TargetUserName">-</Data>
<Data Name="TargetDomainName">-</Data>
<Data Name="TargetLogonId">0x0</Data>
<Data Name="ParentProcessName">C:\Program Files\Windows Defender\MpCmdRun.exe</Data>
<Data Name="MandatoryLabel">SCRUBBED</Data>
</EventData>
</Event>