title, type, tags, sources, last_updated
| title |
type |
tags |
sources |
last_updated |
| dm-verity |
concept |
| Security |
| Linux Kernel |
| Integrity |
|
| public-cloud-learning-sessions-eks-optimization-part-2-of-3-running-containers-w |
|
2026-04-24 |
dm-verity (Device Mapper Verity)
dm-verity 是 Linux 内核的块设备完整性验证机制,通过在块设备层面计算并验证加密哈希树(cryptographic hash tree),确保根文件系统的任何未授权篡改都能被立即检测。
工作原理
- 哈希树构建:文件系统的每个块(通常 4KB)计算 SHA-256 或其他哈希值,形成树状结构
- 根哈希存储:最顶层哈希(Root Hash)存储在可信位置(如 TPM、引导加载程序验证后的内存区域)
- 块设备访问拦截:每次读取块设备时,dm-verity 内核模块实时计算路径哈希并与预期值比对
- 透明验证:验证过程对上层应用完全透明,性能开销通常 < 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 错误或让系统崩溃
相关技术