掌桥专利:专业的专利平台
掌桥专利
首页

基于TEE的进程动态完整性度量方法及系统

文献发布时间:2024-04-18 19:58:53


基于TEE的进程动态完整性度量方法及系统

技术领域

本发明涉及计算机操作系统的信息安全领域,具体涉及一种基于TEE的进程动态完整性度量方法及系统。

背景技术

可信计算通过在系统中引入可信硬件作为信任根,然后建立一条信任链,通过逐级度量,逐级认证,逐级加载的方式,将信任扩展至整个计算机系统。其中,完整性度量和远程证明是可信计算中的两项重要技术,可以验证计算平台身份,并有效检测攻击者对应用程序的非法篡改。2004年,IBM提出完整性度量架构(Integrity MeasurementArchitecture,IMA),将可信度量扩展到应用层。IMA在执行之前度量所有可执行文件、可加载内核模块及配置文件,并对度量结果实施本地评估或远程证明。IMA不足之处在于其度量对象是磁盘上的文件,并且属于静态度量,不能反映进程实际的运行状态;同时,完整性度量模块与内核处于同一特权级,一旦内核被攻击,度量模块本身或者度量结果可能被攻击者破坏或篡改。

传统的可信计算技术以TPM(Trusted Platform Module)为可信根,需要部署额外的硬件。目前,主流CPU提供可信执行环境(Trusted Execution Environment,TEE)技术,可以为敏感程序的运行提供隔离且更高特权级的执行环境。即使在操作系统被劫持的情况下,TEE也可以保证加载到其中的代码和数据的机密性和完整性,典型的可信执行环境有Intel SGX、ARM TrustZone等。ARM TrustZone通过分时复用的方式,将系统分为丰富执行环境(Rich Execution Environment,REE)和可信执行环境TEE两部分,REE和TEE也分别称为普通世界和安全世界。近年来,已有许多研究基于TEE技术对计算机系统进行安全增强。例如公布号为CN110677388A的中国专利申请公开了一种基于TrustZone的物联网终端进程完整性度量方法,该方法记载了将完整性度量模块置于CPU提供的可信执行环境TEE中,可以实现在更高特权级的可信度量。但周期性度量方法存在TOC-TOU(time of use-time ofcheck,检验时间/使用时间攻击)问题,即攻击者可能通过探索度量规律,在两次度量间隔中实施攻击并移除攻击记录,从而绕过安全检查。因此迫切需要一种针对进程的动态完整性度量方法。

发明内容

本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于TEE的进程动态完整性度量方法及系统,本发明旨在实现一种保护全面、验证级别高、安全可靠、通用性好的动态完整性度量方法以有效缓解TOC-TOU攻击。

为了解决上述技术问题,本发明采用的技术方案为:

一种基于TEE的进程动态完整性度量方法,包括:

S101,在REE环境下利用钩子函数捕捉操作系统将程序的代码段从硬盘加载到内存时引发的缺页异常,若钩子函数捕获到缺页异常,则切换至TEE环境下并跳转步骤S102;

S102,利用TEE环境下可信应用程序TA构建的TEE度量模块,通过可信固件获取REE环境下缺页异常发生时的错误地址寄存器FAR_EL1和页表基地址寄存器TTBR0_EL1的值,并查询进程的页表获得加载的代码页的物理地址,将代码页的物理地址映射到TEE地址空间,从而得到REE环境下加载的代码页内容,并对REE环境下加载的代码页内容实施完整性度量得到度量值,并将度量值与预设的基准值进行比对,若两者一致且加载的代码页的权限为不可写,则切换回REE环境下继续执行该程序;否则拒绝执行该程序并切换回REE环境下。

可选地,步骤S101中若钩子函数捕获到缺页异常时,还包括将加载页面所属虚拟内存区域vm_area_struct结构体中的vm_file字段与预设的进程名单进行匹配,只有缺页异常对应的进程在预设的进程名单中才切换至TEE环境下并跳转步骤S102,否则针对捕获的缺页异常不做任何处理。

