王曉凡 周天陽,2 臧藝超 朱俊虎,2
1(信息工程大學(xué)數(shù)學(xué)工程與先進(jìn)計算國家重點實驗室 河南 鄭州 450001) 2(國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心 河南 鄭州 450001)
2019年以來,云計算、大數(shù)據(jù)、物聯(lián)網(wǎng)、工業(yè)互聯(lián)網(wǎng)、人工智能等新技術(shù)新應(yīng)用大規(guī)模發(fā)展,網(wǎng)絡(luò)安全風(fēng)險融合疊加并快速演變。互聯(lián)網(wǎng)技術(shù)應(yīng)用不斷模糊物理世界和虛擬世界界限,對整個經(jīng)濟(jì)社會發(fā)展的融合、滲透、驅(qū)動作用日益明顯,帶來的風(fēng)險挑戰(zhàn)也不斷增大,網(wǎng)絡(luò)空間威脅和風(fēng)險日益增多[1]。在眾多網(wǎng)絡(luò)攻擊形式中,滲透攻擊威脅更大,特別是以高級可持續(xù)威脅(Advanced Persistent Threat,APT)為代表的滲透攻擊,給國家、軍隊和企業(yè)帶來了巨大的威脅[2]。APT攻擊是某個組織針對特定對象展開的持續(xù)有效的攻擊活動。當(dāng)前,APT攻擊逐步向各重要行業(yè)領(lǐng)域滲透,在重大活動和敏感時期更加猖獗。2019年全國“兩會”、新中國成立70周年等重大活動期間,“蔓靈花”組織大幅擴(kuò)充攻擊竊密武器庫,利用了數(shù)十個郵箱發(fā)送釣魚郵件,攻擊了近百個目標(biāo),向多臺重要主機(jī)植入了攻擊竊密武器,對我國黨政機(jī)關(guān)、能源機(jī)構(gòu)等重要信息系統(tǒng)實施大規(guī)模定向攻擊[1]。因此,加強(qiáng)網(wǎng)絡(luò)安全防護(hù),加快網(wǎng)絡(luò)安全核心技術(shù)創(chuàng)新突破成為關(guān)注的重點。在現(xiàn)有的網(wǎng)絡(luò)安全技術(shù)中,滲透測試是最為有效的方法之一[3]。它是一種模擬真實攻擊的方法,旨在評估計算機(jī)系統(tǒng)和網(wǎng)絡(luò)的安全性[4]。
滲透測試主要包括前期交互、情報搜集、威脅建模、漏洞分析、滲透攻擊、后滲透攻擊、報告七個階段[5]。其中,路徑規(guī)劃是在漏洞分析的基礎(chǔ)上,為滲透攻擊提供方向指導(dǎo)。當(dāng)前,對滲透測試路徑規(guī)劃的研究存在兩種不足。
第一是路徑規(guī)劃的準(zhǔn)確性有偏差,原因在于建立的漏洞評價體系存在不足。文獻(xiàn)[6-8]提出了基于CVSS的漏洞評分系統(tǒng)。CVSS是一個對漏洞定性評級的標(biāo)準(zhǔn),它將漏洞的相關(guān)信息轉(zhuǎn)換為具體的分?jǐn)?shù),同時提供多個指標(biāo)便于對漏洞的評估[9]。這個標(biāo)準(zhǔn)主要是對漏洞的嚴(yán)重性和影響力進(jìn)行綜合評估,但是在反映漏洞利用的難度上存在一定的偏差。文獻(xiàn)[10]提出了基于CVSS的改進(jìn)的漏洞評價方法,加入了主機(jī)環(huán)境因素,并對時間因素建模評分,提高了漏洞評估的準(zhǔn)確性,但是基于單一的CVSS標(biāo)準(zhǔn)進(jìn)行評估,仍然存在一定的局限性。文獻(xiàn)[11]提出了基于多源漏洞庫的漏洞評估標(biāo)準(zhǔn)庫,調(diào)用了公共平臺枚舉(Common Product Enumeration,CPE)平臺枚舉數(shù)據(jù)、公共漏洞披露(Common Vulnerabilities and Exposures,CVE)漏洞定義數(shù)據(jù)和公開漏洞評估語言(Open Vulnerability and Assessment Language,OVAL)漏洞評估數(shù)據(jù),實現(xiàn)了對漏洞較為全面的評價,但是該評價方法無法對特定的漏洞及其所處的網(wǎng)絡(luò)環(huán)境進(jìn)行分析。文獻(xiàn)[12]提出了基于知識圖譜的擴(kuò)展攻擊圖生成方法,通過對多源途徑獲取的漏洞相關(guān)信息進(jìn)行融合,實現(xiàn)了對漏洞更全面更精確的評估。但是,滲透測試要模擬攻擊者的行為,攻擊者在對目標(biāo)進(jìn)行攻擊時,更加注重對漏洞利用程序的評價,上述方法都忽略了漏洞利用程序評價在滲透測試過程中的重要性,使得結(jié)果的準(zhǔn)確性出現(xiàn)偏差。
第二是面對大規(guī)模網(wǎng)絡(luò)時,生成路徑的效率不高。針對這個問題,文獻(xiàn)[2]構(gòu)建了分層結(jié)構(gòu)的雙層威脅滲透圖和主機(jī)資源知識圖譜,改善了攻擊圖狀態(tài)空間爆炸的問題。文獻(xiàn)[13]利用對目標(biāo)環(huán)境的預(yù)處理和攻擊模式的實例化構(gòu)建大規(guī)模網(wǎng)絡(luò)下的攻擊圖,實現(xiàn)了對多子網(wǎng)復(fù)雜網(wǎng)絡(luò)拓?fù)涞墓魣D構(gòu)建。文獻(xiàn)[14]利用非關(guān)系型數(shù)據(jù)庫Neo4j存儲目標(biāo)網(wǎng)絡(luò)的所有信息,并使用寬度優(yōu)先算法生成攻擊路徑。該方法后期生成路徑的效率比較高,但是Neo4j數(shù)據(jù)庫在進(jìn)行大數(shù)據(jù)寫入時性能較差,仍然影響方法整體的效率。大規(guī)模網(wǎng)絡(luò)下滲透測試路徑生成效率低的問題在上述方法中雖然得到了改善,但是仍然與現(xiàn)實需求存在一定的差距。
針對路徑規(guī)劃準(zhǔn)確度不高和大規(guī)模網(wǎng)絡(luò)下生成路徑效率低的問題,本文提出一種基于漏洞利用程序評分的并行規(guī)劃算法,通過漏洞利用程序評分提升路徑規(guī)劃的準(zhǔn)確性,利用并行化技術(shù)提高路徑的生成效率,解決了大規(guī)模網(wǎng)絡(luò)滲透測試路徑規(guī)劃耗時長、不夠準(zhǔn)確的問題。
規(guī)劃方法的整體框架如圖1所示。
規(guī)劃方法主要分為兩步。第一步利用目標(biāo)網(wǎng)絡(luò)生成對應(yīng)的連接關(guān)系圖,連接關(guān)系圖直觀反映了目標(biāo)網(wǎng)絡(luò)節(jié)點間的連接關(guān)系,并通過有向邊的權(quán)值表示節(jié)點的脆弱性。第二步利用并行最短路徑搜索算法,搜索連接關(guān)系圖中攻擊節(jié)點到其他所有節(jié)點的最短路徑,即為滲透測試路徑。
1.1.1有向圖構(gòu)造
有向圖的構(gòu)造方法是:將目標(biāo)網(wǎng)絡(luò)中的實物節(jié)點抽象為有向圖中的頂點,若兩個節(jié)點可以直接訪問,則存在一條由訪問主機(jī)到被訪問主機(jī)的有向邊。
具體示例如圖2(a)所示,這個網(wǎng)絡(luò)由3個部分組成:互聯(lián)網(wǎng)主機(jī)、服務(wù)器和內(nèi)網(wǎng)主機(jī)。互聯(lián)網(wǎng)主機(jī)可以訪問服務(wù)器,但不能訪問內(nèi)網(wǎng)主機(jī);服務(wù)器可以訪問內(nèi)網(wǎng)主機(jī);內(nèi)網(wǎng)主機(jī)可以訪問服務(wù)器,但不能訪問外網(wǎng)。抽象后的有向圖如圖2(b)所示。

