Plaso 超时间线命令参考:基于 log2timeline、psort、pinfo 与 psteal 构建取证时间线的完整实战指南
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
Plaso(Plaso Langar Að Safna Öllu)是驱动 log2timeline 的开源取证时间线引擎,其四个 CLI 工具(log2timeline.py、pinfo.py、psort.py、psteal.py)配合 Timesketch,可将磁盘镜像中的文件系统 MACB 时间、注册表、EVTX、浏览器历史、prefetch、LNK 等数百类痕迹融合为一条统一、按时间排序的「超时间线」(Super Timeline),用于重构受感染主机上的完整事件序列。本篇指南以本仓库building-super-timelines-with-plaso技能的命令参考文档(api-reference.md)为骨架,完整讲解四个 CLI 工具的全部参数、典型用法、过滤表达式与 Timesketch 导入流程,并结合仓库中的 SKILL.md 工作流与 agent.py 自动化封装源码,帮助读者从命令级到原理级掌握超时间线构建能力。
一、超时间线与 Plaso 四个核心 CLI 工具
在数字取证与事件响应(DFIR)中,单一数据源(如仅看注册表或仅看文件系统时间)往往无法还原攻击者的完整活动路径。Plaso 的价值在于将数百种 artifact 类型——文件系统 MACB 时间、注册表、EVTX 事件日志、浏览器历史、prefetch、LNK、$UsnJrnl、syslog 等——全部解析为统一格式的事件,合并进同一条时间线中,从而支持跨源关联分析。
Plaso 随附四个 CLI 工具,可以直接运行,也可以通过官方 Docker 镜像log2timeline/plaso运行:
| 工具 | 职责 |
|---|---|
log2timeline.py | 提取:从磁盘镜像、挂载点、目录或设备中提取事件,写入.plaso存储文件 |
pinfo.py | 检查:报告.plaso文件的内容与处理元数据(解析器、事件计数、警告) |
psort.py | 后处理/导出:过滤、去重、时区归一化,并将存储文件导出为 CSV、JSONL、Elasticsearch、Timesketch 等格式 |
psteal.py | 一站式封装:一步完成「提取 + 导出」 |
授权使用声明:仅能基于你有权分析的证据构建时间线,始终在取证镜像/副本上工作并保持证据链完整。该技能用于防御性取证分析,对应的 MITRE ATT&CK 映射反映的是超时间线最擅长检测的反取证对手行为。
二、环境准备:Docker 与 GIFT PPA 安装
Plaso 的官方支持、可复现的安装方式是 Docker:
docker pull log2timeline/plaso # 运行某个工具,将证据/输出目录挂载进容器 docker run -v /cases:/data log2timeline/plaso log2timeline.py --version也可以在 Ubuntu 上通过 GIFT PPA 安装:
sudo add-apt-repository ppa:gift/stable sudo apt-get update && sudo apt-get install -y plaso-tools此外还需要一个 Timesketch 实例(用于时间线分诊)以及一份取证镜像(E01/raw)或已挂载的文件系统。使用 Docker 时,注意容器内的路径会被映射到/data,这与仓库 agent.py 中base_cmd()的实现一致——它将宿主机的data_dir挂载为容器内的/data,再拼接log2timeline/plaso镜像名与工具名执行。
三、log2timeline.py:事件提取阶段
log2timeline.py是超时间线构建的第一步,负责把源(.E01、raw 镜像、挂载点、目录或设备)解析为.plaso存储文件。其核心参数如下:
| 参数 | 用途 |
|---|---|
--storage-file <file> | 指定输出的.plaso存储文件 |
<source> | 数据源:.E01、raw 镜像、挂载点、目录、设备 |
--parsers <list> | 限定解析器范围(预设如win7、webhist等;!name表示排除) |
--partitions <spec> | 选择分区(如all) |
--vss-stores <spec> | 处理卷影副本(Volume Shadow Copies) |
--hashers <list> | 计算文件哈希(如sha256) |
-z <tz> | 指定数据源时区 |
--workers <n> | 提取工作进程数量 |
最基础的提取命令:
log2timeline.py --storage-file timeline.plaso /cases/image.E01按解析器范围收窄、加快提取速度并聚焦相关 artifact(预设win7代表一套面向 Windows 7 及以后系统的解析器组合,!filestat表示在预设基础上排除filestat解析器):
log2timeline.py --parsers "win7,!filestat" --storage-file timeline.plaso /cases/image.E01参数含义与选择建议:
--parsers:这是控制提取范围与速度的关键。可以使用预设名(如win7、webhist),也可以显式列出解析器名;!前缀用于排除某个解析器。从源码封装看(agent.py),--parsers会被原样透传给log2timeline.py,因此可以根据镜像类型灵活组合,例如只处理浏览器历史的webhist预设,或显式指定winevtx,prefetch,mft,usnjrnl,lnk,winreg等关键 artifact 解析器。--vss-stores all:启用后处理镜像中的卷影副本,可以还原被删除文件的早期版本、发现攻击者通过卷影副本进行的操作痕迹。仓库的自动化脚本以--vss布尔开关控制并映射为--vss-stores all。--hashers sha256:在提取的同时计算文件哈希,便于后续与威胁情报 IoC 比对。-z:当镜像来自非 UTC 时区的系统时,用该参数声明数据源时区,避免时间线整体偏移。--workers:多核机器上可提高解析吞吐量,具体取值取决于宿主机 CPU 资源。
四、pinfo.py:检查存储文件
提取完成后,先用pinfo.py检查.plaso文件,确认解析器是否按预期运行、事件计数是否非零、是否存在处理警告:
pinfo.py timeline.plaso # 摘要信息 pinfo.py -v timeline.plaso # 详细(verbose)模式-v会输出更详细的信息(包括每个解析器/来源的统计与警告详情),是排查「某个 artifact 为什么没出现在时间线里」的首选工具。在自动化脚本中对应info子命令(agent.py),它把存储文件路径直接追加到pinfo.py命令后执行。
五、psort.py:过滤、去重与导出超时间线
psort.py是后处理阶段的核心:它读取.plaso存储文件,执行去重、时区归一化与事件过滤,再导出为目标格式。其参数如下:
| 参数 | 用途 |
|---|---|
-o <module> | 输出模块:l2tcsv、json_line、dynamic、elastic、timesketch等 |
-w <file> | 将输出写入指定文件 |
--output-time-zone <tz> | 归一化输出时区(如UTC) |
<storage> | 输入.plaso文件 |
"<filter>" | 事件过滤表达式(作为末尾参数传入) |
按日期范围过滤并导出为 CSV(l2tcsv模块),同时将时间戳归一化为 UTC:
psort.py --output-time-zone 'UTC' -o l2tcsv -w supertimeline.csv timeline.plaso \ "date > datetime('2026-01-01T00:00:00') AND date < datetime('2026-01-27T00:00:00')"导出为 Timesketch 友好的 JSON Lines(每行一个 JSON 事件):
psort.py --output-time-zone 'UTC' -o json_line -w supertimeline.jsonl timeline.plaso要点说明:
--output-time-zone:取证分析强烈建议统一到UTC,避免跨时区协同分诊时产生时间歧义。-o输出模块选择:l2tcsv适合 Excel/脚本二次分析;json_line适合导入 Timesketch 或 SIEM;elastic直接写入 Elasticsearch;timesketch模块与 Timesketch 平台对接。- 过滤表达式:作为命令的末尾参数传入,支持
>、<、==、contains等运算符与AND/OR组合,配合datetime()函数构造时间范围。
5.1 常用事件过滤字段
psort.py过滤表达式可直接使用的常见字段如下:
| 字段 | 示例 |
|---|---|
date | date > datetime('2026-01-01T00:00:00') |
data_type | data_type == 'windows:evtx:record' |
parser | parser contains 'winreg' |
timestamp_desc | timestamp_desc contains 'Creation' |
date:按事件时间窗口过滤,是还原「入侵时间窗口」最常用的字段。data_type:按 artifact 类型过滤,例如只看 EVTX 事件日志(windows:evtx:record)或文件系统统计(fs:stat),用于聚焦单一数据源做交叉验证。parser:按解析器名模糊匹配,例如parser contains 'winreg'只看注册表相关事件。timestamp_desc:按时间戳语义过滤,例如contains 'Creation'关注文件创建时间,用于发现文件创建/重命名活动。
六、psteal.py:一步完成提取 + 导出
当只需要快速分诊时,psteal.py将「提取 + CSV 导出」合并为一步:
psteal.py --source /cases/image.E01 -o l2tcsv -w supertimeline.csv它内部等价于依次执行log2timeline.py提取与psort.py导出,适合在时间有限时先拿到一份完整 CSV 再做离线分析。在自动化封装中对应psteal子命令(agent.py),--output-module默认为l2tcsv。
七、导入 Timesketch 并分诊
超时间线通常体量巨大,分析师依赖Timesketch(基于 Web 的协作式时间线分析平台)进行分诊。使用官方timesketch_importerCLI 将时间线上传到某个 sketch 中:
timesketch_importer \ --host http://127.0.0.1:5000 \ --username admin \ --timeline_name "host01" \ --sketch_id 1 \ timeline.plasotimesketch_importer支持.plaso、.csv和.jsonl三种输入格式;导入后 Timesketch 会分块、重组并建立索引。仓库的 agent.py 中import子命令对上述参数做了完整封装(--host、--username默认admin、--timeline_name、--sketch-id、--file),方便在流水线中一键导入。
导入后在 sketch 界面中的典型分诊操作:
- 过滤到可疑时间窗口或特定
data_type(如windows:evtx:record、fs:stat); - 对感兴趣的事件加星(star)、打标签(tag)并添加评论,支持团队协作;
- 保存搜索(saved searches),运行自动分析器(如浏览器时间范围、相似度、Sigma 规则)扫描整条时间线;
- 跨 artifact 来源用相互印证的多个事件构建叙事(narrative)。
八、源码级封装:agent.py 的自动化视角
仓库提供的 scripts/agent.py 是对上述四个 CLI 工具 + Timesketch 导入的 Python 封装,从源码可以看出完整的参数映射关系:
base_cmd(tool, use_docker, data_dir)(agent.py):决定以本机可执行文件还是 Docker 方式调用工具。Docker 模式下将data_dir挂载到容器内/data;本机模式下用shutil.which()检查工具是否在 PATH 上,缺失时给出--docker提示。extract(agent.py):构造log2timeline.py --storage-file <storage> [--parsers ...] [--vss-stores all] [--hashers ...] <source>。export(agent.py):构造psort.py --output-time-zone <tz> -o <module> -w <output> <storage> [<filter>],其中时区默认UTC、输出模块默认l2tcsv。--dry-run:只打印将要执行的命令而不真正执行,便于在正式跑镜像前审查命令合法性。run()(agent.py):通过subprocess.run()执行命令并返回退出码,FileNotFoundError时返回 127。
由此可以看出,本技能的命令行操作完全可以脚本化:extract → info → export → import四个子命令与手动流程一一对应,且全部支持--docker与--dry-run,适合在 DFIR 取证工作中做成可复现的流水线。
九、利用超时间线狩猎反取证行为
统一时间线的最大优势是能暴露反取证行为:
- 时间戳伪造(timestomping):对比 MACB 时间戳与 $UsnJrnl 记录的矛盾,若某文件被刻意改成特定时间,二者会出现不一致。
- 日志清除:查找时间线中的时间空洞,或
EventLog cleared(事件 ID 1102)记录,识别攻击者清除日志的时间点。 - 删除后重建:在统一时间线上观察文件被删除后又被重建的模式,往往是攻击者投放工具或覆盖痕迹的信号。
这些行为对应 MITRE ATT&CKT1070(Indicator Removal):超时间线通过揭示 MACB 时间戳、USN 日志与事件日志之间的不一致来暴露指示器移除行为。同时,该技能也映射了 NIST CSF 2.0 的RS.AN-03(分析已执行,以确定事件期间发生了什么以及根因)——融合全部主机 artifact 的时序视图正是重建事件序列、定位根因的主要方法(详见 standards.md)。
十、完整工作流与验证清单
结合 SKILL.md 定义的目标,一个完整的超时间线构建流程为:
- 提取:
log2timeline.py从镜像生成.plaso存储文件(按需用--parsers收窄范围); - 检查:
pinfo.py确认解析器运行与事件计数; - 导出:
psort.py以 UTC 归一化 + 过滤表达式导出聚焦的超时间线(CSV/JSONL); - 导入:
timesketch_importer将时间线上传至 sketch; - 分诊:在 Timesketch 中过滤可疑窗口、打标签、运行分析器;
- 反取证检查:核查 timestomping、日志清除等指标;
- 记录:以跨源相互印证的事件构建发现文档。
验证清单(Validation Criteria):
- 已从源镜像产出
.plaso存储文件 pinfo确认预期解析器已运行且事件计数非零- 以 UTC 归一化和限定过滤条件导出超时间线
- 时间线已导入 Timesketch sketch 并完成索引
- 可疑时间窗口已通过标签/加星/保存搜索完成分诊
- 已核查反取证指标(timestomping、日志清除)
- 发现结果以跨源事件相互印证的方式记录
关键命令速查:
| 命令 | 用途 |
|---|---|
log2timeline.py --storage-file out.plaso <source> | 提取事件 |
log2timeline.py --parsers <preset> ... | 收窄解析器范围 |
pinfo.py out.plaso | 检查存储文件 |
psort.py -o l2tcsv -w out.csv out.plaso "<filter>" | 过滤并导出 CSV |
psort.py -o json_line -w out.jsonl out.plaso | 导出 JSONL |
psteal.py --source <img> -o l2tcsv -w out.csv | 一步完成提取 + 导出 |
timesketch_importer --host ... <file> | 导入 Timesketch |
从提取、检查、过滤导出到 Timesketch 分诊,Plaso 的四个 CLI 工具构成了 DFIR 时间线分析的标准流水线;结合仓库中的 命令参考、技能工作流 与 自动化封装脚本,你可以快速上手并脚本化整套超时间线构建流程。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考