超级时间线的定位
超级时间线(super timeline)把磁盘镜像、文件系统元数据、系统日志、注册表、应用日志等来源的事件,统一换算到同一时间基准后按时间排序成一条主线。plaso 生态是 Linux 分析机上最常用的实现:log2timeline.py 从镜像里解析出事件并写入 .plaso 存储文件,psort.py 负责过滤与导出成 CSV 等可读格式,pinfo.py 用来看存储概况。它解决的是「事件散落在十几个来源、时间还互相对不上」的问题,是主机溯源的主干工作,属于事后分析,不替代内存与流量的现场采集。
基本信息
| 适用平台 | Linux/macOS 分析机,Python 3 环境(plaso 以 pip 安装) |
|---|---|
| 工具链 | log2timeline.py 采集 / psort.py 导出 / pinfo.py 查看 |
| 常见输入 | 磁盘镜像(dd、E01)、内存镜像、日志目录、文件系统元数据 |
| 常见输出 | l2tcsv(CSV)、dynamic(SQLite)、json_line、xlsx |
| 磁盘要求 | .plaso 存储体积常大于被采集日志之和,先确认剩余空间 |
典型使用场景
- 跨来源对时:把登录日志与文件落地时间放在同一条线上互相印证
- 事件时间窗不明确,先全量采集再按窗口切片,避免反复回现场
- 多台主机各自采集后合并,还原横向移动路径
- 需要可复核产出:导出 CSV 交给他人用表格继续筛
- 在整盘镜像里回答「某个时间段究竟发生了什么」
- 验证单点痕迹真伪:用文件系统元数据反证日志里的时间
- 对外交付时间线材料:附录里保留采集与导出命令、工具版本与校验值
采集与导出
采集与导出
# 从镜像采集事件,时间戳统一按 UTC 渲染,结果存进 .plaso 存储
log2timeline.py --timezone UTC --storage-file case.plaso /evidence/disk.dd
# 先看概况:事件总数、各解析器命中量、可用输出模块
pinfo.py case.plaso
# 按时间窗切片导出(过滤表达式写在引号里,可加 host 等字段)
psort.py -o l2tcsv case.plaso "date > '2026-01-02 00:00:00' AND date < '2026-01-03 00:00:00'" -w win.csv
# 全量导出,交给表格工具做二次筛选
psort.py -o l2tcsv case.plaso -w timeline.csv
wc -l timeline.csv # 行数 = 事件数 + 1 行表头
# 归档前对存储与产物分别记录校验值
sha256sum case.plaso timeline.csv > case.sha256l2tcsv 逐列读法
| 列 | 含义 | 判读要点 |
|---|---|---|
| date/time/timezone | 事件时间与其渲染时区 | 三列一起看;timezone 不是 UTC 说明导出侧基准未统一 |
| MACB | 该行对应哪类时间戳 | 同一文件可能多行,分别是修改/变更/访问/创建 |
| source/sourcetype | 来源与子类型,如 LOG、FILE、REG、WEBHIST | 用它判断证据层级,日志与文件系统互证才算稳固 |
| type | 事件类型描述,如 Content Modification Time | 语义靠它,只看时间容易误读 |
| user/host | 归属账号与主机 | 空值是常态;多主机合并时必须靠 host 区分 |
| desc/extra | 事件描述与附加字段 | extra 里常有原始路径、命令行、注册表键名等细节 |
采集侧的 --timezone 决定事件时间戳渲染基准,导出侧还有独立的时间/时区参数;两端都显式写 UTC,再核对 CSV 里 timezone 列是否与预期一致,避免默认值悄悄影响整条时间线。
解析器全开会产生大量低价值事件(Windows 解析器尤其容易膨胀)。先用 pinfo.py 看各解析器命中量,再用 --parsers 限定范围,可同时缩短耗时与降低噪声;不同版本参数名有差异,执行前以 --help 为准。
分析务必针对镜像或只读挂载的副本执行。把采集工具指向正在运行的原始盘,既会扰动证据,也可能因文件被占用而产生不一致结果。