一种基于CPU时空隔离机制实现内核完整性度量的方法与流程

文档序号:12786769阅读:370来源:国知局
一种基于CPU时空隔离机制实现内核完整性度量的方法与流程

本发明涉及一种内核完整性度量的方法,具体地说是一种基于CPU时空隔离机制实现内核完整性度量的方法,属于内核完整性度量的方法领域。



背景技术:

随着计算机信息产业的飞速发展,信息技术的快速普及,计算机系统在国家安全、民生经济等支撑产业中逐渐占据主导地位,因而其安全问题已成为决定国防、经济的关键,一旦计算机系统安全遭到破坏,将产生不可估量的损失。操作系统内核安全作为计算机系统安全的重要基础,其安全问题也是计算机系统安全的重点。传统的操作系统内核防护技术,如IBM研究的IMA系统及后续的PRIMA系统,虽然能够对内核加载模块进行度量,但无法检测加载模块运行时的内核完整性,无法确保操作系统内核安全。

为了实现对操作系统内核安全的保护,防止恶意软件篡改内核,破坏系统安全,各种基于软件或者硬件的防护技术被相继提出。其中部署在系统内核的软件化防护方案,或者是依赖内核本身的防护方案,都存在着一些重大的缺陷,如果攻击者获得与防护架构相同的权限,就可以绕过安全检测,如果能够获得比防护架构更高的权限,甚至可以修改内核防护模块;而且,这类防护方案几乎没有使用硬件支持的隔离技术,缺乏对核心安全功能模块的隔离保护,使得核心功能模块暴露在攻击者面前,容易被攻击者破坏,降低了方案的安全性。此外,防护过程中存储的敏感数据缺乏隔离保护也容易被恶意代码篡改或者盗用,降低系统的安全性。

因此利用基于硬件的隔离技术,为安全模块构造与系统完全隔离的安全执行环境,实现内核安全防护的研究理念已逐渐成为研究热点。目前,其实现方式主要趋于两种:(1)硬件虚拟化技术,构造虚拟机管理层,利用虚拟机管理层对系统各类资源,如内存、内核关键数据等进行管控,达到虚拟机自省的目的;(2)硬件安全协处理器技术,硬件协处理器本身独立于系统硬件并能够对系统内核进行检测,从而实现系统安全防护。

一般而言,基于硬件虚拟化技术实现的内核防护,都是利用该技术构建与操作系统隔离的虚拟机管理层,管理层对运行在其内的系统进行监管,实现虚拟机自省,通过虚拟机自省机制,进行内核安全防护。比如Secvisor技术。然而,这种防护手段由于系统频繁陷入虚拟机管理层,造成大量的性能开销,使系统可用性大大降低;同时,虚拟机管理层自身一般比操作系统更复杂,具有更广的攻击面,降低了防护方案的安全性。而利用硬件安全协处理器设计的安全防护方案,其实现原理基本上都是利用独立于CPU的硬件协处理器(如PCI板卡协处理器或者TPM芯片)对系统内核进行度量,实现安全防护。这种方式虽然能够保证系统关键数据的安全,却需要协处理器与CPU进行频繁的数据通讯,影响系统内核安全防护时效性;而且,这类方案缺乏对系统资源的管控能力,无法对系统行为进行实时监控。

通过针对性地对现有内核完整性度量技术方案进行研究分析,使用软件支持的实现方法,无法对自身防护模块进行有效的保护,也无法可靠的对敏感信息进行安全存储,防护方案自身的安全、效率无法得到保障;而传统的硬件支持实现方案,虽然提高了自身的安全性,但是整体架构存在性能开销大的问题。



技术实现要素:

为了解决上述问题,本发明设计了一种基于CPU时空隔离机制实现内核完整性度量的方法,通过可信引导和动态度量结合的方式,有效解决了安全性弱、时效性差、可用性低等问题,增强了系统安全。

本发明的技术方案为:

一种基于CPU时空隔离机制实现内核完整性度量的方法,包括构建可信中断时钟源和度量过程两部分;

其中,所述构建可信中断时钟源包括以下步骤:

