zff-team/zff-rs

GitHub: zff-team/zff-rs

一种用 Rust 编写的现代取证容器格式及配套工具链,为高性能磁盘镜像获取、证据存储与分析提供简洁且可扩展的基础设施。

Stars: 21 | Forks: 1

# Zff – 一种现代取证容器格式 [![crate](https://img.shields.io/crates/v/zff)][crate-link] [![Docs](https://docs.rs/zff/badge.svg)][docs-link] ![Apache2/MIT licensed](https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg) ![Rust 版本](https://img.shields.io/badge/rustc-1.67.1+-blue.svg) [![codeberg](https://img.shields.io/badge/Codeberg_Mirror-codeberg.org/zff--team/zff--rs-blue)][codeberg-link] zff 是一种现代取证容器格式,专为**高性能获取、可扩展性、伸缩性和实现清晰性**而设计。 其模块化设计支持广泛的取证工作流,同时实现了**可维护性与伸缩性**。 它同时支持**物理和逻辑证据**、流式工作流、可选的加密与签名、去重以及每个容器包含多个对象。 zff 并非旨在直接替代所有现有的取证交换格式(如 EWF 或 AFF4)。 相反,它为构建取证工具提供了一个**简洁、定义明确且高性能的基础**。 ## 设计目标 - 高吞吐量的获取与处理 - 同时支持物理和逻辑证据 - 可流式传输的格式设计 - 清晰且可维护的实现 - 现代化的压缩和加密原语 - 没有过高复杂性的可扩展性 ## 非目标 - 立即与所有现有取证工具实现完全互操作 - 复制遗留格式的行为或限制 请参阅 [wiki](https://github.com/ph0llux/zff/wiki) 以了解更多关于该规范的信息。 ## 功能 (Zff v3) - 物理和逻辑获取支持 - 基于数据块的存储模型 - 可流式传输的容器格式 - 可选压缩(例如 zstd、lz4) - 可选的加密与签名 - 去重支持 - 每个容器支持多个对象 - 虚拟对象(例如 RAID 重建) - 跨平台支持 ## 为什么选择 zff? 现有的取证格式各有优势: - **EWF (E01/L01)**:使用广泛且得到广泛支持 - **AFF4**:灵活且在概念上强大 然而,它们在以下方面也存在一些权衡: - 实现复杂性 - 可扩展性 - 跨工具的一致性 - 对现代压缩和加密原语的采用 zff 探索了一种不同的设计方法: - 更简单、更一致的实现模型 - 现代化的性能特征 - 明确支持物理和逻辑证据 - 对格式演进和工具的完全控制 目标并非一概取代现有的格式, 而是为新的取证工作流提供一个坚实的基础。 ## Zff 工具和库 有几种工具(以及这个库)可用于处理(或获取)zff 容器。所有的工具和库都是用纯 Rust 编写的。 | 名称 | 类型 | 描述 | Crates.io | |------|:----:|:------------|:---------:| | [zff](https://github.com/ph0llux/zff) | library | 用于处理 zff 格式的库 | [![crates.io](https://img.shields.io/crates/v/zff.svg)][zff-crates-io-link] | | [zffacquire](https://github.com/ph0llux/zffacquire) | binary | 以 zff 格式获取磁盘镜像的工具 | [![crates.io](https://img.shields.io/crates/v/zffacquire.svg)][zffacquire-crates-io-link] | | [zffanalyze](https://github.com/ph0llux/zffanalyze) | binary | 获取 zff 容器相关信息的工具 | [![crates.io](https://img.shields.io/crates/v/zffanalyze.svg)][zffanalyze-crates-io-link] | | [zffmount](https://github.com/ph0llux/zffmount) | binary | 使用 FUSE 挂载 zff 容器的工具(类似于 xmount) | [![crates.io](https://img.shields.io/crates/v/zffmount.svg)][zffmount-crates-io-link] | ## 性能说明 zff 通过以下方式实现高性能: - 基于数据块的处理 - 现代压缩算法(例如 zstd、lz4) - 高效的流式设计 - 使用 Rust 实现 ### 项目基准测试 以下基准测试评估了 **zff 工具**与选定获取工具的性能对比。 #### 测试设置 以下基准测试均在笔记本电脑上运行,其规格如下: - Lenovo Thinkbook 14S Yoga ITL - Intel(R) 第 11 代 i5-1135G7 @ 平均: 2.40GHz (最大: 4.2 GHz) - 16GB DDR4-3200 RAM - 内置三星 980 Pro NVMe 1TB 安装的操作系统为 Gentoo Linux。 输入和输出存储设备均为内置 NVMe。 以下基准测试是针对一个约 20GB 的预构建镜像创建的,该镜像使用[基准测试脚本](/benchmarks/gen_benchmark_image.sh)生成。 #### 结果 ![获取时间](/benchmarks/acquisition_time.png) ¹使用 ```ewfacquire example01.dd -t example01_ewf -b 64 -c fast -S 7.9EiB -u```,使用 ewfacquire 20171104 版本。 ²使用 ```ewfacquire example01.dd -t example01_ewf -f encase7-v2 -b 64 -c fast -S 7.9EiB -u``` ³使用 ```zffacquire physical -i raw/example01.dd -o zff``` ⁴使用 ```zffacquire physical -i raw/example01.dd -o zff -p -L debug``` ⁵使用 ```zffacquire physical -i raw/example01.dd -o zff -S``` ⁶使用 ```zffacquire physical -i raw/example01.dd -o zff_lz4 -z lz4``` ⁷使用 Guymager 0.8.12 版本,使用默认的 guymager.cfg,计算 MD5 哈希值,不包含 "HashVerifyDest"。 ⁸使用 Guymager 0.8.12 版本,在 guymager.cfg 中启用 Aff 支持并将 Aff 压缩等级设为 1,计算 MD5 哈希值,不包含 "HashVerifyDest"。 ⁹使用 ```linpmem-3.3-rc1 -i example01.dd -o output.aff4``` ¹⁰使用 ```linpmem-3.3-rc1 -i example01.dd -o output.aff4 --threads 8``` ¹¹使用 ```linpmem-3.3-rc1 -i example01.dd -o output.aff4 -c snappy``` ¹²使用 ```linpmem-3.3-rc1 -i example01.dd -o output.aff4 -c snappy --threads 8``` ¹³使用 ```linpmem-3.3-rc1 -i example01.dd -o output.aff4 -c lz4``` ![读取速度](/benchmarks/read_speed_dd.png) \ ¹使用了以下命令: ``` zffmount -i zff.z01 -m /tmp/zffmount -c in-memory dd if=/tmp/zffmount/zff_image.dd of=/dev/null bs=1M ``` ²使用了以下命令: ``` zffmount-v2 -i zff.z01 -m /tmp/zffmount dd if=/tmp/zffmount/zff_image.dd of=/dev/null bs=1M ``` ³使用了以下命令: ``` affuse aff_image.aff /tmp/affmount dd if=/tmp/affmount/aff_example01.aff.raw of=/dev/null bs=1M ``` ⁴使用了以下命令: ``` xmount --in aff aff_image.aff /tmp/affmount dd if=/tmp/affmount/aff_image.dd of=/dev/null bs=1M ``` ⁵使用了以下命令: ``` xmount --in ewf ewfacquired.Ex01 /tmp/ewfmount dd if=/tmp/ewfmount/ewfacquired.dd of=/dev/null bs=1M ``` ⁶使用了以下命令: ``` xmount --in ewf guymager.e01 /tmp/ewfmount dd if=/tmp/ewfmount/guymager.dd of=/dev/null b=1M ``` ### 结果解读 结果表明,在此特定设置中,基于 zff 的工具可以获得极具竞争力的吞吐量。 然而,性能在很大程度上取决于: - 数据集特征 - 压缩配置 - 硬件(受限于 CPU 还是 I/O) - 所对比工具的实现细节 特别是,涉及 AFF4 的对比应该谨慎解读,因为公开实现在功能覆盖和性能表现上差异显著。 ### 局限性 - 基准测试是在单一系统和数据集上进行的 - 不同的工具暴露了不同的默认值和功能集 - 并非所有格式都拥有同样成熟或可比的工具 - 结果应被视为**具有指示意义,而非决定性的** ## 项目范围 zff 既是: - 一份**文件格式规范** - 一套**参考实现和工具生态系统** 当前的实现旨在: - 提供完整且一致的参考 - 在实践中验证格式设计决策 - 支持实际的取证工作流 未来的开发将侧重于: - 改进工具和可用性 - 在必要时扩展格式功能 - 尽可能保持向后兼容性 ## Zff 布局 请参阅 [wiki](https://github.com/ph0llux/zff/wiki) 获取更多信息。 ## 许可证 Zff 是开源的,并在 Apache 2.0 和 MIT 许可证下授权。这应确保符合开源和商业软件的使用合规性。 ### 贡献 除非您明确声明,否则由您提交以包含在本作品中的任何贡献,均按 Apache-2.0 许可证的定义,应按上述方式进行双重许可,不附加任何额外的条款或条件。
标签:CVE, LZ4, RAID重构, Rust, ZFF格式, Zstd, 加密, 去重, 取证容器格式, 可视化界面, 块存储, 安全工具开发, 密码学, 手动系统调用, 数字取证, 数字签名, 数据压缩, 数据获取, 文件格式, 模块化设计, 流式处理, 漏洞扫描器, 物理取证, 电子取证, 网络流量审计, 自动化修复, 自动化脚本, 虚拟对象, 通知系统, 逻辑取证