# windows安全日志分析之logparser篇

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-07-29T02:27:00Z
Canonical: https://wepostx.com/topics/928

> 乌云历史资料归档
>
> **原始作者：** 封停
> **原始编号：** superkieran-wooyundrops:665
> **原始发布时间：** 2015-07-29 10:27
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x01 前言

工作过程中，尤其是应急的时候，碰到客户windows域控被入侵的相关安全事件时，往往会需要分析windows安全日志，此类日志往往非常的大；此时，高效分析windows安全日志，提取出我们想要的有用信息，就显得尤为关键，这里给大家推荐一款我常用的windows日志分析工具，logparser，目前版本是2.2。

# 0x02 logparser使用介绍

首先，让我们来看一下Logparser架构图，熟悉这张图，对于我们理解和使用Logparser是大有裨益的

![原文图片](/media/2016/06/60b4e33269c9844f2eb735529106b6ca)

简而言之就是我们的输入源（多种格式的日志源）经过 SQL语句（有SQL引擎处理）处理后，可以输出我们想要的格式。
1、输入源
从这里可以看出它的基本处理逻辑，首先是输入源是某一种固定的格式，比如EVT（事件），Registry（注册表）等，对于每一种输入源，它所涵盖的字段值是固定的，可以使用logparser –h –i:EVT查出（这里以EVT为例）：

![原文图片](/media/2016/06/0a3eac259f32fdb24c3d4e50ce79b1fc)

这里是一些可选参数，在进行查询的时候，可对查询结果进行控制，不过我们需要重点关注的是某一类日志结构里含有的字段值（在SQL查询中匹配特定的段）：

![原文图片](/media/2016/06/5e889742a3c44ba10d53df22fc307c7c)

对于每一类字段值的详细意义，我们可以参照logparser的自带文档的参考部分，这里以EVT（事件）为例：

![原文图片](/media/2016/06/596c00f1772302fb7b66b989f14b6ed7)

2、输出源 输出可以是多种格式，比如文本（CSV等）或者写入数据库，形成图表，根据自己的需求，形成自定的文件（使用TPL）等，比较自由

# 0x03 基本查询结构

了解了输入和输出源，我们来看一则基本的查询结构

```text
Logparser.exe –i:EVT –o:DATAGRID “SELECT * FROM E:\logparser\xx.evtx”
```
这是一则基本的查询，输入格式是EVT（事件），输出格式是DATAGRID（网格），然后是SQL语句，查询E:\logparser\xx.evtx的所有字段，结果呈现为网格的形式:

![原文图片](/media/2016/06/36991bcc8785f0c9a7d4f930955a34f8)

看到这里，想必你已经明白了，对于windows的安全日志分析，我们只需要取出关键进行判断或者比对，就可以从庞大的windows安全日志中提取出我们想要的信息。

# 0x04 windows安全日志分析

对于windows安全日志分析，我们可以根据自己的分析需要，取出自己关心的值，然后进行统计、匹配、比对，以此有效获取信息，这里通过windows安全日志的EVENT ID迅速取出我们关心的信息，不同的EVENT ID代表了不同的意义，这些我们可以在网上很容易查到，这里列举一些我们平常会用到的
Event任务类别解释
ID
540登陆/注销Event 540 gets logged when a user elsewhere on the network connects to a resource (e.g. shared folder) provided by the Server service on this computer. The Logon Type will always be 3 or 8, both of which indicate a network logon.
538登陆/注销Ostensibly, event 538 is logged whenever a user logs off, whether from a network connection, interactive logon, or other logon type
For network connections (such as to a file server), it will appear that users log on and off many times a day. This phenomenon is caused by the way the Server service terminates idle connections.
528![enter image description here][6]
675账户登陆When a user attempts to log on at a workstation and uses a valid domain account name but enters a bad password, the DC records event ID 675 (pre-authentication failed) with Failure Code 24. By reviewing each of your DC Security logs for this event and failure code, you can track every domain logon attempt that failed as a result of a bad password. In addition to providing the username and domain name, the event provides the IP address of the system from which the logon attempt originated.

