heindall92/heimdall-timewatch_DFIR

GitHub: heindall92/heimdall-timewatch_DFIR

一款零依赖的 NTFS timestomping 检测工具,通过比对 MFT 中 $SI 与 $FN 属性并结合 USN Journal 识别被篡改的文件时间戳。

Stars: 0 | Forks: 0

# 🛡️ heimdall-timewatch 由 **Yoandy Ramirez Delgado** 创建 · 用于教育和授权目的的 DFIR / Blue Team 工具。

License: MIT Python 3.8+ Dependencias: 0 MITRE ATT&CK T1070.006 Plataforma: Windows / Linux

## 它的功能是什么? `heimdall-timewatch` 旨在检测 **timestomping** —— 一种反取证技术,攻击者通过修改文件的时间戳来躲避时间线分析。这是威胁行为者最常用的规避技术之一,在 MITRE ATT&CK 中被映射为 **T1070.006 (Indicator Removal: Timestomp)**。 该工具在底层解析 NTFS 的 Master File Table (MFT),提取每个文件的 8 个 MACE 时间戳(4 个来自用户态可修改的 `$SI` 属性,4 个来自仅由内核写入的 `$FN` 属性),并应用 **6 种独立启发式算法** 以及 **USN Journal 验证**,以识别时间戳被篡改的文件。 ## 理念 **取证诚信至上。** 本工具报告的任何单一指标本身都不是确凿证据。每项发现都包含其置信度和已知的误报情况。夸大确定性的检测器比没有检测器更糟糕。多个工件之间的相互印证始终优于单一信号。 **零依赖。** 仅需 Python 3.8+ 标准库。取证工具必须具备可审计性、可移植性,并且能在无需 `pip install` 的隔离环境中运行。 ## 安装 ``` git clone https://github.com/heindall92/heimdall-timewatch_DFIR.git cd heimdall-timewatch_DFIR # 无需依赖项。可选地: pip install -e . ``` ## 快速开始 ### 实验室模式(即刻测试,无需真实 MFT) ``` python3 -m heimdall_timewatch.cli lab ``` 生成一个内置 6 个 timestomping 案例的合成 MFT,并验证检测器能否发现它们。这是你学习该技术的“射击场”。 ### 分析真实 MFT ``` # 首先使用 FTK Imager、MFTECmd 提取 $MFT,或者: # icat -o imagen.dd 0 > \$MFT python3 -m heimdall_timewatch.cli scan -m \$MFT # 结合 USN Journal 交叉验证(推荐): python3 -m heimdall_timewatch.cli scan -m \$MFT --usn \$J --html informe.html # 结合操作系统安装日期(改善 H5 启发式算法): python3 -m heimdall_timewatch.cli scan -m \$MFT --system-install 2024-01-15 # 导出为多种格式: python3 -m heimdall_timewatch.cli scan -m \$MFT --json out.json --csv out.csv --html out.html ``` ### 导出时间戳到 CSV(不做判定) ``` python3 -m heimdall_timewatch.cli parse -m \$MFT -o timestamps.csv ``` ## 启发式算法 | 代码 | 检测内容 | 置信度 | |--------|---------|-----------| | **H1** | `$SI` 早于 `$FN`(时间回溯) | 中等 → 若偏差超过 30 天则为高 | | **H2** | `$SI` 的子秒位为 `.0000000`(自动化工具) | 低 | | **H3** | 高 RID 伴随异常久远的创建日期 | 低 | | **H4** | `created` 晚于 `modified`(逻辑上不可能) | 中等 | | **H5** | 时间戳处于未来或早于操作系统安装时间 | 中等 | | **H6** | `$FN` 的子秒位为零(高级的 `$FN` 操纵) | 中等 | | **USN** | USN Journal 与 `$SI` 的创建日期矛盾 | **高** | ## 如何从系统中提取工件 ``` # 使用 FTK Imager (GUI):Add Evidence Item → Logical Drive → 导出 # $MFT 和 $Extend\$UsnJrnl:$J 从卷根目录。 # 使用 MFTECmd (Eric Zimmerman): MFTECmd.exe -f C:\$MFT --csv salida # 在 Linux 上从挂载的镜像中: icat -o 2048 disco.dd 0 > \$MFT ``` ## 诚实的局限性 - **`$SI` 与 `$FN` 对比法存在盲点。** 如果攻击者在进行 timestomping 后在同一卷内重命名或移动文件,Windows 会将篡改过的 `$SI` 复制到 `$FN`,导致 H1 不再触发。因此与 USN 的相互印证至关重要。 - **USN Journal 是循环覆盖的。** 如果创建事件已经轮转出日志记录范围,将无法进行验证。缺乏证据并不代表证据不存在。 - **合理的误报:** 触及 `$SI` 的安装程序、从 ZIP 中提取的文件(子秒位被截断)、保留 mtime 的副本、配置错误的时钟。每项发现都会记录这些情况。 ## 目录结构 ``` heimdall-timewatch/ ├── heimdall_timewatch/ │ ├── __init__.py │ ├── mft_parser.py # parser de bajo nivel del MFT │ ├── detector.py # motor de las 6 heurísticas │ ├── usn_journal.py # parser USN + corroboración │ ├── reporting.py # consola/JSON/CSV/HTML │ ├── labgen.py # generador de MFT de laboratorio │ └── cli.py # interfaz de línea de comandos ├── requirements.txt ├── setup.py └── README.md ``` ## 法律声明 本工具仅限用于自有系统、授权实验室(HTB、THM、练习机)或获得明确授权的 DFIR 审计。未经授权对他人系统进行取证分析可能触犯法律。本工具的存在是为了**检测**反取证活动,而不是用于实施它。 ## 许可证 基于 **MIT** 许可证分发。你可以自由使用、修改和重新分发本工具,但需保留版权声明。请查看 [LICENSE](LICENSE) 文件以获取完整文本。 ## 贡献 欢迎贡献:新的启发式算法、额外的工件解析器(LNK、Prefetch、$LogFile)或实验室案例。在进行 *pull request* 之前,请先开启一个 *issue* 讨论重大更改。请保持**零依赖**原则,并记录每个新启发式算法可能产生的误报。 *heimdall-timewatch · 由 Yoandy Ramirez Delgado 创建 · 2026 · MIT License*
标签:NTFS, Python, 安全, 数字取证, 无后门, 自动化脚本, 超时处理, 逆向工具