68 lines
2.7 KiB
Markdown
68 lines
2.7 KiB
Markdown
---
|
||
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):用于安全存储根哈希的可信硬件
|