1. 完整性度量概述
运行时的系统完整性由系统的访问控制机制保证,如DAC(Discrete Access Control, 间接访问控制)/MAC(Mandatory Access Control, 强制访问控制,如SELinux, Smack)。
DAC/MAC无法检测文件的离线修改;加密文件系统可以保护非法访问,但开销大,效率相对较低。
完整性度量,将文件内容和文件的属性/扩展属性,通过加密哈希生成对应的ima/evm串,以扩展属性方式保存在文件系统节点中;系统运行时在文件被访问前,内核IMA/EVM模块通过校验文件的ima/evm串,判断文件是否被离线非法篡改过;如果有,返回非法结果给selinux,从而阻止访问或运行该文件。
Linux的完整性子系统(引自Dmitry的PPT):
IMA
对文件内容做加密哈希(HMAC),将结果存在文件的扩展属性security.ima,并以此校验文件内容是否被非法篡改过。
创建并自动更新一个所有被访问文件的完整性度量表(/sys/kernel/security/ima/ascii_runtime_measurements),远程或本地读取该表可以判断哪些文件被改过。
如果系统中有TPM硬件模块,IMA会将度量表扩展到TPM中,以保证度量表本身无法被篡改。
支持本地评估(IMA Appraisal)