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)
信息事件指应用程序、驱动程序或服务的成功操作的事件。
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 |
ReadEventLogA函数
- 2018年12月5日
- 2分钟阅读时长
从指定的事件日志中读取指定数量的条目。该函数可用于按时间顺序或反向时间顺序读取日志条目。
句法
C ++复制
BOOL ReadEventLogA(HANDLE hEventLog,DWORD dwReadFlags,DWORD dwRecordOffset,LPVOID lpBuffer,DWORD nNumberOfBytesToRead,DWORD *pnBytesRead,DWORD *pnMinNumberOfBytesNeeded );
参数
hEventLog
要读取的事件日志的句柄。该 OpenEventLog函数返回该句柄。
dwReadFlags
使用以下标志值指示如何读取日志文件。此参数必须包含以下值之一(标志是互斥的)。
| 值 | 含义 |
|---|---|
| EVENTLOG_SEEK_READ 0×0002 |
从dwRecordOffset参数中指定的记录开始读取。 如果函数无法确定日志文件的大小,则此选项可能无法用于大型日志文件。有关详细信息,请参阅知识库文章,177199。 |
| EVENTLOG_SEQUENTIAL_READ 0×0001 |
按顺序读取记录。 复制 |
您必须指定以下标志之一以指示连续读取操作的方向(标志是互斥的)。
| 值 | 含义 |
|---|---|
| EVENTLOG_FORWARDS_READ 0x0004 |
按时间顺序(从最旧到最新)读取日志。 复制 |
| EVENTLOG_BACKWARDS_READ ×0008 |
按相反的时间顺序(从最新到最旧)读取日志。 |
dwRecordOffset
应该开始读取操作的日志条目的记录号。除非dwReadFlags包含EVENTLOG_SEEK_READ标志,否则将忽略此参数。
lpBuffer
应用程序分配的缓冲区,它将接收一个或多个EVENTLOGRECORD结构。即使nNumberOfBytesToRead参数为零,此参数也不能为NULL。
此缓冲区的最大大小为0x7ffff字节。
nNumberOfBytesToRead
lpBuffer缓冲区的大小,以字节为单位。此函数将读取适合缓冲区的任意数量的日志条目; 该函数不会返回部分条目。
pnBytesRead
指向变量的指针,该变量接收函数读取的字节数。
pnMinNumberOfBytesNeeded
指向接收lpBuffer缓冲区所需大小的变量的指针。此值仅在此函数返回零时有效, GetLastError返回ERROR_INSUFFICIENT_BUFFER。
回报价值
如果函数成功,则返回值为非零。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用 GetLastError。
备注
当此函数成功返回时,事件日志中的读取位置将根据读取的记录数进行调整。
注意 此源的已配置文件名也可能是其他源的已配置文件名(多个源可作为单个日志下的子项存在)。因此,此函数可能会返回由多个源记录的事件。