有了这些我们就可以对windows日志进行分析了 比如我们分析域控日志的时候，想要查询账户登陆过程中，用户正确，密码错误的情况，我们需要统计出源IP，时间，用户名时，我们可以这么写（当然也可以结合一些统计函数，分组统计等等）：

```text
LogParser.exe -i:EVT "SELECT TimeGenerated,EXTRACT\_TOKEN(Strings,0,'|') AS USERNAME,EXTRACT\_TOKEN(Strings,2,'|') AS SERVICE\_NAME,EXTRACT\_TOKEN(Strings,5,'|') AS Client_IP FROM 'e:\logparser\xx.evtx' WHERE EventID=675"
```
查询结果如下：

![原文图片](/media/2016/06/b0fffe5b1ea517e8684af064ce30661b)

如果需要对于特定IP进行统计，我们可以这么写（默认是NAT输出）：

```text
LogParser.exe -i:EVT "SELECT TimeGenerated,EXTRACT\_TOKEN(Strings,0,'|') AS USERNAME,EXTRACT\_TOKEN(Strings,2,'|') AS SERVICE\_NAME,EXTRACT\_TOKEN(Strings,5,'|') AS Client\_IP FROM 'e:\logparser\xx.evtx' WHERE EventID=675 AND EXTRACT\_TOKEN(Strings,5,'|')='x.x.x.x'"
```
或者将查询保存为sql的格式：

```text
SELECT TimeGenerated,EXTRACT\_TOKEN(Strings,0,'|') AS UserName,EXTRACT\_TOKEN(Strings,1,'|') AS Domain ,EXTRACT\_TOKEN(Strings,13,'|') AS SouceIP,EXTRACT\_TOKEN(Strings,14,'|') AS SourcePort FROM 'E:\logparser\xx.evtx' WHERE EXTRACT_TOKEN(Strings,13,'|') ='%ip%'
```
然后在使用的时候进行调用

```text
logparser.exe file:e:\logparser\ipCheck.sql?ip=x.x.x.x –i:EVT –o:NAT
```
查询结果为：

![原文图片](/media/2016/06/da62ba7d99a3baf1d0c2dd93b083931c)

怎么样？是不是一目了然呢？根据特定登陆事件，直接定位到异常IP，异常时间段内的连接情况。
同样我们也可以选择其他输出格式，对日志分析和统计。上述所有操作都是在命令行下完成的，对于喜欢图形界面的朋友，We also have choices！这里我们可以选择使用LogParser Lizard。 对于GUI环境的Log Parser Lizard，其特点是比较易于使用，甚至不需要记忆繁琐的命令，只需要做好设置，写好基本的SQL语句，就可以直观的得到结果，这里给大家简单展示一下 首先选取查询类型

![原文图片](/media/2016/06/b1d9e5896547318d845ab34a74956eb3)

这里我们选择windows event log，然后输入刚才的查询语句： 比如：

```text
SELECT TimeGenerated,EXTRACT\_TOKEN(Strings,0,'|') AS USERNAME,EXTRACT\_TOKEN(Strings,2,'|') AS SERVICE\_NAME,EXTRACT\_TOKEN(Strings,5,'|') AS Client\_IP FROM 'e:\logparser\xx.evtx' WHERE EventID=675 AND EXTRACT\_TOKEN(Strings,5,'|')='x.x.x.x'
```
得到的查询结果为（并且这里我们可以有多种查询格式）：

![原文图片](/media/2016/06/6003d959620fbdacda25ce5f53465acd)

具体其他功能，大家可以去尝试一下~

# 0x05 总结

这里简单和大家介绍了在windows安全日志分析方面logparser的一些使用样例，logparser的功能很强大，可进行多种日志的分析，结合商业版的Logparser Lizard，你可以定制出很多漂亮的报表展现，图形统计等，至于其他的功能，留给大家去探索吧~

## Replies
