内核运行时的完整性校验方法及计算机可读存储介质与流程

文档序号:17663953发布日期:2019-05-15 22:34阅读:389来源:国知局
内核运行时的完整性校验方法及计算机可读存储介质与流程

本发明涉及数据安全技术领域,尤其涉及一种内核运行时的完整性校验方法及计算机可读存储介质。



背景技术:

现在一般的方案都可以提供内核的静态完整性校验,比如可信启动技术,即在启动过程中每一阶段被加载的模块(比如内核)在加载运行之前都进行了安全校验,如果校验通过则运行,否则拒绝执行。但是对内核运行之后却没有进一步进行防护。

例如,在公开号为cn106250760a的中国专利公开文件中,提出了一种基于tpm2.0芯片的u-boot可信启动方法,所述方法利用tpm2.0芯片的硬件特性,收集u-boot加载驱动程序的完整性信息,并在内核加载运行前校验驱动程序及内核文件的完整性,为可信嵌入式设备的内核文件及驱动程序完整性校验过程提供保护和隔离,嵌入式系统在启动过程中将核心驱动文件的度量值扩展至tpm2.0芯片中的pcr中,在嵌入式设备内核加载时刻,校验驱动程序及内核文件的完整性,保证只有在驱动程序及内核文件未遭受篡改的情况下才可正常启动系统。该方案只是在启动加载内核之前对内核数据进行完整性校验,确保运行之前内核数据是没有被篡改过的,内核运行后却无法确保安全性。



技术实现要素:

本发明所要解决的技术问题是:提供一种内核运行时的完整性校验方法及计算机可读存储介质,可对运行后的内核代码段和可读数据段进行完整性校验,确保安全性。

为了解决上述技术问题,本发明采用的技术方案为:一种基于trustzone的内核运行时的完整性校验方法,包括:

获取内核文件中的第一字段的数据和第二字段的数据,所述第一字段为.text字段,所述第二字段为.rodata字段;

分别对所述第一字段的数据和第二字段的数据进行单向散列计算,得到第一散列值和第二散列值;

安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域;

普通操作系统将内核文件解压到普通内存区域,并将第一字段的数据和第二字段的数据在普通内存区域中的起始地址以及对应的长度发送至安全操作系统;

安全操作系统根据所述起始地址和对应的长度,定时从普通内存区域获取第一字段的数据和第二字段的数据,并根据安全内存区域中的第一散列值和第二散列值,分别对所获取的第一字段的数据和第二字段的数据进行完整性校验。

本发明还涉及一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现以下步骤:

获取内核文件中的第一字段的数据和第二字段的数据,所述第一字段为.text字段,所述第二字段为.rodata字段;

分别对所述第一字段的数据和第二字段的数据进行单向散列计算,得到第一散列值和第二散列值;

安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域;

普通操作系统将内核文件解压到普通内存区域,并将第一字段的数据和第二字段的数据在普通内存区域中的起始地址以及对应的长度发送至安全操作系统;

安全操作系统根据所述起始地址和对应的长度,定时从普通内存区域获取第一字段的数据和第二字段的数据,并根据安全内存区域中的第一散列值和第二散列值,分别对所获取的第一字段的数据和第二字段的数据进行完整性校验。

本发明的有益效果在于:先计算得到内核数据的散列值并存储至安全内存区域,然后在内核运行时,定时从普通内存区域中获取内存数据,并根据安全内存区域中的散列值对其进行校验,从而实现对运行后的内核代码段和可读数据段进行完整性校验的目的,有效在内核运行之后,对内核数据进行防护。本发明在基于trustzone的硬件架构基础上和在静态完整性校验的基础上,进一步对运行后的内核代码段和可读数据段进行完整性校验,确保在内核相应区域被篡改时可以及时发现并采取相应安全策略。

附图说明

图1为本发明一种基于trustzone的内核运行时的完整性校验方法的流程图;

图2为本发明实施例一的方法流程图;

图3为本发明实施例二的分块示意图;

图4为本发明实施例二的单向安全散列函数的示意图。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。

本发明最关键的构思在于:在内核运行时,定时从普通内存区域中获取内存数据,并根据预先计算并保存在安全内存区域的散列值对其进行校验。

请参阅图1,一种基于trustzone的内核运行时的完整性校验方法,包括:

获取内核文件中的第一字段的数据和第二字段的数据,所述第一字段为.text字段,所述第二字段为.rodata字段;

分别对所述第一字段的数据和第二字段的数据进行单向散列计算,得到第一散列值和第二散列值;

安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域;

普通操作系统将内核文件解压到普通内存区域,并将第一字段的数据和第二字段的数据在普通内存区域中的起始地址以及对应的长度发送至安全操作系统;

