performing-timeline-reconstruction-with-plaso

使用 Plaso(log2timeline)构建综合取证超级时间线,将文件系统、日志和制品中的事件关联整合为统一的时间顺序视图。

9 stars

Best use case

performing-timeline-reconstruction-with-plaso is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

使用 Plaso(log2timeline)构建综合取证超级时间线,将文件系统、日志和制品中的事件关联整合为统一的时间顺序视图。

Teams using performing-timeline-reconstruction-with-plaso should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/performing-timeline-reconstruction-with-plaso/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/performing-timeline-reconstruction-with-plaso/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/performing-timeline-reconstruction-with-plaso/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How performing-timeline-reconstruction-with-plaso Compares

Feature / Agentperforming-timeline-reconstruction-with-plasoStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

使用 Plaso(log2timeline)构建综合取证超级时间线,将文件系统、日志和制品中的事件关联整合为统一的时间顺序视图。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 使用 Plaso 执行时间线重建

## 适用场景
- 需要从多个证据来源构建综合取证时间线时
- 关联文件系统元数据、事件日志、浏览器历史和注册表中的事件时
- 在需要按时间顺序重建活动的复杂调查中
- 当标准日志分析不足以确定事件序列时
- 以可视化、时间顺序格式呈现调查结果时

## 前置条件
- 取证工作站上已安装 Plaso(log2timeline/psort)
- 原始(dd)、E01 或 VMDK 格式的取证磁盘镜像
- 充足的 Plaso 输出存储空间(可能是镜像大小的 10 倍以上)
- 至少 8GB 内存(大型镜像建议 16GB+)
- Timeline Explorer(Eric Zimmerman)或 Timesketch 用于可视化
- 理解时间戳类型(MACB:修改、访问、更改、创建)

## 工作流程

### 步骤 1:安装 Plaso 并准备环境

```bash
# 在 Ubuntu/Debian 上安装 Plaso
sudo add-apt-repository ppa:gift/stable
sudo apt-get update
sudo apt-get install plaso-tools

# 或通过 pip 安装
pip install plaso

# 或使用 Docker(推荐,依赖隔离)
docker pull log2timeline/plaso

# 验证安装
log2timeline.py --version
psort.py --version

# 创建输出目录
mkdir -p /cases/case-2024-001/timeline/

# 验证取证镜像
img_stat /cases/case-2024-001/images/evidence.dd
```

### 步骤 2:使用 log2timeline 生成 Plaso 存储文件

```bash
# 基本处理磁盘镜像(使用所有解析器)
log2timeline.py \
   --storage-file /cases/case-2024-001/timeline/evidence.plaso \
   /cases/case-2024-001/images/evidence.dd

# 使用特定解析器进行快速定向分析
log2timeline.py \
   --parsers "winevtx,prefetch,mft,usnjrnl,lnk,recycle_bin,chrome_history,firefox_history,winreg" \
   --storage-file /cases/case-2024-001/timeline/evidence.plaso \
   /cases/case-2024-001/images/evidence.dd

# 使用过滤文件聚焦特定路径
cat << 'EOF' > /cases/case-2024-001/timeline/filter.txt
/Windows/System32/winevt/Logs
/Windows/Prefetch
/Users/*/NTUSER.DAT
/Users/*/AppData/Local/Google/Chrome
/Users/*/AppData/Roaming/Mozilla/Firefox
/$MFT
/$UsnJrnl:$J
/Windows/System32/config
EOF

log2timeline.py \
   --filter-file /cases/case-2024-001/timeline/filter.txt \
   --storage-file /cases/case-2024-001/timeline/evidence.plaso \
   /cases/case-2024-001/images/evidence.dd

# 使用 Docker 运行
docker run --rm -v /cases:/cases log2timeline/plaso log2timeline \
   --storage-file /cases/case-2024-001/timeline/evidence.plaso \
   /cases/case-2024-001/images/evidence.dd

# 将多个证据来源处理到同一时间线
log2timeline.py \
   --storage-file /cases/case-2024-001/timeline/combined.plaso \
   /cases/case-2024-001/images/workstation.dd

log2timeline.py \
   --storage-file /cases/case-2024-001/timeline/combined.plaso \
   /cases/case-2024-001/images/server.dd
```

