#file-format #disk-image #forensics #security #acquisition #physical-memory #file

zff

此 crate 是一个与 zff 交互的库,zff 是一种用于法医镜像的文件格式。

9 个版本 (1 个稳定版)

3.0.0-rc.22024年8月2日
3.0.0-rc.12024年7月28日
3.0.0-rc.02024年5月27日
3.0.0-beta.3 2024年2月21日
0.10.1 2021年11月7日

#81 in 文件系统

Download history 12/week @ 2024-04-19 7/week @ 2024-05-17 88/week @ 2024-05-24 25/week @ 2024-05-31 5/week @ 2024-06-07 2/week @ 2024-06-14 111/week @ 2024-07-26 124/week @ 2024-08-02

235 每月下载量
用于 4 crates

MIT/Apache 和可能 LGPL-2.1

490KB
11K SLoC

Zff

crate Docs Apache2/MIT licensed Rust Version website

Zff (Z 法医文件格式) 是用于存储和处理部分或整个磁盘镜像、物理内存或逻辑文件/文件夹结构的文件格式。zff 的重点是速度、安全性和模块化,同时满足法医需求。模块化设计保证了高度的维护性和可扩展性。Zff 是 ewf 和 aff 文件格式的替代品,并且与它们不兼容。

查看 wiki 了解更多关于规范的信息。

Zff(v3) 包含的功能(其中大多数是可选的)

  • ⚡ 使用现代、极快的方法压缩导出的数据(如 Zstd 或 Lz4)⚡
  • 🔒 数据可以选择加密存储。使用强 AEAD 和 PBE 算法。🔒
  • ☄ 格式设计为可流式传输(例如,您可以通过 HTTP 流式传输 zff 导出/容器)。☄
  • 🪂 Zff 可以处理逻辑导出(如文件系统提取)和物理导出(如 dd 导出)。🪂
  • 🌐️ 可以构建虚拟对象来正确读取内容(例如,定义 RAIDs)。🌐️
  • ♊️ Zff 可以去重数据,以确保充分利用可用存储。♊️
  • 🤹 格式设计为可以分割成多个文件。🤹
  • 🍱 可以在一个 zff 容器中存储多个导出,并使用附加的导出来扩展现有的 zff 容器。🍱
  • 🛡 为了防止篡改攻击,数据可以签名存储。🛡
  • 🔗 使用快速的现代哈希算法来确保存储数据的完整性。🔗

Zff 工具和库

有几个工具(以及此库)可以处理 zff 容器(或获取它们)。所有工具和库都是用纯 Rust 编写的。

名称 类型 描述 Crates.io MRSV
zff 处理 zff 格式的库 crates.io 1.67.1
zffacquire 二进制文件 用于获取 zff 格式磁盘镜像的工具 crates.io 1.67.1
zffanalyze 二进制文件 获取 zff 容器信息的工具 crates.io 1.70.0
zffmount 二进制文件 使用 FUSE 挂载 zff 容器的工具(类似于 xmount) crates.io 1.67.1

基准测试

以下基准测试均在一台笔记本上运行,该笔记本具有以下配置:

  • 联想 Thinkbook 14S Yoga ITL
  • 英特尔(R) 第11代 i5-1135G7 @ AVG:2.40GHz(MAX:4.2 GHz)
  • 16GB DDR4-3200 RAM
  • 内部三星 980 Pro NVMe 1TB 安装的操作系统为 Gentoo Linux。
    输入和输出存储设备为内部 NVMe。

以下基准测试是为一个约20GB的预构建镜像创建的,该镜像使用基准脚本生成。

Acquisition time

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

如您所见,zffacquire 在大多数情况下比其他工具要快得多 - 即使您存储加密数据。使用默认值的 zffacquire 不会影响性能。当然,如果使用额外的签名操作(但这同样适用于 Guymager,如果开启了 "HashVerifyDest" 和/或 "HashVerifySrc"),情况就不同了。
\ zffacquire 和 linpmem 使用 lz4(这仅仅表明更换压缩算法能做多少!)产生非常好的基准。
\ 以下获取的图像(Guymager-e01-image 第 1 号,在上面的基准过程中获取,以及使用 zffacquire 默认选项获取的 zff-z01-image,见上方第 6 号),获取的 Ex01-image(第 7 号)和获取的 Aff-image(由 Guymager 获取,见第 2 号),被用作读取速度基准的基础。对于基准测试,使用了 xmount 和 zffmount 以 FUSE 挂载适当的图像。接下来,使用 dd 进行读取速度基准测试。
\ 很不幸,我没有找到官方的参考工具,可以用于 FUSE 挂载 aff4 图像(在 www.aff4.org 或 docs.aff4.org 上都找不到)。如果有人能告诉我一个,我会相应地更新基准。

Read speed
¹以下命令被使用

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 布局

有关更多信息,请参阅 wiki

许可证

Zff 是开源软件,并使用 Apache 2.0 和 MIT 许可。这应确保其与开源和商业软件兼容。

贡献

除非您明确表示,否则您有意提交的任何贡献,根据 Apache-2.0 许可证定义,将被双许可,如上所述,没有其他条款或条件。

依赖项

~11–21MB
~306K SLoC