(a) 目標(biāo)網(wǎng)絡(luò) (b) 有向圖圖2 目標(biāo)網(wǎng)絡(luò)和抽象后的有向圖示例
1.1.2邊權(quán)值計算
有向圖的邊權(quán)值計算是通過掃描獲取每條有向邊尾節(jié)點代表的網(wǎng)絡(luò)節(jié)點的漏洞信息,調(diào)用Metasploit查詢對應(yīng)漏洞利用程序的評級,對評級進(jìn)行量化得到漏洞利用程序的評分,選取最低的評分作為邊的權(quán)值。
Metasploit是一款常用的滲透測試工具,它集成了眾多的漏洞利用程序。對于每一個漏洞利用程序,Metasploit都基于它對目標(biāo)系統(tǒng)的潛在影響和可利用性而標(biāo)記了一個Rank字段。滲透測試人員在使用時可以基于該字段對漏洞利用程序是否易于使用進(jìn)行判斷,同時也可以基于該字段對漏洞利用程序進(jìn)行搜索、分類和排序。Metasploit的官方文檔[15]對Rank字段的解釋如表1所示。依據(jù)Rank值可以對漏洞利用程序評分,從而將網(wǎng)絡(luò)中每一個節(jié)點的脆弱性進(jìn)行量化。