### 步骤 3:使用 psort 过滤和导出时间线

```bash
# 导出完整时间线为 CSV(超级时间线格式)
psort.py \
   -o l2tcsv \
   -w /cases/case-2024-001/timeline/full_timeline.csv \
   /cases/case-2024-001/timeline/evidence.plaso

# 使用日期范围过滤导出(聚焦事件窗口)
psort.py \
   -o l2tcsv \
   -w /cases/case-2024-001/timeline/incident_window.csv \
   /cases/case-2024-001/timeline/evidence.plaso \
   "date > '2024-01-15 00:00:00' AND date < '2024-01-20 23:59:59'"

# 以 JSON Lines 格式导出(用于导入 SIEM/Timesketch)
psort.py \
   -o json_line \
   -w /cases/case-2024-001/timeline/timeline.jsonl \
   /cases/case-2024-001/timeline/evidence.plaso

# 按特定来源类型过滤导出
psort.py \
   -o l2tcsv \
   -w /cases/case-2024-001/timeline/registry_events.csv \
   /cases/case-2024-001/timeline/evidence.plaso \
   "source_short == 'REG'"

psort.py \
   -o l2tcsv \
   -w /cases/case-2024-001/timeline/evtx_events.csv \
   /cases/case-2024-001/timeline/evidence.plaso \
   "source_short == 'EVT'"

# 为 Timeline Explorer 导出(动态 CSV)
psort.py \
   -o dynamic \
   -w /cases/case-2024-001/timeline/timeline_explorer.csv \
   /cases/case-2024-001/timeline/evidence.plaso
```

### 步骤 4:使用 Timesketch 分析时间线

```bash
# 安装 Timesketch(Docker 部署)
git clone https://github.com/google/timesketch.git
cd timesketch
docker compose up -d

# 通过 CLI 将 Plaso 文件导入 Timesketch
timesketch_importer \
   --host http://localhost:5000 \
   --username analyst \
   --password password \
   --sketch_id 1 \
   --timeline_name "案例 2024-001 工作站" \
   /cases/case-2024-001/timeline/evidence.plaso

# 或导入 JSONL
timesketch_importer \
   --host http://localhost:5000 \
   --username analyst \
   --sketch_id 1 \
   --timeline_name "案例 2024-001" \
   /cases/case-2024-001/timeline/timeline.jsonl

# 在 Timesketch Web 界面中:
# 1. 搜索事件:"data_type:windows:evtx:record AND event_identifier:4624"
# 2. 应用 Sigma 分析器进行自动化检测
# 3. 标记/标签重要事件
# 4. 创建记录调查叙述的故事
# 5. 与团队成员共享
```

### 步骤 5:执行定向时间线分析

```bash
# 分析已知事件周围的特定时间段
python3 << 'PYEOF'
import csv
from collections import defaultdict
from datetime import datetime

# 加载事件窗口时间线
events_by_hour = defaultdict(list)
source_counts = defaultdict(int)

with open('/cases/case-2024-001/timeline/incident_window.csv', 'r', errors='ignore') as f:
    reader = csv.DictReader(f)
    total = 0
    for row in reader:
        total += 1
        timestamp = row.get('datetime', row.get('date', ''))
        source = row.get('source_short', row.get('source', 'Unknown'))
        description = row.get('message', row.get('desc', ''))

        source_counts[source] += 1

        # 按小时分组,分析活动模式
        try:
            dt = datetime.strptime(timestamp[:19], '%Y-%m-%dT%H:%M:%S')
            hour_key = dt.strftime('%Y-%m-%d %H:00')
            events_by_hour[hour_key].append({
                'time': timestamp,
                'source': source,
                'description': description[:200]
            })
        except (ValueError, TypeError):
            pass

print(f"事件窗口内事件总数:{total}\n")

print("=== 按来源类型的事件统计 ===")
for source, count in sorted(source_counts.items(), key=lambda x: x[1], reverse=True):
    print(f"  {source}: {count}")

print("\n=== 按小时的活动统计 ===")
for hour in sorted(events_by_hour.keys()):
    count = len(events_by_hour[hour])
    bar = '#' * min(count // 10, 50)
    print(f"  {hour}: {count:>6} 个事件 {bar}")

# 找出活动异常激增的小时
avg = total / max(len(events_by_hour), 1)
print(f"\n=== 异常活动小时(>{avg*3:.0f} 个事件)===")
for hour in sorted(events_by_hour.keys()):
    if len(events_by_hour[hour]) > avg * 3:
        print(f"  {hour}: {len(events_by_hour[hour])} 个事件(激增)")
PYEOF
```

