一种动态度量方法

文档序号:6464828阅读:298来源:国知局
专利名称:一种动态度量方法
技术领域
本发明涉及一种动态度量方法,更具体地说, 一种在计算平台上利用可信安全芯片对 系统中运行的实体进行动态度量以保证运行时安全的方法,主要基于信息安全可信计算领 域内的动态完整性度量模块(Dynamic Integity Measurement Module,简称DIMM),属于信
息安全领域。
背景技术
信息安全,通常包括三个因素,保密性,完整性,可用性。现今的计算机系统,相对 于系统的保密性,完整性的保护显得稍微复杂。最为严格的完整性模型Biba模型的两条主 要规则"不能向下读和执行,不能向上写"与可用性和保密性都有很强的冲突,尤其是可用 性,在各种实际强制访问控制的实现中,效率和可用性都很悲观,所以, 一般在现实的系 统中,都不倾向于使用完全的Biba模型,基于这些方面的考虑,出现了度量方法。
度量的方法,是一个较新的完整性保护方法,原理是在某些时刻,对可疑的文件进行 度量,即读取文件的某些信息(比如散列值的信息),将它的值与事先记录的标准值进行 比较,如果相同,则文件未被篡改,反之则被恶意修改了。度量方法不仅其本身是一种关 于完整性的安全机制,还为其他的安全机制如访问控制,远程证明等等提供最基本的安全 数据。在可信计算TC (trustcomputing)概念提出和推广之后,度量作为可信计算的核心 内容之一,意义得到了进一步的加强。
1999年TCPA (Trusted Computing Platform Alliance,后改名为TCG)提出了可信计算 的思想用以保护计算终端的安全,其主要是以硬件安全为基础,将TPM芯片作为信任根, 依赖TPM提供的各种功能来保护系统平台的安全。TCG制定颁发的TPM规范对TPM的功能 给出了明确的阐述,TPM本身提供了安全随机数产生器、非易失防篡改存储、密钥产生算 法、RSA加解密密码函数以及hash函数SHA-l等。TPM拥有一系列160位的平台配置寄存器 PCR, PCR本身只存在两种写操作, 一种是重置(reset)操作, 一种是扩展(extend)操作。 其中重置操作是将PCR置为一默认值,而扩展操作可以表示为下列形式(其中H是TPM提 供的SHA-1算法,PCRNew表示扩展后PCR的值,PCRow表示扩展前PCR的值,x表示扩展的值)PCRNew=TPM—Extend(PCRow,x)=H(PCRoid||x)由于这个操作不可逆转,所以,每一 个PCR的值,都代表一个唯一的hash序列。因此在TPM的支持下,可以使用度量的办法对 系统的完整性进行保护——即将系统中的文件做散列值存储在PCR中,多个文件时可以用 extend的操作存储在一个PCR中。这样当文件遭受非法篡改的时候,将不能通过PCR值的验证。
目前,各个研究机构已经开发出了一些基于可信计算技术的各种完整性度量系统,例 如IBM研究院设计和实现的完整性度量架构IMA和PRIMA,或者半动态的度量(如CoPilot 系统),但是这些系统基本上都属于静态度量,这些系统在和完整性度量最重要的场合—— 远程证明相关的场合都不可避免的存在度量时间不及时的缺陷。
平台度量首先要考虑的是度量时间,度量按照度量时间点可以分为静态度量和动态度 量。静态度量是进程等被度量实体在执行时刻或者事先某个约定的时刻被度量,然后在实 施安全规则处进行验证;动态度量则是在进程等实体在执行当中的任意时刻被度量和验 证。前者设计简单,但是不得不面临度量和验证时间隔攻击(TOU-TOC, time of use-time of check)的问题,也即是度量时刻和使用时刻度量对象发生改变的问题;而后者需要与操 作系统相关联,相对复杂。接着需要考虑度量系统的自身的安全性问题,这取决于度量系 统运行在计算机系统哪个层次上。其中一个办法是将度量子系统融合到操作系统中,比如 linux的内核中,这种方法的缺点是缺乏灵活性,操作系统的升级会导致整个安全架构的失 效。另一个方法是使用独立的安全模块,然而这个方法需要着重考虑模块本身的安全问题。

