工业控制网络安全脆弱性分析技术研究
2018-01-11张书钦李凯江郭倩倩孙利民石志强
张书钦, 李凯江, 郭倩倩, 孙利民, 石志强
(1.中国科学院 信息工程研究所, 北京 100093;2. 中原工学院 郑州 450007)
伴随着互联网的迅猛发展,网络安全成了备受关注的问题。工业控制网络作为国家至关重要的基础设施,其安全问题成为了政府的关注焦点。一般来说,网络安全问题的内在原因主要在于网络系统本身存在的脆弱性,网络的脆弱性是指网络中的任何能够被用来作为攻击前提的特性。在网络安全防御中,通过脆弱性分析及相应的安全加固能够有效降低网络安全风险。
利用攻击树和攻击图能够建立模型用来模拟网络系统可能遭受的攻击和系统安全状态的变化,其中攻击树的结构过于简单,攻击图能够描述庞大复杂的攻击逻辑。Phillips C等提出了状态攻击图,这种攻击图适合人工分析[1]。Ammann P等提出了属性攻击图,这种攻击图可方便地进行自动化分析[2];Ou X等利用属性攻击图的特点开发了建模与分析工具软件MulVAL[3];在属性攻击图模型的基础上,Aguessy F X等基于MulVAL生成的属性攻击图提出了一种用于评估信息系统安全级别的安全评估模型[4]。高妮等利用贝叶斯攻击图描述攻击行为的不确定性,并依据攻击成本和攻击收益提出了一种基于粒子群的最优安全防护策略选择算法[5]。攻击图模型不仅可用于常规的网络环境,也可用于工业控制网络中。黄家辉等提出了一种基于攻击图的工业控制系统脆弱性量化评估模型,给出了一套工控网络系统脆弱性量化指标等级划分标准,并对攻击图上所有可能的攻击路径进行脆弱性分析[6]。黄惠萍等提出了一种基于攻击树的工业控制系统安全评估方案[7]。
与常规计算机网络相比,工控网络中不同区域的资产有不同的重要程度,对核心资产的攻击可能导致极严重的后果,且不同的漏洞会有不同程度的安全威胁。基于此,本文利用攻击图技术对工业控制网络的脆弱性进行分析,给出了一种安全修复选择策略。该策略基于工业控制网络中主机资产的分层特点和漏洞威胁来评估所有可能攻击路径的安全风险,进而选择安全风险最高的攻击路径,并修复该攻击路径上的漏洞。最后在模拟的网络环境下通过实验验证,该方案能为工业控制网络提供有效防护。
1 基于攻击图的工业控制网络安全脆弱性分析
攻击图作为一种基于模型的脆弱性分析技术,能够建立模型并模拟网络中存在的脆弱性和它们之间的相互关系,分析可能的攻击路径和潜在威胁。已有的攻击图生成方法存在状态爆炸的问题,导致生成效率低,生成的攻击图规模庞大。为了解决这个问题, 本节在形式化描述攻击图及攻击路径的基础上,通过反向、广度优先的遍历算法搜索网络中存在的可能攻击路径,降低攻击图规模,提高攻击图生成效率。
1.1 攻击图与攻击路径
攻击图能够根据攻击动作间的因果关系呈现网络中潜在的渗透式攻击序列,其中包含了所有可被攻击者利用的漏洞实体节点、前提集合和后果集合。如果一个漏洞的前提恰好是另一个漏洞的攻击后果,那么这两个漏洞就产生了关联。通过对当前网络中的漏洞进行关联分析就可以发现网络中所有可能的攻击路径。这种包含所有可能攻击路径的描述称为攻击图。
(1)攻击图G(V,A,P,I)是一种与或图,其中,V为攻击图中的实体节点集合,这些实体节点有两种,分别为漏洞实体和状态实体。漏洞实体代表在工业控制网络中存在的漏洞信息,状态实体代表当前主机的攻击条件或者攻击后果;A代表一次原子攻击中实体节点间的依赖关系,该依赖关系由攻击规则生成。攻击规则
攻击图中,有向弧表示漏洞的先后利用关系,存在AND和OR 两种逻辑约束关系:
AND型依赖关系是指一次攻击过程必须同时利用多个漏洞才能满足攻击条件。
OR型依赖关系是指在一个攻击过程中只需要利用任意一个漏洞实体就能满足攻击条件。
(2)攻击路径S是攻击图G的一个子图,即S⊆G。在S中,只有一个出度为0的节点,即该攻击路径的攻击目标。攻击路径是针对特定攻击目标的攻击序列,其中入度为0的节点就是该攻击路径的先决条件。
1.2 攻击图生成算法
本文采用反向、广度优先节点遍历算法来生成攻击图。因为反向搜索可以避免对非攻击目标中实体节点进行遍历。因此,通过反向广度优先的节点遍历算法可以提高攻击图的构造效率。
算法思想:在攻击目标为target的攻击图生成中,从target开始进行逆向推导。在攻击规则中搜索target作为攻击后果的所有规则,通过该规则创建target的前驱漏洞实体节点和状态实体节点(攻击前提)。然后将这些状态实体节点作为攻击后果进行下一次迭代。一般来说,一条攻击路径上需要利用的漏洞数量越多,则认为攻击难度越大。可通过广度优先遍历过程中的迭代次数对攻击难度进行限制。该算法的伪代码如下:
算法1:攻击图生成算法
Input:target,deep,attackRules//分别代表攻击目标,最大攻击次数,攻击规则
Output:attackGraph
attackGraphBuild (target,deep,attackRules){
attackGraph=target
foreach(rule:attackRules){
i=1
if(rule.post==target&&rule.cves∈target.cves){
target.childrens.setList(i,rule.cves)
target.childrens.get(i).setPre(rule.pre)
}
//在不满足深度的情况下,攻击图全部状态已经构建完毕
if(i=1){
returnattackGraph
}
}// end of foreach
deep=deep-1
if(deep>0){
foreachnode:target.childrens{
attackPathBuild(node,deep,attackRules)
}
}else{
returnattackGraph
}
}
2 工业控制网络安全脆弱性修复选择策略
在工业控制网络安全脆弱性的修复选择中,以攻击路径中漏洞节点的总风险值作为修复依据。为了对单个漏洞的风险值进行评估,本文结合工业控制网络系统的特点,提出了一种基于主机分层资产和漏洞威胁相结合的工业控制系统修复选择策略。首先,将工业控制网络中不同层次的设备进行资产重要性的评估;然后,利用漏洞周期性的特点对不同时期的漏洞进行评估;最后,对不同网络层次的不同漏洞给出风险值的计算公式。
2.1 工业控制网络分层和资产重要性评估
根据工业控制网络中各类设备的功能,工业控制网络设备按区域可划分三层,即设备层、监控层、办公层。其中在设备层和监控层中,主机分配的任务相对较明确,具有相同任务的主机一般在同一工业控制网络中,所安装的应用基本相同,这些主机具有相同的漏洞,因此经过这样的分层划分更符合工业控制网络系统的特点。设备层主要包括工业控制设备以及工业控制辅助设备,如PLC、RTU、IDE、AGV等终端设备;监控层是办公层与设备层的中间层,这一层主要包括工业控制网络系统的控制服务器,如历史信息数据库服务器、实时数据库服务器、Batch服务器、SCADA服务器、工程师站、域控制器;办公层主要包括企业内部的Web、OA、邮件服务器以及EMS系统等内网管理服务器和主机,办公层一般直接连接到Internet,会直接面临着外部威胁。
资产评估影响因子Ak(i)表示位于网络分层k中漏洞i被攻击后的损失代价。k为1、2、3,分别代表设备层、监控层和办公层,则资产评估影响因子表达式为:
(1)
其中:wk表示分层k在系统中的资产重要性权重系数;mk为分层k中网络设备的数量。
2.2 工业控制网络系统的漏洞影响值构建
(2)
2.3 基于资产重要性和漏洞影响值的修复选择策略
(3)
通过式(3)可以计算所有漏洞实体节点的安全风险值。一条攻击路径中包含了许多漏洞实体节点,这里将攻击路径上漏洞实体节点的风险值之和作为该攻击路径的总风险值(算法3)。在获得攻击图中所有可能攻击路径的安全风险之后,就可以选择安全风险最高的攻击路径,并修复该路径上的漏洞。这里通过两个算法来实现对攻击图中攻击路径风险的评估,分别是攻击路径生成算法(算法2)和攻击路径总风险值评估算法(算法3)。
算法思想:在评估前,按照式(3)计算出所有主机上的漏洞的风险值,将这些漏洞风险值作为漏洞主机库cveHostlib。攻击路径算法中采用数组容器作为攻击路径集合的容器。将所有入度为0的节点作为攻击路径集合的第一个状态实体节点,然后在攻击图中查找下一个状态实体或漏洞实体,依次加入到攻击路径中,直到到达攻击目标target。在攻击路径总风险值算法中,通过对攻击路径中的漏洞实体进行遍历,在漏洞主机库中查找出遍历结果对应的风险值。通过对攻击路径中的漏洞实体风险值求和得出该攻击路径的总风险值。
算法2:攻击路径生成算法
Input:attackGraph,target,preinits//分别为攻击图,攻击目标,攻击图入度为0的初始实体集合
Output:attackPaths//攻击路径集合
attackPathBuild(attackGraph,target,preinits,attackPaths){
i=0
foreach(preinit:preinits){
i=i+1
j=0
attackPaths[i][j]=preinit
do{
//根据攻击图获取当前实体的前驱实体
preNode=getPre(preinit,attackGraph)
j=j+1
attackPaths[i][j]=preNode
} while(preNode!=target)
} // end of foreach
ReturnattackPaths
}
算法3:攻击路径总风险值算法
Input:attackPaths,cveHostlib//分别代表攻击路径集合,主机风险值库。
Output:risk//攻击路径集合风险值。
attackPathRisk(attackPaths,cveHostlib){
i=0
foreach(attackPath:attackPaths){
i=i+1
risk[i]=0
for(j=1;j //判断攻击路径当前节点类型是否为漏洞实体类型 if(iscveType(attackPath[j])){ risk[i]=risk[i]+getRiskByNode(cveHostlib,attackPath[j]) } } } Returnrisk } 本文以真实的工业控制系统作为实验背景,模拟攻击者从外网逐步入侵工业控制网络的过程,来验证本文所提出的脆弱性分析技术及漏洞修复策略。实验中配置了两个子网:办公网和工业控制网。办公网有1台服务器(10.0.202.3/10),工业控制网有1台H3C SR8805路由器、1台SCADA服务器(10.128.1.3/10)和3台嵌入式Linux工业控制设备(10.128.58.251/10-10.128.58.253/10),实验网络部署如图1所示。 图1 实验网络设置示意 攻击图的生成主要分为两个步骤:获取网络脆弱性信息和攻击图的构建。通过漏洞扫描工具对工业控制网络系统进行扫描,此时扫描结果已经具有了该系统中的所有漏洞信息。在漏洞信息的基础上,根据网络配置以及漏洞依赖关系,通过算法1进行攻击图的生成,生成结果如图2所示。 由图2可知,该攻击图中共有8个漏洞实体节点和9个状态实体节点。为方便描述,对其各个实体节点进行了1-17的编号。该攻击图主要将攻击目标设置为工业控制系统中的服务器和3个工控设备。通过算法2可以实现攻击图中攻击路径的生成。攻击者如果对工业控制系统中控制层的服务器进行攻击,共有两条攻击路径:1-2-4-10-16和1-3-5-10-16,通过这两条攻击路径最终获取在控制层的服务器上执行任意代码的权限。当对工业控制系统中的3个工控设备进行攻击时,也可以通过类似的步骤进行分析。 在网络安全领域,网络安全维护人员针对攻击图中所有的漏洞进行逐个修复显然是不现实的。因此,需要对其中的攻击路径进行评估,选取最具有价值的攻击路径,以选择修复策略。算法3描述了对攻击路径总体风险值的计算过程,该计算过程的核心是漏洞主机库的建立。根据式(3)可知,漏洞主机库的构建需要考虑漏洞本身的影响值和主机的资产评估影响因子。 漏洞本身的影响值是由历史漏洞情况和当前周期的具体情况决定的。使用脆弱性扫描工具Nessus对网络进行扫描统计,根据扫描结果计算出的漏洞影响值见表1(仅给出漏洞影响值的top10)。在第一次扫描后,计算出各个漏洞出现的概率,作为漏洞影响值(第1列);此后每4个月进行一次扫描,依次计算出各个漏洞出现的概率(第2列),根据式(2)(衰减因子取值α=0.2)可计算出当前周期各个漏洞对应的影响值(第3列)。因为工业控制网络中,新暴露出来的漏洞更容易被攻击者利用,因此当前周期的权重因子系数选为0.8。 图2 实验生成的攻击图 表1 漏洞影响值表 主机的资产评估影响因子如表2所示。目前由于工业控制网络系统的应用比较广泛,对于监控层、设备层和办公层的重视程度均不同。本文拟设监控层损失代价为7、设备层损失代价为4、办公层损失代价为2(第3列)。这里损失代价指的是该层被攻破后的总体损失。根据式(1)计算出该层中各个设备主机平均承担的损失值,并将该层中各个设备被攻破后的损失值作为该主机的资产评估影响因子(第4列)。 根据式(3),可以在漏洞本身的影响值(见表1)和主机的资产评估影响因子(见表2)的基础上构建主机漏洞库。主机漏洞库的建立过程其实是对不同主机(见表3第1列)的不同漏洞(见表3第2列)进行安全风险值的计算过程。利用式(3)得出安全风险值(见表3第5列)。主机漏洞库作为攻击路径评估过程的动态库,需要随着漏洞影响值的周期性变化而进行周期性地计算更新。 表2 工业控制网络中的分层资产评估影响因子指标 表3 与攻击图节点中相关的主机漏洞库 利用算法2可以得出攻击图中针对特定目标的所有的攻击路径。这里将监控主机10.128.1.3设置为攻击目标,则生成的攻击路径集合为[{1-2-4-10-16}和{1-3-5-10-16}],相应地有两种修复策略:(1)攻击路径{1-2-4-10-16}对应修复的漏洞实体节点(路由器上的漏洞CVE-2013-2340和主机10.128.1.3上的漏洞CVE-2002-1645);(2)攻击路径{1-3-5-10-16}对应修复主机10.0.202.3上的漏洞CVE2008-4932和主机10.128.1.3上的漏洞CVE-2002-1645。利用算法3求得两条攻击路径的总体漏洞风险值分别为0.312 90和0.348 68。因此,对攻击路径{1-3-5-10-16}对应的漏洞实体进行修复可作为修复策略的首选。 由于工业控制网络的安全问题日益严峻,迫切需要对安全脆弱性分析、安全加固等安全防护技术进行研究,因此本文利用攻击图技术对工业控制网络进行脆弱性分析,并基于反向、广度优先节点遍历算法生成攻击图。并提出了一种安全修复选择策略,利用工业控制网络主机资产的分层特点和漏洞的威胁程度来评估所有可能攻击路径的安全风险,进而选择安全风险最高的攻击路径进行修复,并在模拟网络环境中对所提出的算法及策略进行了可行性和合理性的验证。 [1] Phillips C, Swiler L P. A Graph-based System for Network-vulnerability Analysis[C]//Proceedings of the Workshop on New Security Paradigms. Virginia, USA: ACM, 1998:71-79. [2] Ammann P, Wijesekera D, Kaushik S. Scalable, Graph-based Network Vulnerability Analysis[C]//ACM Conference on Computer & Communications Security. Washington, DC:ACM, 2002: 217-224. [3] Ou X, Govindavajhala S, Appel A W. MulVAL: A Logic-based Network Security Analyzer[C]//Proceedings of the 14th Usenix Security Symposium. Baltimore: USENIX Association, 2005: 113-128. [4] Aguessy F X, Gaspard L, Bettan O, et al. Remediating Logical Attack Paths Using Information System Simulated Topologies[C]//Proceedings of C&ESAR 2014. Rennes. France:Hal.Archives-ouvertes.Fr, 2014:187-203 . [5] 高妮, 高岭, 贺毅岳,等. 基于贝叶斯攻击图的最优安全防护策略选择模型[J]. 计算机工程与应用, 2016, 52(11): 125-130. [6] 黄家辉, 冯冬芹, 王虹鉴. 基于攻击图的工控系统脆弱性量化方法[J]. 自动化学报, 2016(5): 792-798. [7] 黄慧萍, 肖世德, 孟祥印. 基于攻击树的工业控制系统信息安全风险评估[J]. 计算机应用研究, 2015, 32(10):3022-3025. [8] 万雪莲, 张京河. 基于攻、防的信息系统安全综合评估方法的研究[J]. 计算机科学, 2016, 43(s1):322-327. [9] 徐鑫, 张松年, 胡建伟. 基于任意函数地址的ASLR绕过技术研究[J]. 信息网络安全, 2016(7):47-52.3 实验分析
3.1 工业控制网络模拟场景
3.2 攻击图生成与攻击路径分析
3.3 漏洞主机库的构建
3.4 攻击路径的评估和修复选择策略
4 结 语