## 关键概念

| 概念 | 描述 |
|------|------|
| 超级时间线(Super-timeline) | 整合多个来源所有制品时间戳的统一时间顺序视图 |
| MACB 时间戳 | 修改(Modified)、访问(Accessed)、更改(Changed,元数据)、创建(Born)—— 四种关键文件时间戳类型 |
| Plaso 存储文件 | 基于 SQLite 的中间格式,存储导出前的解析事件 |
| L2T CSV | Log2timeline CSV 格式,具有标准化的时间线事件列 |
| 解析器(Parser) | Plaso 模块,从特定制品类型中提取时间戳(如 winevtx、prefetch) |
| Psort | Plaso 排序和过滤工具,用于后处理存储文件 |
| Timesketch | Google 开源协作式时间线分析平台 |
| 轴心点(Pivot points) | 已知时间戳(如恶意软件执行)用于聚焦调查范围 |

## 工具与系统

| 工具 | 用途 |
|------|------|
| log2timeline(Plaso) | 主要时间线生成引擎,解析 100+ 种制品类型 |
| psort | Plaso 输出过滤、排序和导出工具 |
| Timesketch | 基于 Web 的协作取证时间线分析平台 |
| Timeline Explorer | Eric Zimmerman 的 Windows GUI,用于 CSV 时间线分析 |
| KAPE | 自动化分类收集,为 Plaso 处理提供输入 |
| mactime(TSK) | 基于 Sleuth Kit bodyfile 的简单时间线生成 |
| Excel/Sheets | 对小型过滤数据集进行手动时间线审查 |
| Elastic/Kibana | JSONL 时间线数据的替代可视化平台 |

## 常见场景

**场景 1:勒索软件攻击重建**
使用 Plaso 处理完整磁盘镜像,过滤到发现加密前一周,从浏览器历史和事件日志识别初始访问载体,通过注册表和 Prefetch 追踪权限提升,从网络登录事件中绘制横向移动,从显示大量文件修改的 MFT 时间戳确定加密开始时间。

**场景 2:数据盗窃调查**
创建嫌疑人工作站的超级时间线,过滤 USB 设备连接事件、文件访问时间戳和云存储浏览器活动,构建显示数据暂存、压缩和渗出的叙述,将带标记证据点的时间线提交给法律团队。

**场景 3:多系统入侵分析**
将所有受影响系统的磁盘镜像处理到单个 Plaso 存储文件,导入 Timesketch 进行协作分析,在系统时间线中搜索横向移动模式,识别零号患者系统和初始入侵载体,绘制整个环境中的完整攻击链。

**场景 4:内部威胁非工作时间活动**
仅过滤非工作时间的时间线,识别正常工作时间之外的文件访问模式,与认证事件关联(门禁、VPN 登录),搜索这些时间段内对敏感目录的数据访问,为 HR/法律构建证据包。

## 输出格式

```
时间线重建摘要:
  证据来源:
    磁盘镜像:evidence.dd(500 GB,NTFS)
    Plaso 存储:evidence.plaso(2.3 GB)

  处理统计:
    提取的事件总数:4,567,890
    使用的解析器:45 个(winevtx、prefetch、mft、usnjrnl、lnk、chrome、firefox、winreg...)
    处理时间:3 小时 45 分钟

  事件窗口(2024-01-15 至 2024-01-20):
    窗口内事件:234,567
    事件来源:
      MFT:         89,234
      事件日志:    45,678
      USN 日志:    56,789
      注册表:      23,456
      Prefetch:    1,234
      浏览器:      5,678
      LNK 文件:    2,345
      其他:        10,153

  关键时间线事件:
    2024-01-15 14:32 - 打开网络钓鱼邮件(浏览器)
    2024-01-15 14:33 - 下载恶意文档
    2024-01-15 14:35 - 执行 PowerShell(Prefetch + 事件日志)
    2024-01-15 14:36 - 建立 C2 连接(注册表 + 事件日志)
    2024-01-16 02:30 - 执行 Mimikatz(Prefetch)
    2024-01-16 02:45 - 横向移动至 DC(事件日志)
    2024-01-17 03:00 - 数据渗出(MFT + USN 日志)
    2024-01-18 03:00 - 清除日志(事件日志)

  导出文件:
    完整时间线:    /timeline/full_timeline.csv(450 万行)
    事件窗口:      /timeline/incident_window.csv(23.4 万行)
    Timesketch 导入:/timeline/timeline.jsonl
```