发明内容
针对上述问题,本发明的目的在于提供一种基于TPM的动态度量方法,构建以动态完 整性度量模块DIMM为基础的动态度量系统,该方法在可信计算平台下能对系统中运行的 实体进行实时动态度量,从而保证系统完整性,在实时性和可信赖性要求高的网络通讯应 用方面有很大的实用价值。 动态度量系统的结构
本发明方法对应的动态度量系统由TPM、度量代理MA(Measurement Agent)、内核度量 模块KMM(Kernel Measurement Module)、度量对象构成,系统的体系结构如图l, DIMM包 含度量代理和内核度量模块,并且充分利用了系统固件TPM。
度量代理功能比较简单,主要起代理作用,即接收用户空间的请求,并对请求进行解
析和格式化,同时也屏蔽了对用户空间的透明度,完成一些内核中不方便完成的工作。
内核度量模块主要有三部分功能, 一是与度量代理通信,包括接受请求,发送度量结 果,二是得到度量对象的信息,包括对象各种信息,并生产散列值,三是对TPM进行调用。
TPM芯片包括了很多安全功能,本发明主要是利用其内建的散列模块和签名模块,散 列模块用来产生度量结果中的hash值,签名模块将对这些度量结果进行签名保证其安全性。
图中下行的箭头表示数据请求数据流,上行的箭头表示处理过的数据流。请求数据流 由用户空间产生,流经度量代理,到达内核度量模块,然后交由TPM芯片,在各级都进行 处理。处理过的数据流沿原路逆向返回。
本发明实现的动态完整性度量模块具有如下四方面的特点, 一、动态实时的对目标实 体进行完整性度量;二、 DIMM安全可靠的与外界通信;三、获取丰富的目标实体的状态 信息;四、高效率的度量目标实体,度量冗余信息少,系统性能影响小,验证方便。
动态完整性模块能够对系统运行的目标实体的状态进行动态度量和证明,它提供如下 功能1) DIMM能访问目标实体的实时映像,度量其状态;2) DIMM提供给用户数据交 互功能,用户能自由指定需要关注的待度量目标实体;3) DIMM提供TPM操作功能,对数 据进行散列、签名等等。DIMM—部分运行于操作系统内核空间,另一部分运行于用户空 间。目标实体镜像位于不同进程的地址空间,而进程的地址空间对于用户空间是不可见的, 要进行数据的分析和操作,不可能在用户空间完成的,因此DIMM—部分必须运行于内核 空间。而DIMM在内核运行的同时,还要与用户空间进行双向数据交互,例如需要获得用 户希望度量的进程或者文件名,因此要求DIMM存在于用户空间。
度量流程核心步骤
度量流程的核心步骤包括如下几步
1、 度量请求的接收;度量代理接收本地用户或者远程挑战发出度量请求,度量请求包
括待度量的目标实体的名称。
2、 度量请求的解析;度量代理对接受的请求进行各种处理,使之符合内核度量模块的 格式要求。
3、 度量请求的受理;内核度量模块接收度量代理传给内核的格式化过的度量请求。
4、 度量结果的产生;内核度量模块处理度量请求,并调用TPM芯片,产生度量结果。
5、 度量结果的传回;内核度量模块将度量结果传给度量代理。
6、 度量结果的发布;度量代理将结果传给发出请求的本地用户或者远程挑战。
其中步骤l、 2、 3、 6由度量代理MA完成,步骤3、 4、 5由内核度量模块KMM完成, 下面按照这两部分分类详细描述 度量代理的工作流程
第1步,接收某个用户程序的度量请求(可能来源于远端程序的挑战——回应的握手模 式中的请求,也可能来自于本地的安全需求)。度量的目标实体是系统中活动的实体,比 如进程,内核模块等等,体现了动态的原则和意义。
第2步,格式化接收到的度量请求。用户不光能指定度量的目标实体,还可以加上一些 参数提出某些特别的要求,度量代理解析这些参数,剥离出目标实体,进行格式化,重新 组装成和KMM约定好的格式。
第3步,把请求发给内核度量模块(因为相关功能都在KMM中实现,所以发送请求只 需要使用基本的IO操作打开、读写KMM生产的虚拟文件)。
第4步,接收度量信息。内核空间的KMM处理完度量请求后,会将度量结果通过虚拟 文件系统发给度量代理,所以代理需要把接受到的度量信息组装成用户要求的格式,发送 回远方(如果是远程证明的挑战)或者本地(如果只是本地的安全需求)。
内核模块KMM架构中大部分功能以及流程
一) 这是将度量结构分成两个部分的结果,如前文所述,在用户态的MA也有相对应 的功能。方法是使用虚拟文件系统机制,即创建一个虚拟文件,在模块插入到内核当中的 时候(可以在计算机启动时自动加载或者在某个特定的需要的时刻)挂载到系统当中,用 户空间和内核的交流,就通过这个接口进行。度量代理需要将度量目标实体发送给内核时, 就调用统一的系统调用写操作的函数(在各种编程语言中,都有封装好的写函数,对它们 进行调用也是一样),按照格式将度量目标实体写到刚才创建的虚拟文件中;KMM将从 这个文件中得到目标实体。度量完成后,得到的度量散列值以及一些其他的安全信息比如 时间戳等等,也是由KMM写入这个文件中,度量代理MA就可以在用户空间读取到这些消 息了。
二) 得到度量对象的信息,包括对象各种信息,并生产散列值。接收到度量代理发送 的度量请求后,内核度量模块开始工作,大致如图2,具体步骤为
第l步检查用户的权限。因为度量服务的特殊性(将对度量对象进行完整性以及一些相 关的安全检查),有可能造成泄密,所以尽量使得度量的权利掌握在少数一些用户手中, 例如在Xen虚拟机中,可以设置为管理域domainO才能进行度量,而在普通的lkmx环境中, 设置为root用户才能进行度量。第2步解析请求中的目标实体的名称,如果对象是内核模块,则跳过下述第3, 4步(地 址转换),从模块链表中找到模块的信息,并直接进行第5步。而如果对象是进程,就在内 核维护的进程链表(系统中会对每一个正在运行的进程生成一些基本的控制信息,并把这 个进程通过名字连接在一个链表中,即内核维护的进程链表)中很方便地找到这个进程, 进而获得进程的句柄(即进程的task结构指针),并且进程的某些控制信息也能为本发明 所获得。
第3步通过进程的句柄找到需要具体度量的目标实体的地址。KMM直接度量的对象包 括进程的输入参数、代码段、数据段、堆栈段等等,这些地址都可以从上述进程句柄(进 程task结构指针)中获得,但是获得的地址是线性地址也就是虚拟地址,由于32位操作系 统中普遍的设计思路是,每个进程都能使用整个3G的进程地址空间,所以进程使用的地址 空间是经过映射的,也就是说,其他进程(比如本发明的这个度量进程)是不能直接访问 的,第4步对这些地址进行处理。首先将它们转换为物理地址,再将这些物理地址的内容映 射到本发明KMM的进程空间中来。
第5步对得到的数据进行处理。若是进程度量则是经过地址转换并映射后的数据,若是 内核模块度量则模块数据无需映射可以直接使用,然后利用可信芯片TPM (trustplatform module)内置的shal执行引擎(SHA-1 Engine),对这些数据进行散列,将得到的hash值 存入TPM的PCR值当中,并复制一份存入准备好的数据结构中。
在一个加载了DIMM的系统中,本发明可以方便的对系统中每一个活动的实体进行度 量,只需要将度量目标提交给度量代理,马上就能得到经由TPM度量的目标当前活动实体 的散列值。在各种完整性证明中,此散列值能够作为目标实体完整性完好或己经损坏的证 据,例如,本地安全证明中,通过将此散列值与标准散列值做对比,就能知道目标实体是 否在运行时遭到攻击乃至篡改;而在远程证明时,远端验证系统能够根据此散列值知道被 验证的系统是否可信,判断下一步该采取何种策略。
和现有技术相比,本发明的优点在于,能够动态而不是静态的对活动的进程进行度量。 以往的度量系统,由于架构上的原因,都属于静态度量的范畴,因而对活动进程这种级别 都难以进行实时的度量,普遍做法是在进程启动的时候对进程所属的文件进行度量,因而 如果进程在运行中被入侵乃至篡改,是没有任何办法的。如果产生进程的文件也被修改, 只能等到下次重新装入时候发现,如果恶意者不修改实际硬盘的文件只修改内存,传统的 静态度量就彻底没有办法了。动态度量系统中则不同,因为可以在任意时间进行度量,而
且度量的内容是当时内存中映像文件,所以能够很好的解决刚才描述的问题。


