IMA/EVM完整性检测代码分析

IMA(IntegrityMeasurementArchitecture)是Linux内核的安全子系统,用于文件和数据的完整性检测。文章详细介绍了IMA的hook机制,包括定义回调函数如ima_bprm_check、ima_inode_setxattr等,以及ima_bprm_check在执行新可执行文件时的检查功能。此外,还提到了ima_appraise_measurement用于评价文件度量值,并与EVM(ExtendedVerificationModule)结合进行完整性校验。文章还讨论了IMA的管理系统,如ascii_runtime_measurements的seq文件操作,以及PCA(PlatformConfigurationRegisters)在IMA中的作用,用于存储测量值并验证系统完整性。

IMA/EVM完整性检测

IMA(Integrity Measurement Architecture)是一个内核安全子系统,用于检测文件或数据的完整性和安全性。IMA的hook机制指的是内核接口钩子(kernel interface hooks),用于向IMA注册和实现一系列回调函数,以便在文件系统操作过程中拦截和记录检测信息。

1.0 IMA的hook机制

IMA的hook机制包括以下几个主要步骤:

1.1 定义回调函数

在IMA hook机制中,需要定义一系列回调函数,包括measure、appraise、policy、inode_free和post_parse等函数。measure函数用于在文件读取之前计算文件的哈希值;appraise函数用于评估文件完整性;policy函数用于读取并更新IMA策略;inode_free函数用于在删除文件时更新操作系统的IMA状态信息;post_parse函数用于在解析之后更新文件系统缓存和错误日志。

int security_kernel_post_read_file(struct file *file, char *buf, loff_t size,
				   enum kernel_read_file_id id)
{
	int ret;

	ret = call_int_hook(kernel_post_read_file, 0, file, buf, size, id);
	if (ret)
		return ret;
	return ima_post_read_file(file, buf, size, id);
}
EXPORT_SYMBOL_GPL(security_kernel_post_read_file);

其中ima_post_read_file为ima的重要文件测量函数,可以看到,imahook独立与call_int_hook, 也就是lsm的审计框架体系。

其中还包括

ima_bprm_check
ima_inode_setxattr
ima_inode_removexattr
ima_file_mmap
ima_read_file
ima_post_read_file
ima_load_data
1.2 ima_bprm_check

ima_bprm_check指的是Linux内核中一个函数,全名是“int ima_bprm_check(struct linux_binprm *bprm)”。该函数用于在执行新的可执行文件之前检查其完整性和安全性。

当一个新的可执行文件被加载到内存中时,内核会调用ima_bprm_check函数。该函数通过访问内存中的内容和计算哈希值等方式对可执行文件的完整性进行检查。在哈希值被计算之后,该函数还会对哈希值进行数字签名验证。

IMA(Integrity Measurement Architecture)一旦启用后,在执行新的可执行文件

<think>好的,我现在需要帮助用户了解IMAEVM的概念及区别。首先,我得回忆一下之前学过的相关知识,并结合提供的引用内容来组织答案。用户的问题是三个部分:IMA全称和作用,EVM全称及工作原理,以及两者的区别。我需要分步骤解答,并且确保引用正确的内容。 首先,IMA的全称应该是Integrity Measurement Architecture,作用主要是用于测量文件的完整性,比如在系统启动或执行文件时进行检测。根据引用[3],IMA会在执行新可执行文件时调用IMA_bprm_check函数进行检查,如果发现问题就拒绝执行。这说明IMA的作用是主动测量和验证文件的完整性,防止被篡改。 接下来是EVM,全称应该是Extended Verification Module。根据引用[2],EVMLinux的扩展验证模块,结合引用[1],它功能单一,不需要策略支持。工作原理方面,可能涉及使用加密密钥来保护元数据,比如通过keyctl命令加载evm-key,如引用[2]中的例子。EVM可能负责验证文件扩展属性中的完整性,比如使用HMAC或数字签名,确保元数据未被篡改。 然后两者的区别,需要从功能和机制上分析。IMA侧重于文件内容本身的测量和验证,而EVM保护的是文件元数据的完整性。引用[1]提到IMA定义机制和策略分离,而EVM不需要策略,这说明IMA可能有更灵活的策略配置,而EVM功能较为固定。此外,IMA可能在执行时检查,而EVM可能在访问时验证元数据。 需要确认引用是否正确。引用[3]提到IMA在bprm_check时检查文件,引用[4]涉及生成IMA的密钥,而EVM的密钥加载在引用[2]中。另外,引用[5]是关于ima-evm-utils的编译步骤,可能涉及两者的工具支持。 需要组织语言,先分别介绍IMAEVM,再对比区别。注意使用中文,数学公式用$...$,独立公式用$$...$$,但可能这里用不到太多数学符号。不过如果有涉及算法或加密的部分可能需要,比如HMAC的公式,但用户的问题可能不需要。 可能还需要提到IMAEVM如何配合使用,比如IMA检查文件内容,EVM保护元数据,共同提升系统完整性。引用[1]提到IMAEVM都是子系统,机制和策略分离,但EVM不需要策略支持,这点要强调区别。 最后生成相关问题,考虑用户可能想了解如何配置、密钥生成、实际应用场景等。根据引用[4]和[5],可以生成关于配置步骤和工具使用的问题。 现在开始组织答案,确保每个部分都包含引用标记,如[^1]、[^2]等,正确对应到提供的引用内容。</think>### IMAEVM的概念及区别 #### 1. **IMA全称及作用** - **全称**:Integrity Measurement Architecture(完整性测量架构)。 - **作用**: IMA主要用于**动态测量和验证文件完整性**。它在以下场景中发挥作用: - **执行文件时**:例如,当系统加载新的可执行文件时,IMA通过`IMA_bprm_check`函数检查文件内容是否被篡改,若检测到异常则拒绝执行[^3]。 - **启动阶段**:测量系统关键组件(如内核模块)的完整性,确保启动链可信。 - **策略扩展**:支持自定义策略,例如仅允许经过签名的特定文件运行。 #### 2. **EVM全称及工作原理** - **全称**:Extended Verification Module(扩展验证模块)。 - **工作原理**: EVM通过**加密技术保护文件元数据**(如权限、时间戳)的完整性: 1. **密钥管理**:需使用`keyctl`命令加载加密密钥(如`evm-key`),例如: ```bash keyctl add encrypted evm-key "load `cat /etc/keys/evm-key`" @u [^2] ``` 2. **元数据保护**:为文件的扩展属性(如`security.evm`)生成**加密哈希(HMAC)或数字签名**,确保元数据未被篡改。 3. **实时验证**:当文件被访问时,EVM验证其元数据的完整性,若校验失败则拒绝操作。 #### 3. **IMAEVM的区别** | **维度** | **IMA** | **EVM** | |----------------|----------------------------------------|----------------------------------------| | **保护对象** | 文件内容(数据完整性)[^3] | 文件元数据(如权限、属性) | | **功能范围** | 测量、验证、执行控制 | 仅验证元数据完整性 | | **策略支持** | 支持灵活策略(如允许/拒绝执行) | 无策略,仅依赖密钥验证机制 | | **技术实现** | 基于哈希或数字签名测量文件内容 | 使用HMAC或非对称加密保护元数据[^4] | | **依赖关系** | 可独立启用 | 通常依赖IMA提供的基础框架 | #### 4. **协同工作场景** IMAEVM常结合使用以提供**全方位完整性保护**: - **示例**:一个可执行文件需同时满足: 1. IMA验证其内容未被篡改(通过哈希或签名)。 2. EVM验证其元数据(如所有者权限)未被恶意修改。 --- ###
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值