--- title: "dm-verity" type: concept tags: - Security - Linux Kernel - Integrity sources: - public-cloud-learning-sessions-eks-optimization-part-2-of-3-running-containers-w last_updated: 2026-04-24 --- # dm-verity (Device Mapper Verity) dm-verity 是 Linux 内核的块设备完整性验证机制,通过在块设备层面计算并验证加密哈希树(cryptographic hash tree),确保根文件系统的任何未授权篡改都能被立即检测。 ## 工作原理 ``` 块设备(底层) ↓ [哈希树计算层] ↓ 根哈希(Root Hash,存储在可信位置) ↓ 与预期值对比 → 一致 = 验证通过 | 不一致 = 检测到篡改 ``` 1. **哈希树构建**:文件系统的每个块(通常 4KB)计算 SHA-256 或其他哈希值,形成树状结构 2. **根哈希存储**:最顶层哈希(Root Hash)存储在可信位置(如 TPM、引导加载程序验证后的内存区域) 3. **块设备访问拦截**:每次读取块设备时,dm-verity 内核模块实时计算路径哈希并与预期值比对 4. **透明验证**:验证过程对上层应用完全透明,性能开销通常 < 5% ## 在 Bottlerocket 中的应用 Bottlerocket OS 在构建时为根分区生成 dm-verity 哈希树: - 根文件系统镜像在构建时生成根哈希 - 引导加载程序在启动时验证根哈希 - dm-verity 模块在运行时验证每个块设备读取操作 - 任何对根文件系统块的篡改都会导致 I/O 错误或验证失败 ## 与其他技术的对比 | 技术 | 作用 | 层级 | |------|------|------| | dm-verity | 块设备完整性验证(防篡改) | 块设备层 | | dm-crypt | 块设备加密(防窃取) | 块设备层 | | IMA/EVM | 文件级完整性度量 | 文件系统层 | | Secure Boot | 引导加载程序验证 | 固件层 | ## 安全价值 - **运行时防篡改检测**:即使攻击者获得 root 权限,也无法在不触发验证失败的情况下修改系统文件 - **完整性保证**:确保启动后的系统与构建时的镜像完全一致 - **信任链建立**:与 Secure Boot 结合,构建从固件到应用层的完整信任链 ## 局限性 - **不防窃取**:dm-verity 不加密数据(配合 dm-crypt 使用可同时实现完整性和保密性) - **只读保护**:无法防止拒绝服务攻击(通过损坏块设备导致验证失败) - **验证失败处理**:检测到篡改后的行为取决于配置,可能是返回 EIO 错误或让系统崩溃 ## 相关技术 - [[Immutable-Root-Filesystem]]:只读根文件系统的整体策略 - [[Secure-Boot]]:引导阶段的固件验证 - [[TPM]](Trusted Platform Module):用于安全存储根哈希的可信硬件