jupyterj0nes/masstin

GitHub: jupyterj0nes/masstin

一款用Rust编写的高速DFIR工具,可解析多种取证证据并自动构建跨操作系统的统一横向移动时间线,支持图数据库可视化。

Stars: 5 | Forks: 0

# Masstin - 横向移动追踪工具!
Masstin Logo

Lateral movement tracker for anything!

[![License: AGPL v3](https://img.shields.io/badge/License-AGPLv3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![Rust](https://img.shields.io/badge/Rust-000000?logo=rust&logoColor=white)](https://www.rust-lang.org/) [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey)]()
**Masstin** 是一款用 Rust 编写的快速 DFIR 工具,用于解析取证证据并将横向移动数据统一到单一的时间线中。它支持 Windows EVTX、Linux 日志、Winlogbeat JSON 和 EDR API — 所有数据合并为一个 CSV,可直接用于分析或图数据库可视化(Neo4j、Memgraph)。 名称来源于 [Mastín Leonés](https://en.wikipedia.org/wiki/Spanish_Mastiff) — 来自西班牙莱昂山区的守护犬。与其同名犬一样,Masstin 守护着您的网络,追踪每一次移动。 ## 目录 - [主要功能](#key-features) - [安装](#install) - [使用方法](#usage) - [输出格式](#output-format) - [图可视化](#graph-visualization-neo4j--memgraph) - [所有选项](#all-options) - [支持的证据类型](#supported-artifacts) - [文档](#documentation) - [路线图](#roadmap) - [许可证](#license) - [联系方式](#contact) ## 主要功能 | 功能 | 描述 | 详情 | |---------|-------------|---------| | **统一的跨操作系统镜像解析** | **新增功能:** 单独的 `parse-image` 命令可自动检测每个分区的操作系统 — NTFS 分区使用 Windows 解析(EVTX + UAL + VSS),ext4 分区使用 Linux 解析(auth.log、wtmp 等)— 全部合并到一个时间线中。将 `-d` 指向包含混合 Windows 和 Linux 镜像的文件夹,获取单一的时间顺序 CSV。无需手动步骤,无需挂载。 | [取证镜像](https://weinvestigateanything.com/en/tools/masstin-vss-recovery/) | | **批量证据处理** | 将 `-d` 指向证据文件夹,masstin 会递归查找所有 E01/VMDK/dd 镜像,自动检测操作系统,从活动卷和 VSS 中提取所有取证证据,生成统一的时间线。摘要中的按镜像分组显示确切哪个镜像产生了哪些事件。一个命令,整个事件。 | [取证镜像](https://weinvestigateanything.com/en/tools/masstin-vss-recovery/) | | **BitLocker 检测** | 通过读取 VBR 偏移 3 处的 `-FVE-FS-` 签名自动检测 BitLocker 加密分区。向分析人员发出精确分区偏移的警告,并跳过加密卷 — 不会浪费时间在无法读取的数据上。 | [取证镜像](https://weinvestigateanything.com/en/tools/masstin-vss-recovery/ | | **streamOptimized VMDK** | 完全支持 streamOptimized VMDK(使用 zlib 压缩的 grains),常见于 OVA 导出、云模板和 vSphere 备份。还通过 `.filepart` 回退处理不完整的 SFTP 上传(适用于平面 VMDK)。 | [取证镜像](https://weinvestigateanything.com/en/tools/masstin-vss-recovery/) | | **VSS 快照恢复** | 从卷影副本中检测和提取 EVTX — 恢复被攻击者删除的事件日志。使用 [vshadow-rs](https://github.com/jupyterj0nes/vshadow-rs) | [VSS 恢复](https://weinvestigateanything.com/en/tools/masstin-vss-recovery/) | | **已挂载卷支持** | 将 `-d D:` 指向已挂载的卷,或使用 `--all-volumes` 扫描每个 NTFS 磁盘 — 无需先成像即可进行活动 EVTX + VSS 恢复 | | | **UAL 解析** | 自动检测和解析用户访问日志(SUM/UAL)ESE 数据库 — 3 年的服务器登录历史,可抵御事件日志清除 | [UAL](https://weinvestigateanything.com/en/tools/masstin-ual/) | | **MountPoints2 注册表** | 从每个用户配置文件中提取 NTUSER.DAT 并解析 MountPoints2 注册表项 — 揭示哪个用户连接了哪个远程共享(\\\\SERVER\\SHARE),带有时间戳。可抵御事件日志清除。支持带有事务日志恢复的脏注册表(.LOG1/.LOG2)。 | [MountPoints2](https://weinvestigateanything.com/en/artifacts/mountpoints2-lateral-movement/) | | **EVTX carving** | `carve-image` 在未分配空间的原始磁盘数据中扫描 EVTX 块(`ElfChnk`)— 即使日志和 VSS 都被删除,也能恢复横向移动事件。从 carved 的块构建合成的 EVTX 文件,并通过完整管道进行解析。 | [EVTX carving](https://weinvestigateanything.com/en/tools/evtx-carving-unallocated/) | | **多证据解析** | 来自 11 个 EVTX 源的 32+ 个 Windows 事件 ID + 计划任务 XML + MountPoints2 注册表 + Linux 日志 + Winlogbeat JSON + Cortex XDR | [证据类型](#supported-artifacts) | | **事件分类** | 每个事件分类为 `SUCCESSFUL_LOGON`、`FAILED_LOGON`、`LOGOFF` 或 `CONNECT`,并带有可读性强的失败原因 | [CSV 格式](https://weinvestigateanything.com/en/tools/masstin-csv-format/) | | **统一时间线** | 所有来源合并为具有 14 个标准化列的单一时间顺序 CSV | [CSV 格式](https://weinvestigateanything.com/en/tools/masstin-csv-format/) | | **跨平台时间线** | Windows EVTX + Linux SSH + EDR 数据在一个时间线中 — `parse-image` 自动跨操作系统边界合并,或使用 `merge` 进行手动组合 | | | **压缩 triage 支持** | 递归 ZIP 提取,自动检测取证密码 | | | **图可视化** | 直接上传到 [Neo4j]( Masstin CLI output — parse-windows
### 解析 Linux 日志 解析 Linux 系统日志和会计条目以提取 SSH 会话和身份验证事件。支持 Debian/Ubuntu(`auth.log`)和 RHEL/CentOS(`secure`)日志格式,以及 RFC3164(旧式 syslog)和 RFC5424(结构化)时间戳格式。 ``` masstin -a parse-linux -d /evidence/var/log/ -o linux-timeline.csv ```
Masstin CLI output — parse-linux
### 解析取证镜像 — 自动检测 Windows 和 Linux **一个命令。任何操作系统。任何镜像格式。** Masstin 直接打开取证磁盘镜像,自动检测每个分区类型(NTFS 或 ext4),并对每个分区应用正确的解析器 — 全部无需挂载、外部工具或手动操作系统识别。 - **NTFS 分区** → Windows 解析:EVTX + 活动卷中的 UAL + VSS 快照恢复 - **ext4 分区** → Linux 解析:auth.log、secure、messages、audit.log、wtmp、btmp、lastlog 所有结果合并为**单一的时间顺序 CSV**,跨来源去重。这意味着一个包含混合 Windows 和 Linux 镜像的文件夹 — 来自跨越数十台勒索软件事件 — 只需一个命令即可成为统一的时间线。 支持 **E01**、**dd/raw** 和 **VMDK**(稀疏、平坦、分裂稀疏、streamOptimized、VMFS/ESXi)。检测 **BitLocker 加密**分区并向分析人员发出警告。处理不完整的 SFTP 上传(`.filepart` 回退)。所有格式均使用纯 Rust 解析器。VSS 恢复通过 [vshadow-rs]( Masstin parse-image with cross-OS auto-detection
### 批量证据处理 — 一个命令,整个事件 将 `-d` 指向包含取证镜像的文件夹,masstin 递归扫描所有 E01、VMDK 和 dd/raw 文件。每个镜像被打开,分区被自动检测(NTFS 或 ext4),证据使用适当的解析器提取,所有内容合并为单一的时间顺序 CSV。**无需分离 Windows 和 Linux 镜像** — masstin 全部处理。 ``` # 扫描整个证据文件夹 — 查找所有镜像,任意操作系统 masstin -a parse-image -d /evidence/all_machines/ -o full_timeline.csv # 混合:证据文件夹 + 单个镜像 + 已挂载卷 masstin -a parse-image -d /evidence/ -f extra.e01 -d F: -o timeline.csv ``` Masstin 自动过滤 VMDK 分裂范围(`-s001.vmdk`)、快照(`-000001.vmdk`)、平面数据文件(`-flat.vmdk`)和变更跟踪块(`-ctk.vmdk`),仅保留基础描述符。对于 E01,仅处理第一个段(`.E01`)— 后续段(`.E02`、`.E03`)自动加载。 ### 解析 massive — 镜像 + triage + 零散证据一次处理 当同一证据文件夹中混合了取证镜像**和**零散的 EVTX/日志文件时,`parse-massive` 一起处理所有内容。它结合了 `parse-image`(用于 E01/VMDK/dd)和目录扫描(用于提取的 triage 包和单个 EVTX 文件),生成统一的时间线。 ``` # 处理所有镜像及证据目录中的独立工件 masstin -a parse-massive -d /evidence/ -o everything.csv ``` ### 从已挂载的卷解析(活动磁盘 / 写阻止器) 将 masstin 指向驱动器字母,它直接读取原始卷 — 从活动文件系统和磁盘上找到的每个 VSS 快照中提取所有 EVTX。无需先对磁盘进行成像。非常适合 triage 或使用写阻止器时。 ``` # 单个卷(Windows 上需要管理员权限) masstin -a parse-image -d D: -o timeline.csv # 多个卷 masstin -a parse-image -d D: -d E: -o timeline.csv # 扫描系统上所有 NTFS 卷 masstin -a parse-image --all-volumes -o timeline.csv ``` ### 用户访问日志(UAL) Masstin 自动检测 UAL 数据库(来自 `C:\Windows\System32\LogFiles\Sum` 的 `.mdb` 文件),并提取可追溯至**最多 3 年**的服务器访问记录 — 可抵御事件日志清除和轮换。UAL 记录包括用户名、源 IP、角色(文件服务器/SMB、远程访问/RDP 等)、访问次数和首次/最后出现的时间戳。 ``` # 自动:扫描目录或取证镜像时检测 UAL masstin -a parse-windows -d /evidence/Windows/System32/LogFiles/Sum/ -o timeline.csv # 直接:指向单个 .mdb 文件 masstin -a parse-windows -f Current.mdb -f SystemIdentity.mdb -o timeline.csv # 从取证镜像:UAL 数据库自动提取和解析 masstin -a parse-image -f DC01.e01 -o timeline.csv ``` 每个 UAL 记录生成两个时间线条目(首次出现 + 最后出现)。服务器主机名从 `SystemIdentity.mdb` 解析。角色映射到协议:文件服务器 → `SMB`,远程访问 → `RDP`,Web 服务器 → `HTTP` 等。 [完整文档 →](https://weinvestigateanything.com/en/tools/masstin-ual/) ### 解析 Winlogbeat JSON 解析转发到 Elasticsearch 的 Winlogbeat JSON 日志。当 EVTX 文件不可用时,从 JSON 格式提取相同的横向移动数据。 ``` masstin -a parser-elastic -d /evidence/winlogbeat/ -o elastic-timeline.csv ``` ### 解析 Cortex XDR 直接查询 Cortex XDR API 以检索网络连接数据或 Cortex 代理收集的 EVTX 取证证据。 ``` # 网络连接数据 masstin -a parse-cortex --cortex-url api-xxxx.xdr.xx.paloaltonetworks.com \ --start-time "2024-08-12 00:00:00" --end-time "2024-08-14 00:00:00" \ -o cortex-network.csv # 由 Cortex 代理收集的 EVTX 取证数据 masstin -a parse-cortex-evtx-forensics --cortex-url api-xxxx.xdr.xx.paloaltonetworks.com \ --start-time "2024-08-12 00:00:00" --end-time "2024-08-14 00:00:00" \ -o cortex-evtx.csv ``` ### 合并:组合多个时间线 ``` masstin -a merge -f timeline1.csv -f timeline2.csv -o merged.csv ``` ### 加载到图数据库 ``` # Neo4j masstin -a load-neo4j -f timeline.csv --database localhost:7687 --user neo4j # Memgraph masstin -a load-memgraph -f timeline.csv --database localhost:7687 ``` ## 输出格式 所有操作都产生一个具有 14 列的统一 CSV: | 列 | 描述 | |--------|-------------| | `time_created` | 事件时间戳 | | `dst_computer` | 目标主机名 | | `event_type` | 事件分类:`SUCCESSFUL_LOGON`、`FAILED_LOGON`、`LOGOFF`、`CONNECT` | | `event_id` | 原始事件 ID(例如,`4624`、`SSH_SUCCESS`、`SMB`、`RDP`) | | `logon_type` | Windows 登录类型(例如,`2`、`3`、`10`) | | `target_user_name` | 目标用户账户 | | `target_domain_name` | 目标域 | | `src_computer` | 源主机名 | | `src_ip` | 源 IP 地址 | | `subject_user_name` | 主体用户账户 | | `subject_domain_name` | 主体域 | | `logon_id` | 用于会话关联的登录 ID | | `detail` | 附加上下文:SubStatus、进程名称、SSH 认证方法、UAL 角色 | | `log_filename` | 源文件(例如,`HRServer.e01:vss_0:Security.evtx`) | 有关完整的事件 ID 映射,请参阅 [CSV 格式和事件分类](https://weinvestigateanything.com/en/tools/masstin-csv-format/)。 ## 图可视化(Neo4j / Memgraph) Masstin 支持两个图数据库。两者都使用 Cypher 查询语言,相同的查询在两者上都能工作,只有细微差别。 ### Neo4j | 步骤 | Windows | Linux | macOS | Docker(所有平台) | |------|---------|-------|-------|------------------------| | **安装** | 下载 [Neo4j Desktop](https://neo4j.com/download/) 并安装 | `sudo apt install neo4j` 或 [下载](https://neo4j.com/download/) | `brew install neo4j` 或 [下载](https://neo4j.com/download/) | `docker run -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/password neo4j` | | **启动** | 打开 Neo4j Desktop,创建数据库,点击 Start | `sudo systemctl start neo4j` | `neo4j start` | 自动运行 | | **浏览器** | `http://localhost:7474` | `http://localhost:7474` | `http://localhost:7474` | `http://localhost:7474` | | **加载数据** | `masstin.exe -a load-neo4j -f timeline.csv --database localhost:7687 --user neo4j` | `masstin -a load-neo4j -f timeline.csv --database localhost:7687 --user neo4j` | 与 Linux 相同 | 与 Linux 相同 | ### Memgraph | 步骤 | Windows | Linux | macOS | Docker(所有平台) | |------|---------|-------|-------|------------------------| | **安装** | 通过 Docker — 需要 WSL 2 + Docker Desktop(见下文) | `sudo apt install memgraph` 或 [下载](https://memgraph.com/download/) | 使用 Docker(推荐) | 使用 `memgraph/memgraph-mage` + `memgraph/lab` 的 `docker compose` | | **启动** | `iwr https://windows.memgraph.com | iex`(通过 docker compose 启动数据库和 Lab) | `sudo systemctl start memgraph` | — | 自动运行 | | **浏览器** | `http://localhost:3000`(Memgraph Lab) | `http://localhost:3000` | `http://localhost:3000` | `http://localhost:3000` | | **加载数据** | `masstin.exe -a load-memgraph -f timeline.csv --database localhost:7687` | `masstin -a load-memgraph -f timeline.csv --database localhost:7687` | 与 Linux 相同 | 与 Linux 相同 |
Memgraph 的 Windows 前置条件(WSL 2 + Docker) 在 Windows 上,Memgraph 在 Docker 容器内运行,而 Docker Desktop 需要 WSL 2。依赖链是:**WSL 2 → Docker Desktop → Memgraph 容器**。 **1. 启用 WSL 2** — 以管理员身份打开 PowerShell: ``` dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart ``` 重启电脑,然后: ``` wsl --update wsl --set-default-version 2 wsl --install ``` **2. 安装 Docker Desktop** — 从 [docker.com](https://www.docker.com/products/docker-desktop/) 下载。安装时选择"使用 WSL 2 而不是 Hyper-V"。如果提示,请重启。 **3. 安装并运行 Memgraph:** ``` iwr https://windows.memgraph.com | iex ``` 这会下载 `docker-compose.yml` 并启动数据库(`memgraph/memgraph-mage`)和 Web 界面(`memgraph/lab`)。打开 `http://localhost:3000` — Memgraph Lab 已就绪。
### 查询图 加载数据后,使用 Cypher 查询探索横向移动。 **Neo4j** — 按时间范围过滤: _BLOCK_16/>
Lateral movement graph in Neo4j
**Memgraph** — 查看所有横向移动: ``` MATCH (h1:host)-[r]->(h2:host) RETURN h1, r, h2 ```
Lateral movement graph in Memgraph
**时间路径重建**(从 `10_99_88_77` 到 `SRV_BACKUP`): ``` MATCH path = (start:host {name:'10_99_88_77'})-[*]->(end:host {name:'SRV_BACKUP'}) WHERE ALL(i IN range(0, size(relationships(path))-2) WHERE localDateTime(relationships(path)[i].time) < localDateTime(relationships(path)[i+1].time)) RETURN path ORDER BY length(path) LIMIT 5 ```
Temporal path reconstruction in Memgraph
有关完整查询目录(10+ 个查询),请参阅 [Cypher 资源](neo4j-resources/cypher_queries.md)。 ## 所有选项 | 选项 | 描述 | |--------|-------------| | `-a, --action` | `parse-windows` \| `parse-linux` \| `parse-image` \| `parse-massive` \| `carve-image` \| `parser-elastic` \| `parse-cortex` \| `parse-cortex-evtx-forensics` \| `merge` \| `load-neo4j` \| `load-memgraph` | | `-d, --directory` | 要处理的目录 — 也接受驱动器字母(`D:`)用于已挂载的卷(可重复) | | `-f, --file` | 单个文件:EVTX、.mdb、E01、VMDK、dd/raw(可重复) | | `-o, --output` | 输出文件路径 | | `--database` | 图数据库 URL(例如,`localhost:7687`) | | `-u, --user` | 数据库用户(Neo4j) | | `--cortex-url` | Cortex XDR API 基础 URL | | `--start-time` | 过滤开始:`"YYYY-MM-DD HH:MM:SS"` | | `--end-time` | 过滤结束:`"YYYY-MM-DD HH:MM:SS"` | | `--filter-cortex-ip` | 在 Cortex 查询中按 IP 过滤 | | `--all-volumes` | 扫描系统上所有 NTFS 卷(parse-image,需要管理员权限) | | `--overwrite` | 如果输出文件存在则覆盖 | | `--stdout` | 仅将输出打印到 stdout | | `--debug` | 打印调试信息 | | `--silent` | 抑制所有输出以实现自动化(Velociraptor、SOAR) | ## 支持的证据类型 Masstin 解析**来自 11 个 EVTX 源**的 **32+ 个 Windows 事件 ID**,以及 Linux 证据、UAL 数据库、Winlogbeat JSON 和 Cortex XDR。完整细分请参阅 [ARTIFACTS.md](
标签:DAST, EVTX解析, HTTPS请求, HTTP工具, HTTP请求, Linux取证, Linux日志分析, Memgraph, Modbus, Neo4j, NTFS解析, PE 加载器, Rust, StruQ, Windows取证, 取证工具, 可视化界面, 图数据库可视化, 恶意软件分析, 数字取证, 数字取证与事件响应, 数据集, 无线安全, 横向移动检测, 磁盘镜像分析, 网络安全审计, 网络流量审计, 自动化脚本, 跨平台分析, 通知系统