EvtxECmd:Windows事件日志解析工具详解

本文介绍了EvtxECmd工具的第一版beta发布,这是一个Windows事件日志(evtx)解析器,支持命令行操作,未来计划开发GUI版本。工具支持CSV、XML和JSON格式导出,通过映射文件实现事件数据的标准化处理,可与KAPE集成使用。

介绍EvtxECmd!!

我很高兴宣布我的Windows事件日志(evtx)解析器的第一个beta版本。今天我们将讨论命令行版本,但我也有开发GUI版本的计划。

让我们先来看看选项:

![选项截图]

大多数选项与我其他程序类似,您可以使用-f-d处理单个文件或目录(递归)。

使用-f-d时,事件日志将被解析,并显示有关文件的信息,如下所示:

![解析结果截图]

默认显示事件ID及其数量的指标,但可以使用--met false选项来抑制。

下一组选项--csv--json--xml可以一次使用一个或多个。也可以使用相关选项(例如--csvf)覆盖默认文件名。

还要注意,在上面的屏幕截图中,文件正在使用中,EvtxECmd干净地处理了这种情况。这意味着您可以在死盒、KAPE集合或运行系统上使用EvtxECmd并获得相同的结果。

在更仔细地查看导出选项之前,让我们讨论两个允许您在输出中包含或排除事件ID的选项:

  • inc:给定事件ID列表,排除列表中未包含的所有其他事件ID
  • exc:给定事件ID列表,排除列表中的所有事件ID

两个选项都期望一个由逗号分隔的整数列表,没有空格,如下所示:

--inc 4624,4625,5140

导出格式

CSV、XML和json导出都可用,并且可以通过包含选项同时生成。换句话说,您不必先做CSV,然后重复做XML,等等。

XML选项将以与Windows完全相同的方式格式化事件数据,只有一个例外,即命名空间被移除。这节省了磁盘空间并使查询数据更容易。以下是XML数据可能看起来的示例:

![XML示例]

XML导出格式与其他格式不同,因为它遵循Microsoft定义的标准。这意味着当属性为NULL类型时,您将看不到它们,等等。对大多数人来说,这是一个无关紧要的细节,但尽可能在技术上正确是很重要的。

关于CSV(和json)的说明

EvtxECmd中的CSV导出格式将事件记录规范化为来自XML负载公共区域的标准字段,例如Computer、Channel、EventID、Level、TimeCreated等。<System>元素内的字段通常总是相同的,这些属性从XML中提取为CSV的数据。

任何给定事件的自定义数据位于EventData(通常)中,这使得事件日志难以处理,因为每个事件ID可能具有完全不同的负载。历史上,工具通过为不同的事件ID生成不同的CSV文件来解决这个问题,这再次导致分析问题,因为您可能需要加载数十个文件才能看到发生了什么。当这种事情被硬编码到工具中时,您也受到限制,无法查看某些事件,直到供应商已经将其包含在他们的程序中(如果他们首先认为值得这样做)。

然而,EvtxECmd的情况并非如此。所有事件记录在所有事件类型和所有事件日志文件类型中都被规范化!

您会说这是异端!这怎么可能?好吧,解决方案是通过使用映射将自定义数据转换为CSV(和json)数据中的几个标准化字段。

可用的标准化字段包括:

  • UserName:在各种事件ID中找到的用户和/或域信息
  • RemoteHost:在事件ID中找到的IP地址和/或主机名(或两者!)信息
  • ExecutableInfo:用于进程命令行、计划任务、服务安装信息等
  • PayloadData1-6:六个字段,用于放入您认为合适的任何内容

当然,随着人们发现可以在不同事件ID中使用的常见字段,这些字段可以扩展。然而,我想避免的是有100列在大多数情况下通常未填充。如果您想出一个好的字段,请告诉我!

考虑到这些字段,让我们详细看一下映射。

从这儿到那儿的映射

映射文件用于将EventData(事件的唯一部分)转换为更标准化的格式。映射文件特定于某种类型的事件日志,例如Security、Application等。

因为不同的事件日志可能重用事件ID,映射需要特定于某种日志。这种特异性是通过对给定事件日志使用唯一标识符Channel元素来实现的。我们稍后会看到更多关于这一点的信息。

一旦您知道要为哪种事件日志和事件ID创建映射,第一件事是使用EvtxECmd.exe将日志的记录转储到XML,如下所示:

EvtxECmd.exe -f <您的事件日志> --xml c:\temp\xml

