来源: Windows 取证之EVTX日志 – 合天网安实验室 – 博客园
0x0、概述
evtx
文件是微软从 Windows NT 6.0
(Windows Vista 和 Server 2008) 开始采用的一种全新的日志文件格式。在此之前的格式是 evt
。evtx
由Windows
事件查看器创建,包含Windows记录的事件列表,以专有的二进制XML格式保存。
0x1、EVTX文件结构
evtx文件主要由三部分组成:
-
file header (文件头)
-
chunks (数据块)
-
trailing empty values (尾部填充空值)
File Header(文件头):
文件头长度为4KB(4096bytes),其结构如下:
偏移 | 长度(Bytes) | 值 | 描述 |
---|---|---|---|
0x00 | 8 | “ElfFile\x00” | 标志位/签名 |
0x08 | 8 | 第一个区块编号(存在时间最久的区块编号) | |
0x10 | 8 | 当前区块编号(块的编号从0开始) | |
0x18 | 8 | 下一条事件记录的ID | |
0x20 | 4 | 128 | 文件头有效部分的大小 |
0x24 | 2 | 1 | 次要版本 |
0x26 | 2 | 3 | 主要版本 |
0x28 | 2 | 4096 | 文件头的大小 |
0x2A | 2 | 区块的数量 | |
0x2C | 76 | 未知 (空值) | |
0x78 | 4 | 文件标志 | |
0x7C | 4 | 文件头前 120 bytes 的CRC32校验和 | |
0x80 | 3968 | 未知 (空值) |
我们可以使用Hex编辑器打开一个evtx
文件查看一下:
Chunk(块):
每个块的大小是 65536 bytes(64KB),主要由三部分组成:
-
chunk header 块头
-
array of event records 事件记录组
-
unused space 未使用的空间
chunk
头长度为512bytes,其结构如下:
偏移 | 长度(Bytes) | 值 | 描述 |
---|---|---|---|
0x00 | 8 | “ElfChnk\x00” | 标志位/签名 |
0x08 | 8 | 基于日志编号的第一条日志记录的ID | |
0x10 | 8 | 基于日志编号的最后一条日志记录的ID | |
0x18 | 8 | 基于文件编号的第一条日志记录的ID | |
0x20 | 8 | 基于文件编号的最后一条日志记录的ID | |
0x28 | 4 | 128 | chunk头大小 |
0x2C | 4 | 最后一条日志记录的偏移量(相对于块头的起始偏移量) | |
0x30 | 4 | 下一条日志记录的偏移量(相对于块头的起始偏移量) | |
0x34 | 4 | 事件记录数据的 CRC32 校验和 | |
0x38 | 64 | Unknown (空值) | |
0x78 | 4 | Unknown (flags?) | |
0x7C | 4 | 块头CRC32校验和(块头前120个字节和128至512字节的数据的CRC32校验和) |
Event record(事件记录):
事件记录的长度非固定长度,其结构如下:
偏移 | 长度(Bytes) | 值 | 描述 |
---|---|---|---|
0x00 | 4 | “\x2a\x2a\x00\x00” | 标志位/签名 |
0x04 | 4 | 事件记录的长度 | |
0x08 | 8 | 记录ID | |
0x10 | 8 | 日志记录的写入时间(FILETIME) | |
0x18 | 不确定 | 基于二进制XML编码的信息 | |
不确定 | 4 | 记录长度(副本) |
由上面的信息,可知evtx
日志文件包含一个4KB的文件头加后面一定数量的64KB大小的块,一个块中记录一定数量(大约100条)的事件记录。每个块是独立的,不受其他块影响。不会出现一条事件记录的数据存在于两个块中。每条记录包含一个基于二进制XML编码的信息。每条事件记录包含其创建时间与事件 ID(可以用于确定事件的种类),因此可以反映某个特定的时间发生的特定的操作,取证人员可以根据日志文件来发现犯罪的过程。
evtx
日志文件大概的结构如下所示:
在windows事件查看器中查看:
0x2、EVTX文件的存储
Windows事件日志文件保存在%SystemRoot%\System32\Winevt\Logs
路径中。
常见日志文件主要有三个,分别是:System.evtx
、Application.evtx
和Security.evtx
。分别是系统日志、应用程序日志和安全日志。
-
System.evtx
记录操作系统自身组件产生的日志事件,比如驱动、系统组件和应用软件的崩溃以及数据丢失错误等等。
-
Application.evtx
记录应用程序或系统程序运行方面的日志事件,比如数据库程序可以在应用程序日志中记录文件错误,应用的崩溃记录等。
-
Security.evtx
记录系统的安全审计日志事件,比如登录事件、对象访问、进程追踪、特权调用、帐号管理、策略变更等。
Security.evtx
也是取证中最常用到的。
默认情况下,当一个evtx
文件的记录满了,日志服务会覆盖最开始的记录,从头开始写入新的记录。也就是相当于一个循环记录的缓存文件。
0x3、Evtx日志分析
Windows
用 Event ID
来标识事件的不同含义,拿Security
日志来说,一些常见的Event ID
如下:
事件ID | 描述 |
---|---|
4608 | Windows 启动 |
4609 | Windows 关机 |
4616 | 系统时间发生更改 |
4624 | 用户成功登录到计算机 |
4625 | 登录失败。使用未知用户名或密码错误的已知用户名尝试登录。 |
4634 | 用户注销完成 |
4647 | 用户启动了注销过程 |
4648 | 用户在以其他用户身份登录时,使用显式凭据成功登录到计算机 |
4703 | 令牌权限调整 |
4704 | 分配了用户权限 |
4720 | 已创建用户账户 |
4725 | 账户被禁用 |
4768 | 请求Kerberos身份验证票证(TGT) |
4769 | 请求Kerberos服务票证 |
4770 | 已续订Kerberos服务票证 |
4779 | 用户在未注销的情况下断开了终端服务器会话 |
1、通过Windows事件查看器分析日志
通过Windows
事件查看器可以查看当前主机的事件日志,也可以打开保存的 evtx
文件。
可以通过点击、筛选、查找等多种方式查看事件日志
筛选器提供了丰富的筛选方式:
2、通过工具分析Evtx
Log Parser
Log Parser
(是微软公司自己开发的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML
文件、CSV
(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory。它使用类似 SQL 语句一样查询分析这些数据,还可以把分析结果以图表的形式展现出来。
Log Parser
下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=24659
使用方法:
logparser -i:输入文件的格式 -o:输出文件的格式 "查询语句 和文件路径"
例子:
查询登录成功的事件:
LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM E:\Security.evtx where EventID=4624"
还有其他的语法,具体可以查看其帮助信息
>LogParser.exe Microsoft (R) Log Parser Version 2.2.10 Copyright (C) 2004 Microsoft Corporation. All rights reserved. Usage: LogParser [-i:<input_format>] [-o:<output_format>] <SQL query> | file:<query_filename>[?param1=value1+...] [<input_format_options>] [<output_format_options>] [-q[:ON|OFF]] [-e:<max_errors>] [-iw[:ON|OFF]] [-stats[:ON|OFF]] [-saveDefaults] [-queryInfo] LogParser -c -i:<input_format> -o:<output_format> <from_entity> <into_entity> [<where_clause>] [<input_format_options>] [<output_format_options>] [-multiSite[:ON|OFF]] [-q[:ON|OFF]] [-e:<max_errors>] [-iw[:ON|OFF]] [-stats[:ON|OFF]] [-queryInfo] -i:<input_format> : one of IISW3C, NCSA, IIS, IISODBC, BIN, IISMSID, HTTPERR, URLSCAN, CSV, TSV, W3C, XML, EVT, ETW, NETMON, REG, ADS, TEXTLINE, TEXTWORD, FS, COM (if omitted, will guess from the FROM clause) -o:<output_format> : one of CSV, TSV, XML, DATAGRID, CHART, SYSLOG, NEUROVIEW, NAT, W3C, IIS, SQL, TPL, NULL (if omitted, will guess from the INTO clause) -q[:ON|OFF] : quiet mode; default is OFF -e:<max_errors> : max # of parse errors before aborting; default is -1 (ignore all) -iw[:ON|OFF] : ignore warnings; default is OFF -stats[:ON|OFF] : display statistics after executing query; default is ON -c : use built-in conversion query -multiSite[:ON|OFF] : send BIN conversion output to multiple files depending on the SiteID value; default is OFF -saveDefaults : save specified options as default values -restoreDefaults : restore factory defaults -queryInfo : display query processing information (does not execute the query) Examples: LogParser "SELECT date, REVERSEDNS(c-ip) AS Client, COUNT(*) FROM file.log WHERE sc-status<>200 GROUP BY date, Client" -e:10 LogParser file:myQuery.sql?myInput=C:\temp\ex*.log+myOutput=results.csv LogParser -c -i:BIN -o:W3C file1.log file2.log "ComputerName IS NOT NULL" Help: -h GRAMMAR : SQL Language Grammar -h FUNCTIONS [ <function> ] : Functions Syntax -h EXAMPLES : Example queries and commands -h -i:<input_format> : Help on <input_format> -h -o:<output_format> : Help on <output_format> -h -c : Conversion help
Log Parser Studio
logparser
的GUI版本。
其界面如下:
Event Log Explorer
Event Log Explorer 是一个非常好用的Windows 日志分析工具,下载地址:https://eventlogxp.com/
LogParser Lizard
LogParser Lizard 是一个功能丰富的Windows 日志分析软件,可以通过类似SQL查询语句对日志筛选查询进行分析。
下载地址:https://lizard-labs.com/log_parser_lizard.aspx
Evtx Explorer/EvtxECmd
具有标准化CSV、XML和json输出的事件日志(Evtx)解析器!
下载地址:https://ericzimmerman.github.io/#!index.md
使用方法:
EvtxECmd.exe -f 日志文件 --xml 输出路径
解析的xml文件结构如下:
0x4、Evtx取证实战
题目来源:Cynet应急响应挑战赛
描述:GOT Ltd
的人力资源主管King-Slayer
认为他的电脑上有可疑活动。
2020 年 2 月 8 日,15:00 左右,他发现桌面上出现了一个带有 kiwi
标志的文件。据他描述,该文件首次出现在他的桌面后不久就突然消失了。那天晚些时候,他开始收到消息告诉他需要重新激活 Windows Defender
。他激活了 Windows Defender
,几个小时后又收到了同样的消息。
他决定将这件事告诉他在 IT 部门的朋友——Chris
。Chris
立即将此事报告给了 GOT
的网络安全部门。
该公司的 CISO 立即打电话求助我们,GOT有限公司总部设在瑞士,CISO
向我们发送了来自 King-Slayer
的 PC
和域控制器的所有事件日志文件。他希望我们查出异常:
提示:
-
用户帐户 (KingSlayer) 是他电脑上的本地管理员。
-
域名 -> GOT.Com
-
DC 服务器名称 -> WIN-IL7M7CC6UVU
-
Jaime(King Slayer)的主机名->DESKTOP-HUB666E(172.16.44.135)
提交攻击者使用的域用户帐户(King-Slayer除外)以及他使用此用户帐户访问的主机的IP地址。
我们拿到的文件包括DC服务的日志和主机日志文件:
给出的文件还有一个提示就是PassTheHash
,表明攻击者使用了该技术。
传递哈希是一种黑客技术,它允许攻击者使用用户密码的基础NTLM或LanMan哈希对远程服务器或服务进行身份验证,而不是像通常情况下那样要求使用关联的明文密码。它取代了仅窃取哈希值并使用该哈希值进行身份验证而窃取明文密码的需要。–via 维基百科
通过日志交叉比对和筛选查找,我们确定了在2020-2-9 21:59
左右,有异常登录行为
注意:Windows EVTX 的FILETIME
是 UTC时间,注意转化为瑞士当地时间。
我们发现用户Daenerys
在2020年2月9日21:59 (当地时间15:59)通过SMB
协议登录到WIN-IL7M7CC6UVU
(域控制器),而且使用了PSExec.exe
利用Deanerys
用户登录了域控服务器。攻击者可能使用了Mimikatz
拿到了Daenerys
用户的哈希,然后用于横向移动渗透到DC。