为什么要导原始 evtx
取证要求保存原始事件日志文件而不是文本导出:evtx 保留完整的结构化字段与通道信息,文本导出会丢失大量可分析维度。批量导出 Security、System、Application 与 PowerShell/Operational 是最小集。
快照的概念
系统在持续写入新事件,导出得到的只是某个时刻的快照。因此必须记录导出时间点,并在报告里说明该快照覆盖到何时,避免把「后来发生的事件不在日志里」误读成没有发生。
基本信息
| 导出命令 | wevtutil epl <通道> <.evtx 路径> |
|---|---|
| 最小通道集 | Security、System、Application、PowerShell/Operational |
| 扩展通道 | 计划任务、终端服务、WMI-Activity 按需加导 |
| 校验 | Get-FileHash 计算哈希并登记清单 |
| 权限要求 | 读取 Security 通道需管理员 |
| 注意事项 | 导出的是快照,必须记录时间点 |
典型使用场景
- 事件处置开始时固定日志证据
- 为分析工具提供原始文件
- 移交时证明日志未被修改
- 满足审计要求下的日志留存
- 为时间线重建准备数据
批量导出并哈希
批量导出并哈希
$dir='C:\evidence\evtx'; New-Item -ItemType Directory -Force $dir | Out-Null
foreach ($log in 'Security','System','Application','Microsoft-Windows-PowerShell/Operational') {
$f = Join-Path $dir ($log.Replace('/','_') + '.evtx'); wevtutil epl $log $f
}
Get-ChildItem $dir | Get-FileHash -Algorithm SHA256 | Format-Table Hash, Path -AutoSize
wevtutil el | Select-String -Pattern 'Task|TerminalServices|WMI' # 挑选需要加导的通道
Get-Date -Format o > $dir\_export_time.txt输出逐列读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| 文件名 | 对应通道名 | 含斜杠的通道名导出时会被替换为下划线 |
| 文件大小 | evtx 体积 | 明显过小说明导出失败或该通道为空 |
| 哈希 | 文件摘要 | 用于后续校验与清单登记 |
| 导出时间 | 采集时刻 | 报告须说明日志覆盖到该时刻为止 |
系统仍在写入新事件:导出只是当时快照,务必记录导出时间点;日志空间有限,旧记录会被覆盖,必要时尽早导出。
发现入侵时间窗已超出当前日志范围时,应检查是否存在归档文件或已转发到日志服务器:这决定了还能否还原更早的活动。
按需查询而不改动原件
按需查询而不改动原件
wevtutil qe Security "/q:*[System[(EventID=4625)]]" /c:20 /rd:true /f:text # 只读查询
wevtutil gli Security # 查看日志大小与最旧记录时间
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=1102} -MaxEvents 5 -ErrorAction SilentlyContinue建议加导的通道
- 计划任务相关通道(TaskScheduler/Operational)
- 终端服务连接记录(RDP 1149 等)
- WMI-Activity 用于订阅排查
- Defender 与应用程序兼容性相关通道