windows系统安全日志取证工具

0x01 关于日志

Windows安全事件日志中详细记录了是谁在什么时候通过什么手段登录到系统或者注销了登录,通过分析该日志可以详细了解服务器的安全情况以及必要时的取证工作。

 

0x02 查看日志

传统的查看Windows安全日志方法是通过系统自带的“事件查看器”

操作方法如下: 1、右键“我的电脑”,选择管理,打开“事件查看器”; 或者按下Windows键+R的组合键,在运行窗口中输入“eventvwr.msc”直接打开“事件查看器”。

 

 

 

 

使用该工具可以看到系统日志被分为了两大类:Windows日志和应用程序和服务日志。早期版本中Windows日志只有,应用程序,安全,系统和Setup,新的版本中增加了设置及转发事件日志(默认禁用)。

 

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

 

 

0x03 日志分类

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

1.     信息(Information)

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

2.     警告(Warning)

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

3.     错误(Error)

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

4.     成功审核(Success audit)

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

5.     失败审核(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。

地址:

%SystemRoot%\System32\winevt\Logs

C:\Windows\System32\winevt\Logs

 

 

 

 

 

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

 

 

常见的Windows事件ID说明

 

 

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账户及相关事件对照表

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

登录类型

描述

2

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

3

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

4

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

5

服务启动(服务登录)

6

不支持

7

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

8

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

10

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

11

缓存域证书登录

登录类型

 

 

0x04 Windows 事件日志格式

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

使用Linux下的file命令 ,来识别文件类型或者编码类型(查看头部信息来获取文件类型)。

 

 

 

可参考的资料:

https://github.com/williballenthin/python-evtx

evtx文件是指Windows Vista之后用于保存系统日志信息的文件

evtx文件结构包含三部分:

file header

chunks

trailing empty values

 

 

 

 

file header保存evtx文件基本信息

chunks保存日志内容,包括具体每条日志的内容和校验和

trailing empty values为尾随空值,用于填充文件长度,内容任意,不会影响evtx文件的有效性

 

(1) file header

格式可参考:

https://github.com/libyal/libevtx/blob/master/documentation/Windows%20XML%20Event%20Log%20(EVTX).asciidoc#2-file-header

(2) chunks

格式可参考:

https://github.com/libyal/libevtx/blob/master/documentation/Windows%20XML%20Event%20Log%20(EVTX).asciidoc#3-chunk

chunks包含多个Event Record,1个Event Record对应一条日志信息

(3) Event Record

格式可参考:

https://github.com/libyal/libevtx/blob/master/documentation/Windows%20XML%20Event%20Log%20(EVTX).asciidoc#32-event-record

Event Record的内容以Binary XML格式保存

Binary XML格式可参考:

https://github.com/libyal/libevtx/blob/master/documentation/Windows%20XML%20Event%20Log%20(EVTX).asciidoc#4-binary-xml

值得注意的是EventRecordID标签,用来表示日志的顺序号

 

 

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

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

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

 

 

 

0x05 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实现方式。实际上只是将信息进行了隐藏,在此基础上,将指定日志的内容清空,就能够实现真正的日志删除。

 

 

 

 

 

查看日志格式实战

 

 

 

 

 

比如我们在windows日志中的系统类型日志中,查看事件ID11的日志数据

安装python-evtx:

pip install python-evtx

 

 

 

 

 

下载脚本:

https://github.com/williballenthin/python-evtx/blob/master/scripts/evtx_record_structure.py

 

 

使用脚本分析日志:

evtx_record_structure.py System2.evtx 11

 

 

 

 

 

删除单条日志的实例

 

1、File header中的Next record identifier值减1

File header位于文件最开始的部分

Next record identifier的偏移为24(0x18h),长度8

对应测试文件System2.evtx,如下图

 

Next record identifier为07A9,转换成十六进制1961

1后为1960,即十六进制的07a8

 

 

 

 

 

 

2、重新计算File header中的Checksum

计算方法: 120字节做CRC32运算,偏移为124(0x7Ch),长度4

修改Next record identifier后的内容如下图

 

 

 

 

120字节的内容为

 

 

 

 

计算CRC32可使用如下python代码:

import binascii   

def crc2hex(crc):   

    return '%08x' % (binascii.crc32(binascii.a2b_hex(crc)) & 0xffffffff)     

d='456C6646696C6500000000000000000000000000000000007B0700000000000080000000010003000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'  

print(crc2hex(d))

 

 

 

 

主要脚本中需要计算CRC32的字符串(d)不要有空格

 

 

 

 

 

3、修改Event Record

通过搜索magic string 0x2A 0x2A 0x00 0x00定位不同的Event Record

第一条Event Record的内容如下图

 

 

 

长度为0x500

Event record identifier为0x001h 注意分区Event record identifier和EventID

 

 

 

 

 

 

 

 

比如我们要删除第二条日志,我们就需要修改第一条Event Record的长度,使其覆盖第二条Event Record

 

第二条日志的长度 0x118 如下图

 

 

 

 

新长度为原第一条日志的长度加第二条日志的长度:

0x500h+0x118h=0x618h

 

 

需要更新长度的地方在第一条的起始和第二条的尾部。

第一条

 

 

 

第二条尾部

 

 

 

如果我们删除的不是最后一条日志,我们还需要更新Event record identifier 

 

 

 

 

 

 

 

 

4、更新ElfChuk

搜索magic string ElfChuk

注:

有可能有多个ElfChuk,需要找到对应的ElfChuk

测试文件System.evtx只有一个ElfChuk

内容如下图

 

 

 

 

 

 

修改如下内容:

Last event record number减1,

Last event record identifier减1

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

Checksum的数据计算范围:是固定地址0×1000-0×1078,0×1080-0×1200 。

 

恢复被删除的记录

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

工具使用如下图:

 

 

 

 

 

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

 

 

 

 

 

 

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

 

 

 

 

 

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

 

 

 

 

参考链接

 

系统日志删除思路参考链接:

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

系统日志文件格式参考链接:

https://github.com/libyal/libevtx/blob/master/documentation/Windows%20XML%20Event%20Log%20(EVTX).asciidoc#2-file-header

单条日志删除参考链接:

https://www.secpulse.com/archives/73273.html

 

 

 

 

 

转载于:https://www.cnblogs.com/-qing-/p/10692865.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值