Related Skills

performing-yara-rule-development-for-detection

9
from killvxk/cybersecurity-skills-zh

通过识别可执行文件中的唯一字节模式、字符串和行为指标,开发精准的 YARA 恶意软件检测规则,同时将误报率降至最低。

performing-wireless-security-assessment-with-kismet

9
from killvxk/cybersecurity-skills-zh

使用 Kismet 通过被动射频监控进行无线网络安全评估,检测流氓接入点(Rogue AP)、隐藏 SSID、弱加密和未授权客户端。

performing-wireless-network-penetration-test

9
from killvxk/cybersecurity-skills-zh

执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。

performing-windows-artifact-analysis-with-eric-zimmerman-tools

9
from killvxk/cybersecurity-skills-zh

使用 Eric Zimmerman 的开源 EZ Tools 套件(包括 KAPE、MFTECmd、PECmd、LECmd、JLECmd 和 Timeline Explorer)执行全面的 Windows 取证制品分析,解析注册表 hive、预取文件、事件日志和文件系统元数据。

performing-wifi-password-cracking-with-aircrack

9
from killvxk/cybersecurity-skills-zh

在授权无线安全评估中捕获 WPA/WPA2 握手包,并使用 aircrack-ng、hashcat 和字典攻击进行离线密码破解, 以评估密码短语强度和无线网络安全状况。

performing-web-cache-poisoning-attack

9
from killvxk/cybersecurity-skills-zh

在授权安全测试期间,通过未纳入缓存键的头部和参数毒化缓存响应,利用 Web 缓存机制向其他用户投递恶意内容。

performing-web-cache-deception-attack

9
from killvxk/cybersecurity-skills-zh

通过利用 CDN 缓存层与源服务器之间的路径规范化差异,执行 Web 缓存欺骗攻击,从而缓存并获取敏感的已认证内容。

performing-web-application-vulnerability-triage

9
from killvxk/cybersecurity-skills-zh

使用 OWASP 风险评级方法论对 DAST/SAST 扫描器的 Web 应用程序漏洞发现进行分类,区分真阳性和假阳性,并确定修复优先级。

performing-web-application-scanning-with-nikto

9
from killvxk/cybersecurity-skills-zh

Nikto 是一款开源 Web 服务器和 Web 应用程序扫描器,可针对超过 7,000 个潜在危险文件/程序进行测试,检查超过 1,250 个服务器的过期版本,并识别超过 270 个服务器的版本特定问题。

performing-web-application-penetration-test

9
from killvxk/cybersecurity-skills-zh

遵循 OWASP Web 安全测试指南(WSTG)方法论,对 Web 应用程序执行系统化安全测试,识别认证、授权、 输入验证、会话管理和业务逻辑中的漏洞。测试人员以 Burp Suite 作为主要拦截代理,结合手动测试技术 发现自动化扫描器遗漏的缺陷。适用于 Web 应用渗透测试、OWASP 测试、应用安全评估或 Web 漏洞测试等请求场景。

performing-web-application-firewall-bypass

9
from killvxk/cybersecurity-skills-zh

使用编码技术、HTTP 方法操控、参数污染和载荷混淆绕过 Web 应用防火墙保护,将 SQL 注入、XSS 及其他攻击载荷穿透 WAF 检测规则。

performing-vulnerability-scanning-with-nessus

9
from killvxk/cybersecurity-skills-zh

使用 Tenable Nessus 执行认证和未认证漏洞扫描,识别网络基础设施、服务器和应用程序中的已知漏洞、 错误配置、默认凭据和缺失补丁。扫描器将发现与 CVE 数据库和 CVSS 评分关联,生成优先级修复指导。 适用于漏洞扫描、Nessus 评估、补丁合规检查或自动化漏洞检测等请求场景。