zff-team/zff-rs
GitHub: zff-team/zff-rs
一种用 Rust 编写的现代取证容器格式及配套工具链,为高性能磁盘镜像获取、证据存储与分析提供简洁且可扩展的基础设施。
Stars: 21 | Forks: 1
# Zff – 一种现代取证容器格式
[][crate-link]
[][docs-link]


[][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 格式的库 | [][zff-crates-io-link] |
| [zffacquire](https://github.com/ph0llux/zffacquire) | binary | 以 zff 格式获取磁盘镜像的工具 | [][zffacquire-crates-io-link] |
| [zffanalyze](https://github.com/ph0llux/zffanalyze) | binary | 获取 zff 容器相关信息的工具 | [][zffanalyze-crates-io-link] |
| [zffmount](https://github.com/ph0llux/zffmount) | binary | 使用 FUSE 挂载 zff 容器的工具(类似于 xmount) | [][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)生成。
#### 结果

¹使用 ```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```

\
¹使用了以下命令:
```
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, 加密, 去重, 取证容器格式, 可视化界面, 块存储, 安全工具开发, 密码学, 手动系统调用, 数字取证, 数字签名, 数据压缩, 数据获取, 文件格式, 模块化设计, 流式处理, 漏洞扫描器, 物理取证, 电子取证, 网络流量审计, 自动化修复, 自动化脚本, 虚拟对象, 通知系统, 逻辑取证