内核可信根框架

概述

典型的攻击手段往往伴随着信息系统真实性、完整性的破坏,目前业界的共识是通过硬件可信根对系统关键组件进行度量/验证,一旦检测到篡改或仿冒行为,就执行告警或拦截。

当前业界主流是采用TPM作为信任根,结合完整性保护软件栈逐级构筑系统信任链,从而保证系统各组件的真实性和完整性。openEuler支持的完整性保护特性如下:

  • 可信启动:系统启动阶段,度量启动组件的摘要值并记录到PCR寄存器;
  • IMA度量:文件访问阶段,度量文件的摘要值,并扩展到PCR寄存器;
  • DIM度量:进程运行阶段,度量内存代码段的摘要值,并扩展到PCR寄存器。

近年来,随着可信计算、机密计算等安全技术的发展,业界出现了各种形态不一的硬件可信根,及其配套的证明体系,例如:

  • TCG Trusted Platform Module (TPM)
  • Trusted Cryptography Module (TCM)
  • Trusted Platform Control Module (TPCM)
  • Intel Trust Domain Extensions (TDX)
  • Arm Confidential Compute Architecture (CCA)
  • Virtualized Arm Confidential Compute Architecture (virtCCA)

因此,本特性旨在支持一套内核态的可信根框架,南向支持多种可信根驱动,北向提供统一度量接口,对接上层完整性保护软件栈,将openEuler E2E完整性保护技术的硬件支持范围从单TPM扩展为多元异构可信根。

root_of_trust_framework

特性介绍

本特性目前支持哈希扩展类型的度量可信根,即采用若干个度量寄存器(对应一种或多种哈希算法)采用如下形式记录多个度量结果:

value_new = hash(value_old | measure_result)

上式中value_new/value_old代表可信根内的度量寄存器的新/旧值;measure_result代表本次的度量结果;hash代表该度量寄存器所使用的哈希算法。

对于每一个可信根,开发者可通过本特性提供的框架层完成该可信根实例的定义和注册。注册成功后,完整性度量特性会自动将度量结果传入可信根实例中,完成哈希扩展和寄存器更新。

特性范围

本特性于openEuler 24.03 LTS SP1(6.6内核)版本支持,当前南向支持TPM和virtCCA两种可信根,北向支持内核完整性度量(IMA)特性。后续将持续完善对于其他可信根和度量特性的支持工作。

接口说明

结构体接口说明

对于每个可信根实例,需要定义如下结构体:

struct ima_rot {
	const char *name;
	int nr_allocated_banks;
	struct tpm_bank_info *allocated_banks;

	int (*init)(struct ima_rot *rot);
	int (*extend)(struct tpm_digest *digests_arg, const void *args);
	int (*calc_boot_aggregate)(struct ima_digest_data *hash);
};

成员变量描述如下:

成员说明
name可信根设备的名称
nr_allocated_banks可信根支持的度量寄存器数量
allocated_banks可信根度量寄存器算法定义
init可信根初始化函数实现
extend可信根扩展函数实现
calc_boot_aggregateIMA特性的boot aggregate值计算函数实现

接口体数组定义在内核代码的security/integrity/ima/ima_rot.c文件中的ima_rots变量,在该数组变量定义中追加可信根实例,即可实现IMA特性对不同可信根的功能扩展。

启动参数接口说明

本特性涉及新增如下启动参数:

参数取值说明
ima_rot=字符串指定IMA优先使用的可信根设备的名称。若指定设备不存在,则尝试使用默认设备(TPM);如指定设备或默认设备初始化失败,则无可信根。

使用说明

以用户在机密虚机中配置IMA度量使用virtCCA可信根为例,用户可在启动参数中添加如下参数:

ima_rot=virtcca

注意: 如果环境中仅virtcca可信根可用,无其他可信根(如vTPM)可用,也可不配置该参数。

配置完成后,首条IMA度量日志(boot aggregate日志)即为virtCCA的RIM的中存储的度量值;每条IMA度量日志的哈希值将在virtCCA的REM[0]中进行哈希扩展。用户可以基于virtCCA提供的远程证明软件栈实现机密虚机中的应用度量结果校验。