安全操作系统根据所述起始地址和对应的长度,定时从普通内存区域获取第一字段的数据和第二字段的数据,并根据安全内存区域中的第一散列值和第二散列值,分别对所获取的第一字段的数据和第二字段的数据进行完整性校验。

从上述描述可知,本发明的有益效果在于:对运行后的内核代码段和可读数据段进行完整性校验,确保在内核相应区域被篡改时可以及时发现并采取相应安全策略。

进一步地,所述“安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域”之前,进一步包括:

使用可信启动私钥对所述第一散列值和第二散列值进行签名,并将签名得到的数字签名与所述第一散列值和第二散列值进行组合,得到组合数据。

进一步地,所述“安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域”具体为:

安全操作系统运行后,将所述组合数据存储至安全内存区域;

使用可信启动公钥对所述组合数据进行签名验证;

若验证通过,则将第一散列值和第二散列值分别存储至安全内存区域。

由上述描述可知,对散列值进行签名验证,防止其在存入安全内存区域之前被篡改,保证其安全性。

进一步地,对所述第一字段的数据进行单向散列计算,得到第一散列值的步骤具体为:

根据预设的块大小,将第一字段的数据划分为多个数据块;

计算得到第一个数据块的散列值;

对当前数据块和上一个数据块的散列值进行单向散列计算,得到当前数据块的散列值;

根据最后一个数据块的散列值,得到第一散列值。

进一步地,根据安全内存区域中的第一散列值,对所获取的第一字段的数据进行完整性校验的步骤具体为:

根据预设的块大小,将所获取的第一字段的数据划分为多个数据块;

计算得到第一个数据块的散列值;

对当前数据块和上一个数据块的散列值进行单向散列计算,得到当前数据块的散列值;

根据最后一个数据的散列值,得到第三散列值;

将所述第三散列值与安全存储区域中的第一散列值进行对比;

若一致,则判定普通内存区域中的第一字段的数据安全;

若不一致,则执行预设的安全决策。

由上述描述可知,通过分块单向散列计算得到散列值,进一步提高了校验的准确性,从而提高了内核防护的安全性。

本发明还提出了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现以下步骤:

获取内核文件中的第一字段的数据和第二字段的数据,所述第一字段为.text字段,所述第二字段为.rodata字段;

分别对所述第一字段的数据和第二字段的数据进行单向散列计算,得到第一散列值和第二散列值;

安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域;

普通操作系统将内核文件解压到普通内存区域,并将第一字段的数据和第二字段的数据在普通内存区域中的起始地址以及对应的长度发送至安全操作系统;

安全操作系统根据所述起始地址和对应的长度,定时从普通内存区域获取第一字段的数据和第二字段的数据,并根据安全内存区域中的第一散列值和第二散列值,分别对所获取的第一字段的数据和第二字段的数据进行完整性校验。

进一步地,所述“安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域”之前,进一步包括:

使用可信启动私钥对所述第一散列值和第二散列值进行签名,并将签名得到的数字签名与所述第一散列值和第二散列值进行组合,得到组合数据。

进一步地,所述“安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域”具体为:

安全操作系统运行后,将所述组合数据存储至安全内存区域;

使用可信启动公钥对所述组合数据进行签名验证;

若验证通过,则将第一散列值和第二散列值分别存储至安全内存区域。

进一步地,对所述第一字段的数据进行单向散列计算,得到第一散列值的步骤具体为:

根据预设的块大小,将第一字段的数据划分为多个数据块;

计算得到第一个数据块的散列值;

对当前数据块和上一个数据块的散列值进行单向散列计算,得到当前数据块的散列值;

根据最后一个数据块的散列值,得到第一散列值。

进一步地,根据安全内存区域中的第一散列值,对所获取的第一字段的数据进行完整性校验的步骤具体为:

根据预设的块大小,将所获取的第一字段的数据划分为多个数据块;

计算得到第一个数据块的散列值;

对当前数据块和上一个数据块的散列值进行单向散列计算,得到当前数据块的散列值;

根据最后一个数据的散列值,得到第三散列值;

将所述第三散列值与安全存储区域中的第一散列值进行对比;

若一致,则判定普通内存区域中的第一字段的数据安全;

若不一致,则执行预设的安全决策。

实施例一

请参照图2,本发明的实施例一为:一种基于trustzone的内核运行时的完整性校验方法;本方法基于下述条件:(1)要有trustzone硬件架构;(2)在安全区域即trustzone区域上运行安全操作系统,而非安全区域运行普通操作系统(如linux/android或者其他操作系统),也即本方法需要防护的对象;(3)所有的镜像数据在运行之前都已经通过静态的完整性校验,在这里使用可信启动技术进行校验。否则对一个已经被注入恶意程序的内核再进行运行时完整性校验没有意义。

