软件学报  2020, Vol. 31 Issue (5): 1392-1405   PDF    
基于TEE的主动可信TPM/TCM设计与实现
董攀1 , 丁滟1 , 江哲2 , 黄辰林1 , 范冠男1     
1. 国防科技大学 计算机学院, 湖南 长沙 410073;
2. Department of Computer Science, University of York, YO10 5GH, UK
摘要: 可信技术正在从被动可信度量向着下一代的主动可信监控方向发展,要求TPM/TCM模块有能力主动度量和干预主机系统,传统的TPM/TCM从架构和运行机制等方面都无法满足这种能力.TEE(trusted execution environment)技术提供了可信执行环境和主动访控能力,为构建下一代TPM/TCM提供了基本平台,但还存在系统结构、存储以及通信等多方面挑战.提出了基于ARM平台TrustZone机制的TZTCM(TrustZone-based trusted cryptography module)方案,通过分核异步系统架构解决TZTCM独立可信运行和主动可信安全监控问题,基于PUF(physical unclonable functions)安全存储机制和基于UUID(universally unique identifier)的TEE安全通信机制,解决了TEE环境下可信平台模块的存储安全和通信安全问题,为设计实现主动可信TPM/TCM给出了理论和实践参考.通过实验验证了所提关键机制的有效性,实验结果表明,TZTCM在密码计算能力上较常见TPM也有很大提升.TZTCM只需要在系统中增加或修改相应的软/固件,除了主动可信监控能力,还具有低成本、高性能、低功耗、易升级等特点,相对传统TPM/TCM具有非常明显的优势.
关键词: TPM    TCM    主动可信    TrustZone    TEE    
Design and Implementation of TPM/TCM with Active Trust Based on TEE
DONG Pan1 , DING Yan1 , JIANG Zhe2 , HUANG Chen-Lin1 , FAN Guan-Nan1     
1. College of Computer Science and Technology, National University of Defense Technology, Changsha 410073, China;
2. Department of Computer Science, University of York, YO10 5GH, UK
Abstract: Trusted computing is being developed towards the next-generation active protection and monitoring, which requires that the TPM/TCM has the ability to actively measure and intervene the host system. Unfortunately, traditional TPM/TCM cannot satisfy the requirements in the respects of the architecture and the runtime mechanisms. Trusted execution environment (TEE) technology provides a trusted execution environment and the ability of accessing/controlling the host resources during the run-time, which brings a foundation for the next generation TPM/TCM. However, there are still three main challenges: software architecture, secure storage, and secure communication. This study proposes the design and implementation of TZTCM (TrustZone-based trusted cryptography module), which is a TPM/TCM scheme based on ARM TrustZone. TZTCM adopts several key mechanisms to overcome the three challenges. Firstly, the non-uniform core assigned and asynchronous (NUCAA) system architecture is designed to enable the independent and active operation of TZTCM. Secondly, the secure storage mechanism based on physical unclonable functions (PUF) is designed to guarantee the privacy of data in TZTCM. Thirdly, the secure communication mechanism based on universally unique identifier (UUID) is designed to prevent the channel (between host and TZTCM) from malicious activities. Therefore, TZTCM provides a prototype system of the next-generation TPM/TCM. It is shown that TZTCM has the identical security as a hardware TPM/TCM chip via theoretical analysis. An instance of TZTCM is implemented on an ARM development board (Hikey-board 620), and the runtime test shows that TZTCM can achieve higher performance for cipher computing than traditional TPMs. Compared to current TPMs/TCMs, TZTCM has obvious advantages in many aspects: active safeguard capability, only software/ firmware required, easy update, and low power consumption.
Key words: TPM    TCM    active trust    TrustZone    TEE    

在以传统TPM/TCM(国外使用TPM标准, 即trusted platform module; 国内采用TCM标准, 即trusted cryptography module)为根基建立的可信2.0架构[1]中, 可信基础部件被设计为在硬件隔离的环境中以被动方式工作, 供主机CPU进行服务调用.这种方式在安全上不完备, 存在以下弊端:难以保证加载时(特别是加电时)的软件完整性; 软件更新困难; 无法保证在运行态的完整性.针对这些弊端, 我国已在可信计算技术3.0阶段提出“主动防御体系”思想, 目标是确保全程可测可控、不被干扰, 即防御与运算并行的“主动免疫计算模式”[1].然而受架构所限, 传统的TPM/TCM构建技术不具备对主机系统进行主动访问和监控的能力[2], 甚至难以掌控系统上电时的代码可信性.此外, 传统TPM/TCM还在应用中表现出多方面问题, 由于采用廉价芯片导致性能普遍偏低, 物理芯片在成本、功耗、散热等多方面不利因素较多, 芯片封装不易升级维护.随着技术的快速发展, 这些问题变得越来越突出, 迫切需要在TPM的结构实现方面予以创新.TEE扩展技术提供了这种可能, 例如ARM处理器中的TrustZone技术以及Intel处理器中的SGX(software guard extensions)技术, 都能为计算平台提供一个隔离于平台其他软硬件资源的运行时环境.其中, TrustZone技术被设计为在系统加电后优先获得控制权, 并拥有比主机更高的访问和控制权限, 因此更为贴合TPM/TCM的功能和安全性需求.

图 1所示, TPM/TCM的各项服务机制可以映射到TrustZone-TEE的基本结构中.在TEE中封装虚拟TPM/ TCM核心服务, 包括密码算法引擎、命令执行引擎以及安全持久存储等.在主机中利用标准TEE Client API封装由TDDL层所调用的TPM/TCM命令, 对TSS的TDDL以上层次保持透明.将TPM/TCM命令被封装为标准TEE通信协议, 通过SMC服务接口调用核心TPM/TCM服务.例如, Raj等人基于这种思想提出了基于TrustZone的固件化TPM实现方法[3], 验证了通过TrustZone实现低成本TPM的可行性.

Fig. 1 Principle of virtual TPM/TCM based on TEE 图 1 基于TEE的虚拟TPM/TCM基本设计思想

主动可信能力被定义[1]为:“可信节点通过底层的监控点, 以主动监控的方式监视系统的行为, 并通过信息系统整体的策略管控, 构建可信计算体系, 为应用创建一个安全保障环境, 确保应用按照预期执行, 免于黑客、病毒等威胁”.TrustZone虽然提供高于主机系统的访问权限, 但要实现主动可信能力还面临诸多难点, 本文总结为3项挑战.

