王晓凡 周天阳,2 臧艺超 朱俊虎,2
1(信息工程大学数学工程与先进计算国家重点实验室 河南 郑州 450001) 2(国家数字交换系统工程技术研究中心 河南 郑州 450001)
2019年以来,云计算、大数据、物联网、工业互联网、人工智能等新技术新应用大规模发展,网络安全风险融合叠加并快速演变。互联网技术应用不断模糊物理世界和虚拟世界界限,对整个经济社会发展的融合、渗透、驱动作用日益明显,带来的风险挑战也不断增大,网络空间威胁和风险日益增多[1]。在众多网络攻击形式中,渗透攻击威胁更大,特别是以高级可持续威胁(Advanced Persistent Threat,APT)为代表的渗透攻击,给国家、军队和企业带来了巨大的威胁[2]。APT攻击是某个组织针对特定对象展开的持续有效的攻击活动。当前,APT攻击逐步向各重要行业领域渗透,在重大活动和敏感时期更加猖獗。2019年全国“两会”、新中国成立70周年等重大活动期间,“蔓灵花”组织大幅扩充攻击窃密武器库,利用了数十个邮箱发送钓鱼邮件,攻击了近百个目标,向多台重要主机植入了攻击窃密武器,对我国党政机关、能源机构等重要信息系统实施大规模定向攻击[1]。因此,加强网络安全防护,加快网络安全核心技术创新突破成为关注的重点。在现有的网络安全技术中,渗透测试是最为有效的方法之一[3]。它是一种模拟真实攻击的方法,旨在评估计算机系统和网络的安全性[4]。
渗透测试主要包括前期交互、情报搜集、威胁建模、漏洞分析、渗透攻击、后渗透攻击、报告七个阶段[5]。其中,路径规划是在漏洞分析的基础上,为渗透攻击提供方向指导。当前,对渗透测试路径规划的研究存在两种不足。
第一是路径规划的准确性有偏差,原因在于建立的漏洞评价体系存在不足。文献[6-8]提出了基于CVSS的漏洞评分系统。CVSS是一个对漏洞定性评级的标准,它将漏洞的相关信息转换为具体的分数,同时提供多个指标便于对漏洞的评估[9]。这个标准主要是对漏洞的严重性和影响力进行综合评估,但是在反映漏洞利用的难度上存在一定的偏差。文献[10]提出了基于CVSS的改进的漏洞评价方法,加入了主机环境因素,并对时间因素建模评分,提高了漏洞评估的准确性,但是基于单一的CVSS标准进行评估,仍然存在一定的局限性。文献[11]提出了基于多源漏洞库的漏洞评估标准库,调用了公共平台枚举(Common Product Enumeration,CPE)平台枚举数据、公共漏洞披露(Common Vulnerabilities and Exposures,CVE)漏洞定义数据和公开漏洞评估语言(Open Vulnerability and Assessment Language,OVAL)漏洞评估数据,实现了对漏洞较为全面的评价,但是该评价方法无法对特定的漏洞及其所处的网络环境进行分析。文献[12]提出了基于知识图谱的扩展攻击图生成方法,通过对多源途径获取的漏洞相关信息进行融合,实现了对漏洞更全面更精确的评估。但是,渗透测试要模拟攻击者的行为,攻击者在对目标进行攻击时,更加注重对漏洞利用程序的评价,上述方法都忽略了漏洞利用程序评价在渗透测试过程中的重要性,使得结果的准确性出现偏差。
第二是面对大规模网络时,生成路径的效率不高。针对这个问题,文献[2]构建了分层结构的双层威胁渗透图和主机资源知识图谱,改善了攻击图状态空间爆炸的问题。文献[13]利用对目标环境的预处理和攻击模式的实例化构建大规模网络下的攻击图,实现了对多子网复杂网络拓扑的攻击图构建。文献[14]利用非关系型数据库Neo4j存储目标网络的所有信息,并使用宽度优先算法生成攻击路径。该方法后期生成路径的效率比较高,但是Neo4j数据库在进行大数据写入时性能较差,仍然影响方法整体的效率。大规模网络下渗透测试路径生成效率低的问题在上述方法中虽然得到了改善,但是仍然与现实需求存在一定的差距。
针对路径规划准确度不高和大规模网络下生成路径效率低的问题,本文提出一种基于漏洞利用程序评分的并行规划算法,通过漏洞利用程序评分提升路径规划的准确性,利用并行化技术提高路径的生成效率,解决了大规模网络渗透测试路径规划耗时长、不够准确的问题。
规划方法的整体框架如图1所示。
规划方法主要分为两步。第一步利用目标网络生成对应的连接关系图,连接关系图直观反映了目标网络节点间的连接关系,并通过有向边的权值表示节点的脆弱性。第二步利用并行最短路径搜索算法,搜索连接关系图中攻击节点到其他所有节点的最短路径,即为渗透测试路径。
1.1.1有向图构造
有向图的构造方法是:将目标网络中的实物节点抽象为有向图中的顶点,若两个节点可以直接访问,则存在一条由访问主机到被访问主机的有向边。
具体示例如图2(a)所示,这个网络由3个部分组成:互联网主机、服务器和内网主机。互联网主机可以访问服务器,但不能访问内网主机;服务器可以访问内网主机;内网主机可以访问服务器,但不能访问外网。抽象后的有向图如图2(b)所示。
(a) 目标网络 (b) 有向图图2 目标网络和抽象后的有向图示例
1.1.2边权值计算
有向图的边权值计算是通过扫描获取每条有向边尾节点代表的网络节点的漏洞信息,调用Metasploit查询对应漏洞利用程序的评级,对评级进行量化得到漏洞利用程序的评分,选取最低的评分作为边的权值。
Metasploit是一款常用的渗透测试工具,它集成了众多的漏洞利用程序。对于每一个漏洞利用程序,Metasploit都基于它对目标系统的潜在影响和可利用性而标记了一个Rank字段。渗透测试人员在使用时可以基于该字段对漏洞利用程序是否易于使用进行判断,同时也可以基于该字段对漏洞利用程序进行搜索、分类和排序。Metasploit的官方文档[15]对Rank字段的解释如表1所示。依据Rank值可以对漏洞利用程序评分,从而将网络中每一个节点的脆弱性进行量化。
表1 Metasploit漏洞利用程序评级标准
通过对表1漏洞利用程序评级标准的分析可以将7个评级分为3个等级:Excellent Ranking、Great Ranking和Good Ranking为第一等级;Normal Ranking单独为第二等级;Average Ranking、Low Ranking和Manual Ranking为第三等级。
由于规划方法是基于最短路径搜索的方法,在对评级进行量化的过程中,为了便于规划算法的利用,规定:第一等级评分最低,第三等级评分最高;量化后的评分应保证规划算法尽量选择第一等级,所以第二等级的最低评分应该大于第一等级最高评分的2倍。同理,第三等级的最低评分应该大于第二等级最高评分的2倍;此外,为减少规划路径经过节点的数量,同一等级内部评分的最高分应当小于最低分的2倍。
通过建立模型实现对漏洞利用程序评级的量化评分。具体的定义及规则如下:
定义1将表1中的Rank值的评分依次设为r1、r2、r3、r4、r5、r6、r7。其中:r1对应Excellent Ranking;r7对应Manual Ranking;其他以此类推。
定义2存在3个集合L1、L2、L3表示3个等级,其中:L1={r1,r2,r3};L2={r4};L3={r5,r6,r7}。
规则1r1 规则2∀ri∈Lp,rj∈Lq(p,q=1,2,3且p 规则3∀ri,rj∈Lp(p=1,2,3)则ri 依照以上定义及规则,可以得到下面的不等式组: (1) 该不等式组存在多组解,每组解均可满足规划方法的要求,任取其中一组解,令r1=3,则不等式组的解为: (2) 所以,依照Metasploit漏洞利用程序评级对应的量化评分如表2所示。 表2 Metasploit漏洞利用程序评级标准量化评分 1.2.1并行最短路径搜索算法 并行最短路径搜索算法通过对Dijkstra算法的并行化实现。Dijkstra算法是图论中解决最短路径问题的典型算法,同时适用于有向图和无向图的最短路径搜索。 Dijkstra算法并行化的思路是将有向图的所有节点平均分到各处理器,每个处理器先求出各自负责节点中距离的最小值,然后相互比较求出全局最小值,最后将最小值进行广播。 求全局最小值的方法是:基于二分法,每一轮,将处理器从1开始编号,1号处理器和2号处理器比较,3号处理器和4号处理器比较,以此类推,两个处理器之间较小的值进入下一轮,若剩下单个处理器则直接进入下一轮比较,经过多个轮次,得到全局最小值。以5个处理器为例求最小值,具体流程如图3所示。每个处理器收到广播的最小值后,更新自己分配到的节点的距离,同时记录最短路径。 图3 Dijkstra并行算法处理器合作求最小值示例 1.2.2并行算法效率分析和实现 并行算法主要基于消息传递接口(Message Passing Interface,MPI)实现。MPI主要用于实现网络中连接的多台计算机之间的进程间通信,构建大型分布式并行系统[16]。如算法1所示,设置0号进程负责读取连接关系图并进行任务分发,其他进程接收数据并进行最短路径搜索。 算法1并行Dijkstra 输入:图邻接矩阵a,总结点数n。 输出:最短路径。 1. function TaskDistribution(a,n) 2. if Processor==0 then 3. m=n/(ProcessorNumber-1) 4. for i=1 to ProcessorNumber do 5. MPISend(a[(i-1)*m],m) 6. end for 7. else 8. MPIRecv(a,m) 9. FindShortestPath(a,m) 10. end if 11. end function 12. function FindShortestPath(a,m) 13. for i=1 to n do 14. for j=1 to m do 15. if min>dist[j] then min=dist[j] 16. end if 17. end for 18. pn=ProcessorNumber 19. while pn>1 do 20. pn=pn/2 21. if ProcessorRank>pn then 22. MPISend(min) 23. else 24. temp=MPIRecv(min) 25. if min>temp then min=temp 26. end if 27. end if 28. end while 29. MPIBcast(min) 30. for j=1 to m do 31. if (min+a[j]) 32. dist[j]=min+a[j] 33. end if 34. end for 35. end for 36. end function 为了验证本文方法的有效性,基于虚拟化技术搭建了一个测试网络环境,网络拓扑如图4所示。 图4 测试网络拓扑 这是一个典型的企业网络,设置了互联网、DMZ区、办公内网和核心内网。防火墙策略是:同一网络下的主机可以互相访问;攻击机可以访问DMZ区服务器,但不能访问办公内网和核心内网;DMZ区服务器可以访问办公内网,但不能访问核心内网;办公内网的主机可以访问DMZ区服务器,但不能访问互联网;主机2和主机3可以访问核心内网中的主机4;核心内网主机不能访问其他网络。除攻击机外,各主机编号、存在的漏洞、对应利用程序评级和量化评分如表3所示。其中攻击机编号为0,防火墙通过软件实现,非实物节点。 表3 测试网络主机存在漏洞及利用程序评级 续表3 依据量化方法对每一个漏洞利用程序进行量化评分,结果如表4所示。 表4 测试网络主机漏洞利用程序量化评分 依照测试网络的网络拓扑,建立连接关系图,如图5所示。 图5 测试网络连接关系图 基于图5,通过并行Dijkstra算法得到的由攻击机到网络中各个节点的渗透测试路径见表5。利用得到的路径可以直接结合Metasploit中对应的漏洞利用程序,快速有效地对整个网络进行渗透测试。 表5 各节点规划渗透测试路径 通过查询美国国家漏洞数据库[17](National Vulnerability Database,NVD),得到测试网络中漏洞对应的CVSS评级和评分,见表6。 表6 测试网络漏洞CVSS评分 由于CVSS的评分为十分制,且分数越高表示漏洞评级越高,所以在进行对比实验时要将表4中的漏洞利用程序评分标准化,本文采用Min-Max标准化方法,具体的标准化公式为: (3) 式中:S为标准化的评分;S1为标准化前的评分;Min为评分标准化前的最小值;Max为评分标准化前的最大值。依照式(3)将漏洞利用程序评分标准化的结果见表7。漏洞及漏洞利用程序评级对比见表8。 表7 漏洞利用程序标准化评分 续表7 通过对比发现,漏洞CVE-2014-0476、CVE-2017-0199、CVE-2016-0189、CVE-2016-4997、CVE-2014-4114、CVE-2017-7494、CVE-2008-4250的CVSS评分与漏洞利用程序标准化评分较为接近。 对于漏洞CVE-2017-9805,CVSS的评分为6.8,漏洞利用程序标准化评分为10,CVSS评分远小于漏洞利用程序标准化评分,该漏洞是针对Struts2的远程代码执行漏洞,能够直接获取目标主机的控制权限,因而该漏洞在渗透测试中的优先级比较高。 对于漏洞CVE-2013-1300,CVSS的评分为7.2,漏洞利用程序标准化评分为1.3,CVSS评分远大于漏洞利用程序标准化评分,通过表8同样可以发现这个结果。该漏洞是针对部分Windows系统的提权漏洞,该漏洞的触发需要成功获取主机的部分权限,因而在模拟攻击者进行渗透测试时,该漏洞的优先级并不高。 实验结果表明,基于漏洞利用程序的量化评分在进行渗透测试时更加符合实际需求,具有更高的准确性。 文献[18]中提出了基于PANAG模型的攻击路径预测方法,该方法所要解决的问题与本文相似。 为了验证规划算法能够快速实现渗透测试路径规划,设计实验比较本文方法和文献[18]方法的运算速度。实验思路是在测试网络中随机增加主机节点和漏洞,并任意修改网络拓扑,比较两种方法生成渗透路径的速度,其中,本文方法并行处理器个数为4。运行算法的实验环境是一台台式机,处理器为四核四线程的Intel i5-6500,内存大小为16 GB,硬盘大小为1 TB,操作系统为Windows 7 SP3旗舰版,MPI程序版本为Microsoft MPI 10.1.12498.18。 经过测试,两种算法计算不同规模网络所耗费的时间绘制成如图6所示折线图。可以看出,随着节点数的增加,本文方法的计算时间明显少于文献[18]方法的计算时间。 实验结果说明,使用Dijkstra并行算法可以更加快速地完成渗透测试路径规划,极大地提高了渗透测试的效率。 图6 攻击路径生成时间折线图 渗透测试是评估网络安全性的重要手段之一。为了解决大规模网络渗透测试路径规划速度慢、执行效率低的问题,本文提出一种并行条件下基于漏洞利用程序评级的路径规划算法,该算法通过对漏洞利用程序的量化评分和Dijkstra算法的并行化,实现了路径的快速规划和渗透测试的高效执行。实验结果表明,该规划算法能够快速规划出准确有效的渗透测试路径,提高渗透测试的效率。 本文算法主要应用于完全条件下大规模网络的渗透测试攻击规划。下一步研究的主要方向为非完全条件下大规模网络的渗透测试路径规划。2ri。
1.2 渗透测试路径规划
2 实验验证与分析
2.1 连接关系图生成
2.2 渗透测试路径规划
2.3 规划算法准确性对比
2.4 规划算法效率对比
3 结 语