Files
nexus/wiki/concepts/dm-verity.md

68 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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用于安全存储根哈希的可信硬件