一种基于可信芯片的动态完整性保护方法

文档序号:6399407阅读:706来源:国知局
专利名称:一种基于可信芯片的动态完整性保护方法
技术领域
本发明涉及信息安全领域,尤其涉及一种基于可信芯片的动态完整性保护方法。
背景技术
随着计算机技术的发展,计算机系统的安全问题一直是人们的关注点。尤其是计算机系统的代码或数据可能遭到远程攻击者的非法修改。传统的防火墙方式,杀毒软件以及口令方式等并不能从根本上保护计算机系统的完整性。国际上,可信计算组织(TCG)通过在主板上嵌入一块可信平台模块TPM,并利用该芯片在系统启动时通过层层度量的方法来保证启动起来的系统是安全可信的。国内也制定了可信计算的标准《可信计算密码支撑平台功能与接口规范》,通过在主板上嵌入有自己核心密码算法的可信密码模块TCM,可以用来实现系统的可信引导。但这种可信引导的方法只度量BI OS,Boo 11 oader,内核,并没有度量内核模块以及可执行程序。完整性度量架构(Integrity Measurement Architecture) IMA将度量机制扩展到应用层。它通过在Linux中插入钩子点的方法可以度量可执行文件,库文件,内核模块。当这些文件被加载到内存时,IMA会计算它们的哈希值,将得到的结果存储到完整性度量列表ML中,并扩展到TPM的平台配置寄存器PCR中。ML以及PCR的值可以用来远程证明系统上应用程序的完整性。其中PCR用来检测ML是否遭到了篡改,而ML则与远程进行验证的机器上维护的应用程序的标准哈希值做对比,一旦不一致便可以发现应用程序的完整性遭到了破坏。PCR可以用来度量哈希值固定的可执行程序, 却不适合度量动态变化的文件。比如系统配置文件和安全策略文件。对于系统配置文件来说,用户会随着系统软件栈的变化而对系统配置进行修改更新,使系统配置文件没有唯一的可以用来验证完整性的标准哈希值。比较典型的系统配置文件是规定系统启动时开启哪些服务的文件。对于安全策略来说,用户可能对现有的安全策略进行修改或者用户自己定义一个完全新的安全策略。因此安全策略文件也没有一个唯一的标准哈希值可以用来验证它的完整性。比较典型的有Linux系统中实施强制访问控制机制的SELinux策略文件。这类变化的文件不适合于用PCR进行保护,而这类文件的安全性很重要。如果攻击者非法地修改系统配置或者安全策略文件,就有可能使系统中的服务挂掉或者安全机制失效。

发明内容
本发明提出一种基于可信芯片的动态完整性保护方案,可以动态地度量经常变化的系统配置或安全策略。我们的动态完整性保护方案可以区分系统配置或安全策略是被用户合法更新了还是被攻击者非法地修改了。为了便于检测一个动态变化的文件是否被修改,我们将它的哈希值存储到TCM芯片的非易失性存储区NV里,作为度量的基准。NV存储区里的数据不会随着系统的关闭而消失,因此便于基准值的存储以及比较。为了区分合法用户更新这类文件以及攻击者非法地对它们修改,我们通过设置口令的方式来设置NV区域的写权限。即每次动态变化的文件被更新后,合法用户有权限来更新NV存储区的基准,而非法用户则没有该权限。为了及时的保护系统的安全,我们采用加载时度量以及验证的方法。即这类文件在被加载到内存时,IMA会计算它们的哈希值并从NV存储区里读出对应的基准值进行比较。如果一致,则说明它们是可信的;否则则说明它们遭到了非法地修改。本发明的技术方案如下:首先在用户态(即用户地址空间)实现一个基准更新程序,用户在更新文件后调用该程序便可以更新NV存储区的基准值,文件包括配置文件和策略文件,还包括其他可以动态变化的文件。该程序需要初始化NV存储区,包括定义NV存储区的索引,大小,设置对NV存储区进行操作的口令。初始化操作进行一次即可。NV只有初始化以后才可以将一个文件的基准值写到NV里面,以后每次调用基准更新程序,只需将NV里面的内容更新。NV存储区的索引用来识别NV,便于验证时找到该NV存储区。NV存储区的大小决定着该NV可以用来存储基准值的个数。NV存储区的索引以及大小信息可以通过调用规范中的接口来实现(现有的接口规范中设定了索引的存储位置、大小等信息)。设置对NV存储区进行操作的口令是为了防止非法用户篡改NV存储区里的基准值,从而旁过验证。本发明将口令的哈希值(共32位)存储到NV的O到31个字节,作为口令的基准。以后每次用户对NV区域进行更新时,其输入的口令的哈希必须与基准一致才能进行相应的操作。其次,为了灵活地度量动态变化的文件,基准更新程序有自己的策略文件,该文件中规定了哪些文件的基准值需要写到NV存储区里。每一行对应一个文件名以及该文件在NV存储区里的索引index,基准更新程序会依次计算它们的哈希值将其作为基准并根据其索引放到对应的区域中。另外为了实现对动态变化的文件的加载时度量以及验证,在内核态(与内核态相对应,内核态指内核地址空间)实现了度量模块以及验证模块。度量模块是基于IMA实现的。目前IMA的度量粒度比较粗,只能度量内核模块、可执行文件、库文件等,而系统配置或者安全策略文件不属于这些范畴,因此IMA不能度量某一个具体的系统配置或安全策略文件。为了实现对它们的加载时度量,本发明在IMA所使用的f ile_mmap钩子函数中添加检查文件名的功能,并在IMA策略文件中添加文件名filename选项的支持,将要度量的文件名赋给filename,这样当文件被加载时,就将加载到内存的文件名与要度量的文件名作对比,如果一致则对其进行度量。验证模块负责从NV区域中读取该文件的基准值(通过接口规范中的读NV的命令可实现对NV进行读操作,根据NV的索引以及要读取的偏移量即可以获得待读取数据。由于读操作NV不会改变NV里面的内容,所以不需设置密码),并与度量模块所度量的结果进行比较,从而判断该文件是否被非法地修改过。对于某个系统配置或安全策略,需要知道其基准在NV区域中的偏移,因此本发明在IMA的策略中添加了索引index选项的支持。对于某个要度量的文件,它在IMA策略中的index与基准更新程序的策略中该文件的索引一致,表示某个系统配置或安全策略文件是NV区域中第几个文件。


