按用户和登录类型过滤安全日志

按用户和登录类型过滤安全日志

我被要求找出用户在上周何时登录系统。现在 Windows 中的审计日志应该包含我需要的所有信息。我认为如果我使用特定 AD 用户和登录类型 2(交互式登录)搜索事件 ID 4624(登录成功),它应该会给我所需的信息,但我终其一生都无法弄清楚如何实际过滤事件日志以获取此信息。在事件查看器中是否可行,还是需要使用外部工具将其解析到此级别?

我发现http://nerdsknowbest.blogspot.com.au/2013/03/filter-security-event-logs-by-user-in.html这似乎是我需要的一部分。我稍微修改了一下,只提供过去 7 天的数据。下面是我尝试的 XML。

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[(EventID=4624) and TimeCreated[timediff(@SystemTime) &lt;= 604800000]]]</Select>
    <Select Path="Security">*[EventData[Data[@Name='Logon Type']='2']]</Select>
    <Select Path="Security">*[EventData[Data[@Name='subjectUsername']='Domain\Username']]</Select>
  </Query>
</QueryList>

它只给了我过去 7 天的数据,其余的数据都不起作用。

有人能帮助我吗?

编辑

感谢 Lucky Luke 的建议,我取得了一些进展。以下是我当前的查询,尽管我将解释它没有返回任何结果。

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
     *[System[(EventID='4624')]
     and
     System[TimeCreated[timediff(@SystemTime) &lt;= 604800000]]
     and
     EventData[Data[@Name='TargetUserName']='john.doe']
     and
     EventData[Data[@Name='LogonType']='2']
     ] 
    </Select>
  </Query>
</QueryList>

正如我提到的,它没有返回任何结果,所以我对它进行了一些调整。我可以让它正确生成结果,直到我添加 LogonType 行。之后,它不返回任何结果。知道为什么会这样吗?

编辑2

我将 LogonType 行更新为以下内容:

EventData[Data[@Name='LogonType'] and (Data='2' or Data='7')]

这应该可以捕获工作站登录和工作站解锁,但我仍然一无所获。然后我修改它以搜索其他登录类型,如 3 或 8,它找到了很多。这让我相信查询工作正常,但出于某种原因,事件日志中没有登录类型等于 2 的条目,这对我来说毫无意义。可以关闭它吗?

答案1

您走在正确的轨道上 - 您的查询中的一个错误是“登录类型”中的空格,它应该是“LogonType”。

我在下面粘贴了一个查询,我刚刚验证过该查询有效。它有点简单,但您明白我的意思。它显示了来自用户“john.doe”的登录类型为 2 的所有 4624 个事件。

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[
        EventData[Data[@Name='LogonType']='2']
        and
        EventData[Data[@Name='TargetUserName']='john.doe']
        and
        System[(EventID='4624')]
      ] 
    </Select>
  </Query>
</QueryList>

您可以在此处的事件查看器中找到有关 XML 查询的更多信息:http://blogs.technet.com/b/askds/archive/2011/09/26/advanced-xml-filtering-in-the-windows-event-viewer.aspx

您可以使用 wevtutil.exe 从命令行查询事件:http://technet.microsoft.com/en-us/magazine/dd310329.aspx

答案2

我找到了这个问题,不得不做一些工作来分析内容,从接受的答案和问题更新,以获得一个实用的解决方案。我想我会在这里发布一个完整的、有效的查询语法以供将来参考:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
    *[System[(EventID=4624)
    and
    TimeCreated[timediff(@SystemTime) &lt;= 2592000000]]
    and
    EventData[Data[@Name='TargetUserName'] and (Data='john.doe')]
    and
    EventData[Data[@Name='LogonType'] and (Data='10')]]
    </Select>
  </Query>
</QueryList>

上述查询应该能够根据以下参数缩小事件范围:

  • 安全日志中的事件。
  • 事件 ID 为 6424
  • 发生在过去 30 天内。
  • 与用户 john.doe 关联。
  • 使用 LogonType 10。

您可以通过修改上述代码来更改过滤器中的 LogonTypes (Data='10')。例如,您可能想要执行(Data='2')(Data='10' or Data='2')

答案3

我在第一次编辑时发现问题的语法有错误。我删除了导致查询不返回结果的多余空格。我仅使用 @Name='TargetUserName' 条件对其进行了测试。

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
     *[System[(EventID='4624')]
     and
     System[TimeCreated[timediff(@SystemTime) &lt;= 604800000]]
     and
     EventData[Data[@Name='TargetUserName']='john.doe']
     and
     EventData[Data[@Name='LogonType']='2']
     ] <!--Remove the space right before this comment.-->
    </Select>
  </Query>
</QueryList>

相关内容