SecurityRonin/4n6mount

GitHub: SecurityRonin/4n6mount

这是一款基于 Rust 的通用取证 FUSE 挂载工具,能够在不修改原始镜像的前提下,提供只读访问、写时复制覆盖层、已删除文件恢复及哈希过滤等功能。

Stars: 1 | Forks: 0

# 4n6mount **将取证镜像挂载为文件系统。像浏览文件一样浏览证据。在不触碰原始文件的情况下进行写入。** 只需一条命令,即可将取证磁盘镜像转换为挂载的文件系统,提供只读证据访问、可写的写时复制覆盖层、已删除文件恢复、取证时间线以及基于哈希的过滤——所有这些都不会修改原始镜像的任何一个字节。 ## 为什么存在这个工具 取证人员在工具摩擦上花费了太多时间: - **以只读方式挂载镜像**虽然可行,但你无法在同一挂载点上运行 grep、保存笔记或将输出通过管道传递到文件 - **复制证据**会破坏监管链并浪费磁盘空间 - **仅限 GUI 的工具**无法融入脚本化工作流或 CI 流水线 - **已知良好文件过滤**需要使用单独的工具和单独的哈希数据库 4n6mount 解决了所有这些问题。挂载一次。在 `ro/` 中浏览证据。对 `rw/` 运行分析工具(写入操作会进入 sidecar 文件,绝不会写入镜像)。在 `evidence/` 中过滤掉操作系统噪音。所有功能都在一个挂载点中,只需一条命令。 ## 快速开始 ``` # 挂载 ext4 镜像 4n6mount image.dd /mnt/evidence # 自动检测文件系统类型 (ext4, NTFS, exFAT) # 创建虚拟目录: ls /mnt/evidence/ # ro/ - 只读原始证据 # rw/ - 可写 (COW overlay, 镜像未修改) # deleted/ - 恢复已删除文件 # journal/ - 日志事务快照 # metadata/ - superblock.json, timeline.jsonl # unallocated/ - 原始未分配块范围 # session/ - 会话状态 ``` ## 虚拟目录布局 ``` /mnt/evidence/ ├── ro/ Read-only. Pristine evidence. Never modified. ├── rw/ Writable. Copy-on-write overlay. │ All writes go to a sidecar directory. │ Identical to ro/ until you write something. ├── deleted/ Recovered deleted files: {inode}_{name} ├── journal/ Journal transaction snapshots ├── metadata/ superblock.json, timeline.jsonl ├── unallocated/ Raw unallocated block data ├── evidence/ Like rw/, but known-good files hidden │ (only when --filter-db is provided) └── session/ Session metadata ``` ## 主要功能 ### 在不修改证据的情况下写入 ``` # 在证据上运行 grep,保存结果 — 镜像未修改 grep -r "password" /mnt/evidence/rw/ > /mnt/evidence/rw/grep-results.txt # 您的分析工具正常工作 strings /mnt/evidence/rw/var/log/auth.log | sort -u > /mnt/evidence/rw/unique-strings.txt ``` 所有写入操作都会进入镜像旁边的 **sidecar 目录**。原始镜像永远不会被修改。会话导出功能可以将 sidecar 打包,以便与其他取证人员共享。 ### 过滤已知良好文件 ``` # 使用 NSRL 数据库挂载 — evidence/ 隐藏已知 OS/app 文件 4n6mount image.dd /mnt/evidence --filter-db /path/to/nsrl.db # 仅查看重要文件 ls /mnt/evidence/evidence/home/suspect/ ``` 支持 **NSRL RDSv3** (SQLite)、**HashKeeper** (CSV) 和 **自定义哈希列表**(每行一个 MD5)。 ### 会话持久化 ``` # 使用会话开始分析 4n6mount image.dd /mnt/evidence --session ./case-001 # 稍后返回 4n6mount image.dd /mnt/evidence --session ./case-001 --resume # 与另一位检查员共享 4n6mount --export-session ./case-001 --output case-001.tar.gz # 他们导入并继续 4n6mount --import-session case-001.tar.gz --session ./case-001-copy ``` 恢复时会验证镜像哈希(SHA-256)——检测证据篡改。 ### 守护进程模式 ``` # 后台挂载 4n6mount image.dd /mnt/evidence --daemon # 前台 (默认) — Ctrl+C 卸载 4n6mount image.dd /mnt/evidence ``` ## 文件系统支持 | 文件系统 | 状态 | 功能标志 | |-----------|--------|-------------| | **ext4** | 已支持 | `--features ext4` (默认) | | NTFS | 计划中 | `--features ntfs` | | exFAT | 计划中 | `--features exfat` | | HFS+ | 计划中 | `--features hfsplus` | | APFS | 计划中 | `--features apfs` | 通过魔数自动检测。使用 `--fs ext4` 覆盖。 ## 平台支持 | 平台 | FUSE 后端 | 状态 | |----------|-------------|--------| | **Linux** | fuser (libfuse) | 已支持 | | **macOS** | fuser (macFUSE) | 已支持 | | **Windows** | WinFSP | 存根(进行中) | ## 安装 ``` cargo install forensic-mount ``` 或从源代码构建: ``` git clone https://github.com/SecurityRonin/4n6mount cd 4n6mount cargo build --release # 二进制文件位于 target/release/4n6mount ``` ## ForensicFs trait 4n6mount 也是一个 **库**。任何取证文件系统解析器都可以通过实现 `ForensicFs` trait 来接入: ``` use forensic_mount::{ForensicFs, FsDirEntry, FsMetadata, FsResult}; impl ForensicFs for MyFilesystemParser { fn root_ino(&self) -> u64 { 2 } fn read_dir(&mut self, ino: u64) -> FsResult> { /* ... */ } fn lookup(&mut self, parent: u64, name: &[u8]) -> FsResult> { /* ... */ } fn metadata(&mut self, ino: u64) -> FsResult { /* ... */ } fn read_file(&mut self, ino: u64) -> FsResult> { /* ... */ } fn read_file_range(&mut self, ino: u64, off: u64, len: u64) -> FsResult> { /* ... */ } fn read_link(&mut self, ino: u64) -> FsResult> { /* ... */ } // Optional forensic ops — default implementations return empty/unsupported fn deleted_inodes(&mut self) -> FsResult> { /* ... */ } fn recover_file(&mut self, ino: u64) -> FsResult { /* ... */ } fn timeline(&mut self) -> FsResult> { /* ... */ } // ... } ``` 你将免费获得 ro/、rw/、deleted/、journal/、metadata/、会话管理和证据过滤功能。 ## 测试覆盖率 - **96 个测试**,涵盖库模块(FUSE 回调、inode 映射、会话、过滤、检测、ext4 实现) - 使用 `MockForensicFs` 进行基于 Mock 的 FUSE 测试 - 针对所有参数组合的 CLI 解析测试 ## SecurityRonin 取证套件的一部分 | 工具 | 用途 | |------|---------| | [**ext4fs-forensic**](https://github.com/SecurityRonin/ext4fs-forensic) | 具有 12 项取证功能的 ext4 文件系统解析器 | | [**ewf**](https://github.com/SecurityRonin/ewf) | E01/EWF 取证磁盘镜像读取器 | | [**blazehash**](https://github.com/SecurityRonin/blazehash) | 取证文件哈希工具——现代版的 hashdeep | | **4n6mount** | 通用取证 FUSE 挂载工具(本 crate) | 全部为纯 Rust。全部采用 MIT 许可证。全部设计为协同工作。 ## 致谢 本项目建立在数字取证社区数十年工作的基础之上: - **Brian Carrier** — 感谢 [The Sleuth Kit](https://www.sleuthkit.org/) 和 [Autopsy](https://www.autopsy.com/),它们定义了取证工具与文件系统交互的方式,并为此后的所有工具设立了标准 - **Rob T. Lee** — 感谢 [SANS FOR508](https://www.sans.org/cyber-security-courses/advanced-incident-response-threat-hunting-training/),它教会了我取证分析的核心在于时间线、证据完整性以及讲述发生了什么故事(GCFA #285) ## 许可证 MIT
标签:BurpSuite集成, COW, exFAT, ext4, FUSE, HashKeeper, MIT协议, NSRL, NTFS, Rust, 写时复制, 取证, 只读, 可视化界面, 司法鉴定, 哈希过滤, 域渗透, 开源, 恢复删除, 挂载, 数字取证, 数据恢复, 文件系统, 日志快照, 时间线, 未分配空间, 电子数据取证, 磁盘镜像, 网络流量审计, 网络调试, 自动化, 自动化脚本, 虚拟目录, 证据保全, 通知系统