整个静态完整性校验的顺序是:可信根程序->第一级加载程序->安全操作系统程序->第二级加载程序->非安全操作系统程序。箭头方向表示软件组件启动的顺序,启动过程需要基于可信启动技术(启动过程中每一阶段被加载的组件在加载运行之前都进行了签名校验,如果校验通过则运行,否则拒绝执行)。

如图2所示,本方法包括如下步骤:

s1:获取内核文件中的第一字段的数据和第二字段的数据,所述第一字段为.text字段,所述第二字段为.rodata字段;

s2:分别对所述第一字段的数据和第二字段的数据进行单向散列计算,得到第一散列值和第二散列值;

s3:使用可信启动私钥对所述第一散列值和第二散列值进行签名,并将签名得到的数字签名与所述第一散列值和第二散列值进行组合,得到组合数据。

即在pc端把编译生成的原始内核elf(可执行文件格式)文件中的.text字段提取出来进行单向安全散列计算得到一个.text的散列值,同样把内核elf文件中的.rodata字段提取出来进行单向安全散列计算得到一个.rodata的散列值,再把两个散列值使用可信启动私钥进行签名,最终组合成“.text散列值+.rodata散列值+数字签名”的组合数据。

将可信启动公钥在生产的时候通过密钥注入工具注入至嵌入式设备的otp熔丝区域,所述组合数据同样在生产制造的时候通过烧录工具存入flash的相应区域。

s4:安全操作系统运行后,将所述组合数据存储至安全内存区域,即将flash区域中的组合数据拷贝到安全内存区域。

s5:使用可信启动公钥对所述组合数据进行签名验证,判断验证是否通过,若是,则执行步骤s6,若否,则执行步骤s11。具体地,将组合数据解析成第一散列值、第二散列值和数字签名,使用可信启动公钥对所述数字签名进行解密,得到第一摘要和第二摘要,若第一摘要与第一散列值一致且第二摘要与第二散列值一致,则判定验证通过。

s6:将第一散列值和第二散列值分别存储至安全内存区域。之后,安全操作系统等待非安全操作系统,即普通操作系统还回一个消息,并把控制权交给后面的启动程序(第二级加载程序)。

s7:普通操作系统将内核文件解压到普通内存区域,并将第一字段的数据和第二字段的数据在普通内存区域中的起始地址以及对应的长度发送至安全操作系统;即非安全内核的解压程序在将原始内核的.text和rodata等相关数据解压到普通内存之后,需要发送一条信息给安全内核的告诉其.text和rodata在普通内存中的起始地址和对应的长度,之后在跳到对应的.text去执行。

s8:安全操作系统将所述起始地址和对应的长度存储至安全内存区域;

s9:安全操作系统根据所述起始地址和对应的长度,定时从普通内存区域获取第一字段的数据和第二字段的数据,并根据安全内存区域中的第一散列值和第二散列值,分别对所获取的第一字段的数据和第二字段的数据进行完整性校验。即安全内核循环对非安全内核在普通内存中的.text和rodata数据分时进行完整性校验。

s10:判断校验是否通过,若是,则表示非安全内核对应的.text数据和rodata数据没有被篡改,若否,则表示非安全内核对应的.text数据和rodata数据被篡改了,执行步骤s11。具体地,分别对所获取的第一字段的数据和第二字段的数据进行单向散列计算,得到第三散列值和第四散列值,若第三散列值与第一散列值一致且第四散列值与第二散列值一致,则校验通过,否则校验不通过。

s11:执行预设的安全决策,例如重启普通操作系统。

进一步地,在步骤s6后,若安全操作系统超过预设的时间未接收到普通操作系统发送的消息,即等待超时,则执行步骤s11。

进一步地,安全操作系统运行后可创建一个针对非安全内核运行时的监控任务,由监控任务执行步骤s4-s6以及步骤s8-s11。

本实施例在基于trustzone的硬件架构基础上和在静态完整性校验的基础上,进一步对运行后的内核代码段和可读数据段进行完整性校验,确保在内核相应区域被篡改时可以及时发现并采取相应安全策略。

实施例二

本实施例是对实施例一的进一步拓展。

在步骤s2中,分别对所述第一字段的数据和第二字段的数据进行分块单向散列计算,得到第一散列值和第二散列值。

本实施例以第一字段的数据为例进行说明。如图3所示,根据预设的块大小,将第一字段的数据划分为多个数据块;例如每块的大小为4k,假设.text数据的大小有1m,则可以分成256块;若最后的数据不足4k,比如最后一块只有2k,也按一块来算。

