SecurityRonin/filevault-forensic

GitHub: SecurityRonin/filevault-forensic

纯 Rust 实现的 Apple FileVault 2 / CoreStorage 取证库,支持密码解锁解密卷并生成加密状态的分级审计报告。

Stars: 0 | Forks: 0

# filevault-forensic [![Crates.io (core)](https://img.shields.io/crates/v/filevault-core?label=filevault-core)](https://crates.io/crates/filevault-core) [![Crates.io (forensic)](https://img.shields.io/crates/v/filevault-forensic?label=filevault-forensic)](https://crates.io/crates/filevault-forensic) [![Docs.rs](https://img.shields.io/docsrs/filevault-core?label=docs.rs)](https://docs.rs/filevault-core) [![Rust 1.81+](https://img.shields.io/badge/rust-1.81%2B-orange)](https://www.rust-lang.org) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE) [![Sponsor](https://img.shields.io/badge/sponsor-h4x0r-ea4aaa)](https://github.com/sponsors/h4x0r) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/SecurityRonin/filevault-forensic/actions/workflows/ci.yml) [![Coverage](https://img.shields.io/badge/coverage-100%25%20lines-brightgreen)](https://github.com/SecurityRonin/filevault-forensic/actions/workflows/ci.yml) [![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success)](https://github.com/rust-secure-code/safety-dance) [![Security audit](https://img.shields.io/badge/security-cargo--deny-informational)](deny.toml) **使用纯 Rust 解密 Apple CoreStorage / FileVault 2 卷 —— 从密码到明文 HFS+,无需 libfvde,无需 C,仅一个静态且轻量依赖的 crate。** 将其指向一个加密的 CoreStorage 物理卷并提供密码;即可获得一个 关于已解密逻辑卷的 `Read + Seek` 视图,外加一份对其保护器和加密状态进行了严重性分级 的取证审计报告。 ``` use std::fs::File; use filevault::FileVaultVolume; let img = File::open("corestorage.raw")?; let mut vol = FileVaultVolume::unlock_with_password(img, "s3cret")?; let mut boot = [0u8; 512]; vol.read_at(1024, &mut boot)?; // decrypted HFS+ volume header ("H+") # Ok::<(), filevault::FileVaultError>(()) ``` 已在真实的加密卷上针对 **pyfvde** (libyal libfvde) 完成端到端验证: 解密后的扇区字节完全一致(参见 [验证](docs/validation.md))。 ## 两个 crate | crate | 作用 | |-------|------| | **`filevault-core`** (`use filevault`) | 读取器/解密器 —— 解析 CoreStorage 卷头 + 元数据,派生卷密钥(PBKDF2-SHA256 → RFC 3394 密钥解包),AES-XTS 解密逻辑卷扇区 | | **`filevault-forensic`** | 分析器 —— 对解析后的元数据进行分级的 [`forensicnomicon::report::Finding`]s,**无需密码** | ### 无需密码进行审计 ``` let findings = filevault_forensic::audit_path(std::path::Path::new("corestorage.raw"))?; for f in &findings { println!("{}: {}", f.code, f.note); } # Ok::<(), filevault::FileVaultError>(()) ``` | 代码 | 严重性 | 观察结果 | |------|----------|-------------| | `FVDE-PROTECTOR-INVENTORY` | Info | 存在哪些保护器(密码 / 恢复密钥 / 机构密钥加密用户) | | `FVDE-ENCRYPTION-STATE` | Info | 转换状态 —— 已加密 (Complete) / 转换中 (Converting) / 等待中 (Pending) | | `FVDE-WEAK-KDF-ITERATIONS` | Medium | PBKDF2 迭代次数低于可防御的基准线(包含观察到的计数值) | 调查结果是**观察结果,而非最终结论** —— 它们陈述了元数据 所显示的内容,而不是一个结论。 ## 加密 仅使用 RustCrypto —— 绝非自行编写的加密原语:`pbkdf2` + `hmac` + `sha2` (KEK 派生),`aes-kw`(RFC 3394 密钥解包),`aes` + `xts-mode` (AES-XTS-128 扇区解密)。 ## 信任,但要验证 通过构造保证不发生 Panic(禁止 `unsafe`;在非测试代码中禁止使用 `unwrap`/`expect`/未检查的 索引;来自镜像的每个偏移量和长度在 使用前都进行了边界检查),经过了模糊测试(`cargo fuzz` 元数据目标,必须不能 Panic),并且是基于 **真实数据上的独立预言机** 验证的 —— 而不是我们自己 编写的固件。参见 [docs/validation.md](docs/validation.md)。 ## 适用范围 CoreStorage / FileVault 2 (macOS 10.7 Lion – 10.15 Catalina),AES-XTS-128, 密码保护器。**APFS 原生加密 (10.13+) 是一种独立的格式, 暂不支持** —— 参见 [docs/DEFERRED.md](docs/DEFERRED.md)。 [隐私政策](https://securityronin.github.io/filevault-forensic/privacy/) · [服务条款](https://securityronin.github.io/filevault-forensic/terms/) · © 2026 Security Ronin Ltd
标签:AES-XTS, CoreStorage, FileVault, Rust, StruQ, 可视化界面, 密码解密, 数字取证, 磁盘加密, 网络流量审计, 自动化脚本, 通知系统