Windows日志简要解析

本文最后更新于:几秒前

简介:

Windows操作系统在运行过程中会记录大量日志信息。这些日志主要包括Windows 事件日志、IIS日志、FTP日志、Exchange Server邮件服务日志、SQL Server 数据库日志

Windows 日志文件以特定的数据结构存储,每个记录事件的数据结构包含9个元素:日期/时间、事件类型、用户、计算机、事件ID、来源、类别、描述、数据。 查看日志可以通过系统自带的事件查看器查看。

Windows系统内置三个核心日志文件:System、Security、Application,默认大小均为20480kB也就是20MB,记录数据超过20MB时会覆盖过期的日志记录;其他的应用程序以及服务日志默认大小均为1MB,超过这个大小一样的处理方法。

日志类型:

Windows 事件日志共有5种类型,所有的事件类型必须是这5种的其中一种,而且只能是一种。这5种事件类型分别是:

事件类型 注释
信息(Information) 指应用程序、驱动程序、或服务的成功操作事件
警告(Warning) 警告事件不是直接的、主要的,但是会导致将来问题的发生
错误(Error) 指用户应该知晓的重要问题
成功审核(Success Audit) 主要指安全性日志,记录用户的登录/注销、对象访问、特权使用、账户管理、策略更改、详细跟踪、目录服务访问、账户登录事件
失败审核(Failure Audit) 失败的审核安全登录尝试

事件日志文件类型:

类别 类型 描述 文件名
Windows日志 系统 包含系统进程,设备磁盘活动等。事件记录了设备驱动无法正常启动或停止,硬件失败,重复IP地址,系统进程的启动,停止及暂停等行为。 System.evtx
Windows日志 安全 包含安全性相关的事件,如用户权限变更,登录及注销,文件及文件夹访问,打印等信息。 Security.evtx
Windows日志 应用程序 包含操作系统安装的应用程序软件相关的事件。事件包括了错误、警告及任何应用程序需要报告的信息,应用程序开发人员可以决定记录哪些信息。 Application.evtx
应用程序及服务日志 Microsoft Microsoft文件夹下包含了200多个微软内置的事件日志分类,只有部分类型默认启用记录功能,如远程桌面客户端连接、无线网络、有线网路、设备安装等相关日志。 详见日志存储目录对应文件
应用程序及服务日志 Microsoft Office Alters 微软Office应用程序(包括Word/Excel/PowerPoint等)的各种警告信息,其中包含用户对文档操作过程中出现的各种行为,记录有文件名、路径等信息。 OAerts.evtx
应用程序及服务日志 Windows PowerShell Windows自带的Powershell的日志信息 Windows Powersh.evtx
应用程序及服务日志 Internet Explore IE浏览器应用程序的日志信息,默认未启用 InternetExplotrer.evtx

日志文件存放位置:%SystemRoot%\System32\winevt\Logs

常见的事件ID对应表:

适用于Win8/Win10/Server2008/Server2012 以及以后版本

事件ID 说明
1102 清理审计日志
4624 账号登录成功
4625 账号登录失败
4672 授予特殊权限
4720 创建用户
4726 删除用户
4728 将成员添加到启用安全的全局组中
4729 将成员从安全的全局组中移除
4732 将成员添加到启用安全的本地组中
4733 将成员从启用安全的本地组中移除
4756 将成员添加到启用安全的通用组中
4757 将成员从启用安全的通用组中移除
4719 系统审计策略修改

其余事件ID可以通过此网站查找:http://www.eventid.net/search.asp

这五类事件中最重要的是成功审核(Success Audit),所有系统登录成功都会被标记为成功审核。每个成功登录事件都会标记一个登录类型。

登录类型 描述
2 交互式登录(用户从控制台登录)
3 网络(通过net、use访问共享网络)
4 批处理
5 服务启动,由服务控制管理器启动
7 解锁(带密码保护的屏幕保护程序的无人值班工作站)
8 网络明文(IIS服务器登录验证)
9 新凭据登录 (呼叫方为出站连接克隆了其当前令牌和指定的新凭据。 新登录会话具有相同的本地标识,但对其他网络连接使用不同的凭据。)
10 终端服务,远程桌面,远程辅助
11 使用存储在计算机本地的网络凭据登录到此计算机的用户。 未联系域控制器以验证凭据。

Windows 日志格式:

事件日志(Evtx) 是一种二进制格式的文件:

image-20200424135911618

Evtx 文件结构包括三部分:文件头、数据块、结尾空值。

文件头部4096字节。文件头部签名:45 6C 66 46 69 6C 65 00(ElfFile\x00)。

文件头部结构如下:

偏移 长度 描述
0 8 ElfFile\x00 文件签名
8 8 第一个数据块
16 8 最后一个数据块
24 8 下一个记录标识符
32 4 128 头大小
36 2 1 次版本号
38 2 3 主版本号
40 2 4096 数据块的偏移量
42 2 数据块的数量
44 76 空值
120 4 文件标志
124 4 校验和
128 3968 空值

