Chill-Ethical-People/TraceQuarry
GitHub: Chill-Ethical-People/TraceQuarry
TraceQuarry 是一个本地优先的 Linux DFIR 工作台,将 UAC 收集的取证数据转化为可审查的事件时间线、IoC 匹配和辅助调查发现。
Stars: 3 | Forks: 0
# TraceQuarry
//`。
- 将解析器输出视为衍生证据,并保留用于生成它的命令行或 GUI
设置。
- 不要将真实的 UAC 归档、提取的证据或生成的解析器输出
推送到共享存储库中。
TraceQuarry 在设计上是本地优先的。解析器不需要将证据
上传到外部服务。
GUI 特意限制为仅限环回访问。不要将其直接暴露在 LAN 或
Internet 上。要从另一台工作站进行访问,请使用终止于分析主机的
经过身份验证的 SSH 隧道。TraceQuarry 创建的新工作目录
权限为 `0700`,衍生证据的权限为 `0600`;当收集
包含敏感资料时,请使用特定于案例的加密卷。
## 案例快速入门
1. 检查归档时间范围。
```
cd tracequarry
python3 -m uac_parser.web --host 127.0.0.1 --port 8765 --work-dir web_runs
```
打开 `http://127.0.0.1:8765`,选择 **Archive upload** 或 **Server
path**,选择日志年份和时区,然后点击 **Inspect Time Range**。对于
假设主导的审查,在开始分析之前选择一个 **Assisted investigation** 配置文件。
2. 运行具有较宽时间窗口的首次解析。
```
python3 -m uac_parser.cli /cases/uac-host01.tar.gz --out out/host01-first-pass \
--incident-start 2026-04-01T00:00:00+08:00 \
--incident-end 2026-06-16T23:59:59+08:00 \
--year 2026 \
--timezone Asia/Hong_Kong \
--threat-type ransomware_extortion \
--ioc 198.51.100.50 \
--ioc rclone \
--ioc anydesk
```
3. 审查 `summary.md`、`findings.json` 和 `timeline_mini.csv`。
4. 一旦了解了入侵时期,就使用更窄的窗口重新运行。
5. 将 CSV/JSONL 时间线、发现结果、源覆盖率和确切的
命令行导出或附加到案例记录中。
## 辅助调查
辅助调查将分析师选择的假设应用于已完成的
时间线。它会优先考虑相关的调查发现,检查是否存在重要的 artifact
组,识别已支持和未解决的调查问题,
并推荐下一步的分析方向。它不会过滤完整的时间线、更改原始
证据、证明所选的威胁类型、识别恶意软件或归因于某个攻击者。
可用的配置文件:
- `comprehensive`:当入侵模式未知时的广泛入侵分流
- `ransomware_extortion`:访问、环境准备、数据窃取、影响和清理
- `public_facing_exploitation`:从漏洞利用请求到 payload 执行和持久化
- `credential_compromise`:身份验证、机密信息、账户更改、sudo 和远程访问
- `persistence_backdoor`:PAM、loader、systemd、cron、SSH-key 和账户持久化
- `cryptomining_resource_hijacking`:挖矿程序、矿池、持久化、云和容器滥用
- `apt_like_intrusion`:有效账户、凭据、分层持久化、隧道和跨主机访问
辅助运行会添加 `assisted_investigation.md` 和
`assisted_investigation.json`。案例模式会添加
`case_assisted_investigation.md` 和 `case_assisted_investigation.json`。选定的
配置文件和生成的输出哈希会保留在运行清单中。
已完成的 GUI 任务还提供 **Explore Timeline**。证据资源管理器
分页显示事件窗口或完整的 JSONL 时间线,支持文本、
严重程度和源类型过滤,并显示带有
主机和收集来源的原始记录。分析师的处置结果、标签和备注会保存
到 `analyst_annotations.json`;它们绝不会修改解析器时间线或源
证据。
## 选择时间设置
Linux 的 auth、cron、syslog 和 package 日志通常使用省略
年份的 syslog 样式时间戳。TraceQuarry 需要年份和时区来将这些记录
标准化为 UTC。
- 对于没有年份的日志,使用 `--year` 指定应用年份。
- 对于收集时的主机本地时区,使用 `--timezone`。
- 尽可能使用带时区信息的事件窗口,例如
`2026-06-16T09:58:00+08:00`。
- 对照已知的业务事件、EDR 警报、
防火墙日志、VPN 日志或 SIEM 数据确认标准化的 UTC 输出。
已知注意事项:文件名嵌入了较早年份的轮转文件可能仍然
包含没有年份的日志行。如果将 `--year 2026` 应用于诸如
`yum.log-20230101` 的轮转文件,解析器可能会显示出明显的未来或偏移的日期。
在最终确定事件窗口之前,请审查 `source_index.json`、轮转文件名和原始源行。
没有原生时间戳的状态 artifacts 可能会获得 `correlated_*`
时间戳(当 bodyfile 或 auditd PATH 记录支持时间线放置时)。
## 输出审查顺序
对于事件响应,请按以下顺序审查输出:
1. `parser_errors.log`
确认关键源是否未能解析。空文件是最理想的。
2. `source_index.json`
检查证据覆盖率。确认是否存在 auth 日志、audit 日志、Shell 历史、
登录历史、进程状态、网络状态、账户文件、sudoers、cron、
systemd、PAM、SSH 密钥和 bodyfile 数据。
3. `summary.md`
阅读响应人员摘要,了解高级发现、横向移动说明、
账户生命周期更改、暴力破解摘要和攻击剧情。
4. `findings.json`
将此视为高价值线索的队列。将每个重要发现关联到
原始源代码行、源文件、时间戳类型、用户、进程、命令和
相关事件。
5. `timeline_mini.csv`
将此作为可疑事件窗口的主要分析师时间线。
按 `severity`、`event_category`、`event_action`、`user`、`src_ip`、
`process`、`command`、`ttp` 和 `source_path` 进行过滤。
6. `timeline_full.csv`
当 mini 时间线在所选窗口边缘显示可疑活动,或者
您需要发现早期的环境准备、密码
更改、账户创建或持久化时使用此文件。
7. `ioc_hits.csv`
使用此文件来确定已知 IP、域、哈希、路径、用户名和工具名称的范围。
大量的 IoC 命中在报告前应按操作、用户、源文件和
首次/最后一次出现的时间进行分组。
## 输出契约
TraceQuarry 会将以下文件写入选定的输出目录:
- `timeline_full.jsonl`:所有解析的事件
- `timeline_full.csv`:适合电子表格的完整时间线
- `timeline_mini.jsonl`:设置了开始或结束时间时的事件窗口事件
- `timeline_mini.csv`:适合电子表格的 mini 时间线
- `findings.json`:相关联的检测和攻击剧情
- `ioc_hits.json` 和 `ioc_hits.csv`:提供 IoC 时的 IoC 匹配
- `summary.md`:人类可读的调查摘要
- `source_index.json`:发现的证据来源和解析覆盖率
- `parser_errors.log`:供分析师审查的非致命解析器错误
- `run_manifest.json`:输入身份、源哈希、解析器覆盖率、规则指纹、
执行设置和输出哈希,以实现可重复性
- `assisted_investigation.md` 和 `.json`:当选择了威胁配置文件时的
假设主导的优先级、就绪情况、
检查清单状态、证据引用、安全防护措施和分析师分析枢轴
对于多收集案例工作区,TraceQuarry 还会写入:
- `hosts//`:每个 UAC 输入的标准单次收集输出
- `case_timeline_full.jsonl` 和 `case_timeline_full.csv`:合并的案例时间线
- `case_timeline_mini.jsonl` 和 `case_timeline_mini.csv`:合并的事件窗口时间线
- `case_findings.json`:案例发现、攻击剧情和关联
- `case_correlation.json`:结构化的跨收集关联数据
- `case_ioc_hits.json` 和 `case_ioc_hits.csv`:案例级别的 IoC 匹配
- `case_summary.md`:用于 GUI 预览和报告移交的案例级别摘要
- `case_assisted_investigation.md` 和 `.json`:案例级别的假设主导审查
- `case_source_index.json`:单次收集的源覆盖率和来源
- `case_parser_errors.log`:按收集分组的解析器错误
- `case_manifest.json`:案例级别的收集身份、设置、规则和输出哈希
## CLI 用法
```
python3 -m uac_parser.cli /cases/uac-host01.tar.gz --out out/host01 \
--incident-start 2026-06-16T08:00:00Z \
--incident-end 2026-06-16T12:00:00Z \
--year 2026 \
--timezone UTC \
--host host01 \
--threat-type credential_compromise \
--ioc 198.51.100.50 \
--ioc rclone \
--ioc-file known_iocs.csv
```
多收集案例工作区:
```
python3 -m uac_parser.cli --case-out out/case-acme-linux \
--case-name "ACME Linux Intrusion" \
--input /cases/uac-host01.tar.gz \
--input /cases/uac-host02.tar.gz \
--incident-start 2026-06-16T08:00:00Z \
--incident-end 2026-06-16T12:00:00Z \
--year 2026 \
--timezone UTC \
--threat-type apt_like_intrusion \
--ioc 198.51.100.50 \
--ioc rclone
```
案例模式还可以读取清单:
```
python3 -m uac_parser.cli --case-out out/case-acme-linux \
--input-manifest case-inputs.txt \
--year 2026 \
--timezone Asia/Hong_Kong
```
已安装的控制台脚本:
- `tracequarry`
- `tracequarry-web`
- `uac-timeline`
- `uac-timeline-web`
IoC 文件接受每行一个值或以下格式的 CSV 行:
```
value,kind,label
198.51.100.50,ip,synthetic source
rclone,literal,exfiltration tooling
anydesk,literal,remote access tooling
/tmp/kworker,path,suspicious staging path
```
可接受的 IoC 种类包括 `ip`、`domain`、`hash`、`path` 和 `literal`。
## Web GUI 用法
Web GUI 复用了与 CLI 相同的解析器流水线。当
分析师想要预览时间范围、从浏览器上传归档文件,或者让
另一位响应人员在无需构建命令行的情况下运行解析器时,它非常有用。
```
python3 -m uac_parser.web --host 127.0.0.1 --port 8765 --work-dir web_runs
```
GUI 默认上传限制为 8 GiB,工作目录配额为 40 GiB,两个
并发分析插槽,以及 120 秒的请求超时。在
专用的分析工作站上调整这些设置时,不要移除磁盘安全余量:
```
python3 -m uac_parser.web --host 127.0.0.1 --port 8765 --work-dir web_runs \
--max-upload-gib 8 --max-work-dir-gib 40 \
--max-concurrent-jobs 2 --request-timeout 120
```
打开 `http://127.0.0.1:8765`,然后:
1. 对于浏览器选择的 `.tar.gz`、`.tgz`、`.tar` 或
`.zip` UAC 输出,选择 **Archive upload**。选择多个归档文件以创建案例工作区。
2. 对于分析计算机上已有的文件或解压目录,
选择 **Server path**。每行输入一个路径以创建案例工作区。
3. 设置日志年份和时区。
4. 点击 **Inspect Time Range**。
5. 设置或细化事件开始和结束时间。
6. 添加已知的 IoC。
7. 运行分析并输出目录路径。
如果同时填写了上传和服务器路径,选定的源模式将控制
使用哪个输入。
当提供多个输入时,实时运行面板会显示收集
和关联计数,打开案例摘要预览,并链接案例级别的
输出和单次收集的主机摘要。
浏览器 API 使用每个进程的请求 token,并拒绝非环回的 Host
和 Origin 值。重启服务器会使打开的 GUI 页面失效,并使
先前的输出 URL 不可用;重新加载页面并从其文件系统输出目录
运行或重新打开相关案例。
## 检测覆盖率
当前的覆盖率针对 Linux 入侵分流进行了调整:
- 身份验证:SSH 暴力破解、无效用户、多次失败后的成功
登录、root 登录、登录历史导出、账户锁定/解锁事件和
密码更改
- 执行:Shell 历史命令、下载执行链、从
`/tmp`、`/var/tmp`、`/dev/shm` 和 `/run` 进行的分阶段执行、反向 Shell 语法和
进程列表信号
- 持久化:cron、systemd、rc.local、init.d、Shell 配置文件、不受限制的 SSH
授权密钥、LD_PRELOAD 和 PAM 后门候选
- 提权:UID 0 异常、sudoers 风险、NOPASSWD 条目、
特权组成员身份、SUID/SGID 文件、Linux capabilities、Docker/LXD
组风险和账户备份差异对比
- 凭据访问:SSH 密钥访问、凭据文件访问、本地密码哈希
元数据、弱哈希识别、历史记录中的明文密码泄露和
shadow 时间戳提取
- 横向移动:出站 SSH、SCP、rsync、known_hosts、网络探测和
未发现证据时的明确否定发现
- 数据窃取和工具:`rclone`、云 CLI、归档实用程序、数据库
转储、隧道工具、挖矿程序、破坏性命令和勒索软件影响
指标
- 审计和账户生命周期:auditd 账户事件、passwd/shadow/group 备份
比较、创建/删除/修改的账户、密码更改、账户
解锁和特权组添加
与攻击者相关的匹配只是技术提示。没有
独立威胁情报的支持,不要将其作为归因进行报告。
工具、TTP、恶意软件/payload 元数据和非归因性的攻击者相似性
配置文件合并在 `rules/tagging_registry.yml` 中。工具和 TTP 规则
在 runtime 丰富事件;攻击者配置文件优先考虑观察到的
信号组合,而不主张归因。注册表哈希保留在运行
清单中,以便分析师可以识别用于案例的确切检测内容。
欢迎社区补充内容。请参阅 [检测包贡献指南](rules/README.md)
并在提交前验证更改:
```
PYTHONPATH=. python3 -m uac_parser.rules_cli
```
## 证据就绪情况
GUI 的 **Inspect Time Range** 操作还会报告跨
身份验证、审计、命令历史、网络状态、进程状态、账户、
持久化和文件系统类的证据就绪情况。缺失的类别是一个覆盖差距,而不是
否定发现。
仅当命令历史、网络状态和 SSH 主机历史证据可用时,
TraceQuarry 才会报告未观察到横向移动证据。
否则,评估将被标记为不确定,并列出缺失的来源。
## 发现验证手册
对于每个高影响发现:
1. 在 `timeline_mini.csv` 或 `timeline_full.csv` 中定位源事件。
2. 可用时,从提取的 UAC 内容中打开原始的 `source_path`。
3. 捕获原始行、前一行和后一行。
4. 确认时间戳类型:原生日志时间、bodyfile 时间、audit 时间或
关联时间戳。
5. 检查命令是由攻击者、管理员、
EDR/AV 进程还是防御性的 grep/search 命令执行的。
6. 在同一时间窗口内关联 SSH、sudo、进程、网络、账户、持久化和文件
时间线事件。
7. 在案例笔记中记录置信度和不确定性。
特别警告:TraceQuarry 尝试避免将防御性 `grep` 或 `rg` 指标搜索命令中
的可疑字符串视为已确认的 payload
执行。分析师在写下结论之前仍应验证上下文。
## 报告指南
建议的经得起审查的报告用语:
- “TraceQuarry 解析了 UAC 收集并生成了一个标准化时间线。”
- “该发现表明与……一致的证据”
- “在 `` 的 `` 中观察到了源代码行。”
- “时间戳使用时区 `` 和日志年份
`` 进行了标准化。”
- “这是一种技术相似性,不是归因。”
- “仅在源覆盖率支持该陈述时,才使用”
“在解析的源中未发现出站横向移动的证据”。
避免过度声明:
- 如果操作仅出现在搜索、
注释、检测规则或扫描程序输出中,则不要声明发生了该操作。
- 如果缺少相关源,则不要声明没有发生任何活动。
- 不要仅凭 TTP 重叠就归因于知名的攻击者。
## 安装
TraceQuarry 支持 Python 3.11 和 3.12。PyYAML 用于验证和加载
外部检测注册表。
```
git clone https://github.com/Chill-Ethical-People/TraceQuarry.git
cd tracequarry
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install .
```
您也可以使用 `PYTHONPATH` 直接从存储库根目录运行它:
```
cd tracequarry
PYTHONPATH=. python3 -m uac_parser.cli tests/fixtures/uac_sample --out /tmp/tracequarry-sample
```
## 许可证和所有权
TraceQuarry 在 Apache License, Version 2.0 下发布。您可以
在该许可证下使用、修改和重新分发软件,同时 Chill Ethical
People 保留原始项目的版权所有权。
许可证涵盖软件。TraceQuarry 名称、徽标、组合标识、favicon、
品牌资产和 Chill Ethical People 标志仍是项目身份资产,
不授予用于不相关品牌宣传或背书的权利。有关
确切条款,请参阅 `LICENSE` 和 `NOTICE`。
欢迎在相同的 Apache-2.0 条款下做出贡献。不要贡献
真实的事件证据、凭据、客户数据或您无权
分享的第三方材料。在打开公开 issue 或 pull request 之前,请参阅
`CONTRIBUTING.md` 和 `SECURITY.md`。
## 验证和分析师信心
TraceQuarry 使用内置的 fixture 证据和生成的合成
场景进行了验证。自动化测试套件涵盖:
- 单收集和多收集案例流水线
- 时间线身份、来源、关联和预期的去重
- 威胁配置文件优先级和 IoC 丰富
- 归档遍历、成员大小和扩展限制保护
- 输出遍历、Host、Origin 和 CSRF 安全性回归
- 公开作业数据脱敏和严格的证据文件权限
- 过大的 HTTP 请求拒绝和解析器错误报告
CI 还针对 `requirements.txt` 中固定的生产依赖基线
运行 Snyk Open Source。计划的每周监视器会检查相同的基线
是否存在新披露的漏洞;上面的 Snyk 徽章反映了该工作流的
最新结果。Gitleaks 会在推送、
pull request、每周计划以及手动发布检查时扫描完整可达的 Git 历史。
这些检查建立了对实现的信心,而不是证据结论。
对于案例报告,请根据原始源代码行、
收集覆盖率、主机时区和事件窗口假设验证决定性的发现。将
任何解析器错误或缺失的来源作为限制记录在调查报告中。
## 冒烟测试
在对案例证据使用更改后的解析器构建之前,请运行 fixture 冒烟测试:
```
cd tracequarry
PYTHONPATH=. python3 -m uac_parser.cli tests/fixtures/uac_sample \
--out /tmp/tracequarry-smoke \
--incident-start 2026-06-16T09:58:00+08:00 \
--incident-end 2026-06-16T18:01:40+08:00 \
--year 2026 \
--timezone Asia/Hong_Kong
```
- 确认冒烟输出中存在预期的文件:
```
ls /tmp/tracequarry-smoke/timeline_full.csv \
/tmp/tracequarry-smoke/timeline_mini.csv \
/tmp/tracequarry-smoke/findings.json \
/tmp/tracequarry-smoke/source_index.json \
/tmp/tracequarry-smoke/parser_errors.log
```
运行自动化的正确性、归档安全性、关联和流水线测试:
```
cd tracequarry
PYTHONPATH=. python3 -m unittest discover -s tests -v
```
## 发行版验证
GitHub 发行版包括源代码分发、wheel、CycloneDX SBOM 和
`SHA256SUMS`。在安装前验证下载的 artifact:
```
shasum -a 256 -c SHA256SUMS
python3 -m pip install tracequarry-*.whl
```
敏感的安全问题应通过
[GitHub Security Advisories](https://github.com/Chill-Ethical-People/TraceQuarry/security/advisories/new)
私下报告,或发送电子邮件至
[`contact@chillethicalpeople.com`](mailto:contact@chillethicalpeople.com)。
维护者在更改存储库可见性或发布 release tag 时应完成[公开发布检查清单](docs/public-release-checklist.md)。
标签:Python, 库, 应急响应, 数字取证, 无后门, 自动化脚本, 逆向工具