王金芳,郭渊博
(信息工程大学 密码工程学院,郑州 450001)
物理信息系统(Cyber Physical Systems,CPS)被定义为计算与通信系统之间的交互系统,包括网络部分和物理过程,具有非常紧密的互连性,其广泛应用于电网、通信、交通、医疗和国防等关键基础设施领域[1,2],这些应用场景要求物理信息系统具备稳定性、高性能、可靠性以及鲁棒性,这就需要计算、通信和控制系统的紧密集成[3].但由于网络物理连接的复杂性,关键基础设施一直是犯罪分子的重要攻击目标,其安全性受到严重的威胁[4];因此,采取合理的安全措施,以最大限度地减少破坏对基础设施造成的损失成为急需解决的问题.攻击建模是一种建模和可视化事件序列的方法,其能够识别主机和物理设备上的漏洞,可以有效地保证物理信息系统的安全.其中,攻击图是对网络攻击进行建模的一种重要手段,是一种图形化的网络脆弱性分析技术.攻击图通过对目标网络和可能遭受的攻击行为进行建模,展示攻击者发动攻击时可能选择的攻击路径,该技术既可指导防御方采取针对性修复和防御措施,也可为攻击者制定攻击计划提供依据[5-7].
现阶段攻击图生成技术的研究一般有2种思路:1)采用已有技术(如模型检测技术和逻辑推理等)对网络和攻击图进行建模,并采用相关的成熟工具生成攻击图[8,9];2)是重新建立目标网络和攻击图模型,并在此基础上设计定制算法构建攻击图[10-12].然而,以上两种攻击图生成技术的应用场景局限于含有主机和服务器等的网络环境中,不能对包含物理设备等的物理信息系统进行建模评估,且当物理信息系统中的设备数量、漏洞数量、漏洞软件实例的可达性条件和漏洞建模的粒度变得很大时,上述攻击图生成技术存在状态空间爆炸问题,这导致攻击图的生成效率大大降低.
因此,本文提出了一种分布式的攻击图生成方法.本文首先考虑物理网络拓扑,对包含物理设备的物理信息系统进行攻击建模,利用属性标记实体的方法扩展设备漏洞信息,表示攻击如何传播;然后,使用超图分区的方法为每个代理分配任务,并采用深度优先搜索算法的改进并行版本,进而在多代理平台上执行分布式搜索快速构建攻击图;在此期间,使用分布式共享存储器来消除图部分的重复遍历,以避免在生成的攻击图中多次扩展结点,从而在最小化代理之间消息传输数量的前提下,提高攻击图的生成效率.
与现有攻击图生成的相关技术相比,本文提出的分布式攻击图生成方法的主要优势为:
1.适用于复杂的大规模物理信息系统.本文提出的分布式攻击图生成方法在复杂大规模系统中依然具备高效性,从而可以解决现有物理信息系统中攻击图生成技术存在的状态空间爆炸问题;
2.精确反映物理设备漏洞信息.提出了一种基于物理实体的网络攻击模型,结合物理网络拓扑模拟对物理信息系统设备及工业组件等的网络攻击,并利用属性标记实体的方法扩展物理信息系统中设备的漏洞信息.
构成物理信息系统的多个结构单元存在弱点,因此网络攻击对物理信息系统构成较严重的安全威胁,目前已有大量的研究探讨物理信息系统安全的建模与分析问题.
现有研究表明,采用树结构的方式对物理信息系统进行建模可以有效地识别网络中存在的安全威胁,Kholidy等[13]使用定量分层风险相关树来模拟攻击者可以达到某些目标的路径,并衡量物理信息系统资产因网络攻击而面临的风险.Hyder等[14]提出了一种利用攻防树和博弈论优化智能电网网络安全基础设施资源分配的方法,使用攻击防御树来分析网络内的攻击路径以及应对攻击的可能防御策略.Ali等[15]提出了一种利用攻击树来建模攻击者可能危及物理信息系统的潜在方式的方法,该方法定义了一组威胁环境(即系统脆弱性随时间变化的情况),每个威胁环境由不同的漏洞集组成,并使用攻击树生成算法在每个威胁环境下生成一棵树观察系统的安全状态.
上述技术都是以树结构的方式对物理信息系统进行建模,此类技术在帮助感知网络攻击方面效果不佳.而以图结构的方式对物理信息系统进行建模可以很好的解决这一问题.为此,Barrère等[16]提出了一种具有独立故障概率的 AND/OR 依赖图来识别最可能的关键任务组件集,该图将关键任务组件集问题作为最大可满足性问题来解决,将概率转换为负对数空间,以线性化最大可满足性中的问题,但该图在可视化方面存在优化空间.Wang等[17]提出了一种改进的有向无环网络攻概率攻击图,该图通过关联算法建立潜在的攻击路径,综合考虑攻击者的能力、攻击行为的特征和目标网络的特征,分析攻击路径的选择概率,视觉效果更为直观,但该方法需要在实际系统上进行实验验证.Sahu等[18]基于预定义的威胁模型和网络物理电力系统的合成通信网络构建先验贝叶斯攻击图,该图评估了一些基于分数和基于约束的结构学习算法,以基于实时警报、可扩展性、数据依赖性、时间复杂度和准确性标准来更新贝叶斯攻击图结构,但其不适用于大规模网络攻击场景.Li等[19]提出了一种采用并行编程和高性能计算的加速混合攻击图模型,该模型可用于物理信息系统和计算机网络安全性分析中,但稳定性较差且并行计算的效率较低.
综上所述,虽然以图结构的方式对物理信息系统进行建模能够更好地帮助感知网络攻击,但随着物理信息系统规模的增大,以图结构的方式对物理信息系统进行建模会带来状态空间爆炸问题.为了解决这一问题,本文提出了一种分布式算法生成攻击图,利用分布式共享存储器避免在生成的攻击图中多次扩展节点,从而在物理信息系统中实现高效的攻击图生成.实验证明本方法效率高,适用于大规模物理信息系统.
本节主要是对攻击图和物理信息系统进行攻击建模,攻击图建模确定攻击图中可以找到哪些类型的节点和边,物理信息系统建模确定网络资产类型、漏洞的前置条件和后置条件;其中网络资产包括物理信息系统设备和网络主机上运行的软件应用程序;漏洞包括物理设备上存在的固件漏洞以及主机上存在的操作系统漏洞.
攻击图建模确定了生成攻击图的节点和有向边,物理信息系统使用的攻击图模型如图1所示.
图1 攻击图模型Fig.1 Attack graph model
定义1.攻击图可以表示为AG=(V,E),其中V表示节点集,E表示有向边集.对于∀v∈V,可以是漏洞节点或者特权节点.漏洞节点表示攻击者利用物理设备上的固件漏洞或主机上存在的操作系统漏洞;特权节点指攻击者在该物理实体上所拥有的权限,分为none、user、root 3种特权,物理实体表示物理信息系统中的设备或主机应用程序,里面包含了与实体有关的一组属性.
属性标记实体确定了物理实体对不同类型攻击的脆弱性以及攻击者在成功获得对实体的完全控制时所获得的能力.例如,具有生成网络流量能力的设备如果受到攻击,可能会导致易受恶意流量攻击的相邻设备的性能下降[20].通过考虑物理信息系统中实体的某些属性,可以表示攻击如何传播,如图2所示.
图2 攻击传播流程图Fig.2 Attack propagation flowchart
一旦将属性关联到每个实体上,就可以完全指定实体之间的潜在交互,这些属性确定了实体上的脆弱性以及攻击如何危害其他实体.使用属性为实体建模的好处有两点:第1点是攻击图节点间的转换需要利用漏洞,且攻击者必须满足利用该漏洞的条件,而通过漏洞扫描的方式不能发现物理信息系统中设备的漏洞,未发现的漏洞将会使得这种转换变得无效,属性标记实体的方法解决了物理信息系统中脆弱点的遗漏问题;第2点是属性的使用可以以相同的方式对类似的实体进行建模,将需要独立分析的实体数量减少到一定的组中,可应用于具有大量实体的系统.
物理信息系统模型主要是对网络拓扑进行建模,包括物理信息系统架构的分层信息和网络实体元素信息,物理信息系统模型如图3所示.
图3 物理信息系统模型Fig.3 Cyber physical system model
定义2.物理信息系统是一个两元素元组<网络物理实体,漏洞>,其中,“网络物理实体”表示物理信息系统中的物理设备或主机软件应用程序,“漏洞”表示物理设备上的固件漏洞或主机软件应用程序上的操作系统漏洞.漏洞信息定义为四元素元组<固件漏洞,操作系统漏洞,前置条件,后置条件>,“前置条件”表示利用该漏洞所需的先决条件,“后置条件”表示攻击者成功利用该漏洞获得的权限.
本节基于第3节的建模方法设计了分布式攻击图生成算法.基于Kaynar等在文献[12]中的研究,本节将攻击图的生成视为一个图遍历或搜索问题,在分布式环境下进行求解,提出的分布式攻击图生成框架如图4所示.
图4 分布式攻击图生成框架Fig.4 Distributed attack graph generation framework
在攻击图生成部分,物理网络拓扑、实体信息以及防火墙规则等是生成攻击图的基础;属性标记是对物理实体赋予一组关联的属性,确定了物理实体对攻击的脆弱性以及攻击者在成功获得对实体的完全控制时获得的能力,以便在后面检查攻击条件是否匹配;使用物理网络拓扑、实体信息以及防火墙规则等计算网络节点之间的可达性关系,形成可达性超图,通过考虑超图中存储的可达性条件,判断节点间是否存在攻击行为,即发现攻击路径;通过多级k-路划分算法,将计算出的分区结果作为子任务;采用经典的深度优先搜索算法的改进并行版本生成攻击图;可视化展示是将生成的攻击图以易于理解和观察的方式进行展示.在分布式内存环境中,并行搜索的主要问题之一是难以消除重复攻击图节点的扩展.为了解决这个问题,本文利用消息传递机制以在分布式搜索代理上提供内存一致性.
可达性决定了物理信息系统中设备以及主机安装的软件应用程序之间的可达性条件.比如,防火墙上的过滤规则、路由器上的访问控制列表、软件应用程序之间的应用安全策略等都是决定可达性条件的因素之一.这些因素都要被考虑在内创建可达性超图,其中超顶点表示物理设备或主机软件应用程序,超边表示源和目标物理设备或主机软件应用程序的集合,如果源物理设备或主机软件应用程序满足特定条件就可以直接访问目标物理设备或目标主机软件应用程序,这些条件可能包括网络协议、端口号、用户凭证等,允许物理设备或主机软件应用程序之间直接可达,存储在超边中.
对可达性超图进行分区的主要目的是确定负责生成攻击图的每个分布式搜索代理的初始任务.每个代理应负责攻击者的权限、漏洞利用和多个物理设备以及主机软件应用程序的利用情况.将物理设备和主机软件应用程序分配给具有超图分区的搜索代理,可以在生成攻击图的时候将代理之间传输消息的数量降至最低.本文使用的是Karypis等[21]提出的基于贪心k-路划分算法的超图分区方法划分可达性超图,依次将给定的超图粗化为较小的代表超图,将最小的代表超图划分为k个大致相等的部分,然后通过将代表超图遍历回原始超图来细化划分,分区细化算法是通过遵循贪心算法来执行的,该方法通过考虑顶点移动导致的目标函数最大正减少(增大)来选择要跨分区移动的顶点.
分布式共享存储器(Distributed Shared Memory,DSM)是一种进程之间的通信模型,DSM系统逻辑上实现了一个物理分布式内存系统上的共享内存模型,它建立在消息传递系统之上,为用户提供了一种虚拟的共享存储器,所有代理都可以访问一个共享地址空间.每个分布式搜索代理在其本地消息队列中存储分配给它的设备或主机软件应用程序的攻击者特权信息.这些信息包含了特权的扩展状态,即它们是否被用来利用一些漏洞从中获益以生成额外的特权.当一个分布式搜索代理正在执行时,它可能需要扩展一个攻击者特权,并请求关于攻击者特权的信息(扩展状态),这些信息存储在另一个代理的消息队列中.在这种情况下,它必须将相应的信息传输到消息队列中,在搜索代理之间传递一些消息,将相应的信息传输到请求搜索代理的消息队列中.如果相应的信息表明关联的特权已经被扩展,那么请求代理将不扩展它.否则,请求代理将该特权推送至消息队列,以便稍后对该特权进行扩展,将该特权的扩展状态设置为true,并通过向其他代理发送消息使其相应信息失效.
为了在物理信息系统中生成大规模复杂网络的攻击图,本文采用并行分布式计算方法,提出了一种基于消息传递机制的深度优先搜索算法.每个分布式搜索代理执行基于消息队列的深度优先搜索算法构建攻击图,算法1给出了基于并行分布式消息传递机制的深度优先搜索算法,它由每个分布式搜索代理在多代理平台上执行.在执行搜索算法之前,已生成可达性超图,并使用超图分区结果初始化共享内存页.在分布式搜索算法期间,每个代理使用先前计算的可达性超图来确定哪些目标实体可以从与当前处理的权限相关的实体中访问.获取每个目标实体上的漏洞,并通过调用函数CheckExploitability()检查漏洞的可利用性.对于每个可利用的漏洞,调用函数GainedNewPrivileges()计算攻击者获得的新权限,检查存储在共享存储器中的每个已获得权限的扩展状态.如果获得的权限尚未扩展,则将其扩展状态在共享存储器中更新为true,并将获得的权限推送到消息队列中.
算法1.基于并行分布式消息传递机制的深度优先搜索算
输入:可达性超图(RHG)和初始攻击者权限(IAPS)
输出:部分攻击图(PAG)
1.MessageQueue←CreateMessageQueue()
2.forallap∈ IAPSdo
3.aps← newPrivilegeStatus()
4.aps.setExpanded(true)
5.WriteToMemory(ap,aps)
6.MessageQueue.push(ap)
7.foundPrivileges.add(ap)
8.endfor
9.whiletruedo
10.ifMessageQueue.size()> 0then
11.cp←MessageQueue.pop()
12.else
13.ops←GetPrivilegeFromOtherAgents()
14.ifops.size()==0then
15.break
16.else
17.MessageQueue.push(ops)
18.foundPrivileges.addAll(ops)
19.continue
20.endif
21.endif
22.hv←FindVertexForPri(cp,RHG)
23.ches←FindContainingEdges(hv,RHG)
24.forallhe∈ chesdo
25.TEs←FindTargetEntities(he)
26.forallTE∈ TEsdo
27.foralla∈ TE.Attributesdo
28.forallv∈ TE.vulnerabilities()do
29.RPS←CheckExploitability(v,cp,TE)
30.ifRPS!=nullthen
31.gnps←GainedNewPrivileges(v,cp,TE)
32.UpdatePartialAG(v,gnps,TE)
33.endif
34.endfor
35.endfor
36.endfor
37.endfor
38.endwhile
该算法中各行对应的操作说明如下:
步骤1~步骤8中,首先扩展最初满足攻击者分配的权限,如果代理生成权限,它首先查询权限是否已经被扩展.如果权限还没有被扩展,代理会将其扩展状态设置为true,并将权限推送到其消息队列中,以便稍后进行扩展.
步骤9~步骤21中,当搜索代理在某一时刻其消息队列没有扩展的权限时,它就开始向其他搜索代理请求一个或多个权限,其他代理都没有可扩展的权限时则搜索停止,否则将权限推送到消息队列中.
步骤22~步骤25中,可达性超图分区结果初始化共享存储器,每个代理使用先前计算的可达性超图来确定哪些目标实体可以从与当前处理的权限相关的实体中访问.
步骤26~步骤38中,获取每个目标实体上的属性和漏洞,调用函数CheckExploitability()检查漏洞的可利用性,对于每个可利用的漏洞,调用函数GainedNewPrivileges()计算攻击者利用漏洞后获得的新权限.
图5给出了每个搜索代理执行的基于并行分布式消息传递机制的深度优先搜索算法的流程图.
图5 基于并行分布式消息传递机制的深度优先搜索算法流程图Fig.5 Flow chart of depth-first search algorithm based on parallel distributed message passing mechanism
在基于分布式消息传递机制的并行深度优先搜索算法中,CheckExploitability()函数通过将共享存储器中已扩展的权限与漏洞的前提条件相匹配,检查攻击者当前可访问的实体中每个漏洞的可利用性,如算法2所示.
算法2.漏洞的可利用性函数算法
输入:漏洞信息(VI)、当前权限(CP)和目标实体及其属性(TE)
输出:所需权限(RPS)
1.functionCheckExploitability(VI,CP,TE)
2. RPS ←GainedPrivileges(VI.preconditions(),CP.entities,TE)
3.ifnot(RPScontainsCP)then
4.returnnull;
5.endif
6.forallrqp∈ RPSdo
7.ifnot(foundPrivilegescontains rqp)then
8.Rqps←FindFromMemory(rqp)
9.ifrqps.expanded==falsethen
10.returnnull
11.endif
12.endif
13.endfor
14.returnRPS
15.endfunction
该算法中各行对应的操作说明如下:
步骤1~步骤5调用函数GainedPrivileges()找到利用漏洞进行攻击所需的权限.如果当前遍历的权限不是所需的权限,则CheckExploitability()函数返回null,表示当前遍历的权限不满足利用漏洞所需的条件,攻击者无法利用漏洞.
步骤6~步骤15中,当且仅当在全局列表foundPrivileges中找到扩展状态为true的权限时,证明满足利用漏洞所需的条件,攻击者可以利用该漏洞进行攻击,调用算法1中的函数GainedNewPrivileges(),根据利用漏洞的后置条件计算出成功攻击后获得的新权限.
图6给出了漏洞的可利用性函数算法的流程图.
图6 漏洞的可利用性函数算法流程图Fig.6 Vulnerability exploitability function algorithm flowchart
在分布式搜索算法期间,通过调用UpdatePartialAG()函数中新获得的权限和利用的漏洞更新搜索代理计算的部分攻击图,如算法3所示.
算法3.更新搜索代理部分攻击图函数算法
输入:漏洞信息(VI)、获得的权限(GPS)和目标实体信息(TE)
输出:部分攻击图(PAG)
1.functionUpdatePartialAG(VI,GPS,TE)
2.ifVIinstanceof Vulnerabilitythen
3.exp←CreateVulnerabilityNode(VI,TE)
4.else
5.returnnull
6.forallgp∈ GPSdo
7.partialAG.addEdge(exp,gp)
8.endfor
9.endfunction
如果攻击者利用该漏洞,将创建漏洞利用节点,并将其添加到部分攻击图中.所有搜索代理完成部分攻击图的计算后,将部分攻击图发送给指定的领导者代理,领导者代理通过合并部分攻击图来计算最终的攻击图.
本文提出的分布式搜索算法的时间复杂度是根据消息传输和执行时间的复杂度综合考虑的.内存页错误数决定了搜索代理之间传输的最大消息数,因为在分布式搜索算法执行期间为每个代理提供可比较的任务数,在物理实体上获得的权限数是恒定的,如果在使用共享存储器之前没有使用超图分区初始化内存,则搜索代理遇到的最大内存页错误数为O(E),E为可直接访问的实体边的数量,最坏情况下复杂度为O(N2),N为系统中实体的数量;如果在使用共享存储器之前使用超图分区初始化内存,则分布式搜索代理遇到的最大内存页错误数为O(N×H),H为可达性超图划分后的超边数,在这种情况下,搜索代理之间传递消息的最坏情况下复杂度为O(P+N×H×log(P)),P为分布式搜索代理的数量.由于共享存储器应用于分布式代理,因此生成的攻击图中的每条边只遍历一次.假设搜索代理的数量为P,分布式搜索算法最坏情况下执行时间的复杂度为O(N2/P).因此,整个分布式攻击图生成算法的时间复杂度为O(P+N×H×logP+N2/P).
以文献[9,19,22]中的实验场景为例,本节基于物理信息系统设计了实验仿真环境,在仿真环境下与现有方法进行比较,验证了本文方法的有效性和先进性.图7展示了一个简易的物理信息系统架构模型,防火墙将互联网与企业网络隔离,该系统可以分为6层结构:网络DMZ层包括邮件服务器和Web服务器,位于企业内部网络和外部网络之间的小网络区域内;企业IT层包括企业站点管理计算机,该计算机收集数据、发送结果并向决策者报告,而无线接入点用于外部互联网连接;物理DMZ层包括流化媒体服务器、历史数据和远程访问服务器;过程监控层包括控制中心层和人机接口层,主要是对数据进行采集与监控,并通过 HMI 系统给操作人员提供监控和控制功能;现场控制层包括可编程逻辑控制器等各类控制单元,用于对各执行实体进行控制,直接与现场实体连接;现场实体层包括各类过程传感器实体和执行器实体单元,用于对生产过程进行感知与操作,该层接收现场控制层的控制量,由执行器实体执行控制指令,对工艺流程进行操作,传感器实体收集实时生产数据,并上报现场控制层.邮件主机、Web主机、管理工作站Management Workstation(MW)、工程工作站Engineering Workstation(EW)以及监测控制系统Supervisory Control System(SCS)等存在操作系统漏洞,PLC、传感器以及执行器存在固件漏洞.
图7 物理信息系统架构Fig.7 Cyber physical system architecture
图8为基于本文方法生成的攻击图.由于主机应用程序可以用漏洞扫描,这里只展示其漏洞,而物理设备都分配与其相关联的一组属性,可以表示实体的脆弱性以及攻击如何危害与其相关联的实体.
图8 分布式算法生成的攻击图Fig.8 Attack graph generated by distributed algorithm
在基于分布式算法生成的攻击图中,利用属性标记实体的方法扩展实体的脆弱性信息,精准判断攻击的传播路径.例如:对于路由器→邮件服务器→管理工作站→工程工作站→PLC(可编程网络堆栈)→DoS→网络通信延迟和路由器→邮件服务器→管理工作站→工程工作站→PLC(内存访问)→更改设定值这两条攻击路径,传感器的攻击行为是不同的,因为它们的属性不同,所以产生的攻击路径以及造成的后果都是不一样的.因此,采用属性标记实体的方法判断攻击的传播路径对物理信息系统中的实体来说更加符合实际情况.
上述实验分析了基于属性标记实体的建模方法生成的攻击图相对于传统攻击图,对网络安全状态的评估更加精确.为进一步测试本文提出的分布式算法生成攻击图的性能与基于串行搜索算法生成攻击图的性能进行比较,串行算法生成攻击图的性能最坏情况是O(N2),N是目标网络中实体以及主机的数量.到目前为止,文献所提攻击图生成算法最坏情况的时间复杂度都没有比O(N2)更好,而目前还没有提出在物理信息系统中使用分布式攻击图构建算法.实验环境为一台装有Intel 9700F八核处理器的计算机上运行4~6个代理执行的,防火墙的配置在整个实验迭代过程中保持不变,通过在每次实验迭代中增加网络中实体的数量,比较本文提出的分布式攻击图构建算法的性能与基于串行的深度优先搜索算法的性能.图9描述了串行和分布式攻击图生成算法在执行时间方面的性能.
图9 串行和分布式算法攻击图生成时间对比Fig.9 Comparison of attack graph generation time between serial and distributed algorithms
从图9中可以分析出,随着系统中实体以及主机的数量增加,6个代理的执行时间要低于5个代理的执行时间,5个代理的执行时间要低于4个代理的执行时间,即当系统中实体以及主机的数量增加时,使用特定数量代理的性能要高于使用较少数量代理的性能.由此可见,分布式算法适用于大规模网络系统.在串行攻击图生成算法中以文献[18]和文献[23]为代表进行分析,但文献[18]和文献[23]的方法无法对攻击图进行局部更新,当有新的信息输入时只能重新生成完整的攻击图,而本文方法可以仅对与新的输入信息有关的部分进行更新.
文献[18]和文献[23]与本文研究内容在脆弱性信息源、攻击图的局部更新能力等方面的比较如表1所示.
表1 各文献研究内容的对比Table 1 Comparison of research contents of various literatures
本文设计了基于属性标记实体的攻击建模方法,并提出了一种利用分布式算法在多代理平台上生成攻击图的方法.本文通过对物理信息系统中的实体分配一组关联的属性来扩展漏洞信息,并生成攻击传播模型,从而描述系统中被攻击的实体是如何影响与其连接的实体,实现对攻击路径的高效精准判断.当物理信息系统中实体数量和漏洞数量增加时,攻击图的分布式计算方式可以克服攻击图构建过程中出现的状态空间爆炸问题.
下一步将主要研究如何在攻击图构建过程中通过允许某些节点进行重复的权限扩展来避免搜索代理之间额外的消息传输产生的时间开销.目前,主要是通过专家咨询和对过去事件的分析来对属性进行分配,未来应扩展属性的列表以使其适用于更广泛类别的实体.