●  一是TPM/TCM与主机的“协同结构”问题.TEE的设计思想是与主机分时共享CPU, 隔离使用存储和IO.受主从式架构设计的制约, 已有的TrustZone基础服务大多是以被动执行的思想设计, 如要提供主动运行和资源访问能力, 则需要设计较为复杂的主机-TEE切换机制, 并且要避免TEE过久“占领”CPU, 防止主机系统的中断等机制受到超时等因素的影响.

●  二是TrustZone的安全持久存储机制能力不足, 借用REE(rich execution environment)存储或者单独提供安全态的存储接口, 无法阻止恶意删除或者使用物理手段探测私密数据.

●  三是通信安全问题.传统TPM上已经存在多种链路攻击手段, 例如reset攻击和中间人攻击[4], 可能对TPM/TCM安全性产生致命影响.基于TrustZone中的虚拟TPM/TCM尽管不依赖物理总线通信, 但是信道安全问题依然存在, 恶意软件可以通过提权攻击等方式直接干涉主机与TEE环境的底层通信, 对虚拟TPM/TCM的通信安全构成威胁.

此外, 为了提供实时主动的可信服务, TPM/TCM必须要有足够强大的计算能力, 以实现高效的动态度量.

本文针对以上挑战, 在系统架构、存储机制以及通信机制等方面实现了突破, 提出了TZTCM(TrustZone- based trusted cryptography module)构建方案, 包括分核异步系统架构、基于PUF(physical unclonable functions)安全存储和基于UUID(universally unique identifier)的安全通信.除了对传统TPM/TCM功能的兼容以外, TZTCM还具备主动可信能力, 具体包括:(1) TZTCM能够对度量根进行隔离和加电时的首先验证; (2) TZTCM能够对通过静态度量后的运行态软硬件进行实时的再度量; (3) TZTCM可以对运行中的主机系统进行干预.通过理论分析证明了TZTCM拥有与传统TPM相当的安全防护能力, 通过实验证明TZTCM拥有远高于商业TPM器件的密码计算能力.由于是硬件机制支持下的软件实现, TZTCM在成本和升级维护性方面具有传统TPM/TCM无法比拟的明显优势.

本文第1节介绍TPM/TCM改进工作的相关进展.第2节提出基于TEE的TZTCM设计与构建方案, 解决3个关键的挑战问题.第3节论述TZTCM主动可信的实现机理.第4节对TZTCM的安全性进行全面的对比分析.第5节介绍对TZTCM的运行测试和性能验证.最后是总结和未来工作展望.

1 相关研究工作 1.1 可信基础模块TPM和TCM

可信基础模块始于2000年可信计算平台联盟(trusted computing platform alliance)制定的TPM1.0规范. 2003年, TCG(trusted computing group)成立, 修改完成了TPM1.1规范, 2004年发布了TPM1.2, 2014年发布了TPM2.0规范.鉴于可信计算技术对国家信息安全体系的重要性, 经国家密码管理局批准, 中国于2006年成立了可信计算密码专项组, 并于2008年12月更名为中国可信计算工作组(China TCM Union), 简称TCMU.2007年12月, 国家密码管理局颁布了《可信计算密码支撑平台功能与接口规范》, 将国内使用的可信基础模块定义为TCM(trust cryptography module).相较于TPM, TCM采用了我国《商用密码管理条例》中规定的SM2、SM3等国密算法, 同时引入了对称密钥算法, 简化了TPM中复杂的密钥管理.TCM的证书认证机制采用签名密钥以及加密密钥的双证书机制, 将对称密钥与非对称密钥结合保护系统安全, 在密钥管理体系和基础密码服务体系等方面进行了改进, 提升了系统的安全性.

TPM和TCM的构成和功能类似, 提供可信计算平台的信任根(RTS, RTR), 是由CPU、存储器、I/O、密码协处理器、随机数产生器和嵌入式操作系统等部件组成的独立SoC芯片, 具备可信度量的存储、可信度量的报告、密钥产生、加密和签名、数据安全存储等功能.由于信息安全应用需求的不断变化, 基于TPM/TCM的信任链方案已经不能满足应用需求.存在的问题有[5]:信任链传递方案存在安全隐患, 如BIOS可擦写; 针对度量过程的时间差攻击; TPM与可信平台的通讯数据可被窃取; 可信根缺乏对硬件设备的控制权; Reset攻击重置平台配置寄存器(PCR); CPU和内存均可能被攻击等.针对上述问题, 我国于2016年提出了可信平台控制模块(trusted platform control module, 简称TPCM)[1]的概念, 要求能够直接接入平台的主设备接口, 具备对软硬件系统的可信控制、主动度量和主动报告等功能, 以便主动监控平台各组件的完整性和工作状态.TPCM的主动可信体系对SoC、系统总线以及主板设计都提出很高的要求, 受限于硬件设计和制造能力, 目前还没有完全具备设计要求的成品器件[2].

1.2 TPM/TCM改进研究

在应用中发现, 传统TPM/TCM器件不仅存在安全缺陷, 而且存在成本高、难以升级等问题, 研究者在多个方向上进行了改进探索.

为了增强已有TPM/TCM的主动度量能力, 文献[2]提出通过主板改造, 使TPM/TCM能够通过仲裁器和CPU互斥的访问主机内存和flash, 在运行中度量作为可信软件基(TSB)核心的基础可信基(TBB), TBB度量TSB中的其他部件, 从而实现了一种简化的TPCM方法.类似的思想还在文献[6]中发展为嵌入式系统中的FPGA实现.该方法实现简单, 但只对内存有访控能力, 并且在动态度量中存在遭遇恶意干扰的可能.

由于可信路径的建立有严格的时序限制(PCR寄存器的更新特性)和单向性, TPM/TCM无法直接满足为虚拟化架构中的多虚拟机同时提供可信根的需求, TPM2.0方案中提供DRTM[7]支持在机器启动的任何时刻创建可信根, 但必须借助CPU的硬件支持, 例如Intel的TXT或者AMD的SVM.DRTM的原理是由操作系统通过特殊指令创建动态可信链, 重置动态PCR寄存器到缺省值并开始验证流程, 动态度量的第1步是由CPU度量一个签名的硬件模块(TXT或SVM技术).另一种为虚拟化提供可信支持的思想[8]是采用软件方式构建多个虚拟TPM实例(vTPM), 由经过度量的hypervisor充当vTPM宿主, 并向虚拟机提供树状可信路径支持.该思想已被TCG纳入“虚拟可信平台架构规范(virtualized trusted platform architecture specification)”.然而, 由于hypervisor是一种纯软件实现, 不能免除被恶意篡改的风险, 削弱了vTPM作为可信根的安全性.

