SecurityRonin/ext4fs-forensic

GitHub: SecurityRonin/ext4fs-forensic

这是一个基于纯安全 Rust 编写的取证级 ext4 文件系统解析库,支持已删除文件恢复、日志分析、时间线生成及剩余空间检查。

Stars: 0 | Forks: 0

# ext4fs-forensic **取证级 ext4 文件系统解析器。纯安全 Rust。MIT 许可证。** 解析 ext4 镜像并获取完整的取证元数据 —— 五种时间戳(纳秒级精度)、已删除文件恢复、日志历史重构、剩余空间分析以及字节级块搜索。 ## 为什么存在这个项目 本项目站在巨人的肩膀上。The Sleuth Kit、libext2fs 和 Linux 内核的 ext4 实现开创了 ext4 文件系统的取证分析,并教会了社区我们所知道的关于磁盘结构的所有知识。如果没有他们几十年的工作、文档和开源贡献,这个 crate 就不可能存在。 ext4fs-forensic 将这些相同的取证能力带入了 Rust 生态系统,作为一个 **纯安全 Rust 库** (`#![forbid(unsafe_code)]`)。它从第一性原理解析 ext4 磁盘结构 —— 没有 C 绑定,没有不安全代码,MIT 许可证 —— 使其易于嵌入到现代取证工具链、商业产品和法庭认可的工作流程中。 ## 你将获得 ``` let mut fs = Ext4Fs::open(file)?; // Standard filesystem access let data = fs.read_file("/etc/passwd")?; let entries = fs.read_dir("/")?; let meta = fs.metadata("/var/log/auth.log")?; // Forensic operations let deleted = fs.deleted_inodes()?; // Find all deleted files let recovered = fs.recover_file(deleted[0].ino)?; // Recover file data let timeline = fs.timeline()?; // Full forensic timeline let journal = fs.journal()?; // jbd2 journal parsing let history = fs.inode_history(ino)?; // Metadata over time let slack = fs.slack_space(ino)?; // File slack analysis let hits = fs.search_blocks(b"password", All)?; // Keyword search let hashes = fs.hash_file(ino)?; // BLAKE3+SHA-256+MD5+SHA-1 let xattrs = fs.xattrs(ino)?; // Extended attributes let dirs = fs.recover_dir_entries(2)?; // Deleted filename recovery let backups = fs.verify_superblock_backups()?; // Tampering detection ``` ## 取证能力 | 能力 | 功能描述 | |-----------|-------------| | **已删除文件检测** | 扫描 inode 表以查找删除标记 (`dtime`) 和孤立节点(崩溃残留物) | | **文件恢复** | 遍历 extent 树以重建已删除文件的数据,报告可恢复百分比 | | **取证时间线** | 全部五种时间戳(atime/mtime/ctime/crtime/dtime),纳秒级精度,按时间顺序排序 | | **日志解析** | 完整的 jbd2 事务历史 —— 描述符块、提交时间戳、已撤销块 | | **Inode 历史** | 从日志记录的元数据块重建先前的 inode 状态 | | **剩余空间** | 读取文件 EOF 之后、最后分配块中的数据 —— 这里隐藏着先前文件的片段 | | **关键字搜索** | 在已分配、未分配或所有块中进行字节模式搜索,具有可配置的上下文 | | **文件哈希** | 通过 [blazehash](https://crates.io/crates/blazehash) 实现 BLAKE3 + SHA-256 + MD5 + SHA-1 —— 兼容 NSRL/HashKeeper | | **已删除目录恢复** | 从目录块中的 `rec_len` 间隙恢复文件名 | | **Xattr 解析** | 内联 和块存储的扩展属性 —— SELinux 标签、ACL、用户元数据 | | **超级块备份** | 将备份超级块与主超级块进行比较,以检测篡改/损坏 | | **CRC32C 验证** | 对超级块、组描述符和 inode 校验和进行验证 | | **Extent 雕刻** | 扫描未分配块以查找 extent 树签名 (0xF30A) | ## 架构 六层自底向上设计 —— 每一层都构建在下一层之上: | 层级 | 模块 | 用途 | |-------|--------|---------| | 0 | `ondisk/` | 从原始 `&[u8]` 切片进行字节级结构体解析 | | 1 | `block.rs` | 基于 `Read+Seek` 的块设备抽象 | | 2 | `inode.rs` | Inode 读取、extent 树遍历、间接块 | | 3 | `dir.rs` | 目录解析、路径解析、符号链接跟踪 | | 4 | `forensic/` | 10 个取证分析模块 | | 5 | `lib.rs` | `Ext4Fs` 公共 API —— 第 1 层(标准)+ 第 2 层(取证) | 接受 **任何 `Read + Seek` 源** —— 原始镜像文件、EWF/E01 镜像(通过 [ewf](https://crates.io/crates/ewf) crate)或自定义读取器。 ## 安装 ``` [dependencies] ext4fs = "0.1" ``` ## 测试覆盖率 - **220 个测试**,涵盖单元测试和集成测试套件 - **98.85% 函数覆盖率**,87.86% 行覆盖率 - 已针对真实的取证镜像进行验证,包含已知的已删除文件、xattrs、符号链接和日志事务 ## 对取证至关重要的设计决策 - **`#![forbid(unsafe_code)]`** —— 纯安全 Rust,无未定义行为,无缓冲区溢出 - **校验和不匹配是警告,而非错误** —— 取证工具必须处理损坏的文件系统 - **ext4 是小端序,jbd2 日志是大端序** —— 两者均正确处理 - **无 chrono 依赖** —— 时间戳作为原始 `(i64 seconds, u32 nanoseconds)` 元组,无时区假设 - **MIT 许可证** —— 将其用于商业工具、政府系统或法庭提交的报告,无需担心 GPL 问题 ## 配合使用 - [**ewf**](https://crates.io/crates/ewf) — 读取 E01/EWF 取证磁盘镜像作为 `Read+Seek` 源 - [**blazehash**](https://crates.io/crates/blazehash) — 取证文件哈希(BLAKE3, SHA-256, MD5, SHA-1) - [**4n6mount**](https://github.com/SecurityRonin/4n6mount) — FUSE 挂载,支持 ro/rw 视图、已删除文件浏览和证据过滤 ## 致谢 如果没有构建取证分析学科及其工具的人们的奠基工作,本项目就不可能存在: - **Brian Carrier** — 感谢 [The Sleuth Kit](https://www.sleuthkit.org/)、[Autopsy Forensic Browser](https://www.autopsy.com/) 以及 *File System Forensic Analysis*(《文件系统取证分析》)一书,该书教会了一代从业者(包括作者)现代文件系统如何在字节级别工作 - **Rob T. Lee** — 感谢 [SANS FOR508](https://www.sans.org/cyber-security-courses/advanced-incident-response-threat-hunting-training/)(高级事件响应、威胁搜寻和数字取证),它塑造了我对取证时间线、证据处理和事件响应的思考方式 - **Linux 内核 ext4 开发者** — 感谢他们在 [kernel.org](https://www.kernel.org/doc/html/latest/filesystems/ext4/) 上对磁盘结构的详尽文档 - **Theodore Ts'o 和 e2fsprogs 团队** — 感谢 debugfs、dumpe2fs 以及几十年的 ext4 工具,它们作为我们的验证参考 ## 许可证 MIT
标签:BLAKE3, ext4, forensic, JBD2, Journal解析, Linux文件系统, MD5, MIT协议, Rust, SHA-1, SHA-256, Slack空间分析, 元数据, 内存安全, 删除文件恢复, 取证, 可视化界面, 哈希计算, 块搜索, 域渗透, 安全Rust, 开源, 扩展属性, 数字取证, 数据恢复, 文件系统, 法务分析, 电子数据取证, 磁盘分析, 网络流量审计, 自动化脚本, 通知系统