IMA、EVM 与 dm-verity

目录

固件验证了 bootloader → bootloader 验证了内核 → 内核之后谁验证文件?IMA 度量和鉴定文件完整性,dm-verity 保护整个块设备。

一、先看图

flowchart LR
    UEFI[UEFI Secure Boot<br/>验证 bootloader] --> BL[bootloader<br/>验证内核]
    BL --> KERNEL[内核启动]
    KERNEL --> IMA[IMA<br/>度量/鉴定文件]
    KERNEL --> DMVERITY[dm-verity<br/>块设备完整性]
    IMA --> TPM[TPM PCR<br/>存储度量值]

    classDef boot fill:#f0883e22,stroke:#f0883e,color:#adbac7;
    classDef runtime fill:#388bfd22,stroke:#388bfd,color:#adbac7;
    class UEFI,BL boot
    class KERNEL,IMA,DMVERITY,TPM runtime

二、IMA(Integrity Measurement Architecture)

2.1 度量(Measurement)

文件被访问 → 计算 hash → 记录到 IMA 日志 → 扩展到 TPM PCR
cat /sys/kernel/security/ima/ascii_runtime_measurements | head
# 10 hash template filename

2.2 鉴定(Appraisal)

文件被访问 → 计算 hash → 与签名/预期值比较 → 不匹配则拒绝
# IMA 策略
echo "appraise func=BPRM_CHECK fowner=0" > /sys/kernel/security/ima/policy

2.3 签名

evmctl ima_sign --key /path/to/private_key.pem /usr/bin/my_app

签名存储在文件的 xattr(security.ima)中。

三、EVM(Extended Verification Module)

保护文件的安全扩展属性(xattr)不被篡改:

security.ima + security.selinux + security.capability → HMAC/签名
# EVM 状态
cat /sys/kernel/security/evm

四、dm-verity

4.1 原理

块设备 → Merkle 树(hash tree)→ root hash

每次读块 → 验证 hash → 不匹配则返回 I/O 错误。

4.2 使用

veritysetup format /dev/sda1 /dev/sda2
# Root hash: abc123...

veritysetup open /dev/sda1 verified /dev/sda2 abc123...
mount /dev/mapper/verified /mnt

4.3 应用场景

五、fs-verity

文件级别的 verity(不需要块设备层):

fsverity enable /path/to/file
fsverity measure /path/to/file

内核在页缓存层验证 → 惰性验证(按需读取时检查)。

六、TPM 与 PCR

PCR(Platform Configuration Register)= 度量值的累加器
PCR_new = Hash(PCR_old || measurement)

TPM 硬件保证 PCR 不可回退 → 远程认证(Remote Attestation)可以验证系统状态。

七、dm-integrity

integritysetup format /dev/sda1
integritysetup open /dev/sda1 integrity_dev

每个扇区附加校验码 → 检测静默数据损坏。

可与 dm-crypt 组合 → 加密 + 完整性。

八、完整性链

UEFI Secure Boot
  → bootloader 签名验证
    → 内核签名验证
      → 模块签名验证(J-85)
        → IMA 文件度量/鉴定
          → dm-verity 块设备验证

每一环都必须闭合 → 任何一环缺失都可能被绕过。

九、观察

# IMA 度量日志
cat /sys/kernel/security/ima/ascii_runtime_measurements | wc -l

# dm-verity 状态
dmsetup status | grep verity

# TPM PCR
tpm2_pcrread

# fs-verity
fsverity measure /path/to/file

# EVM 状态
cat /sys/kernel/security/evm

十、小结


参考文献

工具


上一篇:SELinux 与 AppArmor 下一篇:内核缓解措施

文章导航

分类入口
os
标签入口
#ima#evm#dm-verity#fs-verity#tpm

读完这篇,下一步读什么

优先读同系列或同问题的下一篇,把单篇消费变成主题集群。


By .