为了降低TPM硬件和可信软件栈的开发测试成本, 以及提供x86平台外的可信技术验证, 瑞士苏黎世联邦理工学院(ETH)和IBM公司分别开发了TPM Emulator[9]和Software TPM[10]用于TPM的软件模拟.由于缺少安全运行环境的支持, 软件TPM一般仅用于示范教学或者方案论证, 无法用于可信计算生产系统.

为了增强TPM的灵活性和可迁移性, 文献[11]提出一个便携式TPM方案, 在一个具备USB接口以及EFI接口的加密芯片上实现TPM的功能, 具备与传统TPM同等水平的安全保护能力.该方案中的证书和密钥既可以与平台绑定, 又可以针对不同的平台和用户提供灵活便携性.出于同样的目的, 文献[12]提出一种基于FPGA实现TPM的方案.借助于FPGA, TPM拥有更新和加入新的密码模块的能力.可变硬件TPM方案能够支持TPM的升级和多平台复用, 但以增加硬件成本为代价, 而且器件本身不与机器绑定, 反而会增加用户的安全顾虑.

综合分析可以看出, 由于SoC、总线以及主板设计的局限性, 对传统硬件TPM/TCM进行功能增强的方式遇到了较大的障碍, 软件化的TPM/TCM功能改进又引入了额外的安全风险, 折中的方法只有通过软硬结合的方式设计新型的TPM/TCM.

1.3 主动防御技术

主动防御是指在指令执行的同时进行安全防护, 目标是全程可测可控[1], 其实现方式主要分为基于软件与基于硬件两类.软件方式可通过基于内核进行强制的代码检测[13, 14]或者引入一个更高特权级的软件层[15, 16], 例如hypervisor.这类方法的共有缺陷是因为频繁的现场切换而引入较明显的性能损耗, 由于是软件实现的, 其本身也容易受到恶意侵害.保证新增软件模块的可信性本身也引入了新问题, 这种方法也难以融入到可信3.0模式的可信部件设计中.基于硬件的方法[17-20]一般会与主机系统进行物理隔离, 利用硬件所提供的一些事件触发机制探测异常事件或者主机状态的改变.硬件方法虽然能够对主机中的恶意代码起到很好的免疫作用, 并且几乎不引入额外开销, 但却存在语义鸿沟和探测能力不足的问题.这是因为主动防御要求扩展硬件能够对主机软件运行期间的各类事件进行监控.第一, 能够感知主机系统的内存访问事件, 这是因为内核使用内存保留其状态信息和敏感数据结构; 第二, 应能够监视系统的状态寄存器, 这对于理解系统的当前配置和资源配属非常重要; 第三, 外部机制应有能力控制和改变主机系统的关键寄存器和内存空间, 以阻止恶意行为并恢复系统的正常.由于系统的复杂性和总线链接的限制, 已有的硬件扩展机制还很难满足这3种需求.

1.4 TrustZone及相关解决方案

TrustZone[21, 22]是ARM CPU的TEE安全扩展机制, 能够保证安全态软件在加电时首先启动, 并对后续加载的启动映像进行逐级验证.TrustZone使能后, 物理处理器能够在两种安全模态之间切换, 分别定义为常态(normal world, 运行主机OS)和安全态(secure world, 运行TEE OS).TrustZone提供了完善的隔离能力, 对于资源的访问许可严格受控于安全态, 安全态的资源禁止被常态软件所访问.模态切换功能由SMC(secure monitor call)指令负责实现.TrustZone技术推荐将安全资源封装在SoC芯片内部, 以防止利用引脚进行物理窥探.但由于技术和成本限制, SoC内一般不会封装大容量的永久存储.很多解决方案推荐使用eMMC存储器的RPMB (replay protected memory block)分区实现大量数据的安全读写和存储.为了方便常态和安全态的软件开发, ARM公司和GlobalPlatform组织都制定了相应的软件规范.此外, 还有相关研究[23, 24]通过在IO硬件中加入虚拟隔离技术的方法, 也能为安全态提供隔离存储能力.但这种方法没有考虑直接对物理存储进行攻击和读取的防护, 故不适用于虚拟TPM/TCM的存储支持.

为了保证可信执行环境的完备性, TrustZone技术包含了TBBR(trusted board boot requirements)子规范[25], 特别定义了系统从加电之后的可信保障流程以及软硬件需求.TBBR规定系统必须有一个信任根作为一个信任起点(例如SoC one-time-programmable(OTP)存储器中的公钥), 从reset加电之后立即发挥作用, 通过可信根建立可信链, 并逐步验证:进一步的签名方式、启动代码、TEE环境、TEE服务以及常规主机环境等.

Raj等人提出了一种基于TrustZone实现固件化TPM的fTPM方案[3].fTPM基于3种方法, 满足TrustZone在TPM功能上的支持:增加额外的硬件, 采用eMMC存储器作为TPM的持久安全存储设施; 做出一些不损害TPM安全性的折中, 例如限制密码计算的规模; 修改TPM规范的部分语义, 以适应TrustZone的一些局限.然而, fTPM的设计没有考虑主动的可信度量和控制问题, 并且忽视了通信和存储过程中的一些较为严重的安全挑战.本文将通过TZTCM的设计来解决这些问题.

2 基于TEE的TZTCM设计与构建

TZTCM仍然采用图 1所示的基本设计思想, 即将TPM/TCM的基本功能和服务封装在TrustZone-TEE环境中, 围绕简介部分总结的3个挑战问题, 本节将提出对应的核心解决方案, 通过设计分核异步TZTCM系统架构实现可信模块的独立运行和对主机系统的主动实时度量能力, 通过基于PUF的TEE多层安全存储解决可信模块的持久存储安全性以及第一时间的可信加载问题, 通过基于UUID的TZTCM安全通信解决可信模块的信道安全问题, 最终保证TZTCM作为主动可信基础模块的功能实现和安全运行.