当命令完成时,在c:\temp\中打开生成的xml文件并找到您感兴趣的事件ID。假设它来自Security日志,事件ID 4624,它可能看起来像这样:

![事件4624示例]

<System>元素中的几乎所有内容默认都被规范化,但如果您想包含其中的任何内容,可以使用我们将在下面看到的技术。

在大多数情况下,<EventData>块中的数据是您想要处理的。这就是xpath查询发挥作用的地方。

所以让我们看一个映射,使事情更清晰。

在下面的示例映射中,有四个头属性描述映射:谁写的,它用于什么,Channel,以及映射对应的事件ID。

Channel和EventId属性使映射唯一,而不是文件的名称。只要映射以’.map’结尾,它就会被处理。

Channel对于给定日志类型是一个有用的标识符。它可以在<Channel>元素中看到(上例中的"Security")。

Maps集合包含配置,用于如何在事件的EventData中查找数据并将特定属性提取到变量中。然后这些变量被组合并映射到事件记录的一级属性。

例如,考虑下面的第一个映射,用于Username。

PropertyValue定义了将用于构建最终值的模式,该值将分配给CSV中的Username字段。模式中的变量两边都用%包围,所以我们看到定义了两个变量:%domain%和%user%

在映射条目的Values集合中,我们实际上通过给值一个名称(第一种情况下的domain)和一个xpath查询来填充这些变量,该查询将用于设置变量的值(第一种情况下的/Event/EventData/Data[@Name=\"SubjectDomainName\"])。

当处理映射时,每个映射条目的Values项被处理,以便变量被数据填充。然后PropertyValue被更新,变量被实际值替换。这个最终的PropertyValue然后在事件记录中更新,最终出现在CSV/json等中。

就是这么简单!请确保像示例中那样用双引号包围事物和/或转义引号。如有疑问,请针对真实数据测试您的映射!

要看看这在实践中是什么样子,考虑下面的Security_4624.map:

![Security_4624.map示例]

注意,对于Maps集合中的每个项,Property指向CSV中要用自定义数据更新的字段(例如Username或RemoteHost)。

映射文件按字母顺序处理。这意味着您可以通过执行以下操作创建自己的替代映射:

  1. 复制您想要修改的映射
  2. 将其命名为与您感兴趣的映射相同,但在文件名前加上1_
  3. 编辑新映射以满足您的需求

示例:

Security_4624.map被复制并重命名为:

1_Security_4624.map

编辑1_Security_4624.map并进行您的更改

当映射加载时,由于1_Security_4624.map在4624.map之前,只有包含您更改的那个将被加载。

这也允许您更新默认映射,而不会在每次更新时丢失您的自定义设置。

json是特殊的

当通过--json导出到json时,数据将与CSV输出中找到的完全相同,只是以json格式呈现。每行显示一个记录。这允许您使用映射填充数据,然后以CSV或json格式摄取数据。

但是,如果您想要json中的所有细节呢?这就是--fj(用于完整json)开关发挥作用的地方。当此开关与--json一起使用时,完整的XML负载被转换为json,这就是保存的内容。这里的陷阱是,您现在负责将EventData中的所有数据映射到其他属性等。

这是正常的json输出(漂亮打印):

![正常json输出]

这是使用--fj的相同记录(也漂亮打印):

![完整json输出]

回报

映射是使这个过程工作的关键。当将CSV数据加载到Timeline Explorer(下一版本将直接支持)时,我们得到这个:

![Timeline Explorer截图]

注意我们如何能看到所有的4624和4672条目以及从它们的<EventData>元素中提取的数据?

这允许您看到所有事件与所有其他事件一致,无论日志来自何处以及负载是什么(假设您已经映射了数据)。当然,过滤和所有这些仍然有效,但您不再受限于别人对最佳做事方式的观念。

正如我们之前看到的,您可以制作或更新映射以满足您的需求、您的案例、您的工作流程、您对最佳方式的看法。我已经并将继续制作映射文件并将其包含在这里,我很乐意有您的贡献,使这个过程对社区更加容易。

总结

在EvtxECmd的下一个版本中,我将包含一个--sync选项,该选项将从evtx仓库下载所有映射,使其更易于使用和保持最新。

当然,EvtxECmd也可以与KAPE中的模块一起使用,使事件日志的收集和处理到CSV成为一个只需几秒钟的过程!!

现在就是这样!这是一个有趣的项目,我认为这里的用途是无限的。

您可以从通常的地方获取EvtxECmd,或者只需运行Get-ZimmermanTools,它将被发现并为您下载。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计