ochmunkh/Tatar-Triage
GitHub: ochmunkh/Tatar-Triage
一款轻量级跨平台 DFIR 取证与工件收集工具,以只读优先方式从 Windows 和 Linux 主机快速采集数字证据并生成结构化分析报告。
Stars: 0 | Forks: 0
一个使用 PowerShell 编写的快速、单文件 Windows DFIR 取证与工件收集器。
当终端表现出被入侵的迹象(访问了恶意网站、运行了可疑文件、无法解释的卡顿)时,你需要*快速*保留证据——而无需安装或折腾一堆独立的工具。`Tatar.ps1` 通过单次只读优先的流程,从 Windows 主机收集重要的易失性和非易失性工件,并生成一份汇总报告、一份分析人员优先的**包含汇总发现的分类总结**、一份完整的**执行日志**,以及用于监管链的 SHA-256 清单。
## 演示
使用单个命令运行所有操作:
每次运行都会生成一个独立且经过哈希校验的证据文件夹:
v1.1 分类总结 (`summary.txt`) 为 IR 负责人提供了一页纸的起点:
汇总报告会在执行过程中标记可疑活动(示例):
## 亮点
- **一个脚本,无需安装。** 将其拷贝到主机(或 USB)上,运行即可。
- **30 个模块**,按 **RFC 3227 易失性顺序**执行(内存 → 网络 → 进程 → …… → 磁盘 / 注册表 / 日志)。
- **分析人员优先的总结。** 每次运行都会写入 `summary.txt` + `summary.json`:主机/操作系统/案件元数据、快速统计,以及汇总的**可疑发现**列表——这些是供审查的线索,*而不是*最终定论。JSON 可直接输入到 SIEM / SOAR 流水线中。
- **执行日志。** `Tatar.log` 记录每个模块的时间戳以及 `START / OK / WARN / FAILED` 状态——清晰的审计追踪,便于排查问题。
- **支持自动化。** `-Silent` 会抑制所有控制台输出(适用于 WinRM / 计划任务 / 远程运行),并且脚本会返回有意义的**退出代码**(见下文)。
- **只读优先。** 破坏性/繁重的操作(内存转储、注册表配置单元保存、完整 EVTX)默认**关闭**,需要通过显式开关启用。
- **监管链。** 包含每次运行的元数据、审查员/案件 ID,以及每个收集文件的 SHA-256 清单。
- **设计透明。** 没有代码混淆,没有绕过 AMSI/AV。旨在在取证主机上进行代码签名并加入白名单。
- **不会提取或解密密码。**
- **跨平台。** 输出通用的 [`summary.schema.json`](schema/summary.schema.json) 契约;[Linux 版本](linux/) (`tatar-linux.sh`) 生成完全相同的 `summary.json` 输出。
## 环境要求
- Windows 10 / 11(Windows Server 2016+ 也可以)
- PowerShell 5.1+(支持 PowerShell 7)
- 推荐**管理员权限**(如果没有,某些工件将不完整)
## 使用方法
```
# 允许当前会话的脚本
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
# 运行所有内容(单破折号或双破折号均可)
.\Tatar.ps1 -All
.\Tatar.ps1 --all
# 列出可用模块(无 collection,未创建文件夹)
.\Tatar.ps1 -List
# 仅运行特定模块
.\Tatar.ps1 -Modules network,process,rdp,lateral,timeline
# 完整运行至外部驱动器,包含 case metadata,已压缩 + 已计算哈希
.\Tatar.ps1 -All -OutputPath E:\Evidence -CaseId IR-2026-014 -Examiner "Enkhbat.O" -Compress
# 自动化/远程运行:无控制台输出,检查 exit code
.\Tatar.ps1 -All -Silent -OutputPath E:\Evidence -CaseId IR-2026-014
if ($LASTEXITCODE -ne 0) { Write-Warning "TATAR finished with issues - check Tatar.log" }
```
### 选项
| 选项 | 描述 |
|--------|-------------|
| `-All` / `--all` | 运行所有模块 |
| `-Modules a,b,c` | 仅运行指定的模块 |
| `-List` | 列出模块并退出 |
| `-Help` | 显示帮助并退出 |
| `-OutputPath
` | 输出基础目录(默认为 `C:\Forensic`;**建议使用外部驱动器**) |
| `-CaseId ` | 用于监管链的案件/事件 ID |
| `-Examiner ` | 用于监管链的审查员姓名 |
| `-Compress` | 最后对输出进行压缩并计算 SHA-256 |
| `-CollectHives` | 保存 SAM/SECURITY/SYSTEM/SOFTWARE + NTUSER(凭据材料;可能触发 EDR) |
| `-ExportEvtx` | 导出完整的 `.evtx` 日志 |
| `-MemoryDump` | 通过 `tools\winpmem.exe` 获取原始内存镜像(可能触发 EDR) |
| `-Silent` / `-Quiet` | 抑制**所有**控制台输出(横幅、进度、状态)。文件(包括 `Tatar.log`)仍会被写入。适用于 WinRM / 计划任务 / 自动化运行 |
### 退出代码
| 代码 | 含义 |
|------|---------|
| `0` | 收集成功完成 |
| `1` | 致命/使用错误(未选择任何内容、无法创建输出目录、没有有效模块) |
| `2` | 收集完成,但有一个或多个步骤记录了错误——请检查 `Tatar.log` |
## 模块
按易失性从高到低排序:
`memory` · `network` · `process` · `sessions` · `services` · `sysinfo` · `users` · `persistence` · `autoruns` · `shares` · `firewall` · `drivers` · `apps` · `prefetch` · `usb` · `pshistory` · `obfscan` · `rdp` · `lateral` · `privesc` · `browser` · `fsartifacts` · `deleted` · `shadow` · `eventlogs` · `hives` · `mft` · `indicators` · `hashes` · `timeline`
覆盖范围包括:系统/用户/网络状态,带有 LOLBAS 模式标记的运行进程,服务和驱动程序,启动项/Run键/计划任务等持久化机制,RDP 活动,横向移动工件(SMB 会话、映射驱动器、WMI 持久化、PsExec),权限提升指标(未加引号的服务路径、`AlwaysInstallElevated`、令牌权限),混淆脚本扫描,浏览器工件元数据(所有配置文件,不解密),Recent/Amcache/Prefetch,回收站,卷影副本,关键 Windows 事件 ID,可选的注册表配置单元和 EVTX 导出,NTFS/MFT 信息,用于 IOC 匹配的文件哈希,以及轻量级的超级时间线 CSV。
## 分类总结与发现
每次运行都会在结束时生成一份以分析人员为中心的单页报告,让 IR 负责人知道**首先应该查看什么**:
- **`summary.txt`** —— 主机/操作系统/案件元数据、快速统计(进程数、TCP 连接数、本地用户数、已哈希的二进制文件等),以及按严重程度排序的汇总**可疑发现**列表。
- **`summary.json`** —— 与上述相同数据的结构化 JSON 格式(包含 `Severity/Category/Message/Detail` 的 `stats` 和 `findings[]`),可直接供 SIEM 摄取或脚本化后处理。
发现来自于收集器本身:LOLBAS 风格的命令行、混淆脚本匹配、PsExec 工件、WMI 事件订阅消费者、未加引号/用户可写的服务路径、`AlwaysInstallElevated`、安全日志被清除 (1102) 事件、最近放入临时位置的可执行文件等。
## 执行日志 (`Tatar.log`)
每次运行都会在证据旁边生成一个带有时间戳的执行日志:
```
[2026-07-10 22:26:16.693] [START ] module sysinfo (1/30)
[2026-07-10 22:26:17.721] [OK ] module sysinfo finished in 1s
[2026-07-10 22:26:17.751] [START ] module hives (26/30)
[2026-07-10 22:26:17.995] [ERROR ] Hives failed: Access denied
[2026-07-10 22:26:17.996] [WARN ] module hives finished in 0.2s with 1 error(s)
```
`Tatar.log` 是一个*操作*日志(在清单计算哈希后它还会继续增长),因此特意将其**排除在 `manifest_sha256.csv` 之外**。证据文件仍会照常进行哈希计算。
## MITRE ATT&CK 映射
每个收集器都映射到它有助于**检测/调查**的对手技术。详见 [`docs/MITRE_ATTACK.md`](docs/MITRE_ATTACK.md)。
| 模块/工件 | ATT&CK 技术 | 策略 |
|---|---|---|
| `process` (LOLBAS 命令行) | T1059 · T1059.001 (PowerShell) | 执行 |
| `persistence` (Run 键) | T1547.001 | 持久化 |
| `persistence` (计划任务) | T1053.005 | 持久化 |
| `services` | T1543.003 | 持久化 / 提权 |
| `rdp` | T1021.001 (RDP) | 横向移动 |
| `lateral` (SMB 共享/会话) | T1021.002 | 横向移动 |
| `lateral` (WMI 事件订阅) | T1546.003 · T1047 | 持久化 / 执行 |
| `lateral` (PsExec) | T1569.002 | 执行 |
| `hives` (SAM / SECURITY / LSASS) | T1003.002 · T1003.001 | 凭据获取 |
| `privesc` (未加引号的服务路径) | T1574.009 | 持久化 / 提权 |
| `privesc` (AlwaysInstallElevated) | T1548 | 权限提升 |
| `obfscan` | T1027 · T1140 | 防御规避 |
| `usb` | T1091 · T1200 | 初始访问 / 数据外传 |
| `eventlogs` (ID 1102) | T1070.001 (清除事件日志) | 防御规避 |
| `shadow` | T1490 (抑制恢复) | 影响 |
| `network` / `hosts` | T1071 · T1565.001 | 命令与控制 / 防御规避 |
| `browser` | T1555.003 · T1539 | 凭据获取 |
## 输出
```
C:\Forensic\_\
├─ TATAR_Report__.txt # consolidated human-readable report
├─ summary.txt # analyst-first triage summary + findings (NEW v1.1)
├─ summary.json # same, machine-readable (SIEM/automation) (NEW v1.1)
├─ findings.json # findings-only feed for SOAR / SIEM (NEW)
├─ Tatar.log # execution log: START/OK/WARN/FAILED (NEW v1.1)
├─ chain_of_custody.txt # case/examiner/times/script hash
├─ manifest_sha256.csv # SHA-256 of every collected file (Tatar.log excluded)
├─ timeline.csv # process / prefetch / recent / installs
├─ binary_hashes.csv # SHA-256 of running/service binaries (VT/IOC)
├─ recyclebin.csv
├─ arp.txt / routes.txt / dns_cache.txt / ipconfig.txt / hosts.txt
├─ firewall_rules.txt
├─ BrowserArtifacts\ · EventLogs\ · FsArtifacts\ · RDP\ · RegistryHives\ · MFT\
└─ (optional) ..\TATAR__.zip (+ .sha256.txt)
```
## 处理与操作注意事项
- **建议使用外部驱动器**(`-OutputPath E:\Evidence`)。写入系统驱动器可能会覆盖已删除文件的证据。
- 在收集完成之前,请**不要重启/关闭**主机。
- 输出可能包含**敏感数据**(注册表配置单元、浏览器元数据)。请加密存档并安全传输。
- 已知某些模块(`hives`、`memorydump`、`exportevtx`)会触发 EDR/AV。这是预期之中的——**请提前与您的 SOC 协调并将该工具加入白名单**,而不是禁用 EDR。
### 在不绕过 AV 的情况下通过 AV 检查
该工具是刻意**透明**的(没有代码混淆 / AMSI 绕过)。要以正确、可审计的方式在不干扰 AV 的情况下运行它:
1. 对脚本进行**代码签名** (`Set-AuthenticodeSignature`)。
2. **发布其 SHA-256**,以便响应人员进行验证并将其加入白名单。
3. 在取证主机上,为该工具添加**有作用域限制的 Defender/EDR 排除项**,并在事后将其移除。
`SHA-256 (Tatar.ps1): A69F953AFCE102190DA9928869D380528F6E2BB7E203C66CF46E97187709219B`
## 已知局限性
- **不会**提取或解密已保存的密码。
- 完整的 `$MFT` 解析需要离线工具(例如 MFTECmd / RawCopy);脚本仅记录 NTFS/MFT 元数据。
- 浏览器工件**仅包含元数据**(不执行数据库查询,不进行解密)。
- 如果没有管理员权限,某些工件(事件日志、配置单元、受保护的进程)将不完整。
- `summary.txt` / `summary.json` 中的发现属于启发式模式匹配——合法软件可能会导致误报;请务必进行验证。
- PowerShell 5.1 上的 `Compress-Archive` 在处理非常大的输出(例如内存镜像)时可能会遇到困难;对于这些大文件,请使用 7-Zip。
## 可选的外部工具 (`tools\`)
- `winpmem.exe` —— 内存镜像(用于 `-MemoryDump`)
- `autoruns64.exe` —— Sysinternals Autoruns(用于 `autoruns` 模块)
如果它们存在于 `tools\` 子文件夹中,将会被自动调用;否则将跳过这些步骤。
## 更新日志
### Tier 1 加固(当前版本)
- **持久化 ASEP**:IFEO Debugger 劫持、AppInit_DLLs、AppCertDlls、Winlogon Shell/Userinit、LSA 包、打印监视器(只读注册表)。
- **进程族谱**:父 -> 子进程树以及可疑血缘发现(Office/脚本宿主生成 shell)。
- **更多事件 ID**:4698/4699(任务)、4719(审核策略)、4648(显式凭据)、4768/4769/4776(Kerberos/NTLM)、5140(共享)、4627。
- **`findings.json`** 专为 SOAR/SIEM 输出的仅包含发现的结果。
- 映射器中加入 **MITRE 子技术**(例如 T105.001 对比 T1059.003,T1218.x LOLBINs,T1546.x ASEPs)。
- **健壮性**:winpmem HVCI/空镜像检测;清单哈希处理容忍锁定的文件 (`-ErrorAction SilentlyContinue`)。
- **退出代码准确性**:预期的活动系统锁定(Amcache.hve、活动的 NTUSER.DAT)现在记录为 NOTE/WARN(而不是错误),因此干净的运行将返回退出代码 0 而不是 2。
### Schema 1.1 —— 跨平台(当前版本)
- **统一的 `summary.json` 架构** ([`schema/summary.schema.json`](schema/summary.schema.json)) 现已与 Linux 版本共享;消费者依赖 `schemaVersion` 进行适配。
- 发现包含 **MITRE ATT&CK `technique[]`** 数组(集中映射);总结会内联显示这些 ID。
- 新增 **`environment`** 块:虚拟化、容器、安全模块。
- 跨平台统一字段名称:`privileged`(原为 `administrator`)、`durationSeconds`(原为 `durationMinutes`);发现键名已转为小写。
- 新增配套的 **[`linux/tatar-linux.sh`](linux/)** —— 包含 16 个模块,提供相同的以分析人员为优先的输出。
### v1.1
- **分类总结** (`summary.txt` + `summary.json`):元数据、快速统计、汇总的*可疑发现*(供审查的线索,而非最终定论);专供 SIEM/自动化使用的 JSON。
- **执行日志** (`Tatar.log`):每个模块的时间戳为 `START/OK/WARN/FAILED`,错误信息及原因被同步镜像;出于设计考虑,已从证据清单中排除。
- 用于 WinRM / 计划任务 / 远程运行的 **`-Silent` / `-Quiet`** 模式 + **退出代码**(`0` 正常,`1` 致命错误,`2` 已完成但包含错误)。
- 误报修复:混淆扫描跳过脚本本身;对 `nc.exe` / `ncat` / `iex` 模式进行单词边界匹配(不再出现 `AdobeCollabSync.exe` 的误报命中)。
- 当未设置 `$env:COMPUTERNAME` 时使用主机名回退。
### v1.0
- 初始发布:包含 30 个收集器,按 RFC 3227 易失性顺序排列,具有监管链、SHA-256 清单、可选的 ZIP 压缩,以及配置单元/EVTX/内存转储开关。
## 法律声明
仅供**授权**使用——仅限您拥有或获得明确书面许可进行检查的系统。您有责任遵守适用的法律和组织政策。
## 作者
**Enkhbat.O** —— 安全分析师
## 许可证
MIT(详见 `LICENSE`)。标签:AI合规, Bash, Homebrew安装, IPv6, Libemu, PB级数据处理, PowerShell, 安全运维, 库, 应急响应, 应用安全, 数字取证, 自动化脚本, 自动收集