2.1 分核异步TZTCM系统架构

TrustZone的TBBR规范使TZTCM以及系统加电时的完整性得到保证, 为了具备传统TPM/TCM功能的兼容能力和其他主动可信能力, 在结构方面必须考虑3个方面的问题:一是在线实时度量能力要求TZTCM拥有自主的任务分时调度; 二是高负荷服务计算(如加解密)不应影响主机系统的正常执行; 三是TZTCM拥有权限对主机系统的内存资源和IO资源进行控制.

针对第1个问题, 已有的TZDKS等方案[26]提供了TEE环境的实时调度能力, 但由于主机操作系统在调度上独立于TEE环境, 因而多采用Idle-scheduling策略, 即当TEE系统内有就绪任务时, 主机操作系统将一直被挂起, 直到所有TEE内的任务执行完毕.这样就使主机操作系统的时钟可控度变差, 甚至严重影响后者的运行.由于TEE难以快速获知主机系统调度信息, 通过调度策略解决该问题会增加TEE系统复杂度, 对其服务能力造成负面影响.针对第2个问题, 可考虑利用CPU普遍拥有的多核特性, 以专用的核进行TZTCM以及其他大计算量的服务, 该核不被主机操作系统调度, 因此不会对后者有任何影响.这种模式会要求新的TEE服务调用模式, 即从同步的CPU核内调用改为异步的核间调用.针对第3个问题, ,需要由EL3态的软件将主机侧的资源访问权限开放给TEE内的TZTCM代码, 由后者实现运行时动态度量和控制的职能.其中, 主机系统中的进程或者运行模块具体特征(如内存地址分布等)不易直接获取, 可由经过度量的主机系统中的agent软件配合获得.

本文提出TZTCM主动可信功能所依托的分核异步TEE-TCM系统架构, 如图 2所示.

Fig. 2 NUCAA (non-uniform core assigned and asynchronous) system architecture 图 2 分核异步系统架构

●  首先是TZTCM的分核执行特点.在多核CPU平台上, 每个core都拥有受Monitor控制的N-S状态切换能力, 其中, 在N态运行常规的主机操作系统REE环境, 在S态运行Monitor和TEE环境.TZTCM的服务主体运行在CPU的一个独立core上(记为s-core), s-core被配置为不会切换到N态, 因此主机操作系统并不感知s-core的存在.S-core上拥有独立的TEE时钟timer, 驱动调度程序分时运行TZTCM的主动度量和监控模块.事实上, TZTCM与主机操作系统一起以分核方式运行.

●  其次是TZTCM的异步服务特点.主机系统的可信调用请求先通过SMC调用经由Monitor模块转发到本核上运行的TEE服务代理, 后者在触发一个目标是TZTCM所在s-core的软中断(SGI)后, 会立刻执行服务调用返回, 所在core会切换到主机操作系统环境, 调用方在感知调用返回后立即休眠等待. TZTCM收到软中断通知后进行服务的计算, 完成后用软中断方式通知主机系统中的服务调用者, 接收服务结果.因此, 与传统的TPM服务类似, TZTCM的服务以异步方式实施.在其他core上, TEE中只有服务接口, 并以被动方式提供安全服务.这些服务仍采用同步方式, 由主机操作系统在任一core上发起SMC调用, 经由Monitor代码转发到TEE服务, 服务完成后将结果返回给调用者, 所有指令都在同一个core上执行.

借助分核运行方式, TZTCM的调度机制得到简化, 更易于部署对主机系统模块的在线动态度量和监控, 并免除了大计算量的服务对主机系统的影响; 借助异步服务请求机制, 服务调用保持与传统TPM/TCM架构兼容, 解决了同步服务无法避免的主机系统挂起问题.

2.2 基于PUF的TEE多层安全存储

需要解决两个方面的安全问题:一是防止来自TEE外部的非法访问, 包括运行时访问与静态物理窥探两类; 二是防止来自TEE中其他软件模块的在线非法访问.TZTCM通过两种机制解决这些问题:1)基于PUF的RPMB密钥保护, 防止运行时的密钥外泄, 并支持密钥更新; 2)层级加密存储方案, 防止TEE中来自其他应用的非法窥探.

2.2.1 基于PUF的RPMB密钥保护

PUF(物理不可克隆函数)是硬件形式的单向函数, 是物理定义的“数字指纹”, 作为微处理器等半导体设备的唯一标识.它们基于半导体制造过程中自然发生的独特物理变化生成, 能够用于实现安全功能, 如设备认证、密码协议的密钥生成、为随机数生成器生成种子等等.目前已有很多PUF可以实用, 例如基于器件延迟的PUF、基于访存随机性的PUF等.利用CPU片内SRAM上电初始值的PUF特性[27], 不但能够获取上电时的初始密钥, 而且可以在读取密钥后通过对SRAM的写操作防止后续对该密钥的读取, 有“阅后即焚”的效果.

TZTCM对于RPMB的密钥使用有下述需求:密钥与安全OS映像分离, 使用不安全的外部存储, 可在eMMC卡更换时对应更换, 从外部存储的信息无法获得密钥信息.因此, 对RPMB密钥的保护不但要能抵抗来自REE环境的恶意代码攻击, 还应抵抗通过实验室设备对SoC芯片的外部端口进行的探测和攻击.

TZTCM对于RPMB密钥保护的基本思想是:在SoC外部持久存储设备中仅保存用于合成KeyRPMB的辅助数据DataKA, 通过PUF技术进行KeyRPMB的生成和恢复; 仅在SoC片内安全内存中以内核服务的方式使用KeyRPMB, 对TEE应用仅保留加密或签名的接口.需要说明的是, 并不需要对DataKA进行特别的安全保护.一方面暴露DataKA并不会造成KeyRPMB的暴露; 另一方面, 当有攻击者删除或是篡改DataKA后, 能够被系统及时检测, 从而终止后续操作.KeyRPMB只在加电启动时有用, 运行时并不存在因篡改导致的拒绝服务攻击风险.RPMB密钥保护实现方案参考文献[27]中的TrustZone可信根设计, 分为KeyRPMB的生成、恢复和更新3个部分, 简记为GRU(generate-rebuild-update).

