IMA-Appraisal Signatrue 介绍

在 IMA(Integrity Measurement Architecture)的 appraisal 模式 中,Signature(签名机制) 是对文件完整性进行加密级验证的核心手段,区别于哈希校验,它通过数字签名确保文件未被篡改且来源可信。以下是详细解释:

一、IMA 签名的作用与位置


项目说明
作用 验证文件内容是否被篡改,并确认其来源(谁签的名)
存储位置 文件的扩展属性 security.ima 中,或追加在摘要列表文件末尾(CMS签名)
验证触发时机 每次访问文件时由 IMA 子系统自动触发(读/执行/映射等)

二、签名方式与流程

✅ 1. IMA扩展属性签名(原生方式)

  • 签名存储:签名信息写入文件的 security.ima 扩展属性。
  • 工具命令:
     
    evmctl ima_sign --key /path/to/ima.key -a sha256 <文件路径>
     
  • 验证逻辑:
    • 内核从 security.ima 读取签名;
    • 使用内核信任的证书链(builtin_trusted_keysima 密钥环)验证签名合法性;
    • 若验证失败,拒绝访问并记录审计日志。

✅ 2. IMA摘要列表追加签名(CMS签名,openEuler 24.03+默认)

  • 适用场景:签名信息较长(含证书链),无法存入扩展属性。
  • 签名存储:CMS签名追加在文件末尾,类似内核模块签名。
  • 验证流程:
    • 导入摘要列表时,内核自动验证签名;
    • 验证通过后才允许使用该摘要列表做白名单匹配。

三、签名验证失败的处理

若文件签名无效或缺失,IMA 在 enforce 模式下会:
  • 拒绝访问(返回 Permission denied);
  • 记录审计日志,如:
    type=INTEGRITY_DATA cause=invalid-signature comm="bash" ...
     

四、证书管理(信任链)

IMA 支持两类证书来源:

证书来源用途说明
builtin_trusted_keys 内核编译时预置的根证书(需将 CA 公钥编译进内核)
ima 密钥环 系统启动后通过 initrd 导入的子证书(需由根证书签发)
示例:导入自定义证书
 
# 生成根证书
openssl x509 -in root.crt -out root.der -outform DER
# 编译内核时加入
CONFIG_SYSTEM_TRUSTED_KEYS="./root.crt"
 

五、签名 vs 哈希对比


对比维度签名(Signature)哈希(Hash)
验证内容 文件内容 + 来源(谁签的名) 仅文件内容是否一致
防篡改性 强(需私钥签名) 弱(哈希可被重新计算)
依赖 需证书链 + 私钥 仅参考哈希值
适用场景 高安全需求(生产环境、Secure Boot 场景) 初始化或内部管理场景

六、实践建议

  • 部署阶段:先用 ima_appraise=fix 生成签名,再切换为 enforce 强制验证。
  • 证书更新:跨版本升级时注意证书兼容性,避免签名验证失败
  • 调试工具:
    # 查看文件签名
    getfattr -n security.ima /usr/bin/bash
    # 查看内核信任证书
    keyctl show %:.builtin_trusted_keys
     

总结:IMA 的签名机制通过数字签名+证书链验证,提供了比哈希更强的完整性和来源可信保障,是构建可信启动链(Secure Boot → IMA → 应用)的关键环节。

 

posted @ 2025-07-30 11:21  云long  阅读(36)  评论(0)    收藏  举报