SecurityRonin/filevault-forensic
GitHub: SecurityRonin/filevault-forensic
纯 Rust 实现的 Apple FileVault 2 / CoreStorage 取证库,支持密码解锁解密卷并生成加密状态的分级审计报告。
Stars: 0 | Forks: 0
# filevault-forensic
[](https://crates.io/crates/filevault-core)
[](https://crates.io/crates/filevault-forensic)
[](https://docs.rs/filevault-core)
[](https://www.rust-lang.org)
[](LICENSE)
[](https://github.com/sponsors/h4x0r)
[](https://github.com/SecurityRonin/filevault-forensic/actions/workflows/ci.yml)
[](https://github.com/SecurityRonin/filevault-forensic/actions/workflows/ci.yml)
[](https://github.com/rust-secure-code/safety-dance)
[](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, 可视化界面, 密码解密, 数字取证, 磁盘加密, 网络流量审计, 自动化脚本, 通知系统