然后计算得到第一个数据块的散列值;对接下去的每个数据块,对当前数据块和上一个数据块的散列值进行单向散列计算,得到当前数据块的散列值;即第i个数据块的散列值是由第i个数据块的数据和第i-1个数据块的散列值进行单向安全散列计算得到的,直到计算得到最后一个数据块的散列值。根据最后一个数据块的散列值,得到第一散列值,即将最后一个数据块的散列值作为第一字段的数据的散列值。

上述步骤可如图4所示,假设第一字段的数据总共划分为n块,其中单向安全散列函数的输入为:一块.text数据块(按顺序进行,比如这次是数据块i,下次就是数据块i+1)+上一次函数计算输出的散列值(第一次从第一块开始计算.text块时,没有这一项输入)。每次计算得到的散列值则作为下一次函数的一个输入值,直到完成所有n块的.text块的计算得到最终的.text整个数据块的散列值。

对于步骤s9-s10中,对获取的第一字段的数据也进行分块单向散列计算,得到第三散列值;即安全操作系统需要启动一个定时器在每个预设的时间间隔t到来时,使用上述的分块单向散列算法计算.text数据的散列值。然后将计算得到的.text数据的散列值与安全存储区域中的.text数据的散列值进行对比,若一致,则非安全内核对应的.text数据没有被篡改,否则对应内存的数据就被篡改了需要做出相关安全决策,比如重启普通操作系统。

第二字段的数据,即.rodata数据以同样的方式进行散列计算和校验确认。

进一步地,在每个时间间隔t到来之后,串行进行,先进行.text数据的校验,再进行.rodata数据的校验;可以不需要再额外分配定时器,且如果其中一个校验失败,另外一个不需要再进行校验,从而简化设计。

本实施例通过分块单向散列计算得到散列值,进一步提高了校验的准确性,从而提高了内核防护的安全性。

实施例三

本实施例是对应上述实施例的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现以下步骤:

获取内核文件中的第一字段的数据和第二字段的数据,所述第一字段为.text字段,所述第二字段为.rodata字段;

分别对所述第一字段的数据和第二字段的数据进行单向散列计算,得到第一散列值和第二散列值;

安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域;

普通操作系统将内核文件解压到普通内存区域,并将第一字段的数据和第二字段的数据在普通内存区域中的起始地址以及对应的长度发送至安全操作系统;

安全操作系统根据所述起始地址和对应的长度,定时从普通内存区域获取第一字段的数据和第二字段的数据,并根据安全内存区域中的第一散列值和第二散列值,分别对所获取的第一字段的数据和第二字段的数据进行完整性校验。

进一步地,所述“安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域”之前,进一步包括:

使用可信启动私钥对所述第一散列值和第二散列值进行签名,并将签名得到的数字签名与所述第一散列值和第二散列值进行组合,得到组合数据。

进一步地,所述“安全操作系统运行后,将第一散列值和第二散列值分别存储至安全内存区域”具体为:

安全操作系统运行后,将所述组合数据存储至安全内存区域;

使用可信启动公钥对所述组合数据进行签名验证;

若验证通过,则将第一散列值和第二散列值分别存储至安全内存区域。

进一步地,对所述第一字段的数据进行单向散列计算,得到第一散列值的步骤具体为:

根据预设的块大小,将第一字段的数据划分为多个数据块;

计算得到第一个数据块的散列值;

对当前数据块和上一个数据块的散列值进行单向散列计算,得到当前数据块的散列值;

根据最后一个数据块的散列值,得到第一散列值。

进一步地,根据安全内存区域中的第一散列值,对所获取的第一字段的数据进行完整性校验的步骤具体为:

根据预设的块大小,将所获取的第一字段的数据划分为多个数据块;

计算得到第一个数据块的散列值;

对当前数据块和上一个数据块的散列值进行单向散列计算,得到当前数据块的散列值;

根据最后一个数据的散列值,得到第三散列值;

将所述第三散列值与安全存储区域中的第一散列值进行对比;

若一致,则判定普通内存区域中的第一字段的数据安全;

若不一致,则执行预设的安全决策。

综上所述,本发明提供的一种内核运行时的完整性校验方法及计算机可读存储介质,先计算得到内核数据的散列值并存储至安全内存区域,然后在内核运行时,定时从普通内存区域中获取内存数据,并根据安全内存区域中的散列值对其进行校验,从而实现对运行后的内核代码段和可读数据段进行完整性校验的目的,有效在内核运行之后,对内核数据进行防护。本发明在基于trustzone的硬件架构基础上和在静态完整性校验的基础上,进一步对运行后的内核代码段和可读数据段进行完整性校验,确保在内核相应区域被篡改时可以及时发现并采取相应安全策略。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

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