闲聊Windows系统日志


title: "闲聊Windows系统日志"
date: 2021-02-22T18:59:49+08:00
draft: true
tags: ['windows']
author: "dadigang"
author_cn: "大地缸"
personal: "http://www.real007.cn"


关于作者

http://www.real007.cn/about

闲聊Windows系统日志

2018-07-302018-07-30 17:38:54阅读 4.2K0

\ 本文作者:TomKing,本文属FreeBuf原创奖励计划,未经许可禁止转载*

前言

最近遇到不少应急都提出一个需求,能不能溯源啊?这个事还真不好干,你把证据,犯案时间都确定的时候,要求翻看监控(日志)对应犯罪嫌疑人时,突然说监控(日志)没有记录。不过现在都要求保留至少6个月的日志,因此这种原因会少了很多,然而我对于Windows中系统日志不了解,在解读时经常摸不着头脑,所以就认真的分析了evtx格式的系统日志。这篇文章可能记录的不是很全面,师傅们多多指教。

Windows系统日志简介

Windows操作系统在其运行的生命周期中会记录其大量的日志信息,这些日志信息包括:Windows事件日志(Event Log),Windows服务器系统的IIS日志,FTP日志,Exchange Server邮件服务,MS SQL Server数据库日志等。处理应急事件时,客户提出需要为其提供溯源,这些日志信息在取证和溯源中扮演着重要的角色。

Windows事件日志文件实际上是以特定的数据结构的方式存储内容,其中包括有关系统,安全,应用程序的记录。每个记录事件的数据结构中包含了9个元素(可以理解成数据库中的字段):日期/时间、事件类型、用户、计算机、事件ID、来源、类别、描述、数据等信息。应急响应工程师可以根据日志取证,了解计算机上上发生的具体行为。

查看系统日志方法,Windows系统中自带了一个叫做事件查看器的工具,它可以用来查看分析所有的Windows系统日志。打开事件查看器方法:开始->运行->输入eventvwr->回车的方式快速打开该工具。使用该工具可以看到系统日志被分为了两大类:Windows日志和应用程序和服务日志。早期版本中Windows日志只有,应用程序,安全,系统和Setup,新的版本中增加了设置及转发事件日志(默认禁用)。

系统内置的三个核心日志文件(System,Security和Application)默认大小均为20480KB(20MB),记录事件数据超过20MB时,默认系统将优先覆盖过期的日志记录。其它应用程序及服务日志默认最大为1024KB,超过最大限制也优先覆盖过期的日志记录。

Windows事件日志中共有五种事件类型,所有的事件必须拥有五种事件类型中的一种,且只可以有一种。五种事件类型分为:

  1. 信息(Information)

信息事件指应用程序、驱动程序或服务的成功操作的事件。

  1. 警告(Warning)

警告事件指不是直接的、主要的,但是会导致将来问题发生的问题。例如,当磁盘空间不足或未找到打印机时,都会记录一个“警告”事件。

  1. 错误(Error)

错误事件指用户应该知道的重要的问题。错误事件通常指功能和数据的丢失。例如,如果一个服务不能作为系统引导被加载,那么它会产生一个错误事件。

  1. 成功审核(Success audit)

成功的审核安全访问尝试,主要是指安全性日志,这里记录着用户登录/注销、对象访问、特权使用、账户管理、策略更改、详细跟踪、目录服务访问、账户登录等事件,例如所有的成功登录系统都会被记录为“ 成功审核”事件。

  1. 失败审核(Failure audit)

失败的审核安全登录尝试,例如用户试图访问网络驱动器失败,则该尝试会被作为失败审核事件记录下来。

事件日志文件存储位置(Vista/Win7/Win8/Win10/Server2008/Server 2012及之后的版本)

类型

事件类型

描述

文件名

Windows日志

系统

包含系统进程,设备磁盘活动等。事件记录了设备驱动无法正常启动或停止,硬件失败,重复IP地址,系统进程的启动,停止及暂停等行为。

System.evtx

安全

包含安全性相关的事件,如用户权限变更,登录及注销,文件及文件夹访问,打印等信息。

Security.evtx

应用程序

包含操作系统安装的应用程序软件相关的事件。事件包括了错误、警告及任何应用程序需要报告的信息,应用程序开发人员可以决定记录哪些信息。

Application.evtx

应用程序及服务日志

Microsoft

Microsoft文件夹下包含了200多个微软内置的事件日志分类,只有部分类型默认启用记录功能,如远程桌面客户端连接、无线网络、有线网路、设备安装等相关日志。

详见日志存储目录对应文件