可选地,步骤S102中通过可信固件获取REE环境下缺页异常发生时的错误地址寄存器FAR_EL1和页表基地址寄存器TTBR0_EL1的值包括:通过可信固件获取REE环境下的缺页异常发生时的处理器上下文cpu_context_t的基地址;计算错误地址寄存器FAR_EL1和页表基地址寄存器TTBR0_EL1的值在cpu_context_t数据结构中的偏移,从而根据偏移在处理器上下文cpu_context_t中获取得到REE环境下缺页异常发生时的错误地址寄存器FAR_EL1和页表基地址寄存器TTBR0_EL1的值。

可选地,步骤S102中查询进程的页表获得加载的代码页的物理地址包括:根据错误地址寄存器FAR_EL1的值中第47-39位作为虚拟地址在第0级页表中的索引值,查询获得第1级页表的物理地址,其中第0级页表基地址存储在页表基地址寄存器TTBR0_EL1中;然后以相同的方式根据错误地址寄存器FAR_EL1的值中第38-30位作为虚拟地址在第1级页表中的索引值,查询获得第2级页表的物理地址;依次逐级检索,直至从错误地址寄存器FAR_EL1的值中第20-12位获得页表项,以虚拟地址最后12位为页内偏移,与页表项中的物理页号结合获得加载的代码页的物理地址。

可选地,步骤S102中对REE环境下加载的代码页内容实施完整性度量得到度量值时,是指采用指定的哈希算法对REE环境下加载的代码页内容计算哈希值以作为完整性度量得到的度量值。

可选地,步骤S102中预设的基准值为将加密的基准值表解密后获取,所述基准值表的每一个表项的内容包括:

{file_name,virt_addr,page_size,hash_val}

上式中,file_name表示程序的可执行文件的名称,virt_addr为代码段的起始虚拟地址,page_size为页面大小,hash_val为用于作为完整性度量得到的基准值的哈希值。

可选地,步骤S101之前还包括首先针对目标程序生成基准值表的表项并得到基准值表,然后利用TEE环境生成加密密钥,并使用该加密密钥对基准值表加密后并存储在REE环境下的文件系统中。

可选地,步骤S102之后还包括响应远程挑战者的挑战请求执行远程证明:

S201,REE环境下认证服务检测远程挑战者的挑战请求,若收到远程挑战者的挑战请求,则跳转步骤S202;否则,跳转步骤S201持续检测远程挑战者的挑战请求;

S202,REE环境利用TEE环境下的证明模块生成认证身份密钥AIK,并使用认证身份密钥AIK对TEE环境下的虚拟寄存器cPCR以及度量列表与挑战请求中携带的随机数值进行签名;所述虚拟寄存器cPCR用于记录受保护的进程的代码页执行顺序及度量值,虚拟寄存器cPCR初始值为0,假设进程的代码页面加载顺序为p

