开关机是天然锚点
系统的启动与关机事件时间明确、数量有限、含义清晰,非常适合当作时间线的锚点:先把一段时间切成若干个运行阶段,再在阶段内做细粒度分析,比在连续数周的日志上滑动窗口要高效得多。Windows 上对应 System 日志的事件 6005、6006、6008、6013,Linux 上对应 journald 的 boot 分段与 last 的关机记录。
异常关机值得单独看
正常关机与意外断电在日志里留下的记录不同:意外的关机事件往往缺少正常的停止过程,同时伴随文件系统检查或服务异常启动。当可疑主机出现异常关机时,要评估是故障、断电,还是有人试图中断取证或逃避检测。
基本信息
| 适用平台 | Windows(事件日志)、Linux(journald、utmp/wtmp) |
|---|---|
| Windows 事件 | 6005 启动、6006 正常停止、6008 意外关机、6013 运行时长 |
| Linux 查看 | journalctl --list-boots、last -x、uptime -s |
| 用途 | 切分分析窗口、判断是否重启、验证内存镜像的时间点 |
| 输出 | 阶段列表:每段的起止时刻与运行长度 |
典型使用场景
- 内存镜像与日志时间对不上:用最近的启动事件确认镜像采集时系统已运行多久
- 排查为什么日志中断:确认中断点是否对应一次重启
- 缩小可疑窗口:把注意力集中在某次启动之后的时间段
- 核对桌面终端异常关机:判断是否有人为干预取证
- 跨主机时间线:用各自的启动事件把多台主机的时间线分段并列
枚举开关机锚点
枚举开关机锚点
# Windows:取 System 日志里的启动与关机事件
Get-WinEvent -FilterHashtable @{LogName='System'; Id=6005,6006,6007,6008,6013} -MaxEvents 20 |
Select-Object TimeCreated, Id, ProviderName, Message | Format-Table -AutoSize
# 判断某次启动之后系统运行了多久
Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime
# Linux:列出所有可用的 boot 分段
# journalctl --list-boots --no-pager
# Linux:从 wtmp 看重启与关机记录
# last -x | head -20事件 ID 读法
| 事件 ID | 含义 | 分析用法 |
|---|---|---|
| 6005 | 事件日志服务启动 | 近似代表系统本次启动 |
| 6006 | 事件日志服务停止 | 表示正常关机 |
| 6007 | 意外关机记录(部分版本) | 与 6008 配合判断异常下线 |
| 6008 | 上次关机是意外的 | 断电、硬复位或崩溃 |
| 6013 | 系统运行时长 | 可直接读出本次运行时长 |
休眠与快速启动会让关机事件的记录不完整:进入休眠时可能只有睡眠相关事件而没有独立的关机记录,分析前先确认该主机的电源策略。
事件 6008 只是「上次关机是意外的」,它本身不给出关机时刻,需要用前一条 6005 以及事件日志的最后记录时间反推。