(1)将通用运行环境中当前程序状态寄存器(CPSR)的F位置0,使FIQ类中断产生时通用运行环境无法屏蔽;

(2)将安全配置寄存器(SCR)的FW位置0,强制通用运行环境无法修改自己CPSR的F位;这两步可确保通用运行环境无法屏蔽自己运行时产生的FIQ中断;

(3)将安全配置寄存器的FIQ位置1,强制FIQ中断产生时转入安全监控器进行状态切换;由于FW、FIQ位只能在可信运行环境中修改,这三步可以将FIQ类中断配置为安全中断,强制FIQ中断发生时转入安全监控器且通用运行环境无法屏蔽;

(4)将相应的时钟中断类配置为安全中断,使得时钟中断产生时中断控制器将其转化为FIQ类中断;

所述度量过程包括以下步骤:

(1)时钟源产生FIQ类中断,进入安全监控器,切换至可信运行环境,调用可信环境中的安全交互模块;

(2)安全交互模块与通用运行环境中度量对象采集模块建立会话,构建共享内存区;度量对象采集模块利用内核调试工具Kprobe,在度量对象处设置信息采集点,对通用运行环境内核中系统调用表、中断描述符表、函数跳转表等被度量对象进行信息采集;

(3)安全交互模块利用密码算法模块对共享内存区中被度量对象进行哈希运算,并将得到的哈希值传送给度量模块;

(4)度量模块读取可信运行环境安全存储模块中存储的度量对象原始哈希值,并将其与安全交互模块传输的哈希值进行对比;如果两者一致,说明内核完整性良好;反之,说明内核完整性遭到破坏,产生错误信息报告给用户;

(5)度量完成,断开两个环境之间的会话,系统状态返回。

上述方法包括以下功能模块:

(1)时钟源模块:通用运行环境中的时钟源模块根据设置的时间,定时地产生时钟中断,该中断通过寄存器前期的配置转化为FIQ类中断,强制进入安全监控器切换至可信运行模块;

(2)安全交互模块:可信运行环境中的安全交互模块响应安全中断,通过安全监控器与通用环境中的度量对象采集模块建立会话,构建共享内存区;同时,该模块还能将通用环境中传递至共享内存区的采集信息进行哈希运算,并将得到的哈希值传递给度量模块;

(3)度量对象采集模块:度量对象采集模块位于通用运行环境,能够响应安全交互模块,对通用运行环境中系统调用表、中断描述符表、函数跳转表等度量对象进行信息采集,并将信息传递至共享内存区;

(4)度量模块:读取安全存储模块中保存的度量对象原始哈希值,与安全交互模块传递的哈希值进行比对,判断通用运行环境内核完整性是否完整;

(5)安全存储模块:安全存储模块位于可信运行环境中,能够安全存储可信引导之后度量对象初始的哈希值,并在度量过程中将该值传递给度量模块;

(6)密码算法模块:位于可信运行环境中的密码算法模块,负责对安全交互模块接收的度量信息进行哈希运算,之后,安全交互模块将结果传递至度量模块。

本发明通过配置中断控制器和安全配置寄存器的相关控制位,将时钟中断配置为通用运行环境无法屏蔽的安全中断,利用时钟源定时、主动地产生中断,通过安全监控器进入可信运行环境,调用安全交互模块。此后,安全交互模块与通用运行环境中的度量对象采集模块建立会话,对采集模块传输的度量信息进行哈希运算,并将结果传递至度量模块,度量模块读取安全存储模块中存储的标准值与度量值进行对比,判断内核完整性是否良好。

本发明以CPU、操作系统、可信时钟源、内核完整性度量系统的紧耦合为基本思想,突出系统实现的整体性和软硬件协同性,力图实现基于CPU时空隔离机制的度量方案,利用可信运行环境确保对系统控制流(包括函数跳转表、中断向量表、中断描述符表以及系统调用表)度量的可靠性,准确检测出操作系统内核的完整性。为了实现目标,首先,需要构建一个安全可靠的运行环境,即安全内核。安全内核提供基本的内存管理、异常处理、任务调度等功能,同时在环境中实现度量方案的度量模块、安全交互模块。通过CPU虚拟化技术,运行于CPU安全核。构建一个通用运行环境,即通用操作系统内核,运行于CPU普通核,并在其中构建可信时钟中断、度量对象采集模块。最后,需要构建一个运行于CPU安全核的安全监控器,负责在两个环境将进行上下文切换。