表1 Metasploit漏洞利用程序評級標(biāo)準(zhǔn)
通過對表1漏洞利用程序評級標(biāo)準(zhǔn)的分析可以將7個評級分為3個等級:Excellent Ranking、Great Ranking和Good Ranking為第一等級;Normal Ranking單獨(dú)為第二等級;Average Ranking、Low Ranking和Manual Ranking為第三等級。
由于規(guī)劃方法是基于最短路徑搜索的方法,在對評級進(jìn)行量化的過程中,為了便于規(guī)劃算法的利用,規(guī)定:第一等級評分最低,第三等級評分最高;量化后的評分應(yīng)保證規(guī)劃算法盡量選擇第一等級,所以第二等級的最低評分應(yīng)該大于第一等級最高評分的2倍。同理,第三等級的最低評分應(yīng)該大于第二等級最高評分的2倍;此外,為減少規(guī)劃路徑經(jīng)過節(jié)點的數(shù)量,同一等級內(nèi)部評分的最高分應(yīng)當(dāng)小于最低分的2倍。
通過建立模型實現(xiàn)對漏洞利用程序評級的量化評分。具體的定義及規(guī)則如下:
定義1將表1中的Rank值的評分依次設(shè)為r1、r2、r3、r4、r5、r6、r7。其中:r1對應(yīng)Excellent Ranking;r7對應(yīng)Manual Ranking;其他以此類推。
定義2存在3個集合L1、L2、L3表示3個等級,其中:L1={r1,r2,r3};L2={r4};L3={r5,r6,r7}。
規(guī)則1r1 規(guī)則2?ri∈Lp,rj∈Lq(p,q=1,2,3且p 規(guī)則3?ri,rj∈Lp(p=1,2,3)則ri 依照以上定義及規(guī)則,可以得到下面的不等式組: (1) 該不等式組存在多組解,每組解均可滿足規(guī)劃方法的要求,任取其中一組解,令r1=3,則不等式組的解為: (2) 所以,依照Metasploit漏洞利用程序評級對應(yīng)的量化評分如表2所示。 表2 Metasploit漏洞利用程序評級標(biāo)準(zhǔn)量化評分 1.2.1并行最短路徑搜索算法 并行最短路徑搜索算法通過對Dijkstra算法的并行化實現(xiàn)。Dijkstra算法是圖論中解決最短路徑問題的典型算法,同時適用于有向圖和無向圖的最短路徑搜索。 Dijkstra算法并行化的思路是將有向圖的所有節(jié)點平均分到各處理器,每個處理器先求出各自負(fù)責(zé)節(jié)點中距離的最小值,然后相互比較求出全局最小值,最后將最小值進(jìn)行廣播。 求全局最小值的方法是:基于二分法,每一輪,將處理器從1開始編號,1號處理器和2號處理器比較,3號處理器和4號處理器比較,以此類推,兩個處理器之間較小的值進(jìn)入下一輪,若剩下單個處理器則直接進(jìn)入下一輪比較,經(jīng)過多個輪次,得到全局最小值。以5個處理器為例求最小值,具體流程如圖3所示。每個處理器收到廣播的最小值后,更新自己分配到的節(jié)點的距離,同時記錄最短路徑。 圖3 Dijkstra并行算法處理器合作求最小值示例 1.2.2并行算法效率分析和實現(xiàn) 并行算法主要基于消息傳遞接口(Message Passing Interface,MPI)實現(xiàn)。MPI主要用于實現(xiàn)網(wǎng)絡(luò)中連接的多臺計算機(jī)之間的進(jìn)程間通信,構(gòu)建大型分布式并行系統(tǒng)[16]。如算法1所示,設(shè)置0號進(jìn)程負(fù)責(zé)讀取連接關(guān)系圖并進(jìn)行任務(wù)分發(fā),其他進(jìn)程接收數(shù)據(jù)并進(jìn)行最短路徑搜索。 算法1并行Dijkstra 輸入:圖鄰接矩陣a,總結(jié)點數(shù)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 為了驗證本文方法的有效性,基于虛擬化技術(shù)搭建了一個測試網(wǎng)絡(luò)環(huán)境,網(wǎng)絡(luò)拓?fù)淙鐖D4所示。 圖4 測試網(wǎng)絡(luò)拓?fù)?/p> 這是一個典型的企業(yè)網(wǎng)絡(luò),設(shè)置了互聯(lián)網(wǎng)、DMZ區(qū)、辦公內(nèi)網(wǎng)和核心內(nèi)網(wǎng)。防火墻策略是:同一網(wǎng)絡(luò)下的主機(jī)可以互相訪問;攻擊機(jī)可以訪問DMZ區(qū)服務(wù)器,但不能訪問辦公內(nèi)網(wǎng)和核心內(nèi)網(wǎng);DMZ區(qū)服務(wù)器可以訪問辦公內(nèi)網(wǎng),但不能訪問核心內(nèi)網(wǎng);辦公內(nèi)網(wǎng)的主機(jī)可以訪問DMZ區(qū)服務(wù)器,但不能訪問互聯(lián)網(wǎng);主機(jī)2和主機(jī)3可以訪問核心內(nèi)網(wǎng)中的主機(jī)4;核心內(nèi)網(wǎng)主機(jī)不能訪問其他網(wǎng)絡(luò)。除攻擊機(jī)外,各主機(jī)編號、存在的漏洞、對應(yīng)利用程序評級和量化評分如表3所示。其中攻擊機(jī)編號為0,防火墻通過軟件實現(xiàn),非實物節(jié)點。 表3 測試網(wǎng)絡(luò)主機(jī)存在漏洞及利用程序評級 續(xù)表3 依據(jù)量化方法對每一個漏洞利用程序進(jìn)行量化評分,結(jié)果如表4所示。 表4 測試網(wǎng)絡(luò)主機(jī)漏洞利用程序量化評分 依照測試網(wǎng)絡(luò)的網(wǎng)絡(luò)拓?fù)?建立連接關(guān)系圖,如圖5所示。 圖5 測試網(wǎng)絡(luò)連接關(guān)系圖 基于圖5,通過并行Dijkstra算法得到的由攻擊機(jī)到網(wǎng)絡(luò)中各個節(jié)點的滲透測試路徑見表5。利用得到的路徑可以直接結(jié)合Metasploit中對應(yīng)的漏洞利用程序,快速有效地對整個網(wǎng)絡(luò)進(jìn)行滲透測試。 表5 各節(jié)點規(guī)劃滲透測試路徑 通過查詢美國國家漏洞數(shù)據(jù)庫[17](National Vulnerability Database,NVD),得到測試網(wǎng)絡(luò)中漏洞對應(yīng)的CVSS評級和評分,見表6。 表6 測試網(wǎng)絡(luò)漏洞CVSS評分 由于CVSS的評分為十分制,且分?jǐn)?shù)越高表示漏洞評級越高,所以在進(jìn)行對比實驗時要將表4中的漏洞利用程序評分標(biāo)準(zhǔn)化,本文采用Min-Max標(biāo)準(zhǔn)化方法,具體的標(biāo)準(zhǔn)化公式為: (3) 式中:S為標(biāo)準(zhǔn)化的評分;S1為標(biāo)準(zhǔn)化前的評分;Min為評分標(biāo)準(zhǔn)化前的最小值;Max為評分標(biāo)準(zhǔn)化前的最大值。依照式(3)將漏洞利用程序評分標(biāo)準(zhǔn)化的結(jié)果見表7。漏洞及漏洞利用程序評級對比見表8。 表7 漏洞利用程序標(biāo)準(zhǔn)化評分 續(xù)表7 通過對比發(fā)現(xiàn),漏洞CVE-2014-0476、CVE-2017-0199、CVE-2016-0189、CVE-2016-4997、CVE-2014-4114、CVE-2017-7494、CVE-2008-4250的CVSS評分與漏洞利用程序標(biāo)準(zhǔn)化評分較為接近。 對于漏洞CVE-2017-9805,CVSS的評分為6.8,漏洞利用程序標(biāo)準(zhǔn)化評分為10,CVSS評分遠(yuǎn)小于漏洞利用程序標(biāo)準(zhǔn)化評分,該漏洞是針對Struts2的遠(yuǎn)程代碼執(zhí)行漏洞,能夠直接獲取目標(biāo)主機(jī)的控制權(quán)限,因而該漏洞在滲透測試中的優(yōu)先級比較高。 對于漏洞CVE-2013-1300,CVSS的評分為7.2,漏洞利用程序標(biāo)準(zhǔn)化評分為1.3,CVSS評分遠(yuǎn)大于漏洞利用程序標(biāo)準(zhǔn)化評分,通過表8同樣可以發(fā)現(xiàn)這個結(jié)果。該漏洞是針對部分Windows系統(tǒng)的提權(quán)漏洞,該漏洞的觸發(fā)需要成功獲取主機(jī)的部分權(quán)限,因而在模擬攻擊者進(jìn)行滲透測試時,該漏洞的優(yōu)先級并不高。 實驗結(jié)果表明,基于漏洞利用程序的量化評分在進(jìn)行滲透測試時更加符合實際需求,具有更高的準(zhǔn)確性。 文獻(xiàn)[18]中提出了基于PANAG模型的攻擊路徑預(yù)測方法,該方法所要解決的問題與本文相似。 為了驗證規(guī)劃算法能夠快速實現(xiàn)滲透測試路徑規(guī)劃,設(shè)計實驗比較本文方法和文獻(xiàn)[18]方法的運(yùn)算速度。實驗思路是在測試網(wǎng)絡(luò)中隨機(jī)增加主機(jī)節(jié)點和漏洞,并任意修改網(wǎng)絡(luò)拓?fù)?比較兩種方法生成滲透路徑的速度,其中,本文方法并行處理器個數(shù)為4。運(yùn)行算法的實驗環(huán)境是一臺臺式機(jī),處理器為四核四線程的Intel i5-6500,內(nèi)存大小為16 GB,硬盤大小為1 TB,操作系統(tǒng)為Windows 7 SP3旗艦版,MPI程序版本為Microsoft MPI 10.1.12498.18。 經(jīng)過測試,兩種算法計算不同規(guī)模網(wǎng)絡(luò)所耗費(fèi)的時間繪制成如圖6所示折線圖。可以看出,隨著節(jié)點數(shù)的增加,本文方法的計算時間明顯少于文獻(xiàn)[18]方法的計算時間。 實驗結(jié)果說明,使用Dijkstra并行算法可以更加快速地完成滲透測試路徑規(guī)劃,極大地提高了滲透測試的效率。 圖6 攻擊路徑生成時間折線圖 滲透測試是評估網(wǎng)絡(luò)安全性的重要手段之一。為了解決大規(guī)模網(wǎng)絡(luò)滲透測試路徑規(guī)劃速度慢、執(zhí)行效率低的問題,本文提出一種并行條件下基于漏洞利用程序評級的路徑規(guī)劃算法,該算法通過對漏洞利用程序的量化評分和Dijkstra算法的并行化,實現(xiàn)了路徑的快速規(guī)劃和滲透測試的高效執(zhí)行。實驗結(jié)果表明,該規(guī)劃算法能夠快速規(guī)劃出準(zhǔn)確有效的滲透測試路徑,提高滲透測試的效率。 本文算法主要應(yīng)用于完全條件下大規(guī)模網(wǎng)絡(luò)的滲透測試攻擊規(guī)劃。下一步研究的主要方向為非完全條件下大規(guī)模網(wǎng)絡(luò)的滲透測試路徑規(guī)劃。2ri。

1.2 滲透測試路徑規(guī)劃


2 實驗驗證與分析



2.1 連接關(guān)系圖生成


2.2 滲透測試路徑規(guī)劃

2.3 規(guī)劃算法準(zhǔn)確性對比



2.4 規(guī)劃算法效率對比

3 結(jié) 語