0 引 言
云平台安全事故的频繁发生不仅影响云平台服务运营,还会导致用户对云平台的不信任。用户数据存储到云计算服务端后,攻击者可能会在租户环境中删除或修改正常用户存储在云上的数据和文件,而云计算服务端的访问行为不能被实时度量以判断用户数据是否发生异常。因此需要检测云平台的行为是否可信,尤其是需检测并向用户证明云平台对用户文件访问行为的安全性,使得用户相信其存储在云平台的资源信息具有安全保证。
远程证明可以将用户和传统平台的身份及平台软硬件配置信息报告给本地或者远端的验证者,使其可以对平台的基本信息及其真实性进行验证。远程证明是构建可信网络的核心,主要功能是平台身份证明和平台状态证明。在平台身份远程证明方面,Brickell等
[1]提出直接匿名证明方案DAA(direct anonymous attestation),实现了匿名方式下的远程证明;张严等
[2]建立了基于云计算的匿名证明方案,实现用户对云平台的认证。在平台状态远程证明方面,最初由可信计算组织(trusted computing group, TCG)提出并由IBM实现了基于二进制的远程证明,不过由于二进制方法易将平台配置暴露,研究者们随后针对云端虚拟机平台提出了基于属性的远程证明方法
[3]。Goldman等
[4]提出了一种虚拟化环境下可扩展的完整性监控器模型。针对云计算服务的客户端无法验证其数据和计算的机密性以及完整性,Santos等
[5]提出了一种可信云计算平台(trusted cloud computing platform,TCCP)的设计方案。TCCP使基础设施即服务(infrastructure as a service, IaaS)的提供者能够提供一个封闭的安全执行环境,以保证客户虚拟机的安全执行,并允许用户在启动虚拟机之前要求IaaS提供商远程证明其服务是否安全。不过在TCCP中,仍存在可信协调者(trusted coordinator,TC)负担过重、节点匿名性和平台配置信息无法保证的缺点,因此Yang等
[6]提出了一种基于属性证书的匿名方案。该方案通过基于属性证书的可信环签名,实现了计算节点的匿名性和平台配置信息的可信验证。文献[
7]提出了一种云计算环境下基于用户策略的动态远程证明方案,可根据用户定义的策略来确定完整性检查的复杂性和执行频率,对当前应用程序运行时的完整性状态进行动态证明。Kong等
[8]提出了一种基于关注点的动态远程证明模型。该模型能够验证软件的动态行为,将对所有加载模块进行度量验证的体系架构转换为只对基本计算环境、动态可信监控模块和请求服务软件模块进行度量验证的架构。荣星等
[9]提出了一种改进的基于非平衡散列树的云平台远程证明方案,以验证云服务的可信性。刘明达等
[10]针对当前远程证明模型仅面向具有中心的网络,存在网关中心化、决策单点化的问题,提出了基于区块链的远程证明模型, 解决了去中心分布式网络环境中计算节点无法进行远程证明的问题。Carpent等
[11]针对远程证明发生前或发生时可以擦除后再重新定位自身以避免检测的恶意软件,提出一种轻量级的能够随机度量的远程证明方案,该方案对内存的度量是随机的并且度量序列是秘密的,恶意软件即使可以逃避单次远程证明实例的检测,但也无法避免最终的检测。
虽然研究者们提出了多种适用于云环境的远程证明方案,但是如何确保云中数据处理行为可预期、可验证的问题仍未解决,数据存储到云计算服务端后,用户无法感知和验证数据文件访问行为及数据所处环境的安全,无法判断云计算服务端行为是否存在异常。针对上述问题,本文将基于系统依赖图(system dependence graph,SDG)
[12]研究面向数据处理行为的可信度量方法,提出云计算环境下基于SDG的远程证明方案,使得用户能够对系统数据处理行为的安全性进行验证,及时了解云上数据的安全情况,从而判断云平台是否可信。
1 本文方案
本节首先介绍方案中所涉及的基本定义,然后对基于SDG的行为度量机制进行解释说明,最后介绍对此证明机制进行扩展后的远程证明架构。
1.1 基本定义及证明机制
定义1 程序依赖图(program dependence graph, PDG)是一个有向图,用二元组表示,是程序中所有语句对应的节点集合,含语句节点和参数节点;边集,表示程序各部分之间的依赖关系,其中,表示程序中所有语句之间的控制依赖关系,表示数据之间的依赖关系。PDG由控制流图、控制依赖图(control dependence graph, CDG)和数据依赖图(data dependence graph, DDG)组成。
定义2 程序与程序之间的依赖关系:定义为程序集合,则表示程序与程序之间具有类型的依赖关系,包括控制依赖和数据依赖关系。
定义3 程序与文件之间的依赖关系:定义为文件集合,则表示程序与文件之间具有类型的依赖关系,包括预处理依赖、函数依赖和全局变量依赖关系。
定义4 系统依赖图(SDG):由程序内依赖关系PDG、程序间依赖关系、程序与文件间依赖关系所组成的集合。本文中SDG是一个有向图,可用二元组来表示。其中,是对应语句的节点集合。语句节点可以是函数调用、变量赋值、选择判断等程序体中的语句。另外,参数节点又可分为输入参数节点和输出参数节点。可用formal in、formal out、actual in和actual out 4种类型表示。边集,表示系统内各部分之间的依赖关系,其中,表示程序间的依赖关系;表示程序与文件之间的依赖关系。
基于以上定义,下面介绍本文方案的证明机制。本文采用依赖图的方法构造云计算服务端程序的SDG,并提出基于SDG的远程证明方案。在实际应用中,一个程序往往通过多个过程相互调用,以实现其功能,因此可采用SDG表示具有多个过程的程序的PDG
[13]。本文中目标程序的SDG可分解为控制依赖子图(control dependence subgraph, CDS)和数据依赖子图(data dependence subgraph, DDS)。CDS由节点和控制依赖边构成,表示程序的控制流信息;DDS由节点和数据依赖边构成,表示程序的数据流信息。除此之外,SDG中还包括程序与程序之间的依赖关系以及程序与文件之间的依赖关系。云计算服务端利用依赖图构造程序图集,这一过程相当于度量云平台的所有文件进程,通过度量文件进程来判断其行为,将度量值与度量期望值进行对比,验证云计算服务端的行为是否符合客户端的预期。本文提出在行为度量系统中,将文件访问行为所对应的程序代码作为度量对象,本文方案的证明机制如下所述。
首先,建立文件访问行为与代码字段的对应关系。将程序的基本单位作为语句节点,以过程调用作为边,建立SDG,以描述可执行文件的预期行为。然后,通过分析信息流在各节点的传递情况,得到各节点的依赖关系,将这种关系转化为二进制串连接,即可代表每个节点的信息流,所有的信息流则表示该程序的流程状态。最后,通过建立SDG并得到程序的流程状态,对文件访问程序的行为进行可信验证。
每段程序都能构造出对应的依赖图,如果云计算服务端对文件访问的行为合法,则其构造出来的SDG和信息流状态也应是合法的;假如云计算服务端存在异常行为或不符合相关策略规则的行为,则得到的依赖图也会与正常依赖图有所不同。
1.2 方案架构
为满足客户端对云计算服务端存储用户数据的可感知、可验证需求,应用基于SDG的度量和验证机制,在传统远程证明的基础上,融合程序执行行为验证方法,使得用户可以对云计算服务端的文件访问行为和云计算环境进行度量与验证。
本文设计的云计算环境下基于SDG的远程证明方案架构如
图1所示。
在如
图1所示的远程证明架构中,各模块的具体功能描述如下:
1) 可信平台模块(trusted platform module,TPM):为可信计算硬件基础设施,能够对计算平台的可信性进行度量、对度量的可信值进行存储以及在访问客体询问时提供度量报告;在云计算服务端为虚拟机提供与物理可信芯片等价的可信服务且符合相关标准规范。
2) 远端验证服务模块:负责行为度量代理的传输和部署,接收用户的度量需求并按特定格式生成度量策略发送给行为度量代理。远端验证服务模块是一个可信监管代理,负责收集和获取云环境中的相关信息,包括信任链信息、云计算环境相关信息、组件运行信息以及各种审计信息等。远端验证服务模块利用TPM的身份证明密钥(attestation identity key, AIK)签名相关的平台配置寄存器(platform configuration register,PCR)值和随机数,并发送给客户端,用于验证云计算环境是否安全。
3) 行为度量代理:根据行为度量策略,通过对目标程序执行流程拦截,对与数据处理相关的程序及其依赖集进行监控与度量。利用TPM依次对远端验证服务模块、行为度量代理进行可信度量,确保行为度量代理的可信性,并由行为度量代理对目标程序及其依赖集进行度量,确保其执行的安全性。行为度量将由行为度量代理在相关数据文件进行计算之前触发,度量目标以数据为核心,围绕数据处理相关程序形成一个相关集合。首先确定相关目标集,然后实施对目标集的度量,包括程序执行度量与系统调用跟踪两个部分。在度量结果扩展方面,利用可信计算平台度量机制,使用行为度量日志(behavior measurement log, BML)记录所有的中间过程并通过密码技术保存在TPM的数据安全存储区域。行为度量代理根据访问文件的程序行为,构建程序的PDG和SDG,并计算节点依赖关系转化的二进制串信息,得到对文件访问行为的度量值,将原PCR值和新PDG的度量值做扩展操作后得到并存放于PCR, 。其中,i表示第i个PCR寄存器,HASH表示使用散列算法对合并的值进行计算。远程证明时,将签名后的BML记录和PCR中的相关信息通过远程验证服务模块发送给客户端的行为验证模块用于验证云计算服务端的文件访问行为是否可信。
4) 目标程序及依赖集:围绕数据处理相关程序形成的集合,是行为度量的目标。
5) 行为度量基准库:存放预先通过计算PDG节点的数据流信息得到的行为度量期望值,为客户端的行为验证提供依据。
6) 行为验证模块:通过比较获得的度量值与行为度量期望值,验证云计算服务端的文件访问行为以及云计算环境是否符合客户端的预期。客户端的行为验证模块实时接收远程验证服务模块的信息,分析云环境及云上文件访问行为的运行状态。
2 案例分析
基于上节提出的方案,通过信息流检测的方法,根据程序内依赖关系、程序间依赖关系和程序与文件间依赖关系构造程序实例的SDG,将其作为程序访问文件的行为度量目标集合,检测文件访问行为是否可信,以验证本文方案的可靠性和有效性。
2.1 构造依赖图
下面通过一段调用函数程序代码(代码1),举例说明如何构造程序代码对应的PDG。
图2即为代码1对应的PDG。
代码1中
c是函数fun的形参。在
图2所示代码1的PDG中,F_in 表示
c的formal_in节点,F_out表示
c的formal_out节点。顶端节点F01表示依赖图的入口,
c的输入依赖于F01节点。同时
c进入此条件函数有两条路径:若
c为偶数,进入F02节点,并指向F03节点;若
c为奇数,则进入F04节点,并指向F05节点,最终返回输出值即可退出。
下面以一段主函数程序代码(代码2)为例,介绍如何通过代码1和代码2构建SDG。
图3为主函数程序代码2对应的PDG。
图3中M02表示定义两个实参,其依赖于M01;A1、A2是两个实参,均依赖于M02;M03代表输入
a,M04代表调用fun(
a)函数,并由
b输出。由此可知,M03、M04均依赖实参A1,最后输出
b的值;A2作为输出的实参,依赖于调用函数。
图4即为
图2和
图3中两个PDG的集合,即SDG,对应程序的代码称为程序代码Ⅰ。SDG是由多个程序结合而成,即为多个PDG的结合体,因此该图使用参数传递边,由实参传递给形参,再由形参传递给实参。
以上均是合法的程序代码,假如受到第三方攻击,则合法程序会被更改,相应的PDG或SDG也会发生改变,因此度量结果也会受到影响,与期望的依赖图不相符,从而可以认定程序行为发生了异常,云计算平台不可信。
若云计算服务端的文件访问程序因受攻击而发生改变,可利用依赖图对程序进行检测。发生变化的调用函数程序如代码3所示,对应的PDG如
图5所示。发生变化的主函数程序如代码4所示,其PDG如
图6所示。
图7为
图5和
图6中两个PDG的SDG,对应程序的代码称为程序代码Ⅱ。
由
图5、
图6和
图7可知,发生改变的调用函数和主函数程序代码的PDG,以及形成的SDG均与原程序的PDG和SDG有明显区别,从而可以发现程序发生的变化,判断该程序受到破坏或者改变。
2.2 建立节点数据关系
在度量机制实施方面,首先需要确定度量目标。度量目标以数据为核心,围绕着数据处理相关程序形成一个相关集合,利用信息流检测的方法,通过SDG对目标集合进行描述。定义P为程序集合,F为文件集合,构造数据文件F相关的SDG,作为行为度量的依据。
为了进一步对节点的信息流进行检测,可以通过PDG或者SDG对应依赖关系的邻接矩阵对数据处理程序的行为进行度量和验证,以确保数据输入和输出的安全。在PDG或SDG中,通过对所有节点的分析可以知道信息流在各节点的传递情况,得到各节点的依赖关系,由此可以画出相应基于依赖关系的邻接矩阵。程序代码Ⅰ依赖关系的邻接矩阵如
表1所示,被攻击更改后的程序代码Ⅱ依赖关系的邻接矩阵如
表2所示。
表1和
表2中,“1”表示存在数据依赖或控制依赖关系,“0”表示两节点间无数据依赖或控制依赖关系。节点指令信息即表示每个节点与其他节点之间的关系,将这种关系转化为二进制串,即可代表每个节点的信息流,所有节点的信息流则表示该程序的流程状态,将此二进制串存放于列表中。
通过对比
表1和
表2可以看出,当代码Ⅰ受到攻击被更改为代码Ⅱ后,根据SDG得到的程序代码依赖关系的邻接矩阵中对应节点依赖关系转化的二进制串都发生了改变。
因此利用上述方法,客户端根据自身需求向云计算服务器提出度量请求后,可构造所需度量程序的SDG以及对应节点依赖关系转化的二进制串,并与行为度量基准库中已存入的合法依赖图以及相应的二进制串进行对比,若云计算服务端存在异常行为,不仅依赖图无法匹配,节点的信息流也会出现异常,据此用户可感知和验证远端服务程序是否存在异常行为。
3 结 语
本文通过构造程序实例发生改变前后的PDG、SDG以及对应节点信息流,判断该程序是否受到破坏或者发生改变。由实例分析可知,该方案可以使用户感知和验证数据文件访问行为及数据所处云环境的安全性,以判断云计算服务端行为是否存在异常。
本文方案仅仅检查了云计算服务端数据处理行为的可信与否,对于在行为验证结果不符合预期的情况下如何进行异常处理,以及文件访问行为的度量点还需深入研究。
国家自然科学基金(11202239)
航天五院CAST基金(2016020)
苏州市前瞻性应用研究项目(SYG201845)