图1是本发明基于可信芯片的动态完整性保护方案架构图;图2是NV存储区初始化过程;图3是用户更新基准的过程;图4是完整性度量和验证过程。
具体实施例方式下面结合附图以及在带有TCM芯片的系统上的具体实现来对本发明作进一步的说明,但不以任何方式限制本发明的范围。本发明主要包括下面几个部分,如图1所示,基准更新程序处在用户态,通过TCM驱动可以读写NV存储区的数据。当用户更新文件后可以通过该程序实现NV存储区的基准的更新。度量模块处在内核态,在文件加载到内存时计算该文件的哈希值,并将计算的结果发给验证模块。验证模块通过TCM驱动可以读取TCM中NV存储区该文件相应的基准,然后与度量结果进行比较,并将比较结果发给度量模块。如果一致,则说明该文件完整性是好的,否则则说明该文件遭到了非法地修改。对于基准更新程序的实现,主要利用向TCM设备发送命令和接受响应的函数TddlijransmitData来实现对NV存储区进行初始化,包括定义NV存储区的索引以及大小,以及如何对NV存储区进行读写。该函数直接发送一个TCM命令到TCM设备驱动程序,使TCM执行相应的操作。首先定义了传输数据函数transmit_data(BYTE*buf, int len,BYTE*name)封装了上述函数,其中类型BYTE是的对无符号char类型(字符类型)的宏定义buf和I en代表着向TCM发送的命令的缓冲区的指针以及长度,name代表着命令的名字。下面与TCM进行操作的函数都是基于该函数实现的。在基准更新程序中主要定义了下面几个函数:void tcm_prepare (void):TCM检查函数该函数首先利用Tddli_0pen来打开TCM 设备,然后利用传输数据函数 transmit_data(PARAM(TCM_PhysicalEnable), " TCM_PhysicalEnable")检查TCM设备是否正常。如果正常则可以接着执行后续的操作,不正常则提示用户“TCM设备不正常”,并中止操作。其中PARAM代表着缓冲区以及其长度,定义如下:#def ine PARAM(x) (x), sizeof (x)void tcm_define_nv (int index, int size):定义 NV 函数该函数将 NV 存储区的索引index,以及NV存储区的大小size放到数组TCM_NV_Def ineSpace相应的位置,然后用传输数据函数 transmit_data(PARAM(TCM_NV_DefineSpace), " TCM_NV_DefineSpace")来定义NV存储区域。void tcm_read_nv (BYTE*buf, int offset, int len):读取 NV 函数该函数将要读取的长度Ien放到数组TCM_NV_ReadValue相应的位置,然后利用传输数据函数transmit_data(PARAM(TCM_NV_ReadValue), " TCM_NV_ReadValue")来读取 NV。void tcm_write_nv (BYTE*buf, int offset, int len):写 NV 函数该函数首先定义一个缓冲区BYTE*nv_writebuf,然后将写NV存储区的报头TCM_NV_WriteValue放到该缓冲区的前面,再将该写NV存储区buf放到该缓冲区nv_writebuf的后面,然后利用传输数据函数 transmit_data(nv_writebuf, total_len, " TCM_NV_ffriteValue ")来实现写NV函数,其中total_len代表着报头以及要写入NV区域的长度之和。上述函数中TCM_PhysicalEnable, TCM_NV_DefineSpace, TCM_NV_ReadValue, TCM_NV_ffriteValue 都是定义好的字节数组,用来表示操作TCM芯片时所需要发送的序列值。比如TCM_NV_ReadValue是这样定义的:
权利要求
1.种基于可信芯片的动态完整性保护方法,其步骤为: 1)在用户态设置一基准更新程序,该基准更新程序初始化TCM芯片的NV存储区:定义NV存储区的索引,NV存储区大小,设置NV存储区的操作口令;所述NV存储区用于存储动态变化文件的度量基准;在完整性度量架构IMA的度量策略中增加一文件名filename选项,用来规定该IMA可度量的动态变化文件; 2)用户每次更新动态变化文件后,利用该基准更新程序和设置的操作口令更新该文件在NV存储区的基准; 3)在内核态设置一度量模块和一验证模块;所述度量模块在动态变化文件加载到内存时计算该文件的度量结果,并将度量结果发给所述验证模块;所述验证模块读取NV存储区中该文件的基准,将其与该度量结果进行比较,并将比较结果发给度量模块,如果一致,则所述度量模块判定该文件完整性是好的,否则判定该文件被非法修改。
2.权利要求1所述的 方法,其特征在于所述基准更新程序设有一策略文件,用于设定文件基准需要写到NV存储区里的动态变化文件;该策略文件每一行对应一个文件名以及该文件在NV存储区里的索引;所述基准更新程序依次计算设定的动态变化文件的度量基准,然后根据设定的动态变化文件的索引将其度量基准存储到NV存储区的对应区域中。
3.权利要求2所述的方法,其特征在于在所述完整性度量架构IMA的策略文件中添加一索引选项,用于代表要度量的动态变化文件在NV区域中的序号;其中,对于每一要度量的动态变化文件,其在完整性度量架构IMA策略文件中的索引与基准更新程序的策略文件中该文件对应的索引一致。
4.权利要求1或2或3所述的方法,其特征在于所述基准更新程序包括一向TCM芯片发送命令和接受响应的函数Tddli_TransmitData,采用该函数对NV存储区进行初始化;所述基准更新程序包括一传输数据函数transmit_data(BYTE*buf, int len, BYTE*name),用于封装函数Tddli_TransmitData ;其中类型BYTE是对无符号字符类型的宏定义,buf和Ien代表向TCM发送的命令的缓冲区的指针以及长度,name代表命令的名字。
5.权利要求4所述的方法,其特征在于所述基准更新程序中包括下列函数: TCM检查函数:该函数首先访问TCM芯片,然后利用传输数据函数检查TCM芯片是否正常,如果正常则执行后续的操作,否则中止操作; 定义NV函数:该函数以索引和大小作为输入,利用传输数据函数定义NV存储区域; 读取NV函数:该函数以NV的偏移,读取的长度作为输入,利用传输数据函数来读取NV,将读取的内容放到缓冲区内; 写NV函数:该函数以一个指向缓冲区的指针,缓冲区的大小,以及NV的偏移作为输入,利用传输数据函数来将缓冲区的内容写到NV里面。
6.权利要求5所述的方法,其特征在于所述基准更新程序中包括一文件基准更新函数该函数首先读取一个文件内容到缓冲区,然后计算该缓冲区的哈希值,然后利用写NV函数将其写到NV区域。
7.权利要求2或3所述的方法,其特征在于步骤2)中利用该基准更新程序和设置的操作口令更新该文件在NV存储区的基准的方法为:用户输入设置的操作口令passsword,基准更新程序计算其哈希passwordHash,然后从NV存储区读取出操作口令的基准passwordHashBase与passwordHash进行比较,如果一致,基准更新程序从其策略文件中读取所更新动态变化文件的文件名以及其对应的索引,然后计算该文件的哈希并根据索引将该哈希作为新的基准放到NV存储区相应的位置。
8.权利要求1或2或3所述的方法,其特征在于所述度量基准为动态变化文件的哈希值。
9.权利要求1或2或3所述的方法,其特征在于所述度量模块基于完整性度量架构IMA实现;在完整性度量架构IMA所使用的file_mmap钩子函数中添加检查文件名的功能。
10.权利要求1或2或3所述的方法,其特征在于所述验证模块通过TCM驱动读取NV存储区中该文件相应的基 准。
全文摘要
本发明公开了一种基于可信芯片的动态完整性保护方法。本方法为1)在用户态设置一基准更新程序,用于存储动态变化文件的度量基准;该基准更新程序初始化TCM芯片的NV存储区定义NV存储区的索引、大小和操作口令;2)用户每次更新文件后,利用基准更新程序和操作口令更新该文件在NV存储区的基准;3)在内核态设置一度量模块和一验证模块;度量模块在动态变化文件加载到内存时计算该文件的度量结果,并将度量结果发给验证模块;验证模块读取NV存储区中该文件的基准进行比较,如果一致,则所述度量模块判定该文件完整性是好的,否则判定该文件被非法修改。本发明有效地解决了IMA不能对动态变化的文件进行度量和验证的问题。
文档编号G06F21/57GK103093150SQ20131005276
公开日2013年5月8日 申请日期2013年2月18日 优先权日2013年2月18日
发明者丁保增, 贺也平, 周启明, 武延军, 关贝, 翟翔, 兰书俊 申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1