Windows 取证之EVTX日志

0x0、概述

evtx文件是微软从 Windows NT 6.0(Windows Vista 和 Server 2008) 开始采用的一种全新的日志文件格式。在此之前的格式是 evtevtxWindows事件查看器创建,包含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文件查看一下:

image-20210720163636907

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校验和)

 

 

image-20210721123805851

 

Event record(事件记录):

事件记录的长度非固定长度,其结构如下:

 

偏移长度(Bytes)描述
0x00 4 "\x2a\x2a\x00\x00" 标志位/签名
0x04 4   事件记录的长度
0x08 8   记录ID
0x10 8   日志记录的写入时间(FILETIME)
0x18 不确定   基于二进制XML编码的信息
不确定 4   记录长度(副本)

 

 

image-20210721131110932

image-20210721131135650

 

由上面的信息,可知evtx日志文件包含一个4KB的文件头加后面一定数量的64KB大小的块,一个块中记录一定数量(大约100条)的事件记录。每个块是独立的,不受其他块影响。不会出现一条事件记录的数据存在于两个块中。每条记录包含一个基于二进制XML编码的信息。每条事件记录包含其创建时间与事件 ID(可以用于确定事件的种类),因此可以反映某个特定的时间发生的特定的操作,取证人员可以根据日志文件来发现犯罪的过程。

evtx日志文件大概的结构如下所示:

image-20210721132346354

在windows事件查看器中查看:

image-20210721140401309

0x2、EVTX文件的存储

Windows事件日志文件保存在%SystemRoot%\System32\Winevt\Logs路径中。

image-20210721141141511

常见日志文件主要有三个,分别是:System.evtxApplication.evtxSecurity.evtx。分别是系统日志、应用程序日志和安全日志。

  • System.evtx

    记录操作系统自身组件产生的日志事件,比如驱动、系统组件和应用软件的崩溃以及数据丢失错误等等。

  • Application.evtx

    记录应用程序或系统程序运行方面的日志事件,比如数据库程序可以在应用程序日志中记录文件错误,应用的崩溃记录等。

  • Security.evtx

    记录系统的安全审计日志事件,比如登录事件、对象访问、进程追踪、特权调用、帐号管理、策略变更等。Security.evtx也是取证中最常用到的。

默认情况下,当一个evtx文件的记录满了,日志服务会覆盖最开始的记录,从头开始写入新的记录。也就是相当于一个循环记录的缓存文件。

image-20210721142106536

0x3、Evtx日志分析

WindowsEvent 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文件。

image-20210721160559304

可以通过点击、筛选、查找等多种方式查看事件日志

image-20210721160753865

筛选器提供了丰富的筛选方式:

image-20210721161013112

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"

image-20210721161849128

还有其他的语法,具体可以查看其帮助信息

>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版本。

下载地址:https://techcommunity.microsoft.com/t5/exchange-team-blog/log-parser-studio-2-0-is-now-available/ba-p/593266

其界面如下:

image

Event Log Explorer

Event Log Explorer 是一个非常好用的Windows 日志分析工具,下载地址:https://eventlogxp.com/

image-20210721163315625

LogParser Lizard

LogParser Lizard 是一个功能丰富的Windows 日志分析软件,可以通过类似SQL查询语句对日志筛选查询进行分析。

下载地址:https://lizard-labs.com/log_parser_lizard.aspx

image-20210721163556793

image-20210721163647101

Evtx Explorer/EvtxECmd

具有标准化CSV、XML和json输出的事件日志(Evtx)解析器!

下载地址:https://ericzimmerman.github.io/#!index.md

使用方法:

EvtxECmd.exe -f 日志文件 --xml 输出路径

image-20210721165111773

解析的xml文件结构如下:

image-20210721165205013

0x4、Evtx取证实战

题目来源:Cynet应急响应挑战赛

描述:GOT Ltd 的人力资源主管King-Slayer认为他的电脑上有可疑活动。

2020 年 2 月 8 日,15:00 左右,他发现桌面上出现了一个带有 kiwi标志的文件。据他描述,该文件首次出现在他的桌面后不久就突然消失了。那天晚些时候,他开始收到消息告诉他需要重新激活 Windows Defender。他激活了 Windows Defender,几个小时后又收到了同样的消息。

他决定将这件事告诉他在 IT 部门的朋友——ChrisChris立即将此事报告给了 GOT 的网络安全部门。

该公司的 CISO 立即打电话求助我们,GOT有限公司总部设在瑞士,CISO 向我们发送了来自 King-SlayerPC 和域控制器的所有事件日志文件。他希望我们查出异常:

提示:

  • 用户帐户 (KingSlayer) 是他电脑上的本地管理员。

  • 域名 -> GOT.Com

  • DC 服务器名称 -> WIN-IL7M7CC6UVU

  • Jaime(King Slayer)的主机名->DESKTOP-HUB666E(172.16.44.135)

提交攻击者使用的域用户帐户(King-Slayer除外)以及他使用此用户帐户访问的主机的IP地址。

我们拿到的文件包括DC服务的日志和主机日志文件:

image-20210721171750067

给出的文件还有一个提示就是PassTheHash ,表明攻击者使用了该技术。

传递哈希是一种黑客技术,它允许攻击者使用用户密码的基础NTLM或LanMan哈希对远程服务器或服务进行身份验证,而不是像通常情况下那样要求使用关联的明文密码。它取代了仅窃取哈希值并使用该哈希值进行身份验证而窃取明文密码的需要。--via 维基百科

通过日志交叉比对和筛选查找,我们确定了在2020-2-9 21:59左右,有异常登录行为

注意:Windows EVTX 的FILETIME 是 UTC时间,注意转化为瑞士当地时间。

image-20210721173442458

image-20210721173517788

我们发现用户Daenerys在2020年2月9日21:59 (当地时间15:59)通过SMB协议登录到WIN-IL7M7CC6UVU(域控制器),而且使用了PSExec.exe 利用Deanerys用户登录了域控服务器。攻击者可能使用了Mimikatz拿到了Daenerys用户的哈希,然后用于横向移动渗透到DC。

 

posted @ 2021-07-26 15:36  蚁景网安实验室  阅读(6707)  评论(0编辑  收藏  举报