图1是本发明方法的动态度量系统的架构示意图; 图2是本发明内核度量模块的度量流程示意图。
具体实施例方式
下面结合具体实施方式
对本发明作进一步详细描述
在linux系统中,在用户空间(user space)和内核空间(kernel space)分别构架度量代 理和内核度量模块。
处于用户空间的代理使用linux虚拟文件系统VFS,在系统启动时候建立虚拟文件接口 /proc/dynamic—measurement,使用标准读写接口函数read(), write()函数对虚拟文件进行操 作(在C语言中可以是被封装过的fread(), ^vrite(),考虑到平台的通用性,度量代理也提 供了java的接口)。用户空间的程序可以将度量请求通过调用write函数写入虚拟文件系 统,度量代理将write函数的底层替换为解析函数,对度量请求进行处理后传给内核。内 核处理完后,用户程序调用read函数读取虚拟文件接口,取得度量结果数据。
内核度量模块使用linux的module机制,或者直接编译入内核,视要求而定。在度量 请求进入内核后,内核度量模块接管这个句柄,几个主要函数的功能和顺序如下
通过函数imm—begin()启动内核的度量。通过检査linux内核中进程链表得到度量目标 实体的进程,通过reacLprocess—space()函数取得目标进程空间中的数据,通过 compute_p—hash()函数得到散列值,通过get—timestamp()函数取得当时的时间戳。
这几个函数结束的时候都会向一个全局变量数据结构measurement—output中填充数 据,将需要得到的程序hash,参数,参数hash,时间戳等储存在数据结构相应处。 measurement—output结构随后被写入虚拟文件/proc/dynamic—measurement中,度量步骤实 施完成后,度量代理通过读取虚拟文件结构的内容,得到度量数据,再返回给发出度量请 求的用户。
权利要求
1.一种动态度量方法,其包含如下步骤a)用户设定并发出度量请求,所述度量请求包括待度量的目标实体的名称;b)位于用户空间的度量代理接收并转发该度量请求至位于内核空间的内核度量模块;c)所述内核度量模块调用TPM芯片度量所述目标实体的度量对象并得到度量结果;d)所述度量代理接收并转发该度量结果至用户。
2. 如权利要求l所述的方法,其特征在于,步骤a)所述待度量目标实体包括进程和/或内 核模块。
3. 如权利要求1所述的方法,其特征在于,步骤c)所述度量对象包括所述目标实体的输 入参数、代码段、数据段和/或堆栈段。
4. 如权利要求1或2或3所述的方法,其特征在于,所述目标实体为进程,内核度量模 块通过下述方法度量其度量对象内核度量模块通过进程名称获得所述进程的进程句柄,通过该句柄获得度量对象的虚 拟地址,将该虚拟地址转换为物理地址,再将这些物理地址的内容映射到内核度量模块的 进程空间,内核度量模块调用TPM安全芯片对这些内容进行散列得到度量结果。
5. 如权利要求1所述的方法,其特征在于,所述度量代理和所述内核度量模块之间的信 息传递以虚拟文件作为媒介,所述虚拟文件既可被度量代理读取,也可被内核度量模块读 取。
6. 如权利要求1所述的方法,其特征在于,用户在设定度量请求时,可以自由设定待度 量的目标实体。
7. 如权利要求1或6所述的方法,其特征在于,用户在设定度量请求时,可以自由设定 内核度量模块度量部分或全部度量对象。
8. 如权利要求1所述的方法,其特征在于,度量代理接收度量请求后将度量请求中的信 息格式化成内核度量模块要求的格式,同时度量代理接收度量结果后将度量结果中的信息 格式化成用户要求的格式。
9. 如权利要求1所述的方法,其特征在于,所述度量请求中包括用户信息,内核度量模 块在进行度量前根据所述用户信息检测用户权限,检测通过后进行度量,检测不通过则忽略该度量请求。
10. 如权利要求1所述的方法,其特征在于,所述度量结果还包括TPM芯片对度量对象的 签名信息和时间戳信息。
全文摘要
本发明公开了一种动态度量方法,属于信息安全领域。本发明方法包括下列步骤a)用户设定并发出度量请求,所述度量请求包括待度量的目标实体的名称;b)位于用户空间的度量代理接收并转发该度量请求至位于内核空间的内核度量模块;c)所述内核度量模块调用TPM芯片度量所述目标实体的度量对象并得到度量结果;d)所述度量代理接收并转发该度量结果至用户。和现有技术相比,本发明的优点在于,能够动态而不是静态的对活动的进程进行度量。本发明可用于信息安全领域实现信息安全。
文档编号G06F21/00GK101344904SQ20081011928
公开日2009年1月14日 申请日期2008年9月2日 优先权日2008年9月2日
发明者于爱民, 冯登国, 刘孜文 申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1