CPU时空隔离机制是指利用虚拟化技术将CPU以时间片的方式运行两个不同状态的虚拟CPU核,通常划分为安全核和普通核;通过对相关寄存器进行设置,利用内存管理单元MMU对系统内存域进行空间划分,以确保不同内存区域拥有不同的访问权限,达到系统资源隔离的效果。

基于两种不同的CPU虚拟核,安全引导两种隔离的运行环境,通用运行环境(REE)和可信运行环境(TEE),其中,可信运行环境具有更高的权限,能够访问通用运行环境的全部资源,同时还提供安全存储、加解密运算、密钥管理等基本安全服务。

本发明的优点在于:

1、基于CPU时空隔离机制,构建不可屏蔽的安全时钟中断,主动地对内核完整性进行度量,提升系统的安全性;

2、通过CPU时空隔离机制,将内核完整性度量核心模块与通用环境隔离运行,可以确保对内核完整性度量的有效性及系统自身的安全性;

3、通过构建共享内存区进行数据交互,提高传统内核完整性度量方案中数据频繁交互的效率,提升系统的时效性。

下面结合附图和实施例对本发明作进一步说明。

附图说明

图1为本发明实施例的系统整体架构图(ELn代表CPU运行状态特权级,n=0,1,,3);

图2为本发明实施例的基本原理图。

具体实施方式

以下对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

实施例1

如图1-2所示,一种基于CPU时空隔离机制实现内核完整性度量的方法,包括构建可信中断时钟源和度量过程两部分;

其中,所述构建可信中断时钟源包括以下步骤:

(1)将通用运行环境中当前程序状态寄存器(CPSR)的F位置0,使FIQ类中断产生时通用运行环境无法屏蔽;

(2)将安全配置寄存器(SCR)的FW位置0,强制通用运行环境无法修改自己CPSR的F位;这两步可确保通用运行环境无法屏蔽自己运行时产生的FIQ中断;

(3)将安全配置寄存器的FIQ位置1,强制FIQ中断产生时转入安全监控器进行状态切换;由于FW、FIQ位只能在可信运行环境中修改,这三步可以将FIQ类中断配置为安全中断,强制FIQ中断发生时转入安全监控器且通用运行环境无法屏蔽;

(4)将相应的时钟中断类配置为安全中断,使得时钟中断产生时中断控制器将其转化为FIQ类中断;

所述度量过程包括以下步骤:

(1)时钟源产生FIQ类中断,进入安全监控器,切换至可信运行环境,调用可信环境中的安全交互模块;

(2)安全交互模块与通用运行环境中度量对象采集模块建立会话,构建共享内存区;度量对象采集模块利用内核调试工具Kprobe,在度量对象处设置信息采集点,对通用运行环境内核中系统调用表、中断描述符表、函数跳转表等被度量对象进行信息采集;

(3)安全交互模块利用密码算法模块对共享内存区中被度量对象进行哈希运算,并将得到的哈希值传送给度量模块;

(4)度量模块读取可信运行环境安全存储模块中存储的度量对象原始哈希值,并将其与安全交互模块传输的哈希值进行对比;如果两者一致,说明内核完整性良好;反之,说明内核完整性遭到破坏,产生错误信息报告给用户;

(5)度量完成,断开两个环境之间的会话,系统状态返回。

上述方法包括以下功能模块:

(1)时钟源模块:通用运行环境中的时钟源模块根据设置的时间,定时地产生时钟中断,该中断通过寄存器前期的配置转化为FIQ类中断,强制进入安全监控器切换至可信运行模块;

(2)安全交互模块:可信运行环境中的安全交互模块响应安全中断,通过安全监控器与通用环境中的度量对象采集模块建立会话,构建共享内存区;同时,该模块还能将通用环境中传递至共享内存区的采集信息进行哈希运算,并将得到的哈希值传递给度量模块;

