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) 是一种二进制格式的文件:
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 事件查看器只提供了删除全部日志的功能,并没有提供删除特定日志的功能,那我们如何删除指定的日志?
删除单条事件日志:
删除单条日志内容的方法:
- FileHeader 中的下一个记录标识符的值减一。(下一个记录标识符偏移量为24)
- 重新计算FileHeader中的校验和(校验和偏移量为124)
- 修改事件记录,找到需要删除的记录,和需要删除记录的前一条,计算日志长度,更新事件记录标识符
- 更新ElfChnk,需要修改的内容是:最后一个事件编号、最后一个事件标识符、最后一个事件记录数据偏移量、事件记录校验和(CRC32)、校验和(头部前120字节和第128字节到512字节)
具体操作:
首先打开事件查看器,确定我们要删除的日志的EventRecordID。
这里是EventRecordID是19。使用16进制文件编辑器打卡事件日志文件。
- 首先修改文件头中的下一个记录标识符的值。
这里是0x14将其减一,修改为0x13。这里需要注意,事件日志文件字节序为小端,低位在前。
- 重新计算文件头中的校验和。
计算方法:前120字节做CRC32运算。校验和偏移量为124 长度为4
CRC32计算Python实现
1 |
|
取前120字节数据,计算CRC32。获得结果0x92fb7778,修改文件内容如下图:
- 修改事件记录
查找16进制值2A2A0000,定位到第19条事件日志。长度为0x4D8,如下图:
第18条长度是0x450,如下图:
计算新的长度:0x4d8+0x450=0x928,需要修改的位置有两个地方,一个是第7条日志的长度,另一个是第8条日志的尾部。
第18条日志:
第19条日志:
- 更新EifChnk:
搜索EifChnk关键字,如下图:
需要修改的内容:
需要修改的内容 | 值 |
---|---|
最后一个事件编号 | 0x12 |
最后一个事件标识符 | 0x12 |
最后一个事件记录数据偏移量 | 0x4f68 |
事件记录校验和(0x1200到最后一个事件结束 CRC32计算) | 0x7d800e45 |
校验和(头部前120字节和第128字节到512字节 CRC32计算) | 0xaddaa5cb |
- 用事件查看器查看
保存后,用事件管理器打开,发现事件数减少了,对照修改之前的事件列表,发现减少的一个正是我们隐藏掉的那一个。
至此,我们能够隐藏掉指定条Windows事件日志了。
参考链接:
https://www.freebuf.com/vuls/175560.html
https://github.com/libyal/libevtx/blob/master/documentation/WindowsXMLEventLog(EVTX).asciidoc