Windows 事件日志大小是由数据块的数量决定的,事件日志文件大小=(数据块的数量x65536)+4096。文件标志如下:

标识符 描述
0x0001 已更新
0x0002 已填充

每个数据块的大小是65536字节,数据块首部标签名是45 6C 66 43 68 6E 6B 00(ElfChnk\x00),数据块是由数据块头部,事件记录,闲置空间组成。数据块文件头大小是512字节,结构如下:

偏移量 长度 描述
0 8 ElfChnk\x00 标签
8 8 第一个事件记录编号
16 8 最后一个事件编号
24 8 第一个事件记录标识符
32 8 最后一个事件标识符
40 4 128 指针数据偏移量
44 4 最后一个事件记录数据偏移量
48 4 自由空间偏移
52 4 事件记录校验和(CRC32)
56 64 空值
120 4 未知
124 4 校验和(头部前120字节和第128字节到512字节)

数据块里有多条事件记录,一条事件记录对应一条日志信息。一条事件记录由以下部分组成:

偏移量 长度 描述
0 4 “\x2a\x2a\x00\x00” 签名
4 4 事件块大小
8 8 事件记录标识符
16 8 事件记录写入时间
24 事件内容
4 尺寸拷贝

Windows 取证分析注意要点

windows 事件查看器没有提供删除特定日志的功能,也就说溯源取证时,可以直接按照事件ID,按照特定的时间点进行回溯。但是!但是! 通过特殊方法可以使事件查看器不显示特定的日志,前边说到一条事件记录偏移量为4处是事件块大小,也就说我们可以通过修改事件块大小,使其长度覆盖下一条日志,这样事件查看器解析系统日志时,就会跳过下一条日志,这样就使得特定事件被隐藏掉了。同时为了修改后的日志文件能够正常显示,我们还需要修改多个标志位和重新计算校验和。

如何隐藏指定条Windows事件日志

我们知道Windows 事件查看器只提供了删除全部日志的功能,并没有提供删除特定日志的功能,那我们如何删除指定的日志?

删除单条事件日志:

删除单条日志内容的方法:

  1. FileHeader 中的下一个记录标识符的值减一。(下一个记录标识符偏移量为24)
  2. 重新计算FileHeader中的校验和(校验和偏移量为124)
  3. 修改事件记录,找到需要删除的记录,和需要删除记录的前一条,计算日志长度,更新事件记录标识符
  4. 更新ElfChnk,需要修改的内容是:最后一个事件编号、最后一个事件标识符、最后一个事件记录数据偏移量、事件记录校验和(CRC32)、校验和(头部前120字节和第128字节到512字节)

具体操作:

首先打开事件查看器,确定我们要删除的日志的EventRecordID。

image-20200427214116761

这里是EventRecordID是19。使用16进制文件编辑器打卡事件日志文件。

  1. 首先修改文件头中的下一个记录标识符的值。

image-20200427214300372

这里是0x14将其减一,修改为0x13。这里需要注意,事件日志文件字节序为小端,低位在前。

image-20200427214331082

  1. 重新计算文件头中的校验和。

计算方法:前120字节做CRC32运算。校验和偏移量为124 长度为4

CRC32计算Python实现

1
2
3
4
import binascii
def CRC32(content):
return "%08x"%(binascii.crc32(binascii.a2b_hex(content))&0xffffffff)
print(CRC32(input()))

取前120字节数据,计算CRC32。获得结果0x92fb7778,修改文件内容如下图:

image-20200427214538558

image-20200427214525465

  1. 修改事件记录

查找16进制值2A2A0000,定位到第19条事件日志。长度为0x4D8,如下图:

image-20200427214654215

第18条长度是0x450,如下图:

image-20200427214723416

计算新的长度:0x4d8+0x450=0x928,需要修改的位置有两个地方,一个是第7条日志的长度,另一个是第8条日志的尾部。

第18条日志:

image-20200427215119757

第19条日志:

image-20200427215042452

  1. 更新EifChnk:

搜索EifChnk关键字,如下图:

image-20200427215308585

需要修改的内容:

需要修改的内容
最后一个事件编号 0x12
最后一个事件标识符 0x12
最后一个事件记录数据偏移量 0x4f68
事件记录校验和(0x1200到最后一个事件结束 CRC32计算) 0x7d800e45
校验和(头部前120字节和第128字节到512字节 CRC32计算) 0xaddaa5cb

image-20200427221752928

  1. 用事件查看器查看

保存后,用事件管理器打开,发现事件数减少了,对照修改之前的事件列表,发现减少的一个正是我们隐藏掉的那一个。

image-20200427221849166

至此,我们能够隐藏掉指定条Windows事件日志了。


参考链接:

https://www.freebuf.com/vuls/175560.html

https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/basic-audit-logon-events

https://github.com/libyal/libevtx/blob/master/documentation/WindowsXMLEventLog(EVTX).asciidoc


Windows日志简要解析
https://blog.icansudo.top/2020/04/24/windows日志简要解析与隐藏指定日志/
作者
odin
发布于
2020年4月24日
许可协议