Microsoft Office Alerts

微软Office应用程序(包括Word/Excel/PowerPoint等)的各种警告信息,其中包含用户对文档操作过程中出现的各种行为,记录有文件名、路径等信息。

OAerts.evtx

Windows PowerShell

Windows自带的PowerShell应用的日志信息。

Windows PowerShell.evtx

Internet Explorer

IE浏览器应用程序的日志信息,默认未启用,需要通过组策略进行配置。

Internet Explorer.evtx

表1 事件日志存储位置

提示:%SystemRoot%为系统环境变量,默认值为C:\WINDOWS。

图 EVTX事件日志文件

使用事件查看器工具可以将这些EVTX事件日志文件导出为evtx,xml,txt和csv格式的文件。

常见的Windows事件的分析方法

Windows事件日志中记录的信息中,关键的要素包含事件级别、记录时间、事件来源、事件ID、事件描述、涉及的用户、计算机、操作代码及任务类别等。其中事件的ID与操作系统的版本有关,以下列举出的事件ID的操纵系统为Vista/Win7/Win8/Win10/Server2008/Server 2012及之后的版本:

事件ID

说明

1102

清理审计日志

4624

账号成功登录

4625

账号登录失败

4768

Kerberos身份验证(TGT请求)

4769

Kerberos服务票证请求

4776

NTLM身份验证

4672

授予特殊权限

4720

创建用户

4726

删除用户

4728

将成员添加到启用安全的全局组中

4729

将成员从安全的全局组中移除

4732

将成员添加到启用安全的本地组中

4733

将成员从启用安全的本地组中移除

4756

将成员添加到启用安全的通用组中

4757

将成员从启用安全的通用组中移除

4719

系统审计策略修改

表 常见Windows账户及相关shijain 对照表

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

登录类型

描述

2

交互式登录(用户从控制台登录)

3

网络(例如:通过net use,访问共享网络)

4

批处理(为批处理程序保留)

5

服务启动(服务登录)

6

不支持

7

解锁(带密码保护的屏幕保护程序的无人值班工作站)

8

网络明文(IIS服务器登录验证)

10

远程交互(终端服务,远程桌面,远程辅助)

11

缓存域证书登录

表 登录类型

Windows XML 事件日志格式

系统事件日志主要保存的类型为: .evtx,.xml, .txt,.csv。对于后三种文件格式已经比较了解,现在分析下evtx后缀额格式。事件日志(evtx)文件是一种二进制格式的文件。

图 evtx文件类型

文件头部签名为十六进制45 6C 66 46 69 6C 65 00(ElfFile\x00)。Evtx文件结构包含三部分:文件头,数据块,结尾空值。文件头由4096字节大小组成,具体的结构如下表:

偏移

长度

描述

0

8

“ElFile\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

空值

表 File Header内容

Windows XML 事件日志大小

事件日志文件大小 = (数据块的数量*65536)+4096。

文件头偏移量为120的数据值为文件标志,该部分的组成如下表:

标识符

描述

0x0001

已更新

0x0002

已填充

图 File Header文件格式

每个数据块大小为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

事件记录校验和

56

64

空值

120

4

未知

124

4

校验和

表 Chunk header

图 Chunk Header文件格式

数据块包含多个事件记录,一个事件记录对应一条日志信息。事件记录的的大小及组成如下表:

偏移量

长度

描述

0

4

“**\x00\x00”

签名

4

4

事件记录块的大小

8

8

事件记录标识符

16

8

事件记录写入时间

24

事件记录内容

4

尺寸拷贝

表 Event Record

Windows事件日志取证分析注意要点

Windwos操作系统默认没有提供删除特定日志记录的功能,仅提供了删除所有日志的操作功能。也就意味着日志记录ID(Event Record ID)应该是连续的,默认的排序方式应该是从大到小往下排列。

通过对Windows事件日志的取证分析,取证人员可以对操纵系统、应用程序、服务、设备等操作行为记录,通过关键的时间点进行回溯。

事件查看器单条日志记录删除思路

分析事件记录格式后,了解到Windows系统在解析事件记录日志时,按照Event Record的大小逐条读取日志的内容。假设修改某条日志的长度,使长度覆盖下一条日志,理论上Windows系统解析日志时,就会跳过下一条日志,相当于下一条日志被”删除”。 DanderSpritz中的eventlogedit 就是这个思路,仅仅时修改了程度,实际上并没有删除日志内容。实现思路如下图:

图 删除事件记录思路

为了确保修改后的日志文件能够被正确识别,还需要修改多个标志位和重新计算校验和。

图 不正确修改事件日志

