一种软件体系结构信息流脆弱性分析方法与流程

    专利2022-07-08  110


    本发明涉及软件安全性领域,具体涉及一种软件体系结构信息流脆弱性分析方法。
    背景技术
    :要使软件具有抵御攻击的能力,一种有效方法是提升软件安全性。在信息安全领域,脆弱性分析是一种常见的安全性分析方法,通过发现并定位软件中的脆弱性,并进行修复或移除,可以提升软件的安全水平。但现有的脆弱性分析方法多面向代码和可执行程序,尽管这些方法可以发现软件中的脆弱性,但关注的是词法、语法和语义等层次的脆弱性,并且存在发现问题滞后、修改难度大的问题,而体系结构脆弱性关注结构层,例如服务、服务间的交互以及交互之间的拓扑关系,并且软件体系结构作为软件设计阶段的重要产物,对未来软件质量起着越来越重要的决定性作用。因此在体系结构层找到违背安全策略的脆弱性,可以有效提升软件安全性。技术实现要素:本发明的目的在于克服现有技术的不足,提供一种基于信息流控制的软件体系结构脆弱性分析方法,通过构造体系结构信息流动和传播的图模型,在机密性和完整性安全策略指导下实现软件体系结构脆弱性的定位。本发明提供了一种软件体系结构信息流脆弱性分析方法,包括依次进行的如下步骤:步骤一:确定软件体系结构信息流安全策略;步骤二:根据体系结构设计文档确定和描述服务;步骤三:构造服务调用图;步骤四:基于安全策略对服务级别进行赋值;步骤五:设计基于安全策略的脆弱性判定算法;步骤六:基于判定算法对脆弱性进行定位,获得软件体系结构脆弱性信息。进一步地,所述步骤一中软件体系结构信息流安全策略分为机密性安全策略和完整性安全策略。进一步地,所述步骤二中的服务调用操作类型只考虑读、写两类以及由这两类操作所衍生出的读写操作,不考虑执行操作。进一步地,所述步骤三中构造服务调用图的步骤包括:定义服务调用图、定义邻接矩阵、遍历所有服务间的调用关系获得服务调用图。进一步地,定义服务调用图的格式为g(n,e),其中n代表服务,表示为图中的节点,e代表服务间调用关系,表示为图中的边,边的权值表示服务调用操作类型,权值为1表示读操作,权值为2表示写操作,边的方向表示服务间的数据流向,定义一维数组表示服务调用图中节点的信息。进一步地,定义邻接矩阵形式的服务调用模型,其中,矩阵中第i行第j列的取值表示服务i与调用服务j的调用关系,当服务i与服务j存在调用关系,即节点i与节点j之间有边,且边上的权值为wij,这里的wij=1或2,其中1表示读操作,2表示写操作;当服务i与服务j不存在调用关系时,则节点i与节点j之间没有边,wij=0。进一步地,所述步骤四中当确定的安全策略为机密性安全策略时,对服务的机密性级别进行赋值;当确定的安全策略为完整性安全策略时,对服务的完整性级别进行赋值。进一步地,所述步骤五中当确定的安全策略为机密性安全策略时,构造基于机密性策略下的体系结构信息流安全策略和服务调用图特征的脆弱性判定算法;当确定的安全策略为完整性安全策略时,构造基于完整性策略下的体系结构信息流安全策略和服务调用图特征的脆弱性判定算法。进一步地,构造基于机密性策略下的体系结构脆弱性判定算法,需要考虑是否违背以下3种子策略:1)机密性目标下服务调用的读操作策略若存在主调服务a,被调服务b,当且仅当ca≥cb,a可以对b执行读操作,其信息流传递为b→a,其中,cx表示服务x的机密性等级;2)机密性目标下服务调用的写操作策略若存在主调服务a,被调服务b,当且仅当ca≤cb,a可以对b执行写操作,其信息流传递为a→b;3)机密性目标下服务调用的读写操作策略若存在主调服务a,被调服务b,当且仅当ca=cb,a可以对b执行读写操作,其信息流传递为进一步地,构造基于完整性策略下的体系结构脆弱性判定算法,需要考虑是否违背以下3种子策略:1)完整性目标下服务调用的写操作策略若存在主调服务a,被调服务b,当且仅当ia≥ib,a可以对b执行写操作,其信息流传递为a→b,其中,ix表示服务x的完整性等级;2)完整性目标下服务调用的读操作策略若存在主调服务a,被调服务b,当且仅当ia≤ib,a可以对b执行读操作,其信息流传递为b→a;3)完整性目标下服务调用的读写操作策略若存在主调服务a,被调服务b,当且仅当ia=ib,a可以对b执行读、写操作,其信息流传递为进一步地,所述脆弱性判定算法具体包括以下步骤:遍历图中所有信息流动和传播的路径,根据路径上节点的机密性或完整性等级以及相邻节点的信息流方向和安全策略要求,定位出脆弱性。具体包括1)将所有入度为0的节点定为初始节点并进行排序;2)按顺序对入度为0的节点进行路径查找,直到图中再无节点与该入度为0的节点交互为止,输出路径信息;3)基于安全策略要求,对路径依次比较该路径上相邻节点的机密性级别或完整性级别;4)保存并输出与安全策略冲突的节点及其之间的调用关系,直到完成所有路径所有节点的比较。本发明的软件体系结构信息流脆弱性分析方法,可以实现:在对软件脆弱性分析方法研究领域,绝大多数研究集中在代码和可执行程序层面,但对软件体系结构层次的研究较少。本方法基于信息流控制,通过构造描述体系结构信息流动和传播的图模型,实现了机密性和完整性安全策略下的软件体系结构脆弱性的定位,从而提升软件安全性。附图说明图1为服务调用类型图;图2为系统模块与组成结构图;图3为客户端信息接收模块服务调用图;图4为网络接收和发送模块服务调用图。具体实施方式下面详细说明本发明的具体实施,有必要在此指出的是,以下实施只是用于本发明的进一步说明,不能理解为对本发明保护范围的限制,该领域技术熟练人员根据上述本
    发明内容对本发明做出的一些非本质的改进和调整,仍然属于本发明的保护范围。本发明提供了一种软件体系结构信息流脆弱性分析方法,下面,具体进行介绍,其包括如下步骤:步骤一:确定软件体系结构信息流安全策略;信息流是信息在系统内部和系统间的传播和流动。信息流控制是信息安全领域保证端到端安全的一种重要手段。安全策略是指为达到一组安全目标而设计的规则的集合,定义了什么是允许的什么是禁止的。安全策略由安全模型来具体表示,安全模型是以形式化或数学化形式对安全策略的重新表达。本发明基于信息流安全模型贝拉模型和比巴模型建立安全策略,其中贝拉模型是一种适用于军事安全策略的模型,通过防止非授权信息的扩散来保证系统机密性,基本思想是安全级别高的主体不能写安全级别低的客体,安全级别低的主体不能读安全级别高的客体。比巴模型是一种保护完整性的安全模型,基本思想是高完整性级别的主体可以写低完整性级别的客体,低完整性级别的主体可以读高完整性级别的客体。基于贝拉模型和比巴模型确定机密性策略和完整性策略。机密性策略是防止信息流向未授权获取该信息的主体,完整性策略是防止信息流向完整性高的主体。步骤二:根据体系结构设计文档确定和描述服务;本发明的服务与面向服务的体系结构(service-orientedarchitecture,soa)中的服务概念相同,服务是一个独立的功能单元,由单个组件或多个组件构成,软件体系结构由服务及服务间的交互组成。本发明的服务调用操作类型只考虑“读”、“写”两类,以及由这两类操作所衍生出的“读写”操作,不考虑“执行”操作。这是由于“执行”操作多发生在源代码级或可执行程序级,因此不适合在体系结构层进行讨论。可以根据体系结构设计文档,直接获得服务和服务的描述。步骤三:构造服务调用图;服务调用是服务承载的信息传递到其他服务的过程,定义服务调用集合为ssi={psi,tsi},其中,psi为参与调用的服务对,tsi为服务调用操作类型。服务调用包含四种类型,分别为顺序结构、选择结构、并行结构、循环结构,如图1所示。服务调用对是指存在调用关系的两个服务,定义服务调用对为psi=<ss,so>。其中,ss表示主调服务,即发起调用的服务,so表示被调服务,即被调用的服务。如果服务si调用服务sj,表示它们之间调用关系的服务调用对psi可简写为sij。服务调用操作类型是指服务间发生调用关系的具体操作,定义为tsi=<r,w>,其中,r代表读操作,代表写操作。服务间的信息流向dsi是服务在调用过程中执行读、写操作时数据的流动方向,用符号“→”表示。如果存在数据di∈ss,dj∈so,且存在服务调用集合ssi={ss,so,r},则表示主调服务ss对被调服务so执行了读操作,其数据流方向表示为so→ss,即主调服务在对被调服务执行读操作时,数据由被调服务流入主调服务。如果存在数据di∈ss,dj∈so,且有服务用集合则表示主调服务ss对被调服务so执行了写操作,其数据流方向表示为ss→so,即主调服务在对被调服务执行写操作时,数据由主调服务流入被调服务。服务间的操作序列除了单独执行读操作和写操作外,还可能同时执行读、写操作,这种情况下,其数据流方向的表示可以解释如下:如果存在数据di∈ss,dj∈so,且存在服务调用集合ssi={ss,so,r&w},则表示主调服务ss对被调服务so既执行了读操作又执行了写操作,其数据流方向表示为so→ss且ss→so,即主调服务在对被调服务同时执行读、写操作时,数据由被调服务流入主调服务,同时也从主调服务流入被调服务。将服务调用图构造为一个有权有向图,其中,将服务映射为图中的节点,将服务间的调用关系映射为边,将服务调用操作类型映射为边的权值,读操作权值定为1,写操作权值定为2,将服务间的数据流向映射为边的方向。服务调用图是描述服务间调用关系的数据结构,由节点的非空集合n(由n>0个节点组成)与边的集合e(节点之间的关系)构成,记为:g(n,e),在分析获得服务调用关系并对服务调用图进行定义的基础上,采用邻接矩阵的形式对服务调用图进行描述,构造邻接矩阵通过定义一维数组l[n]描述服务调用图中节点的信息,定义二维数组a[n][n],表示服务调用图的邻接矩阵,其中矩阵a中元素aij存放节点i到节点j的关系信息,记为:其中,当服务i与服务j存在调用关系,即节点i与节点j之间有边,且边上的权值为wij,这里的wij=1或2;当服务i与服务j不存在调用关系时,取值为0。最后,通过遍历体系结构所有服务间的调用关系得到服务调用的邻接矩阵,可以转化为服务的调用图。步骤四:基于步骤一中建立的安全策略对服务级别进行分析和赋值;1)当安全策略为机密性安全策略时,确定服务的机密性等级,如下式所示:其中,mcl表示服务的机密性级别,dcl表示该服务承载数据的机密性级别,由数据的机密性重要度等级决定,vl表示服务的安全等级,round1为运算符号,表示四舍五入,并保留小数点后1位。公式中的“ 1”表示服务的机密性级别要高于数据的机密性级别。dcl的取值参照下表给出:取值重要程度描述4重要机密性的破坏将对系统或软件造成重要的损失3一般机密性的破坏将对系统或软件造成一般的损失2不太重要不是很重要,机密性的破坏对系统或软件造成的损失较低1不重要不重要,机密性的破坏对系统或软件造成的损失很小2)当安全策略为完整性安全策略时,确定服务的完整性等级,如下式所示:其中,hil表示服务的完整性级别,dil表示该服务承载数据的完整性级别,由数据的完整性重要度等级决定,vl表示服务的安全等级,round1为运算符号,表示四舍五入,并保留小数点后1位。dil的取值参照下表给出:取值重要程度描述4重要完整性的破坏将对系统或软件造成严重的损失3一般完整性的破坏将对系统或软件造成一般程度的损失2不太重要不是很重要,完整性的破坏对系统或软件造成的损失较低1不重要不重要,完整性的破坏对系统或软件造成的损失很小3)服务安全等级的确定,通过以下方式获得:当软件体系结构的服务受到破坏时,影响的客体可以是软件系统、用户、承载软件系统的组织,这些客体受到影响时会产生不同的危害程度,本发明将危害程度定义为三个级别:一般危害、严重危害、特别严重危害。由客体和影响程度共同作用下的安全等级分为一级到五级共5个级别,取值分别为1、2、3、4、5。其中一级意味着几乎没有影响、二级是指轻微影响、三级表示有中度影响、四级意味着重大影响、五级意味着非常严重影响,如下表所示。在实际赋值时,依据下表,在专家经验的指导下,即可得出每个服务的安全等级。步骤五:构造基于步骤一中建立的安全策略相对应的脆弱性判定算法,具体步骤为:查找所有信息流动和传播的路径,根据路径上节点的机密性或完整性等级以及相邻节点的信息流方向基于信息流安全策略对脆弱性进行定位,具体地1)机密性策略要求下体系结构信息流脆弱性判定算法,算法的基本步骤:(1)将所有入度为0的节点定为初始节点并进行排序;(2)按顺序对入度为0的节点进行路径查找,直到图中再无节点与该入度为0的节点交互为止,并输出路径信息;(3)以路径信息、机密性策略要求下的安全策略为输入,依次比较路径上相邻节点的机密性级别,机密性目标下体系结构信息流子策略包括如下3点:①机密性目标下服务调用的读操作策略若存在主调服务a,被调服务b,当且仅当ca≥cb,a可以对b执行读操作,其信息流传递为b→a,其中,cx表示服务x的机密性等级;②机密性目标下服务调用的写操作策略若存在主调服务a,被调服务b,当且仅当ca≤cb,a可以对b执行写操作,其信息流传递为a→b,其中,cx表示服务x的机密性等级;③机密性目标下服务调用的读写操作策略若存在主调服务a,被调服务b,当且仅当ca=cb,a可以对b执行读写操作,其信息流传递为其中,cx表示服务x的机密性等级。(4)保存并输出与机密性目标下体系结构信息流策略冲突的节点及其之间的调用关系,直到完成所有路径上所有节点的比较。2)完整性策略要求下体系结构信息流脆弱性判定算法,算法的基本步骤:(1)将所有入度为0的节点定为初始节点并进行排序;(2)按顺序对入度为0的节点进行路径查找,直到图中再无节点与该入度为0的节点交互为止,并输出路径信息;(3)以路径信息、完整性策略要求下的安全策略为输入,依次比较路径上相邻节点的机密性级别或完整性级别,其中完整性目标下体系结构信息流子策略包括如下3点:①完整性目标下服务调用的写操作策略若存在主调服务a,被调服务b,当且仅当ia≥ib,a可以对b执行写操作,其信息流传递为a→b,其中,ix表示服务x的完整性等级;②完整性目标下服务调用的读操作策略若存在主调服务a,被调服务b,当且仅当ia≤ib,a可以对b执行读操作,其信息流传递为b→a,其中,ix表示服务x的完整性等级;③完整性目标下服务调用的读、写操作策略若存在主调服务a,被调服务b,当且仅当ia=ib,a可以对b执行读、写操作,其信息流传递为其中,ix表示服务x的完整性等级。(4)保存并输出与完整性目标下体系结构信息流策略冲突的节点及其之间的调用关系,直到完成所有路径上所有节点的比较。步骤六:基于判定算法对脆弱性进行分析定位,获得软件体系结构脆弱性相关信息。基于步骤五获得脆弱性的节点集合,分析获得脆弱性的定位,从而得到软件体系结构脆弱性相关信息。下面选用某开源机票预订系统为例对各过程的结果进行说明。该软件采用基于服务的架构,实现的功能包括:用户信息输入和统计、用户信息的存储、票务信息的传递和接收、取票通知及账单的生成和打印、机票销售情况统计核算、处理用户所需的票务信息、航班信息生成、航班信息查询反馈、旅行社信息查询反馈、销售额分析和管理等。将系统划分为4个主要模块,如图2所示。此处选用该订票系统的客户端信息接收模块对本发明的机密性策略要求下的信息流脆弱性分析方法进行验证,选用网络接收和发送模块对本发明的完整性策略要求下的体系结构脆弱性分析方法进行验证。首先根据体系结构设计文档确定客户端信息接收模块以及网络接收和发送模块的服务,并对其进行描述。将实现客户端信息接收模块抽象为12个服务,如下表所示:将实现网络接收和发送模块抽象为13个服务,如下表所示:客户端信息接收模块的服务调用信息如下表所示:服务调用对执行的操作数据流方向s1调用s0s1对s0执行读操作s0→s1s1调用s2s1对s2执行写操作s1→s2s2调用s3s2对s3执行写操作s2→s3s3调用s3s3对s3执行写操作s3→s3s4调用s0s4对s0执行读操作s0→s4s4调用s5s4对s5执行写操作s4→s5s4调用s7s4对s7执行写操作s4→s7s5调用s6s5对s6执行写操作s5→s6s6调用s6s6对s6执行写操作s6→s6s1调用s7s2对s7执行写操作s2→s7s7调用s0s0对s7执行读操作s7→s0s8调用s2s8对s2执行读操作s2→s8s8调用s5s8对s5执行读操作s5→s8s8调用s9s8对s9执行写操作s8→s9s8调用s10s8对s10执行写操作s8→s10s9调用s11s9对s11执行写操作s9→s11s10调用s11s10对s11执行写操作s10→s11客户端信息接收模块的服务机密性等级如下表所示:网络信息接收和发送模块的服务调用信息如下表所示:服务调用对执行的操作数据流方向s0调用s1s0对s1执行写操作s0→s1s1调用s2s1对s2执行写操作s1→s2s1调用s11s1对s11执行写操作s1→s11s2调用s3s2对s3执行写操作s2→s3s3调用s4s3对s4执行写操作s3→s4s4调用s4s4对s4执行写操作s4→s4s4调用s5s4对s5执行写操作s4→s5s5调用s5s5对s5执行写操作s5→s5s10调用s3s10对s3执行读操作s3→s10s10调用s3s10对s3执行写操作s10→s3s1调用s6s1对s6执行写操作s1→s6s6调用s7s6对s7执行写操作s6→s7s7调用s7s7对s7执行写操作s7→s7s7调用s8s7对s8执行写操作s7→s8s8调用s8s8对s8执行写操作s8→s8s8调用s9s8对s9执行写操作s8→s9s10调用s9s10对s9执行读操作s9→s10s10调用s9s10对s9执行写操作s10→s9s10调用s11s10对s11执行写操作s10→s11s12调用s5s12对s5执行读操作s5→s12网络信息接收和发送模块的服务完整性等级如下表所示:然后构建客户端信息接收模块、网络接收和发送模块的服务调用图,如图3、图4所示,图中边的权值1代表读操作,边的权值2代表写操作。最后利用信息流脆弱性判定算法分别对客户端信息接收模块、网络接收和发送模块进行脆弱性定位,并得到实验结果:对客户端信息接收模块执行机密性策略要求下体系结构信息流脆弱性判定算法,得到包含脆弱性的路径为:p4:s0→s1→s7→s0;p6:s0→s4→s7→s0;相应的脆弱性信息为s7→s0。对网络接收和发送模块执行完整性策略要求下的体系结构信息流脆弱性判定算法,得到包含脆弱性的路径为:p3:s0→s1→s2→s3→s10→s9→s10→s3→s4→s5→s12;p4:s0→s1→s2→s3→s10→s3→s4→s5→s12;p5:s0→s1→s2→s3→s10→s9→s10→s11;p8:s0→s1→s6→s7→s8→s9→s10→s3→s4→s5→s12;相应的脆弱性信息s10→s3和s10→s9。尽管为了说明的目的,已描述了本发明的示例性实施方式,但是本领域的技术人员将理解,不脱离所附权利要求中公开的发明的范围和精神的情况下,可以在形式和细节上进行各种修改、添加和替换等的改变,而所有这些改变都应属于本发明所附权利要求的保护范围,并且本发明要求保护的产品各个部分和方法中的各个步骤,可以以任意组合的形式组合在一起。因此,对本发明中所公开的实施方式的描述并非为了限制本发明的范围,而是用于描述本发明。相应地,本发明的范围不受以上实施方式的限制,而是由权利要求或其等同物进行限定。当前第1页1 2 3 
    技术特征:

    1.一种软件体系结构信息流脆弱性分析方法,其特征在于,包括依次进行的如下步骤:

    步骤一:确定软件体系结构信息流安全策略;

    步骤二:根据体系结构设计文档确定和描述服务;

    步骤三:构造服务调用图;

    步骤四:基于安全策略对服务级别进行赋值;

    步骤五:设计基于安全策略的脆弱性判定算法;

    步骤六:基于判定算法对脆弱性进行定位,获得软件体系结构脆弱性信息。

    2.如权利要求1所述的方法,其特征在于:所述步骤一中软件体系结构信息流安全策略分为机密性安全策略和完整性安全策略。

    3.如权利要求1所述的方法,其特征在于:所述步骤二中的服务调用操作类型只考虑读、写两类以及由这两类操作所衍生出的读写操作,不考虑执行操作。

    4.如权利要求1所述的方法,其特征在于:所述步骤三中构造服务调用图的步骤包括:定义服务调用图、定义邻接矩阵、遍历所有服务间的调用关系获得服务调用图。

    5.如权利要求1所述的方法,其特征在于:所述步骤四中当确定的安全策略为机密性安全策略时,对服务的机密性级别进行赋值;当确定的安全策略为完整性安全策略时,对服务的完整性级别进行赋值。

    6.如权利要求1所述的方法,其特征在于:所述步骤五中当确定的安全策略为机密性安全策略时,构造基于机密性策略下的体系结构信息流安全策略和服务调用图特征的脆弱性判定算法;当确定的安全策略为完整性安全策略时,构造基于完整性策略下的体系结构信息流安全策略和服务调用图特征的脆弱性判定算法。

    7.如权利要求4所述的方法,其特征在于:定义服务调用图的格式为g(n,e),其中n代表服务,表示为图中的节点,e代表服务间调用关系,表示为图中的边,边的权值表示服务调用操作类型,权值为1表示读操作,权值为2表示写操作,边的方向表示服务间的数据流向。

    8.如权利要求6所述的方法,其特征在于:构造基于机密性策略下的体系结构脆弱性判定算法,需要考虑是否违背以下3种子策略:

    1)机密性目标下服务调用的读操作策略

    若存在主调服务a,被调服务b,当且仅当ca≥cb,a可以对b执行读操作,其信息流传递为b→a,其中,cx表示服务x的机密性等级;

    2)机密性目标下服务调用的写操作策略

    若存在主调服务a,被调服务b,当且仅当ca≤cb,a可以对b执行写操作,其信息流传递为a→b;

    3)机密性目标下服务调用的读写操作策略

    若存在主调服务a,被调服务b,当且仅当ca=cb,a可以对b执行读写操作,其信息流传递为

    9.如权利要求6所述的方法,构造基于完整性策略下的体系结构脆弱性判定算法,需要考虑是否违背以下3种子策略:

    1)完整性目标下服务调用的写操作策略

    若存在主调服务a,被调服务b,当且仅当ia≥ib,a可以对b执行写操作,其信息流传递为a→b,其中,ix表示服务x的完整性等级;

    2)完整性目标下服务调用的读操作策略

    若存在主调服务a,被调服务b,当且仅当ia≤ib,a可以对b执行读操作,其信息流传递为b→a;

    3)完整性目标下服务调用的读、写操作策略

    若存在主调服务a,被调服务b,当且仅当ia=ib,a可以对b执行读、写操作,其信息流传递为

    技术总结
    一种软件体系结构信息流脆弱性分析方法,包括根据体系结构设计文档确定和描述服务;构造体系结构信息流动和传播的服务调用图模型;确定软件体系结构信息流安全策略,并基于安全策略对服务级别进行赋值;设计基于安全策略的脆弱性判定算法;基于判定算法对脆弱性进行定位,得到软件体系结构脆弱性信息等步骤,实现在软件体系结构层次定位违背机密性安全策略和完整性安全策略的脆弱性,从而提升软件安全性。

    技术研发人员:李秋英;陆民燕;古廷阳
    受保护的技术使用者:北京航空航天大学
    技术研发日:2020.11.13
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-21026.html

    最新回复(0)