●  KeyRPMB的生成过程是出厂时进行的, 如图 3上半部分所示.首先, 随机选择一个种密钥KeyS(seed key), 利用TPM规范中所定义的KDF(key derivation function)生成KeyRPMB, 并写入eMMC存储器RPMB分区的OTP Key寄存器.之后对KeyS进行BCH编码变换, 得到的结果与主CPU的PUF读取值进行异或操作(XOR), 得到DataKA, 最后销毁KeyS, 并将DataKA保存到设备的持久存储中.

Fig. 3 Generation and recovery processes of RPMB secret key based on PUF 图 3 基于PUF的RPMB密钥的生成和恢复

●  KeyRPMB的恢复用于每次设备重启, 需要读取RPMB分区之前.如图 3下半部分所示, 使用主CPU的PUF读取值与常规存储的DataKA进行异或, 得到的值进行BCH解码操作, 即可得到KeyS, 再用KDF得到KeyRPMB.仅KeyRPMB和TEE的内核签名/验证函数共同保存在安全的OCM(on-chip memory)存储器中, 由后者对其他TEE应用提供计算结果.

●  KeyRPMB的更新用于设备因维修或其他原因需要更换eMMC存储器, 其基本过程和生成过程一致.

利用PUF的特性, KeyRPMB的有用信息暴露时间最小化.这是因为多数PUF值(如基于RAM的PUF)的读取时机仅存在于系统加电之初.而通过芯片外部接口的静态读取、以及加电后的REE恶意代码、或者TEE应用中的恶意代码都无法读取到KeyRPMB的有用信息, 因而增强了对KeyRPMB的保护.

2.2.2 采用层级加密存储的私密设计

为了保证TZTCM的存储数据不被非法窥探, 在TEE层、应用层、文件层分别使用不同的密钥进行加密, 并且这些密钥形成如图 4所示的树形关系.这样可以对TEE中不同的应用及文件进行隔离, 防止一个应用的数据被其他应用访问.

Fig. 4 Secret key hierarchy for secure storage 图 4 安全存储的层级密钥体系

●  TEE层:安全存储密钥(SSK)用于生成每个可信应用层的存储密钥.当TEE启动时, 使用相关函数读取硬件唯一码HUK以及芯片的ID号, 并使用HMAC散列算法生成128位的SSK.在TEE的生命周期中, SSK一直存在于安全内存中, 不会外泄到非安全区.

●  应用层:可信应用存储密钥(TSK)由SSK和通用唯一识别码(UUID)共同生成.每一个可信应用由SSK通过HMAC算法对UUID生成128位的摘要值作为TSK.TSK的主要作用是对属于自己的文件存储密钥(FEK)加密和解密.由于每个可信应用的TSK是不同的, 这样可以保证可信应用无法解密属于其他可信应用的FEK, 进而保证了可信应用资源的独立性.

●  文件层:对于每一个文件, 会生成一个128位的随机数作为文件存储密钥(FEK), 用于对文件数据进行加密.该密钥经过所属可信应用的TSK加密后存入对应的文件配置表条目中, 需要时使用相应TSK对其解密, 这样能够保证其他可信应用无法读取该文件的内容, 在一定程度上保证了数据的独立性.

基于这样的设计, TEE中的文件存储可以抵御来自多个方面的威胁或攻击:(1)即使攻击者拿到了RPMB分区的密钥, 也无法解密RPMB文件系统; (2)即使TEE系统中有不安全的应用, 该应用可以读写RPMB分区, 但也无法获得其他应用以及TZTCM的相关文件信息.

2.3 基于UUID的TZTCM安全通信

TPM规范规定了TPM命令和数据的传输格式, 使用HMAC保证数据的完整性和可信性.TZTCM利用标准TrustZone API实现TDDL与服务端的通信, 并基于两种机制实现通信链路的安全性[28]:(1)会话; (2)基于UUID的消息摘要.

UUID是通用唯一识别码(universally unique identifier)的缩写, 是一种软件建构的标准, 亦为开放软件基金会组织在分布式计算环境领域的一部分.其目的是让系统中的所有模块都能有唯一的辨识信息, 而不需要通过中央控制端来做辨识信息的指定.这样, 每个模块都可以创建不与其他模块冲突的UUID.

首先通过会话维护连接的完整性.图 5展示了TDDL与TZTCM建立连接的过程:首先, TDDL向TEE Client发送创建Context的请求, Context被用来建立TEE Client和TEE Core(内核)的逻辑连接, 必须在创建会话之前初始化; 然后, TDDL向TEE Client发送建立会话的命令, 通过底层中断和状态转换, 该命令被传递给TEE内核, TEE内核加载TZTCM业务服务, 并执行创建会话的入口程序; 最后, 会话的状态会返回给TDDL.在会话的基础上由基于UUID的散列值来保证安全性.TZTCM作为一个TEE安全应用, 拥有唯一的UUID标识.在初始化TDDL的可信关系时, 应用安全密钥交换协议生成一个和TDDL共享的密钥KT-UUID, 由TDDL和TZTCM分别秘密保存.在建立会话传递消息时, 消息的生成方都会使用KT-UUID生成一个对消息散列值的签名, 并附在消息结尾, 用以鉴别消息的合法性.只有拥有KT-UUID的应用(如TDDL)才可以与TZTCM建立会话, 这保证了会话的可信性.当TDDL不再需要TZTCM的服务时, 可以通过发送关闭会话命令关闭与TZTCM的连接会话.

Fig. 5 Process to establish a session between TDDL and TZTCM 图 5 TDDL与TZTCM的会话建立过程

3 TZTCM主动可信能力的实现

本节讲述TZTCM主动可信的3个方面能力的实现:加电时的主动可信根度量、运行时对主机系统的实时再度量、对运行中的主机系统主动干预.

3.1 系统加电完整性保证

基于第2.2节中的安全存储机制, 可以为TZTCM建立以硬件可信根为基础的初始可信链.首先需要指出, TZTCM的功能代码位于TEE的安全OS映像中.当设备加电时, CPU默认处于安全态, 并执行BootROM中的不可修改代码, 后者是在芯片生产时一次性写入的, 默认可信.BootROM代码首先验证RPMB密钥的GRU代码的完整性(通过制造者公钥验证签名).然后, BootROM读取PUF的初始值v, 初始化OCM并载入GRU代码.如果完整性检验成功, BootROM将v传给GRU并在OCM中执行GRU; 否则, 终止启动.

