Windows 事件查看器 AppLocker XPath 筛选器

Windows 事件查看器 AppLocker XPath 筛选器

我正在运行 AppLocker,并希望使用 XPath 从事件查看器中记录的事件中过滤掉一些噪音。具体来说,我想隐藏与 CMD.exe 相关的任何事件

这是我想要删除的示例条目:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    <System>
        <Provider Name="Microsoft-Windows-AppLocker" Guid="{CBDA4DBF-8D5D-4F69-9578-BE14AA540D22}" /> 
        <EventID>8003</EventID> 
        <Version>0</Version> 
        <Level>3</Level> 
        <Task>0</Task> 
        <Opcode>0</Opcode> 
        <Keywords>0x8000000000000000</Keywords> 
        <TimeCreated SystemTime="2014-05-29T05:47:09.625405200Z" /> 
        <EventRecordID>257765</EventRecordID> 
        <Correlation /> 
        <Execution ProcessID="1108" ThreadID="2652" /> 
        <Channel>Microsoft-Windows-AppLocker/EXE and DLL</Channel> 
        <Computer>COMPUTERNAME.DOMAIN</Computer> 
        <Security UserID="S-1-5-21-123456789-123456789-123456789-123456" /> 
    </System>
    <UserData>
        <RuleAndFileData xmlns:auto-ns2="http://schemas.microsoft.com/win/2004/08/events" xmlns="http://schemas.microsoft.com/schemas/event/Microsoft.Windows/1.0.0.0">
            <PolicyName>EXE</PolicyName> 
            <RuleId>{00000000-0000-0000-0000-000000000000}</RuleId> 
            <RuleName>-</RuleName> 
            <RuleSddl>-</RuleSddl> 
            <TargetUser>S-1-5-21-123456789-123456789-123456789-123456</TargetUser> 
            <TargetProcessId>3224</TargetProcessId> 
            <FilePath>%SYSTEM32%\CMD.EXE</FilePath> 
            <FileHash>5F98965FF2650B89586176B38F007CA13A9E525E877DDCCBCDCE0A90408672D5</FileHash> 
            <Fqbn>O=MICROSOFT CORPORATION, L=REDMOND, S=WASHINGTON, C=US\MICROSOFT® WINDOWS® OPERATING SYSTEM\CMD.EXE\6.1.7601.17514</Fqbn> 
        </RuleAndFileData>
    </UserData>
</Event>

我想要的效果是:如果 FilePath 等于“%SYSTEM32%\CMD.EXE”,则隐藏事件

我尝试过类似的事情:

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-AppLocker/EXE and DLL">
    <Select Path="Microsoft-Windows-AppLocker/EXE and DLL">*[System[(Level=1  or Level=2 or Level=3)]]</Select>
    <Suppress Path="Microsoft-Windows-AppLocker/EXE and DLL">*[UserData[FileAndFileData[FilePath = '%SYSTEM32%\CMD.EXE' ]]]</Suppress>
  </Query>
</QueryList>

但这似乎没有任何作用。我一直在网上查看随机的 XPath 示例(包括相似的 问题在 Server Fault 上),但大多数都是在所讨论的 XML 列在“EventData”而不是“UserData”下时编写的,并且目标标签直接位于该 EventData 下,而不是在另一个标签(在此示例中为“RuleAndFileData”)下。

有没有人有我可以尝试一下的 XPath 代码示例?

答案1

看起来您在抑制部分使用了错误的 xpath 标签,请检查您的代码是否有任何错误。

代替:

FileAndFileData

和:

RuleAndFileData

答案2

重新提起老问题,但由于我今天遇到了同样的问题,所以我最好将我的发现记录下来以供将来参考。

根据嵌套元素过滤事件的正确语法是使用正斜杠/作为路径分隔符:

*[UserData/RuleAndFileData[FilePath='%SYSTEM32%\CMD.EXE']]

只需将多个表达式连接起来即可将它们组合在一起。例如,这将对两个表达式执行逻辑与:

*[System[(Level=1 or Level=2 or Level=3)]][UserData/RuleAndFileData[FilePath='%SYSTEM32%\CMD.EXE']]

在以下示例中,查询 ID 1 将从“Exe 和 DLL”日志中选择所有信息事件,其中 FilePath 为“%SYSTEM32%\CMD.EXE”,RuleName 不是“(默认规则) 所有文件”。只有一个 EventID 8002 会匹配,因为其他 ID 实际上是来自其他 AppLocker 日志的信息事件。“TimeCreated”部分是可选的,也是它的边界之一,但在此处包含以供语法参考。

查询 ID 2 使用timediff()函数从过去 7 天(604800000 毫秒)发生的“MSI 和脚本”日志警告事件中进行选择。同样,只有一个 EventID(8006)会匹配,因为该日志中不存在其他 EventID。Microsoft 的 Filter XPath 1.0 扩展有 timediff 的文档:https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-even6/4533bef3-5a74-4a72-a03a-7fd5c1470554

<QueryList>
  <Query Id="1">
    <Select Path="Microsoft-Windows-AppLocker/EXE and DLL">*[System[(EventID=8002 or EventID=8005 or EventID=8020 or EventID=8023) and TimeCreated[@SystemTime &gt;= '0001-01-01T00:00:00.0000000Z' and @SystemTime &lt;= '9999-12-31T21:59:59.9999999Z']]][UserData/RuleAndFileData[FilePath='%SYSTEM32%\CMD.EXE']]</Select>
    <Suppress Path="Microsoft-Windows-AppLocker/EXE and DLL">*[UserData/RuleAndFileData[RuleName='(Default Rule) All files']]</Suppress>
  </Query>
  <Query Id="2">
    <Select Path="Microsoft-Windows-AppLocker/MSI and Script">*[System[(EventID=8003 or EventID=8006 or EventID=8021 or EventID=8024) and TimeCreated[timediff(@SystemTime) &lt; 604800000]]]</Select>
  </Query>
</QueryList>

根据Windows 事件日志查询架构Id并且元素Path的属性Query是可选的。https://docs.microsoft.com/en-us/windows/win32/wes/queryschema-schema

还值得注意的是,Windows 事件日志不支持属性值中的通配符,也不支持 XPath 的contains()功能。仅节点路径支持通配符。因此,如果您想进行子字符串过滤,则必须在查询之后进行,例如在 PowerShell 中。 https://docs.microsoft.com/en-us/windows/win32/wes/assuming-events

XPath 1.0 限制:

Windows 事件日志支持 XPath 1.0 的子集。查询中可以使用的函数存在限制。例如,您可以在查询中使用“position”、“Band”和“timediff”函数,但目前不支持“starts-with”和“contains”等其他函数。

有关事件日志 XPath 语法的更多示例和信息,请访问消费事件(Windows 事件日志)页:https://docs.microsoft.com/en-us/windows/win32/wes/assuming-events

相关内容