基于行为的软件可信度量***及方法
技术领域
本发明涉及可信计算方法,尤指一种基于预期行为和实际行为比较的基于行为的软件可信度量***及方法。
背景技术
可信计算(Trusted Computing,TC)是一项由可信计算组织(Trusted Computing Group,TCG,前称为TCPA)推动和开发的技术,TCG定义可信为:一个实体是可信的,如果它的行为总是以预期的方式达到预期的目标。可信计算的主要思想是在硬件平台上引入安全芯片(可信平台模块)来提高终端***的安全性,也就是说在每个微机终端植入一个信任根,从信任根开始到硬件平台,到操作***内核层,再到应用层,构建信任关系,一级认证一级,一级信任一级,并以此为基础,扩大到网络上,建立相应的信任链,从而确保整个网络的可信。即信任链的扩展方法是“边度量,边传递”。可见,可信度量是可信计算的基础。
TCG组织自成立以来,制定并公布了一系列规范,其中,规范架构概览对完整性度量、存储和报告进行了详细的描述。规范中给出的完整性度量是指获得影响平台完整性(可信性)的平台属性的度量值,并把度量值的摘要存入平台配置寄存器中的这样一个过程。完整性度量、存储和报告三者是分不开的,完整性报告是指对外证明记录在平台配置寄存器中的完整性度量值的过程。完整性度量、存储和报告的观念是,允许平台进入任何可能的状态,包括不受欢迎的状态和不安全的状态,但是,不允许平台谎报它所处的状态。可以用另外一个独立的过程来评估完整性状态并确定合理的响应。
TCM(Trusted Cryptography Module)是我国依照TPM标准制造的可信芯片,为了规范企业厂商对TCM的使用,2007年底,由国家密码管理局颁布了《可信计算密码支撑平台功能与接口规范》,主要以国内密码算法为基础,结合国内安全需求与产业市场,借鉴国际先进的可信计算技术框架与技术理念并自主创新。规范中指出,完整性度量与存储是指计算部件的度量值,记录该事件到事件日志,并把度量值记入可信密码模块内相应的平台配置寄存器(PCR)中。
无论是TCG规范还是我国的可信计算规范,都只描述了***启动期间的可信度量方法,即从***加电开始到操作***启动之前静态代码和数据的度量。于是,一些企业和科研院所开始探索操作***及其之上的软件可信度量方法和技术。
2003年,IBM根据TCG规范,提出了完整性度量框架IMA(Integrity Measurement Architecture)。IMA是一个支持Linux的执行架构,该框架的目的是为了解决分布式应用之间——尤其是在分布式运行时间环境当中,建立信任关系的难题。该可信平台的工作过程是:***启动后,把控制权交给一个不变基;不变基将度量BIOS的完整性,通过计算一个SHA1确保其内容的哈希值,把结果保存在TPM中;接下来度量下一个启动程序的代码,同样计算哈希值,确保其可信;这个过程是个递归过程,以保证***是步步为营的启动起来的。
2005年,卡内基梅隆大学和IBM沃森研究中心提出了为分布式***建立可信环境的BIND(Binding Instruction and Data)框架。BIND把代码的完整性证明细化为关键代码段的完整性证明,并为关键代码段产生的每一组数据生成一个认证器。认证器附着到相应的数据上,从而实现关键代码段的完整性证明与其所产生的输出数据的绑定。因此,BIND可以通过关键代码段以及其输入数据的完整性证明来达到***完整性证明的目的。但是,由于***由程序员自己决定度量点并在度量点***BIND提供的hook函数接口,虽然提高了度量精度,却增加了程序员编写程序的负担。而且它无法应对***运行时的许多攻击。
2006年,宾夕法尼亚州立大学的耶格(T.Jaeger)、IBM沃森研究中心的塞勒和加州大学伯克利分校的山克(U.Shankar)提出了基于信息流的PRIMA(Policy-Reduced Integrity Measurement Architecture)完整性度量体系结构,并研究了SE-Linux为基础的原型***。PRIMA项目的研究工作在IMA研究成果的基础上对IMA的一个扩展和增强,引入CW-Lite信息流模型来处理组件依赖关系,在基于信息流的***完整性动态度量方面进行了卓有成效的尝试。PRIMA的实现思路如下:在***启动时,MAC策略和可信的主体集被度量。通过这些度量,远程方能够构建一个信息流图。远程方能够验证所有来自于可信主体(该主体在运行时间被验证运行着可信的代码)或具有经过过滤器接口过滤过的来自于非可信主体所有流行目标应用和可信应用信息。而后,度量运行时间的信息。根据信息流图,仅需要度量所需要依赖的代码。其他代码都假定为不可信的。而后还需要度量在加载代码和加载该代码主体之间的映射,从而远程方能够验证该主体执行了预期的代码。PRIMA仅仅要求附加地度量MAC策略和在加载时间的可信主体,以及代码和MAC策略主体之间的匹配问题,由于不再需要度量不可信的主体,从而就可以减少一部分度量值。PRIMA结构充分体现了安全操作***对于可信应用的支持上的典型工作。
马里兰大学提出的Copilot运用一个独立于主机的硬件协处理器来实现对主机预定内存区域的完整性度量.CoPilot的缺点在于设计实现复杂,需要进行多次对内存的映射操作,而且只能先设定度量周期,如果其度量周期长于进程完整性被损坏的时间,也可能发现不了这样的破坏。
LKIM以及后继的工作针对***内核进行度量,它在静态度量的基础上,定义一系列变量表示***的状态,这些变量值发生变化的时候,重新进行度量,从而实现动态度量的目的。但是它强调的静态度量加上状态变量不能表示真正的动态的度量,而且它度量针对的是Linux内核,对普通的进程无能为力。
国内,人民大学提出一个基于TPM安全芯片的进程运行时完整性度量的体系结构及其原型***Patos-RIP,用以度量进程从创建到死亡的整个生命周期中的完整性。
北京工业大学从软件行为学的角度,给出了一个可信动态度量及证明模型。该模型基于拓展行为迹的度量机制和行为度量信息基的验证机制,提出了若干用于可信计算行为动态度量的定理,进而给出对软件行为可信的判定方法和模型。
可信度量经过10年的研究,从多个角度对可信度量进行探索,有基于代码的度量(BIND)、基于角色的度量(PRIMA)、基于信息流的度量(PRIMA)、基于周期的度量(Copilot)、基于进程的度量(Patos-RIP)、基于内存的度量、基于软件行为的度量等等。然而,TCG所提出的可信,尽管提出了行为可预期的超前概念,但其核心思想仍然局限在如何验证程序代码是由可信赖的供应商提供或者由可信赖的管理者来安装、维护。对于上层应用软件在运行过程中的动态可信度量,尚没有比较成熟的度量模型和解决方案。
因此,本发明遵循TCG的可信思想,不仅对软件的加载代码进行验证,还将为软件建立预期行为树和实际行为预期树,在验证预期行为树可行的基础上,通过比较软件的预期和实际的行为轨迹、行为发生时的环境上下文、环境参数等,来实现对软件的可信度量。
发明内容
本发明的目的是提出一种基于行为的软件可信度量方法,对软件预期行为的合理性、软件加载之前代码的完整性、软件运行过程中实际行为与预期行为的偏差进行度量,以保证软件生命周期的可信,从而达到保护整个信息***的可信的目标。
为了实现上述目的,一种基于行为的软件可信度量***,其特征在于:所述的应用***包括以下部分:基础层,由基于可信计算芯片硬件的可信操作***组成,是一个可信计算平台,为核心层的可信度量和可信判定提供基础支撑;核心层,由可信度量和可信判定两部分组成,其中,可信度量部分负责收集信息,由完整性度量模块、预期行为获取模块、实际行为获取模块组成;可信判定部分负责对可信度量部分得到的信息按照判定规则进行判定,由完整性验证模块、预期行为验证模块、行为对比模块组成;应用层,负责软件装载和运行。
软件包括源程序软件和可执行程序软件。
软件供应方是指软件供应商,或者是指基于可信计算芯片的可信计算平台。
一种使用上述***的基于行为的软件可信度量方法,其包括以下步骤:
一、从软件供应方获得软件;
二、在软件装载之前,所述完整性验证模块借助完整性度量模块度量软件内容的完整性;
三、完整性检查通过后,所述预期行为获取模块获取软件的预期行为;
四、所述预期行为验证模块验证软件预期行为的合理性;
五、安装软件,运行软件;
六、软件运行过程中,所述实际行为获取模块获取软件的实际行为;
七、所述行为对比模块比较预期行为和实际行为的差异,判断软件的可信性。
在所述步骤三中:预期行为获取模块使用反汇编静态分析技术在不运行软件的情况下分析软件的可执行程序代码,对程序的可执行语句进行控制流分析,并提取程序可达的所有执行路径,确定程序的控制结构,从而得到软件的预期行为。
在所述步骤三中,得到软件的预期行为的具体操作步骤为:①对软件的可执行程序利用反汇编技术将可执行程序转换为汇编语言源程序;②扫描汇编语言源程序,找到所有***调用指令,并把每个***调用指令之间的所有指令记录为指令块IB;③记录***调用的名称SysCallName;④记录***调用上下文SCC;⑤如果***调用涉及文件调用参数,那么收集文件名称、可执行文件、***文件、配置文件、脚本文件、数据文件、大小、更新日期、操作类型、文件完整性的哈希值;⑥用控制流图对分支指令进行形式化表示;⑦建立预期行为树。
在所述步骤六中:运用钩子机制,监视软件运行过程中***调用事件的发生,记录***调用序列,以监视软件的实际运行状态以及提取实际行为。
在所述步骤二中,软件完整性验证是指验证软件的代码、文件、数据等没有被篡改过。
在所述步骤七中,对比规则是:①实际行为树在每添加一个节点后,与预期行为树相比,该树仍然是预期行为树的一颗子树;②把实际行为树的新增边的信息与预期行为树的对应边信息进行比较,分别判断***它们的***调用名称SysCallName、***上下文值SCCV和文件完整性哈希值是否相等。如果满足这两个规则,则说明软件在按照预期行为方式实现预期目标,否则软件存在安全隐患,报告给可信操作***,阻止其运行并回退到安全状态。
在所述步骤四中,行为合理性包括行为可行性、行为之间的依赖关系满足性。
与现有技术相比,本发明的有益效果是:在软件加载到***之前,不仅验证了代码和数据的完整性,还验证了软件预期行为的合理性,并且在软件加载到***之后,通过对比软件的实际行为和已知的预期行为的差异,实现了软件运行期间的动态度量,从而保证了软件是按照“预期行为达到了预期目标”。
附图说明
图1为基于行为的软件可信度量整体架构示意图;
图2为预期行为树示例;
具体实施方式
为使本发明的特征及优点得到更清楚的了解,以下结合附图,作详细说明如下:如图1所示,描述了本发明的可信度量架构示意图,分为3层,最低层是基础层,是可信计算平台,由基于可信计算芯片硬件的可信操作***组成;中间层是核心层,由可信度量和可信判定两部分组成,其中,可信度量部分负责收集信息,可信判定部分负责对可信度量部分得到的信息按照判定规则进行判定;最上层是应用层,负责软件装载和运行。
软件在装载之前,完整性度量模块接收软件供应者提供的TPM/TCM身份密钥并计算软件代码的哈希值(分别采用SHA1算法或MD5算法得到一个120bit的数值),传递给可信判定部分的完整性验证模块。可信计算平台预先保存着一份各个软件供应者的TPM/TCM身份密钥以及它们能够提供的软件代码的哈希值序列表,所以,完整性验证模块的判定规则就是直接在表中查找完整性度量模块获得的TPM/TCM身份密钥和哈希值,如果找到,则表明软件是完整可信的,否则,阻止软件装载。
软件通过完整性验证后,预期行为获取模块使用软件逆向工程技术的静态分析技术在不运行软件的情况下分析软件的可执行程序代码,对程序的可执行语句进行控制流分析,并提取程序可达的所有执行路径,确定程序的控制结构,从而推断软件的预期行为,建立预期行为树。具体步骤是:①对软件的可执行程序进行逆向工程,利用反汇编技术将可执行程序转换为汇编语言源程序(常用的静态分析工具是W32DASM、IDA和HIEW等);②扫描汇编语言源程序,找到所有***调用指令,并把每个***调用指令之间的所有指令记录为指令块IB;③记录***调用的名称SysCallName;④记录***调用上下文SCC,它是指一个函数调用名称序列<FuncName1,FuncName2,FuncName3,……>,表示FuncName1调用FuncName2,FuncName2调用FuncName3……,***调用上下文值SCCV的计算公式是SCCV=Hash(SCC);⑤如果***调用涉及文件调用参数,那么收集文件名称、类型(可执行文件、***文件、配置文件、脚本文件、数据文件)、属性(大小、更新日期)、操作类型(读、写)、文件完整性的哈希值FIH;⑥用控制流图对分支指令进行形式化表示:CFG=<V,E>,其中V={vi|vi对应指令块IBi},E={<vi,vj>|指令块IBi到IBj之间存在控制权转移};⑦建立预期行为树,示例如图2所示,每条边的信息表示EI=<SysCallName,SCCV,FIH>。预期行为树的信息存储和报告通过TPM/TCM的可信存储和报告机制实现。预期行为树可具体存储成一个堆栈或数组。
预期行为验证模块负责分析预期行为获取模块收集的信息,以判定软件的预期行为是否合理、合法、可行。具体地实施是根据软件来源的TPM/TCM信息和EI,结合信息***自身的访问控制等安全策略,验证软件是否有权进行***调用,是否有权访问和执行***文件。如果通过验证,则软件可装载到信息***当中,否则,拒绝软件装载。
接下来,软件将装载到信息***当中,开始动态运行。我们运用钩子机制,监视软件运行过程中***调用事件的发生,记录***调用序列。以源代码开放的Linux操作***为例,Linux安全模块LSM(Linux Security Module)提供了一系列安全相关的钩子函数实现。可采用程序植入的方式,通过改写与行为监控相关的钩子函数,实现对软件运行过程中所发出的***调用的动态拦截,以监视软件的实际运行状态以及提取实际行为特征。当有***调用发生时,事件感知器ES会被触发,经事件适配器EA识别后,由事件分发器ED启动方法集MS中相应的特征提取方法去提取当前软件***调用行为的名称SysCallName、***调用上下文SCC以及被调用文件的名称、类型、属性、操作类型(读、写)、文件完整性的哈希值FIH,然后计算出SCCH,类似预期行为树的建立过程,建立实际行为树,再经TPM进行完整性保护之后上报给行为对比模块。
行为对比模块负责对比实际行为与预期行为的差异。对比规则是:①实际行为树在每添加一个节点后,与预期行为树相比,该树仍然是预期行为树的一颗子树;②把实际行为树的新增边的信息与预期行为树的对应边信息进行比较,分别判断***它们的***调用名称SysCallName、***上下文值SCCV和文件完整性哈希值是否相等。如果满足这两个规则,则说明软件在按照预期行为方式实现预期目标,否则软件存在安全隐患,报告给可信操作***,阻止其运行并回退到安全状态。
以上所述的实例对本发明的各个部分的实现方式作了详细的说明,但是本发明的具体实现形式并不局限于此,对于本技术领域的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。