为了确保不出现如上图所示的错误,总结一下删除单条日志内容的方法:

  1. File Header中的Next recordidentifier的值减一(偏移量为24字节)
  2. 重新计算File Header中CheckSum(偏移量为124字节)
  3. 修改Event Record,找到需删除的记录和需删除前一条记录并计算日志的长度,更新Event Record的Event record identifier
  4. 更新ElfChnk,需要修改的内容为:Last event record number,Last event recordidentifier,Last event record data offset,Event recordschecksum,Checksum

根据以上的方式进行删除单条日志是NAS方程式组织的DanderSpritz中的eventlogedit实现方式。实际上只是将信息进行了隐藏,在此基础上,将指定日志的内容清空,就能够实现真正的日志删除。

单条日志删除

准备:测试文件(test.evtx—系统中的Setup.evtx),Winhex,python

下载地址:https://github.com/ByPupil/delete-windows-log

该文件中包含了8条日志,下面演示删除第8条记录的实践过程。使用事件查看器打开确认最后一条事件的EventRecordID,该实验中的值为8。

图 test.evtx文件

  1. File Header中的Next recordidentifier的值减一

File Header是整个文件最开始的部分,Nextrecord identifier的偏移量为24(0x18),其长度为8字节。实验文件test.evtx内容如下:

图 test.evtx文件内容

Next record identifier的值为0x09。将该值减一0x08 写入。这儿需要提一下的是,该文件的字节序为小端,因此低位会在前面。

  1. 重新计算File Header中CheckSum

计算方法:前120字节做CRC32运算,偏移量为124(0x7c),长度为4。修改后的文件内容如下图:

图 修改后的test.evtx

现在提取前120字节的内容:

456C6646696C650000000000000000000000000000000000080000000000000080000000010003000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

使用python中binascii模块计算CRC32。代码如下:

图 计算CRC32代码

输出的结果为:0xfb027480,修改文件内容,修改后如下图:

图 修改checksum

  1. 修改Event Record

通过find hex values查找2A2A0000,定位到第8条Event Record。该条Event Record的长度为 0x180。如下图:

图 第8条EventRecord

第7条Event Record的长度为0x170。如下图:

图 第7条EventRecord

计算需要修改的内容长度。新长度为0x170+0x180=0x2f0。由于是删除最后一条记录,所以不需要更新Event record identifier。修改长度的位置有两个,分别为第7条日志的长度和第 8条日志的最尾部。

图 第7条日志

图 第8条日志

  1. 更新ElfChnk

搜索ElfChuk关键字,找到对应ElfChuk位置。如下图:

图 Elfchnk

修改如下内容:

Last event record number减1,为0x07

Last event record identifier减1,为0x07

Last event record data offset,为0x13c8

Event records checksum,为0xf403d736

Checksum,为0x7563439c

Event records checksum的数据计算范围:chunk中的事件记录的偏移量是固定的,是从文件头偏移0x1200个字节,意思就是checksum的数据起始位置为0x1200。事件记录的结束位置的计算方式:chunk的起始块地址+ Free space offset= events records data。

Checksum的数据计算范围:是固定地址0x1000-0x1078,0x1080-0x1200 。

修改后的ElfChnk如下图:

图 修改后的ElfChnk

经过修改后,使用系统自带的事件查看器打开,此时日志文件中最后一条记录被成功删除。

图 成功删除单条日志记录

此处讲的是删除最后一条记录的详细过曾,删除第一条和中间的记录在实际操作中会有一些不一样的部分,只要对了解evtx文件的格式,删除evtx格式内容中的记录方法并不唯一。只需要删除对应的数据块,并最终使该文件的校验通过即可。

恢复被删除的记录

使用以上的方式删除单挑记录,其实被删除的数据并没有真正的被删掉,严格意义上讲就是将部分数据进行了隐藏。恢复原本的数据可以使用fox-it的danderspritz-evtx工具,原因就是用删除数据的思路反向恢复就行。使用该工具,确实可以将被删除的数据提取出来,不过恢复的evtx格式的文件并不能被打开。暂时没有研究该代码的实现过程,所以不能下分析具体原因。

工具使用如下图:

图 danderspritz-evtx使用

恢复数据被导出为xml格式文件,如下图:

图 该条为被删除的第8条记录

恢复的evtx格式文件打开出错,如下图:

如果需要将日志真正的删除,可以使用\x00填充被隐藏的数据部分填充。并重新计算相应的checksum。

参考链接

https://blog.fox-it.com/2017/12/08/detection-and-recovery-of-nsas-covered-up-tracks/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容