Python 获取WindowsEvtx日志文件并解析
.evtx是Windows事件日志文件的扩展名,用于记录系统和应用程序的运行事件,以XML格式存储。
常见的evtx文件包括记录系统事件的System.evtx、记录应用程序事件的Application.evtx和记录安全审核事件的Security.evtx。
这些文件可通过Windows事件查看器、PowerShell和evt parser等工具查看和分析。
EVTX文件保存在特定路径中,当文件记录满时,会覆盖最开始的记录。
Security.evtx也是取证中最常用到的。
存储位置:
C:\Windows\System32\winevt\Logs\Security.evtx
Evtx日志分析
Windows用 Event ID来标识事件的不同含义,一些常见的Event ID 如下:
事件ID | 描述 |
---|---|
4608 | Windows 启动 |
4609 | Windows 关机 |
4616 | 系统时间发生更改 |
4624 | 用户成功登录到计算机 |
4625 | 登录失败。使用未知用户名或密码错误的已知用户名尝试登录。 |
4634 | 用户注销完成 |
4647 | 用户启动了注销过程 |
4648 | 用户在以其他用户身份登录时,使用显式凭据成功登录到计算机 |
4703 | 令牌权限调整 |
4704 | 分配了用户权限 |
4720 | 已创建用户账户 |
4725 | 账户被禁用 |
4768 | 请求Kerberos身份验证票证(TGT) |
4769 | 请求Kerberos服务票证 |
4770 | 已续订Kerberos服务票证 |
4779 | 用户在未注销的情况下断开了终端服务器会话 |
Windows日志 模块安装
pip install python-evtx
demo如下(随便写的):
import html
from xml.dom import minidom
import Evtx.Evtx as evtx
path = r"C:\Windows\Sysnative\winevt\Logs\Security.evtx"
with evtx.Evtx(path) as log:
for record in log.records():
timestamp = record.timestamp().timestamp()
r = {}
xml_doc = minidom.parseString(record.xml())
# 事件ID 例如 4624登录成功,4625登录失败
id_ = xml_doc.getElementsByTagName('EventID')[0].childNodes[0].data
data = xml_doc.getElementsByTagName('Data')
for d in data:
name = d.getAttribute('Name')
value = html.unescape(d.childNodes[0].data)
日志比较多,可以先筛选过滤Windows Security.evtx 安全日志:
wevtutil epl Security D:\Security_01.evtx /q:"*[System[(Level=4) and (EventID=4624) and TimeCreated[timediff(@SystemTime) <= 43200000]]]"
将Security路径下,所有消息D:\Security_01.evtx(Level=4),EventID=1001,
并且在一个小时内产生的windows事件日志导出到:D:\1001.evtx
注意,上面有个Application可以换成Security,Setup,System等日志路径。