BootROM代码通过OTP fuse中的公钥检查安全OS以及安全服务的完整性.如果验证成功, 则加载安全OS.在运行安全OS之前, BootROM代码将初始化PUF对象中可变信息, 相当于销毁操作.此时, TZTCM的功能代码以及持久存储文件都得到了可信验证, 初始可信链建立完毕.

3.2 运行时的实时度量

TZTCM中的实时任务调度功能给了TZTCM主动发起度量的能力, 发起对运行时的主机资源的实时度量.如图 6所示, 当主机系统启动时, TZTCM通过传统的静态度量机制建立可信链, 并在每一步更新PCR寄存器的同时得到各目标的度量值记录在另外的数据库中.主机中将设立一个Agent任务, 通过系统的一些信息库(如/proc文件系统或者/boot目录下的System.map文件)得到目标模块的地址信息传递给TZTCM, TZTCM利用TrustZone的访存权限对主机内存中的关键信息进行实时度量和监视, 并可以根据静态度量的结果判断目标的当前可信性.本方案中, Agent仅负责提供监控目标的物理地址, 并不对目标进行实际监控.TZTCM首先会在主机系统加载时验证Agent的静态可信性, 并结合实时度量以及第3.3节中的动态措施保证Agent的运行可信性.

Fig. 6 Real-time measurement mechanism of TZTCM 图 6 TZTCM的实时度量机制

在TZTCM的实现中, 我们特别将主机内核的代码段作为动态度量的目标, 由Agent通过/proc/iomem获得linux内核代码段数据段对应的物理地址, 通过TEE环境提供的库函数实现了TEE内的虚地址映射, 从而实现对代码段的动态读取和度量.

3.3 运行时的主动干预

TZTCM不但能在主动度量发现可信异常时进行记录和报警, 还可以对运行时的主机系统进行干预.

(1) 通过对CPU切换的控制, 可以暂停主机系统的运行, 或者利用通知方式使主机系统转入关机.

(2) 通过对内存的控制改写主机系统的内存映射页表, 将可疑目标的内存设为不可执行(在页表描述项中, 包含页面属性的定义, 其中的NX位将定义页面中的代码是否被允许执行, TrustZone拥有可访问normal world内存的权限, 可以通过修改后者的页表属性设置特定内存不可执行), 由主机系统做后续处理.尽管主机系统也有权限修改页面属性的NX位从而能够恢复页面的可执行, 但TZTCM的监控将提升攻击的难度, 并且能够通过监视已锁定的页面属性决定是否采取进一步措施.

(3) 通过修改控制器的权限剥夺对一些关键IO的读写操作, 例如更改常态软件对IO地址的读写权限、或借助TZPC(TrustZone protection controller)控制器直接控制特定IO控制器的归属等.

为了避免数据丢失和错误的服务, 还需要通过进一步的逻辑设计利用这些主动干预能力.

4 TZTCM安全性分析

TZTCM和传统TPM/TCM可信模块拥有不同的结构, 因而在安全性上也会有一定的差别.两者的结构差别表现如下.

●  通信:传统可信模块采用LPC总线或者其他低速总线与主CPU通信.TZTCM不使用物理通信链路, 仅使用TEE软件通信方式.

●  内存:传统可信模块不使用主机内存, 其内部存储对外隔离.TZTCM使用OCM或者安全的片外内存.

●  存储:传统可信模块使用内部NVRAM, 对外隔离.TZTCM使用eMMC存储器的RPMB分区.

●  CPU:传统可信模块运行与主CPU无关.TZTCM使用主CPU, 所涉及的寄存器和缓存与其他软件共存在一个SoC芯片上.

由上述对比可知, 对TZTCM的攻击除了针对传统TPM的攻击类型外, 可能还包括基于内存的攻击、基于存储的攻击以及基于CPU的攻击.

●  传统攻击.对传统TPM的攻击类型包括软件攻击、物理链路窃听和重置攻击、时间攻击等3类.其中, 发自“主机系统”的软件攻击在传统TPM/TCM和TZTCM两种场景下是基本等效的.由于TZTCM不再暴露任何物理通信链路接口, 因而物理链路窃听和重置攻击对于TZTCM无效.时间攻击主要针对TPM1.2版本之前的RSA算法, 与本文TZTCM设计无关.

●  中间人攻击(含重放攻击).由于TZTCM会话需要验证消息签名, 恶意软件虽然可以通过内核驱动接口访问TZTCM, 但会因为没有有效消息签名而遭到合法用户和TZTCM双方的拒绝, 从而免除中间人攻击威胁.另外, 在传统TCM通信协议中已经引入的“新鲜值”等机制同样适用于TZTCM中相关威胁的预防.

●  内存攻击.TZTCM所使用的内存都由TrustZone进行保护, 包括DMA访存模式, 因而来自非安全态的内存窥探无法成功.然而, 使用实验室仪器对设备接口处的管脚进行读取和扰动是无法防范的, 在这方面, TZTCM的安全性弱于传统独立TPM/TCM芯片.这种攻击的成本非常高昂, 因此对于多数电子产品安全威胁来说不予考虑.

●  存储攻击.RPMB分区的密钥仅在OCM中出现, 通过软件攻击或是实验室仪器进行硬件攻击都无法获取该密钥, 而且分区内的数据是分级加密存储的.因此, TZTCM的存储安全性在某种程度上优于传统独立TPM, 这是因为利用开壳物理探测方式可以窥探到独立TPM中的明文数据.

●  CPU攻击.基于CPU中的寄存器或者缓存攻击窥探TZTCM的成本等价于针对TrustZone安全机制的攻击成本, 因而本文不再单独讨论这种攻击的可行性.此外, TZTCM中需要为s-core提供一个独立timer, 该timer可以利用ARMv8体系结构中为每个core所集成的secure physical timer实现.由于secure physical timer是core内的IP, 不存在管脚, 因而拥有很强的安全性, 不易受到非安全态软件或电气干扰.

近年来, 有少量针对TrustZone的攻击能够威胁TEE系统的安全性, 但这些攻击利用了TEE安全系统内核的漏洞.而我们知道, TEE安全系统的复杂性和代码量远低于通用操作系统.因此, 随着TEE软件系统的成熟和完善, 这种攻击成功的可能性将会越来越低.同时, TEE系统的灵活升级能力也会降低这种威胁.