cPCR=Hash(···Hash(Hash(0

上式中,cPCR表示虚拟寄存器cPCR的值,Hash表示哈希函数;所述度量列表用于记录进程页面的执行流程计算对应页面的哈希值,其组织方式为:

MList={

上式中,MList表示度量列表,proc表示进程名字,addr表示代码页的虚拟地址,size表示页面大小,hash(p

S203,TEE环境下的证明模块将签名结果返回REE认证服务,并由REE认证服务将虚拟寄存器cPCR和度量列表及其签名发送给远程挑战者;

S204,远程挑战者收到虚拟寄存器cPCR和度量列表及其签名后,向指定的证书服务中心请求验证签名,若签名验证通过,则根据虚拟寄存器cPCR和度量列表获得进程代码页的执行流与平台完整性报告结果。

此外,本发明还提供一种基于TEE的进程动态完整性度量系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于TEE的进程动态完整性度量方法。

此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述基于TEE的进程动态完整性度量方法。

和现有技术相比,本发明主要具有下述优点:本发明在REE环境下利用钩子函数捕捉操作系统将程序的代码段从硬盘加载到内存时引发的缺页异常,若钩子函数捕获到缺页异常,则或对REE环境下加载的代码页对REE环境下加载的代码页内容实施完整性度量得到度量值,并将度量值与预设的基准值进行比对,若两者一致且加载的代码页的权限为不可写,则切换回REE环境下继续执行该程序;否则拒绝执行该程序并切换回REE环境下,通过将度量模块隔离在可信执行环境中,有效防止度量模块被攻击或篡改,为进程提供更高特权级的完整性度量,度量采用事件触发的机制,将页面设置为不可写,防止度量后的页面被非法修改,可以有效缓解TOC-TOU(time of use-time of check,检验时间/使用时间攻击)攻击,具有保护全面、验证级别高、安全可靠、通用性好的优点。

附图说明

图1为本发明实施例一方法的基本流程示意图。

图2为本发明实施例一方法的系统架构示意图。

图3为本发明实施例一中生成度量值的流程示意图。

图4为本发明实施例一中将度量值和基准值进行对比的流程示意图。

具体实施方式

实施例一:

如图1、图2和图3所示,本实施例基于TEE的进程动态完整性度量方法包括:

S101,在REE环境下利用钩子函数捕捉操作系统将程序的代码段从硬盘加载到内存时引发的缺页异常,若钩子函数捕获到缺页异常,则切换至TEE环境下并跳转步骤S102;

S102,利用TEE环境下可信应用程序TA构建的TEE度量模块,通过可信固件获取REE环境下缺页异常发生时的错误地址寄存器FAR_EL1和页表基地址寄存器TTBR0_EL1的值,并查询进程的页表获得加载的代码页的物理地址,将代码页的物理地址映射到TEE地址空间,从而得到REE环境下加载的代码页内容,并对REE环境下加载的代码页内容实施完整性度量得到度量值,并将度量值与预设的基准值进行比对,若两者一致且加载的代码页的权限为不可写,则切换回REE环境下继续执行该程序;否则拒绝执行该程序并切换回REE环境下。

本实施例在TEE侧可信操作系统中利用可信应用程序TA(Trusted Applications)构建进程完整性度量模块,在REE侧Linux操作系统异常处理函数handle_mm_fault()中插入钩子,钩子切换到安全世界调用TEE提供的进程完整性度量模块,该钩子会在代码段首次从硬盘加载入内存,或由于换页机制将物理页从硬盘换入内存时被触发。本实施例步骤S101中若钩子函数捕获到缺页异常时,还包括将加载页面所属虚拟内存区域vm_area_struct结构体中的vm_file字段与预设的进程名单进行匹配,只有缺页异常对应的进程在预设的进程名单中才切换至TEE环境下并跳转步骤S102,否则针对捕获的缺页异常不做任何处理。

如图2和图3所示,本实施例中用户输入命令执行应用程序,操作系统使用fork系统调用创建进程,然后使用execve系统调用运行可执行程序;在应用进程实际访问虚拟页时,CPU会引发缺页异常,REE操作系统中的钩子捕获缺页异常,判断进程是否在保护的名单中。如果是,REE操作系统通过smc指令完成世界切换,调用TEE驱动程序将控制流切换至TEE进程完整性度量模块;TEE进程完整性度量模块读取可信固件中存储的普通世界处理器上下文,根据变量在数据结构中的偏移解析得到错误地址寄存器FAR_EL1、页表基地址寄存器TTBR0_EL1的值,从而获得REE缺页异常发生的虚拟地址和进程的页表基地址;TEE通过查询进程的页表获得加载的代码页的物理地址,并将对应页面的物理地址映射到TEE地址空间,从而获得REE侧加载页面的内容,对加载的代码页实施完整性度量;TEE读取REE中存储的基准值表并进行解密,根据代码段的起始虚拟地址和页面大小检索对应页面的哈希基准值,将TEE进程完整性度量模块计算的哈希值与基准值比对,判断进程是否被非法篡改过。如果度量值与基准值匹配,则比对通过,验证内存中加载的代码页权限位为不可写,然后恢复程序的正常执行;如果二者不匹配,说明进程被篡改,告警并拒绝程序的执行。

本实施例步骤S102中通过可信固件获取REE环境下缺页异常发生时的错误地址寄存器FAR_EL1和页表基地址寄存器TTBR0_EL1的值包括:通过可信固件获取REE环境下的缺页异常发生时的处理器上下文cpu_context_t的基地址;计算错误地址寄存器FAR_EL1和页表基地址寄存器TTBR0_EL1的值在cpu_context_t数据结构中的偏移,从而根据偏移在处理器上下文cpu_context_t中获取得到REE环境下缺页异常发生时的错误地址寄存器FAR_EL1和页表基地址寄存器TTBR0_EL1的值。由于Linux操作系统采用按需加载技术,因此进程创建时不会直接分配物理内存。而是在应用进程实际访问虚拟页时,CPU引发缺页异常,此时操作系统才会将程序映像的代码段从硬盘加载到内存,并建立页表映射。为了实现进程的动态完整性度量,REE操作系统中的钩子捕获缺页异常,根据加载页面所属虚拟内存区域vm_area_struct结构体中的vm_file字段判断当前进程是否在保护的名单中。如果是,REE操作系统调用TEE驱动程序将控制流切换至TEE进程完整性度量模块,同时将文件名作为参数通过共享内存传递给TEE,世界切换通过smc指令完成;要获取加载的代码页内容,首先要获得加载页面的虚拟地址和进程的页表基地址。在AArch64体系结构下,缺页异常发生的虚拟地址会被CPU自动保存在FAR_EL1寄存器中。TEE进程完整性度量模块读取可信固件中存储的普通世界处理器上下文psci_ns_context,根据CTX_TTBR0_EL1、CTX_PAR_EL1宏计算得到页表基地址寄存器TTBR0_EL1和错误地址寄存器FAR_EL1的值在cpu_context_t数据结构中的偏移,从而获得REE缺页异常发生的虚拟地址和进程的页表基地址。

本实施例步骤S102中查询进程的页表获得加载的代码页的物理地址包括:根据错误地址寄存器FAR_EL1的值中第47-39位作为虚拟地址在第0级页表中的索引值,查询获得第1级页表的物理地址,其中第0级页表基地址存储在页表基地址寄存器TTBR0_EL1中;然后以相同的方式根据错误地址寄存器FAR_EL1的值中第38-30位作为虚拟地址在第1级页表中的索引值,查询获得第2级页表的物理地址;依次逐级检索,直至从错误地址寄存器FAR_EL1的值中第20-12位获得页表项,以虚拟地址最后12位为页内偏移,与页表项中的物理页号结合获得加载的代码页的物理地址。将对应页面的物理地址通过core_mmu_add_mapping()函映射到TEE地址空间,从而获得REE侧加载页面的内容,对加载的代码页实施完整性度量。

本实施例步骤S102中对REE环境下加载的代码页内容实施完整性度量得到度量值时,是指采用指定的哈希算法(如SHA256算法等,可以根据需要指定)对REE环境下加载的代码页内容计算哈希值以作为完整性度量得到的度量值。本实施例步骤S102中预设的基准值为将加密的基准值表解密后获取,所述基准值表的每一个表项的内容包括:

{file_name,virt_addr,page_size,hash_val}

上式中,file_name表示程序的可执行文件的名称,virt_addr为代码段的起始虚拟地址,page_size为页面大小,hash_val为用于作为完整性度量得到的基准值的哈希值。如图4所示,根据传递的文件名file_name、FAR_EL1中存储的代码段虚拟地址virt_addr和页面大小page_size在基准值表中检索对应页面的哈希基准值hash_val,将TEE进程完整性度量模块计算的哈希值与基准值比对,判断进程是否被非法篡改过。如果度量值与基准值匹配,则比对通过,验证内存中加载的代码页权限位为不可写,然后恢复程序的正常执行;如果二者不匹配,说明进程被篡改,告警并拒绝程序的执行。

本实施例步骤S101之前还包括首先针对目标程序生成基准值表的表项并得到基准值表,然后利用TEE环境生成加密密钥,并使用该加密密钥对基准值表加密后并存储在REE环境下的文件系统中。根据系统中要保护的进程所对应的ELF可执行文件计算建立基准值表。同时,为了保证基准值不被篡改,需要由TEE生成加密密钥,并使用该密钥对基准值表加密,存储在REE文件系统中。作为一种可选的实施方式,本实施例在加密算法选用AES算法。

综上所述,本实施例方法通过预先在初始化阶段,根据要保护的进程所的ELF可执行文件生成基准值表,在TEE中构建进程完整性度量模块,在REE操作系统缺页异常处理程序中插入完整性度量钩子;然后在系统运行过程中,进程代码段加载时引发缺页异常,REE中的完整性度量钩子捕获缺页异常,并调用TEE中的进程完整性度量模块;TEE中的进程完整性度量模块获取REE中的缺页异常发生时处理器状态,然后将进程代码页的物理地址映射到安全世界的地址空间,对加载的页面实施完整性度量,得到进程代码页的度量值;TEE读取加密的进程代码页的基准值表并进行解密,得到进程代码页的基准值,并比对进程代码页的度量值与基准值以判断进程是否被非法篡改过,若未被非法篡改过则检查进程代码页的权限为不可写,若进程代码页的权限为不可写则允许程序继续执行,否则拒绝程序继续执行。本实施例方法具有保护全面、验证级别高、安全可靠、通用性好的优点。

此外,本实施例还提供一种基于TEE的进程动态完整性度量系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于TEE的进程动态完整性度量方法。本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述基于TEE的进程动态完整性度量方法。

实施例二:

本实施例与的实施例一基本相同,其主要区别为:步骤S101中若钩子函数捕获到缺页异常时,还包括将加载页面所属虚拟内存区域vm_area_struct结构体中的vm_file字段与预设的进程名单进行匹配,只有缺页异常对应的进程不在预设的进程名单中才切换至TEE环境下并跳转步骤S102,否则针对捕获的缺页异常不做任何处理。即:将进程名单视为黑名单,利用进程黑名单代替了实施例一中的进程名单(进程白名单),同样也可以基于TEE的进程动态完整性度量,只是安全性上面会因为进程黑名单、进程白名单的差异上有所不同。

此外,本实施例还提供一种基于TEE的进程动态完整性度量系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于TEE的进程动态完整性度量方法。本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述基于TEE的进程动态完整性度量方法。

实施例三:

本实施例为对实施例一和实施例二的进一步改进,其改进包括,本实施例步骤S102之后还包括响应远程挑战者的挑战请求执行远程证明:

S201,REE环境下认证服务检测远程挑战者的挑战请求,若收到远程挑战者的挑战请求,则跳转步骤S202;否则,跳转步骤S201持续检测远程挑战者的挑战请求;

S202,REE环境利用TEE环境下的证明模块生成认证身份密钥AIK,并使用认证身份密钥AIK对TEE环境下的虚拟寄存器cPCR以及度量列表与挑战请求中携带的随机数值进行签名;所述虚拟寄存器cPCR用于记录受保护的进程的代码页执行顺序及度量值,虚拟寄存器cPCR初始值为0,假设进程的代码页面加载顺序为p

cPCR=Hash(···Hash(Hash(0

上式中,cPCR表示虚拟寄存器cPCR的值,Hash表示哈希函数;所述度量列表用于记录进程页面的执行流程计算对应页面的哈希值,其组织方式为:

MList={

上式中,MList表示度量列表,proc表示进程名字,addr表示代码页的虚拟地址,size表示页面大小,hash(p

S203,TEE环境下的证明模块将签名结果返回REE认证服务,并由REE认证服务将虚拟寄存器cPCR和度量列表及其签名发送给远程挑战者;

S204,远程挑战者收到虚拟寄存器cPCR和度量列表及其签名后,向指定的证书服务中心请求验证签名,若签名验证通过,则根据虚拟寄存器cPCR和度量列表获得进程代码页的执行流与平台完整性报告结果。

远程证明可以在挑战者和远程方之间建立信任。现有完整性度量架构的度量对象是系统上静态存储的文件,不能反映出进程动态运行情况,同时存在度量与证明粒度较粗的问题。本实施例步骤S102之后还包括响应远程挑战者的挑战请求执行远程证明的方法,可得到进程代码页的执行流与平台完整性报告结果,可记录并报告进程的代码页执行流,从而可实现针对进程的动态完整性度量,安全性更好。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

技术分类

06120116513379