(3)度量对象采集模块:度量对象采集模块位于通用运行环境,能够响应安全交互模块,对通用运行环境中系统调用表、中断描述符表、函数跳转表等度量对象进行信息采集,并将信息传递至共享内存区;

(4)度量模块:读取安全存储模块中保存的度量对象原始哈希值,与安全交互模块传递的哈希值进行比对,判断通用运行环境内核完整性是否完整;

(5)安全存储模块:安全存储模块位于可信运行环境中,能够安全存储可信引导之后度量对象初始的哈希值,并在度量过程中将该值传递给度量模块;

(6)密码算法模块:位于可信运行环境中的密码算法模块,负责对安全交互模块接收的度量信息进行哈希运算,之后,安全交互模块将结果传递至度量模块。

本发明通过配置中断控制器和安全配置寄存器的相关控制位,将时钟中断配置为通用运行环境无法屏蔽的安全中断,利用时钟源定时、主动地产生中断,通过安全监控器进入可信运行环境,调用安全交互模块。此后,安全交互模块与通用运行环境中的度量对象采集模块建立会话,对采集模块传输的度量信息进行哈希运算,并将结果传递至度量模块,度量模块读取安全存储模块中存储的标准值与度量值进行对比,判断内核完整性是否良好。

本发明以CPU、操作系统、可信时钟源、内核完整性度量系统的紧耦合为基本思想,突出系统实现的整体性和软硬件协同性,力图实现基于CPU时空隔离机制的度量方案,利用可信运行环境确保对系统控制流(包括函数跳转表、中断向量表、中断描述符表以及系统调用表)度量的可靠性,准确检测出操作系统内核的完整性。为了实现目标,首先,需要构建一个安全可靠的运行环境,即安全内核。安全内核提供基本的内存管理、异常处理、任务调度等功能,同时在环境中实现度量方案的度量模块、安全交互模块。通过CPU虚拟化技术,运行于CPU安全核。构建一个通用运行环境,即通用操作系统内核,运行于CPU普通核,并在其中构建可信时钟中断、度量对象采集模块。最后,需要构建一个运行于CPU安全核的安全监控器,负责在两个环境将进行上下文切换,如图1所示。

基于国产FT2000A CPU硬件平台,以Debian为通用运行环境下的操作系统、optee_os为可信执行环境下的安全内核、ARM Trusted Firmware Version1.1作为系统引导固件。在本专利的实现方法中,对时钟中断服务例程timer_interrupt()进行修改,实现定时强制进入安全监控器,进行状态切换的功能,能够使系统主动地对内核完整性进行度量。

在实现中使用的timer_interrupt()例程函数设计如下所示:

static void timer_interrupt(int fiq, void *dev_id, struct pt_regs *regs)

{

int count;

write_lock(&xtime_lock);

if(use_tsc)

{

rdtscl(last_tsc_low);

……

}

do_timer_interrupt(fiq , NULL , regs); //执行时钟中断服务

write_unlock(&xtime_lock);

}

在实现中使用的一些关键数据结构设计如下所示:

typedef struct _SharedMemory{

void* buffer;

size_t size;

unit32_t flags;

}_SharedMemory;//共享内存区

typedef struct P2C_IDTR_ {

P2C_U16 limit; // 范围

P2C_U32 base; //基地址

}P2C_IDTR, *PP2C_IDTR; //IDTR寄存器定位的中断描述符表(IDT)位置

typedef struct P2C_IDT_ENTRY_ {

P2C_U16 offset_low;

P2C_U16 selector;

P2C_U8 reserved;

P2C_U8 type:4;

P2C_U8 always0:1;

P2C_U8 dpl:2;

P2C_U8 present:1;

P2C_U16 offset_high;

}P2C_IDTENTRY, *PP2C_IDTENTRY; //中断描述符表中一个元素的结构

通过以上关键的函数接口及数据结构的修改,完成了对中断描述符表、系统调用表等度量对象的检测,保证了内核完整性度量系统实现的时效性;其利用CPU的时空隔离机制,实现了系统自身的高可靠性。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1