5 TZTCM实验测试

TZTCM的实现和测试平台[28]以Hikey 620开发板为基础构建, 使用ARMv8架构的麒麟620处理器, 支持ARM TrustZone安全硬件技术, 拥有主频1GHz的8个core, 2G内存和8G eMMC, 支持WIFI、蓝牙等功能.实验中使用Linux系统作为主机端的操作系统, 内核采用经过修改的Linux 4.4.0.本文选取3款市售典型商用TPM芯片进行性能对比, 型号分别是SSX35、ST19NP18、ST19WP18.由于RSA算法操作是TPM中较常用的操作, 并且耗时最多, 本文选择2 048位密钥RSA算法相关的操作来做性能比较实验.

图 7图 8显示了TZTCM和3款商用TPM芯片在签名和验证操作时间上的差异.可以发现, TZTCM的性能比商用TPM芯片有很大提升.造成这种情况的主要原因是, TZTCM使用了嵌入式设备的CPU(ARMv8架构64位处理器), 而TPM芯片为了控制成本, 使用的CPU性能并不强.因此在这些测试中, TZTCM的性能有了巨大的提升.

Fig. 7 Comparison of signature operation time-consuming 图 7 签名操作时间比较

Fig. 8 Comparison of verification operation time-consuming 图 8 认证操作时间比较

为了验证TZTCM提供传统TCM/TPM服务时对host端系统的影响(即被动可信服务), 系统CPU core被配置为都可在host与TZTCM之间切换的模式, 使用lmbench工具对TZTCM系统进行测试, 分别测试了TZTCM未运行状态下和TZTCM持续运行状态下host端系统的性能.为了方便对比, 本文略去了基本无差别的测试项, 仅保留了有明显差异的fork proc、exec proc、sh proc、MMap Latency等测试项, 如图 9所示.从测试结果可知, TZTCM的被动运行对host端系统的运行性能影响几乎可以忽略.

Fig. 9 Performance influence of traditional trust service from TZTCM to the host OS 图 9 TZTCM的传统可信服务对主机性能的影响

在测试TZTCM主动防御能力的实验中, 系统被配置为异步分核运行模式, 即主动监控功能仅运行在7号CPU core(s-core)上, 主机系统只使用0号~6号CPU core.针对主机系统中执行的Linux内核进行主动监控, 测试其代码段的可信性.在针对Linux kernel 4.4尺寸为13.4MB的代码段进行动态可信度量时, 其单次度量时间约为1.5千万~2千万cycles, 即发现可信异常的时间不超过0.2s.当然, 实际系统中的度量延迟还与度量任务的多少以及TZTCM的任务调度策略相关.通过UnixBench对引入主动可信服务前后的系统进行性能测试, 结果显示, 加入主动防御前后的总分为384.6/374.7, 性能下降约2.57%.可见, TZTCM主动防御对主机端系统的运行性能影响非常有限(如图 10所示).

Fig. 10 Performance influence of active monitoring service from TZTCM to the host OS 图 10 TZTCM的主动可信监控服务对主机性能的影响

6 结论

针对传统硬件TPM/TCM难以支持主动可信计算体系的问题, 本文提出了基于TEE技术实现虚拟TPM/ TCM的TZTCM方案.针对TEE虚拟TPM/TCM设计中面临的3项挑战问题, 分别提出分核异步系统架构、基于PUF安全存储机制和基于UUID的TEE安全通信机制予以解决.TZTCM具备3个方面的主动可信能力:加电时的主动可信根度量、运行时对主机系统的实时再度量、对运行中的主机系统主动干预.理论分析和实验结果表明, TZTCM能够替代传统硬件TPM作为可信存储根和可信报告根为系统提供安全的可信服务, 并拥有优于商业TPM器件的密码计算能力.在成本和升级维护性方面, TZTCM更是具有传统TPM无法比拟的明显优势.本文主要考虑了基于TrustZone实现主动防御型TCM的架构和关键技术问题, 在PUF密钥管理、层次式安全存储协议、安全通信协议以及主动监控具体方法和实施策略方面还有大量问题有待解决, 这些研究将在今后的工作中予以深入和推进.

参考文献
[1]
Hu J, Shen CX, Gong B. Trusted Computing 3.0 Engineering Fundamentals. 2017(in Chinese).
[2]
Tian JS, Zhan J. Research and implementation of active dynamic measurement based on TPCM. Netinfo Security, 2016(6): 22-27(in Chinese with English abstract). [doi:10.3969/j.issn.1671-1122.2016.06.004]
[3]
Raj H, Saroiu S, Wolman A, et al. fTPM: A firmware-based tpm 2.0 implementation. Technical Report, MSR-TR-2015-84, Microsoft Research, 2015. https://www.microsoft.com/en-us/research/publication/ftpm-a-firmware-based-tpm-2-0-implementation/
[4]
Kursawe K, Schellekens D, Preneel B. Analyzing trusted platform communication. In: Proc. of the ECRYPT Workshop, CRASH-CRyptographic Advances in Secure Hardware, 2005.
[5]
Guo Y, Mao JJ, Zhang CB, et al. Active measures based on a trusted platform control module. Journal of Tsinghua University (Sci & Tech), 2012, 52(10): 1465-1473(in Chinese with English abstract). http://d.old.wanfangdata.com.cn/Conference/8100482
[6]
Wang X, Xu G, Han Y, et al. A trusted computing architecture of embedded system based on improved TPM. In: Proc. of the MATEC Web of Conf. on EDP Sciences, Vol.139. 2017.
[7]
Nie C. Dynamic root of trust in trusted computing. In: Proc. of the TKK T1105290 Seminar on Network Security. 2007.
[8]
Perez R, Sailer R, van Doorn L. vTPM: Virtualizing the trusted platform module. In: Proc. of the 15th Conf. on USENIX Security Symp., 2006, 305-320. http://cn.bing.com/academic/profile?id=c6fef2d9f3415ea1258880bdbf578333&encoded=0&v=paper_preview&mkt=zh-cn
[9]
Strasser M, Stamer H. A software-based trusted platform module emulator. In: Proc. of the Int'l Conf. on Trusted Computing. Berlin, Heidelberg: Springer-Verlag, 2008, 33-47. http://cn.bing.com/academic/profile?id=b880c1194ba43218b2ab5c0a1c616d26&encoded=0&v=paper_preview&mkt=zh-cn
[10]
IBM. Software TPM introduction. http://ibmswtpm.sourceforge.net/
[11]
Han L, Liu J, Zhang D, et al. A portable TPM scheme for general-purpose trusted computing based on EFI. In: Proc. of the 2009 Int'l Conf. on Multimedia Information Networking and Security. IEEE, 2009, 140-143. http://d.old.wanfangdata.com.cn/Periodical/zggdxxxswz-jsjkx201102005
[12]
James MD. A reconfigurable trusted platform module. In: Proc. of the All Theses and Dissertations. 2017. https://scholarsarchive.byu.edu/etd/6298
[13]
Song C, Lee B, Lu K, Harris W, Kim T, Lee W. Enforcing kernel security invariants with data flow integrity. In: Proc. of the NDSS. 2016.
[14]
Chen Q, Azab AM, Ganesh G, Ning P. Privwatcher: Non-bypassable monitoring and protection of process credentials from memory corruption attacks. In: Proc. of the 2017 ACM on Asia Conf. on Computer and Communications Security. ACM, 2017, 167-178. http://cn.bing.com/academic/profile?id=10457c422bc987ae41213f006d2f49a1&encoded=0&v=paper_preview&mkt=zh-cn
[15]
Wang X, Qi Y, Wang Z, Chen Y, Zhou Y. Design and implementation of SecPod, a framework for virtualization-based security systems. IEEE Trans. on Dependable and Secure Computing, 2019, 16(1): 44-57. [doi:10.1109/TDSC.2017.2675991]
[16]
Vasudevan A, Chaki S, Jia L, McCune J, Newsome J, Datta A. Design, implementation and verification of an extensible and modular hypervisor framework. In: Proc. of the 2013 IEEE Symp. on Security and Privacy (SP). IEEE, 2013, 430-444. http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=CC0213450120
[17]
Lee H, Moon H, Heo I, Jang D, Jang J, Kim K, Paek Y, Kang B. KI-Mon Arm: A hardware-assisted event-triggered monitoring platform for mutable kernel object. In: Presented as Part of the 22nd USENIX Security Symp. 511–526. Washington: USENIX, 2013.
[18]
Moon H, Lee J, Hwang D, Jung S, Seo J, Paek Y. Architectural supports to protect OS kernels from code-injection attacks and Their Applications. ACM Trans. on Design Automation of Electronic Systems, 2017, 23(1): 1-25. http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=b7d24f7dd98f48c15a0b485917cb0f75
[19]
Koromilas L, Vasiliadis G, Athanasopoulos E, Ioannidis S. Grim: Leveraging GPUs for kernel integrity monitoring. In: Proc. of the Int'l Symp. on Research in Attacks, Intrusions, and Defenses. Springer-Verlag, 2016, 3-23. http://d.old.wanfangdata.com.cn/Periodical/ez200707003
[20]
Kwon D, Oh K, Park J, Yang S, Cho Y, Kang BB, Paek Y. Hypernel: A hardware-assisted framework for kernel protection without nested paging. In: Proc. of the IEEE 2018 55th ACM/ESDA/IEEE Design Automation Conf., 2018, 1-6. http://cn.bing.com/academic/profile?id=2f9fb1e863fc2a750bb8502e03298b2a&encoded=0&v=paper_preview&mkt=zh-cn
[21]
Ramos JR. TrustFrame, a software development framework for TrustZone-enabled hardware. https://fenix.tecnico.ulisboa.pt/downloadFile/1689244997256574/Extended_Abstract.pdf
[22]
Winter J, Wiegele P, Pirker M, et al. A flexible software development and emulation framework for arm TrustZone. In: Proc. of the Int'l Conf. on Trusted Systems. Berlin, Heidelberg: Springer-Verlag, 2011, 1-15. http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=CC0214498845
[23]
Jiang Z, Audsley NC, Dong P. BlueVisor: A scalable real-time hardware hypervisor for many-core embedded systems. In: Proc. of the 2018 IEEE Real-time and Embedded Technology and Applications Symp. (RTAS). IEEE, 2018, 75-84. http://cn.bing.com/academic/profile?id=dbb0a79844e2e8836c2908e9a614cbdb&encoded=0&v=paper_preview&mkt=zh-cn
[24]
Jiang Z, Audsley N, Dong P. BlueIO: A scalable real-time hardware I/O virtualization system for many-core embedded systems. ACM Trans. on Embedded Computing Systems (TECS), 2019, 18(3): Article 19. http://cn.bing.com/academic/profile?id=8a9ce10c963c196f0e6273e0640eaa3c&encoded=0&v=paper_preview&mkt=zh-cn
[25]
ARM. Trusted board boot requirements client (TBBR-CLIENT) Armv8-A. 2018. https: //developer.arm.com/docs/den0006/latest
[26]
Dong P, Burns A, Jiang Z, et al. TZDKS: A new TrustZone-based dual-criticality system with balanced performance. In: Proc. of the 2018 IEEE 24th Int'l Conf. on Embedded and Real-time Computing Systems and Applications (RTCSA). IEEE, 2018, 59-64. http://cn.bing.com/academic/profile?id=bc978092397e62ff3bde64ffd60ded5e&encoded=0&v=paper_preview&mkt=zh-cn
[27]
Zhao S, Zhang Q, Hu G, et al. Providing root of trust for ARM TrustZone using on-chip SRAM. In: Proc. of the 4th Int'l Workshop. ACM, 2014.
[28]
Fan GN. The research of virtual TPM based on TrustZone [MS. Thesis]. Changsha: National University of Defense Technology, 2016(in Chinese with English abstract).
[1]
胡俊, 沈昌祥, 公备.可信计算3.0工程初步.网络与信息安全学报, 2017.
[2]
田健生, 詹静. 基于TPCM的主动动态度量机制的研究与实现. 信息网络安全, 2016(6): 22-27. [doi:10.3969/j.issn.1671-1122.2016.06.004]
[5]
郭颖, 毛军捷, 张翀斌, 等. 基于可信平台控制模块的主动度量方法. 清华大学学报(自然科学版), 2012, 52(10): 1465-1473. http://d.old.wanfangdata.com.cn/Conference/8100482
[28]
范冠男.基于TrustZone的虚拟化TPM研究[硕士学位论文].长沙: 国防科技大学, 2016.