蔡勇平,朱士瑞,許曉東
(1.江蘇大學(xué) 計(jì)算機(jī)科學(xué)與通信工程學(xué)院,江蘇 鎮(zhèn)江 212013;2.江蘇大學(xué)信息化中心,江蘇 鎮(zhèn)江 212013)
當(dāng)前,網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)的復(fù)雜性越來越高,網(wǎng)絡(luò)攻擊手段也更加復(fù)雜化和多樣化。為了對(duì)網(wǎng)絡(luò)安全制定更好的防御措施,需要對(duì)各種復(fù)雜的網(wǎng)絡(luò)攻擊行為進(jìn)行形式化描述。目前,學(xué)術(shù)界已提出攻擊語言、攻擊樹、攻擊網(wǎng)和攻擊圖等建模方法[1]。攻擊圖能夠徹底找出網(wǎng)絡(luò)中安全漏洞的所有關(guān)聯(lián),并對(duì)網(wǎng)絡(luò)中各主機(jī)上的脆弱性關(guān)聯(lián)起來進(jìn)行綜合分析,用圖的方式將所有攻擊路徑展現(xiàn)出來。安全管理人員利用攻擊圖可以直觀觀察到網(wǎng)絡(luò)中各脆弱性之間的關(guān)系,然后選擇最小的代價(jià)對(duì)網(wǎng)絡(luò)脆弱性進(jìn)行鞏固防御。
但是,隨著復(fù)雜網(wǎng)絡(luò)中主機(jī)數(shù)量的增加,生成的攻擊圖異常復(fù)雜,極大地影響了它的可視性。為此,研究人員提出了一些方法。例如,文獻(xiàn)[2]為了解決這一問題,提出了不包括定量測(cè)量的標(biāo)準(zhǔn)安全評(píng)估基線,并使用CVSS作為一個(gè)標(biāo)準(zhǔn)的復(fù)合評(píng)分系統(tǒng),但不能檢測(cè)漏洞之間的關(guān)聯(lián)性;文獻(xiàn)[3]為了解決漏洞之間的關(guān)聯(lián)性,攻擊圖技術(shù)被用于開發(fā)識(shí)別企業(yè)網(wǎng)絡(luò)的多級(jí)攻擊;文獻(xiàn)[4]則重點(diǎn)研究了攻擊圖的生成和改進(jìn)算法的復(fù)雜度。這項(xiàng)研究工作的主要優(yōu)點(diǎn)是考慮了企業(yè)網(wǎng)絡(luò)中脆弱點(diǎn)之間的相互關(guān)系。但是,在大規(guī)模網(wǎng)絡(luò)中,生成的攻擊圖過于復(fù)雜,無法被安全管理人員直接理解和使用。為了解決這一問題,文獻(xiàn)[5]試圖通過化簡(jiǎn)數(shù)據(jù)來改進(jìn)攻擊圖的可視性,但是并沒有從根本上解決這一問題。為此,Sawila和Ou等[6]將Google的頁面分級(jí)方法引入攻擊圖中節(jié)點(diǎn)的重要性計(jì)算中。
本文提出了一種基于攻擊圖的空間復(fù)雜性優(yōu)化算法,將復(fù)雜的攻擊圖轉(zhuǎn)換成一種只包含攻擊者、漏洞結(jié)點(diǎn)和攻擊目標(biāo)的簡(jiǎn)化圖,增大了攻擊圖的可用性,為安全管理人員制定更加精準(zhǔn)的系統(tǒng)安全防范措施提出了可靠意見。
攻擊圖是為了發(fā)現(xiàn)復(fù)雜網(wǎng)絡(luò)中存在的攻擊路徑,通過綜合攻擊者、漏洞結(jié)點(diǎn)、攻擊目標(biāo)主機(jī)和網(wǎng)絡(luò)連接關(guān)系等因素,提出的一種描述網(wǎng)絡(luò)安全狀態(tài)的表示形式。攻擊者對(duì)網(wǎng)絡(luò)目標(biāo)進(jìn)行攻擊時(shí),首先利用某個(gè)主機(jī)上的脆弱點(diǎn)來獲得某個(gè)權(quán)限,然后在此基礎(chǔ)上發(fā)起新的攻擊。如此反復(fù),直至攻擊者達(dá)到其攻擊的最終目標(biāo)。因此,攻擊者實(shí)施的過程是從前提網(wǎng)絡(luò)狀態(tài)到結(jié)果網(wǎng)絡(luò)狀態(tài)的躍遷過程。
定義1:攻擊圖。攻擊圖是一個(gè)四元組T=(S,τ,S0,SG),其中S表示狀態(tài)集,顯示系統(tǒng)中存在可能遭受的攻擊路徑,由系統(tǒng)中漏洞之間的關(guān)聯(lián)關(guān)系描述;τ∈S×S是一個(gè)傳遞函數(shù),指的是攻擊之間的關(guān)系,由攻擊間的因果聯(lián)系和網(wǎng)絡(luò)連接狀態(tài)決定;S0∈S是開始狀態(tài)集,表示攻擊者首先發(fā)起的攻擊,如進(jìn)行拓?fù)鋻呙璧?;SG∈S是成功狀態(tài)集,表示滿足攻擊者攻擊目的的攻擊狀態(tài),同時(shí)也是攻擊者的最后一步攻擊。
定義2:攻擊路徑。對(duì)于一個(gè)目標(biāo)狀態(tài)Sn∈SG,如果從初始狀態(tài)S0開始,存在一組狀態(tài)序列 S1,S2,…,Sn-1,使得 (Si,Si+1)∈ τ,0 < i< n-1,則稱狀態(tài)序列S0,S1,…,Sn是一條攻擊路徑。
定義3:脆弱點(diǎn),指網(wǎng)絡(luò)系統(tǒng)中存在的漏洞。本文用通用漏洞評(píng)分系統(tǒng)(Common Vulnerability Scoring System)CVSS來表示脆弱點(diǎn)的強(qiáng)弱。
定義4:攻擊復(fù)雜度。脆弱點(diǎn)的攻擊復(fù)雜度是用來衡量攻擊者成功利用該脆弱點(diǎn)的難易程度。為了更準(zhǔn)確闡述本文所用的方法,本文只取最后root權(quán)限的攻擊結(jié)果。
脆弱點(diǎn)的攻擊復(fù)雜度是計(jì)算脆弱點(diǎn)被成功利用概率的基礎(chǔ)。它受多種因素的影響,不容易計(jì)算。本文參考汪立冬等[7]人對(duì)脆弱點(diǎn)攻擊復(fù)雜度分級(jí)的思想,結(jié)合實(shí)際情況做出修改,將脆弱點(diǎn)的攻擊復(fù)雜度分為5級(jí),如表1所示,以10為滿值。攻擊復(fù)雜度越趨近于10,越不容易攻擊成功。
表1 攻擊復(fù)雜度量化標(biāo)準(zhǔn)
攻擊圖模型的生成采用了MulVal工具。MulVal工具是一種多主機(jī)、多級(jí)漏洞分析的工具,是一種被安全從業(yè)人員利用的研究工具,是一種對(duì)網(wǎng)絡(luò)風(fēng)險(xiǎn)主動(dòng)探測(cè)的工具,可以有效檢測(cè)到網(wǎng)絡(luò)的配置信息。MulVal常用來生成網(wǎng)絡(luò)攻擊圖,生成攻擊圖的時(shí)間復(fù)雜度在O(n2)和O(n3)之間。
MulVal的設(shè)計(jì)原理中,大部分的配置信息可以使用數(shù)據(jù)記錄(Datalog)元組的方式來表示。大部分的攻擊技巧和系統(tǒng)安全語義可以使用數(shù)據(jù)記錄規(guī)則分類。一個(gè)服務(wù)程序中暴露出來的可以導(dǎo)致權(quán)限提升的規(guī)則可以表示如下:
execCode(Attacker,Host,User):-networkService(Ho st,Program,Protocol,Port,User),
vulExists(Host,VulID,Program,remoteExploit,privEscalation),
netAccess(Attacker,Host,Protocol,Port)
MulVal推理引擎采用了一個(gè)名為XSB[8]、由StonyBrook開發(fā)的建立在邏輯學(xué)理論基礎(chǔ)上的Prolog系統(tǒng)。它基于輸入的關(guān)鍵因子評(píng)估數(shù)據(jù)記錄之間的相互關(guān)系。
MulVal工具生成攻擊圖時(shí),主要依賴于網(wǎng)絡(luò)系統(tǒng)中本身存在的脆弱性信息、網(wǎng)絡(luò)中主機(jī)端口開放情況以及信息系統(tǒng)內(nèi)部的配置等信息。網(wǎng)絡(luò)的脆弱性信息主要從傳統(tǒng)的漏洞掃描器中獲得。不同的漏洞掃描器會(huì)產(chǎn)生不同的掃描報(bào)告,這就要求該攻擊圖生成工具有適配器的功能去適配不同的漏洞掃描系統(tǒng)產(chǎn)生的文件。如圖1所示,本地?cái)?shù)據(jù)庫同步NVD(National Vulnerability Database)[9]數(shù) 據(jù), 漏洞掃描器結(jié)合本地同步數(shù)據(jù)庫,對(duì)局域網(wǎng)內(nèi)脆弱性漏洞信息進(jìn)行掃描。MulVal工具提供了兩種漏洞掃描器掃描報(bào)告的轉(zhuǎn)化適配器,一種是OVAL掃描器,一種是Nessus漏洞掃描器。適配器的功能主要是將漏洞掃描器產(chǎn)生的報(bào)告文件規(guī)劃為統(tǒng)一的格式,該格式的文件結(jié)合網(wǎng)絡(luò)的配置信息能重新整合成一個(gè)標(biāo)準(zhǔn)的攻擊圖,從而生成工具M(jìn)ulVal的輸入文件,可以使用MulVal生成標(biāo)準(zhǔn)的攻擊圖模型。
圖1 漏洞掃描器報(bào)告適配方式
通過MulVal生成的攻擊圖可能太大和過于復(fù)雜,因此提出了一個(gè)將攻擊圖的空間復(fù)雜性優(yōu)化為簡(jiǎn)化圖的算法。該算法將復(fù)雜攻擊圖轉(zhuǎn)換成只包含攻擊者、漏洞結(jié)點(diǎn)和攻擊目標(biāo)的簡(jiǎn)化圖,很好展示攻擊者在漏洞之間的動(dòng)向。具體的空間復(fù)雜性優(yōu)化算法流程如圖2所示,分為4個(gè)步驟:
步驟1:找到攻擊目標(biāo)和包含漏洞的葉節(jié)點(diǎn)之間的所有路徑。
步驟2:在包含漏洞的葉節(jié)點(diǎn)之間找到所有的頂點(diǎn)以及找到所有有攻擊目標(biāo)的葉節(jié)點(diǎn)。
步驟3:找到從葉節(jié)點(diǎn)到攻擊目標(biāo)的頂點(diǎn)。
步驟4:發(fā)現(xiàn)攻擊者首先可能的步驟和相關(guān)頂點(diǎn)。
MulVal的 輸 出 包 括“input.txt”“Vertices.CSV”“ARCS.CSV”以及“AttackGraph.txt”。其中,“input.txt”是MulVal的輸入文件,主要包括一些網(wǎng)絡(luò)配置、網(wǎng)絡(luò)結(jié)點(diǎn)和漏洞的相關(guān)信息?!癡ertices.CSV”包含攻擊圖的一些頂點(diǎn),“ARCS.CSV”包含所有頂點(diǎn)之間的邊?!癆ttackGraph.txt”是攻擊圖的文件格式模板。
在空間復(fù)雜性優(yōu)化算法中,Vt(16行)是簡(jiǎn)化圖的頂點(diǎn),Et(15行)代表的是簡(jiǎn)化圖的邊。
圖2 算法流程
簡(jiǎn)化圖的算法過程如下:
1.lineofinputFile=Read(input.txt)
2.linesofArcsFile=Read(ARCS.CSV)
3.linesofVerticesFile=Read(Vertices.CSV)
4.linesofAttackFile=Read(AttackGraph.txt)
5.V=defineVertices(linesofVerticesFile)
6.E=defineEdges(linesofArcsFile)
7.attackGoals=defineRootNodes(linesofAttackFile)
8.leaves=defineLeaves(linesofVerticesFile)
9.attackerLocation=defineAttackerLoc(linesofVerti cesFile)
10.G=defineDirectedGraph(V,E)
11.pathsVt=definePathsvulExists(G,attackGoals,lea ves)
13.edgestoNGoalV=defineArchsvPaths(pathsVt)#et
14.Et=edgestoNGoalV+defineArchstoGoals(pInclu deVstoGoals,attackGoals)+defineAttackerFirstSteps(line sOfVerticesFile,pathsVt,attackerLocation)
15.Vt=attackerLocation+attackGoals+{leaves if vulExist=True}
16.G2=nx.DiGraph()
17.G2.add_nodes_from(Vt)
18.G2.add_edges_from(Et)
19.showGraph(G2)
1.2.1 血常規(guī)檢查 抽取患者外周靜脈血2 mL并用乙二胺四乙酸二鉀(EDTA-K2)抗凝,用Sysmex-3000血常規(guī)分析儀進(jìn)行血常規(guī)檢查。
20.End procedure
過程1中(第12行,算法中definePathvul Exists())返回的是所有攻擊目標(biāo)到包括的邊的路徑。這個(gè)過程中,使用一種改進(jìn)的深度優(yōu)先搜索算法生成所有由目標(biāo)到頂點(diǎn)的路徑。
過程1:攻擊目標(biāo)與漏洞之間的路徑
procedure definePathsvulExists(G,attackGoals,leav es)
allPaths=?
For i=1 to length(attackGoals) do
For j=1 to length(leaves) do
leaves[j],attackGoals[i]))
End For
End For
End procedure
過程2(算法第13、14行)返回的是邊和包含漏洞的葉結(jié)點(diǎn)之間的路徑和攻擊目標(biāo)到邊之間的路徑。
過程2:尋找邊到葉結(jié)點(diǎn)為真的路徑
procedure defineArchsvPaths(pathsVt)
et=?
tempPaths=pathsVt
For i=1 to length(vPaths) do
X=vPaths.remove(vPaths(i))
For j=1 to length(X) do
et=et+(X[j].leaf.number,vPaths[i].leaf.number)
tempPath=tempPath.remove(X[j])
End If
End For
End For
return et, tempPath
End procedure
過程3(算法第15行)利用過程2的第二個(gè)輸出找到攻擊目標(biāo)的所有邊。
過程3:找到攻擊目標(biāo)的所有邊
procedure defineArchstoGoals(pIncludeVstoGoals,a ttackGoals)
et=?
For i=1 to length(pIncludeVstoGoals) do
For j=1 to length(attackGoals) do
If j!=length(attackGoals)Then
If tempPaths[i].leaf.number>attackGoals[j] and tempPaths[i].leaf.number<attackGoals[j+1]
Then
et=et+(tempPaths[i].leaf,attackGoals[j])
End If
End If
Else If j==length(attackGoals) then
et=et+(tempPaths[i].leaf,attackGoals[j])
End If
End If
End For
End For
End procedure
過程4(算法第15行)在簡(jiǎn)化圖上找到攻擊者第一步可能的邊。
過程4:找到攻擊者首先可能的步驟和簡(jiǎn)化圖的相關(guān)邊
procedure defineAttackerFirstSteps(linesOfVertices File,pathsVt,attackerLocation)
For all item in linesOfVerticesFile do
If item includes “hacl” and “internet” then
tempList=tempList+item
End If
End For
For all item in tempList do
O1=find the first occurrence of‘(‘
tempList2=tempList2+string between O1 and O2
O2=find the third occurrence of ‘,’
End For
For all item in tempList2 do
For item2 in pathsVt do
If item2.find(item)Then
firstSteps=firstSteps+item.number
End If
End For
End For
For all item in firstSteps do
firstPSteps=firstPSteps+(attackerLocation,item)
End For
End procedur
網(wǎng)絡(luò)拓?fù)鋱D如圖3所示,有包含Web服務(wù)器和文件服務(wù)器在同一子網(wǎng)的五種服務(wù)。一個(gè)Citrix和VPN服務(wù)器在同一個(gè)網(wǎng)絡(luò)中,還具有兩個(gè)工作站運(yùn)行Acrobat和瀏覽器。另外,有兩層防火墻為網(wǎng)絡(luò)和路由器防火墻。此網(wǎng)絡(luò)拓?fù)渲械木W(wǎng)絡(luò)連接用以下規(guī)則闡述:①攻擊者在Internet上可以通過HTTP協(xié)議和HTTP端口訪問Web服務(wù)器、VPN服務(wù)器、Citrix服務(wù)器和通信服務(wù)器。②web服務(wù)器和其他機(jī)器之間雙向連接。③VPN服務(wù)器和Citrix服務(wù)器、工作站通過HTTP協(xié)議和HTTP端口之間存在雙向連接。④通信服務(wù)器和數(shù)據(jù)之間通過HTTP協(xié)議和端口進(jìn)行雙向訪問。⑤文件服務(wù)器和工作站可以通過NFS協(xié)議和NFS端口相互訪問。
圖3 網(wǎng)絡(luò)拓?fù)?/p>
網(wǎng)絡(luò)拓?fù)鋱D中有4種不同的漏洞,漏洞由唯一的標(biāo)識(shí)符來識(shí)別。這些標(biāo)識(shí)符由國(guó)家脆弱性數(shù)據(jù)庫(NVD)掌握。Citrix服務(wù)器包含了代號(hào)為“1020-0490”CVE漏洞,是基于瀏覽器的漏洞,它被攻擊后,遠(yuǎn)程入侵者可以在目標(biāo)計(jì)算機(jī)上執(zhí)行任意代碼的操作。VPN服務(wù)器包含的“2010-0492”CVE是有關(guān)IE8瀏覽器的,攻擊者可以在目標(biāo)機(jī)器上執(zhí)行任意代碼。通信服務(wù)器中包含的漏洞為“2010-0483”CVE,主要與windows的VBScript有關(guān)。當(dāng)使用IE瀏覽器時(shí),攻擊者可以在目標(biāo)計(jì)算機(jī)上執(zhí)行任意代碼。數(shù)據(jù)庫包含“2010-0494”CVE漏洞,主要與IE 6、IE 7和IE 8有關(guān)。攻擊者可以進(jìn)行跨站點(diǎn)腳本攻擊,如表2所示。
表2 網(wǎng)絡(luò)拓?fù)渲械穆┒?/p>
使用MulVal生成的網(wǎng)絡(luò)攻擊圖,如圖4所示,顯示了攻擊圖中的相關(guān)結(jié)點(diǎn)。攻擊圖中有3個(gè)不同的頂點(diǎn)。正方形頂點(diǎn)(結(jié)點(diǎn)6,結(jié)點(diǎn)13,結(jié)點(diǎn)8)與系統(tǒng)配置有關(guān),如防火墻規(guī)則允許Web服務(wù)器從瀏覽器或機(jī)器上的故障軟件進(jìn)行訪問。菱形頂點(diǎn)(結(jié)點(diǎn)10,結(jié)點(diǎn)3,結(jié)點(diǎn)28)表示攻擊者可能在系統(tǒng)中獲得潛在的特權(quán)或訪問權(quán)限,如Web服務(wù)器上的代碼執(zhí)行特權(quán)。橢圓的頂點(diǎn)(結(jié)點(diǎn)11,結(jié)點(diǎn)4,結(jié)點(diǎn)29)連接條件、后置條件,如攻擊者必須具有訪問漏洞的機(jī)器才能利用該漏洞獲得特權(quán)。
優(yōu)化算法:
1."execCod(citrixServer,user)","OR",0
2."RULE 3(remote exploit for a client program)","AND",0
3."accessMaliciousInput(citrixServer,victim_2,ie)","OR",0
4."R ULE 2 2 (B ro w si n g a ma l ic io u s website)","AND",0
5."attackerLocated(internet)","LEAF",1
6."hacl(citrixServer,internet,httpProtocol,httpPort)","LEAF",1
7."inCompetent(victim_2)","LEAF",1
8."hasAccount(victim_2,citrixServer,user)","LE AF",1
9."vulExists(citrixServer,'CVE-2010-0490',ie,rem oteClient,privEscalation)","LEAF",1
10,"execCode(commServer,user)","OR",0
11."RULE 3 (remote exploit for a client program)","AND",0
12."accessMaliciousInput(commServer,victim_1,wi ndows_2000)","OR",0
13."RULE 22 (Browsing a malicious website)","AND",0
14."hacl(commServer,internet,httpProtocol,httpPort)","LEAF",1
15."inCompetent(victim_1)","LEAF",1
16."hasAccount(victim_1,commServer,user)","LE AF",1
17."vulExists(commServer,'CVE-2010-0483',wind ows_2000,remoteClient,privEscalation)","LEAF",1
18."execCode(dataHistorian,root)","OR",0
19."RULE 2 (remote exploit of a server program)","AND",0
20."netAccess(dataHistorian,httpProtocol,httpPort)","OR",0
21."RULE 5 (multi-hop access)","AND",0
22."hacl(commServer,dataHistorian,httpProtocol,htt pPort)","LEAF",1
23."networkServiceInfo(dataHistorian,mountd,http Protocol,httpPort,root)","LEAF",1
24."vulExists(dataHistorian,'CVE-2010-0494',mo untd,remoteExploit,privEscalation)","LEAF",1
25."execCode(vpnServer,user)","OR",0
26."RULE 3 (remote exploit for a client program)","AND",0
27."accessMaliciousInput(vpnServer,victim_5,open vpn)","OR",0
28."RULE 22 (Browsing a malicious website)","AND",0
29."hacl(vpnServer,internet,httpProtocol,httpPort)","LEAF",1
30."inCompetent(victim_5)","LEAF",1
31."hasAccount(victim_5,vpnServer,user)","LE AF",1
32."vulExists(vpnServer,'CVE-2010-0492',openvp n,remoteClient,privEscalation)","LEAF",1
利用該算法對(duì)攻擊圖進(jìn)行改進(jìn),結(jié)果如圖5所示??梢钥闯?,轉(zhuǎn)換圖只包含攻擊者位置、漏洞和攻擊者的頂點(diǎn)。這種簡(jiǎn)化圖可以很容易使安全管理員理解網(wǎng)絡(luò)的安全狀態(tài)。
圖4 攻擊圖
圖5 簡(jiǎn)化圖
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,接入到互聯(lián)網(wǎng)的主機(jī)數(shù)量呈現(xiàn)迅猛的發(fā)展趨勢(shì),帶來的網(wǎng)絡(luò)安全問題日益凸顯。攻擊圖技術(shù)是一種在攻擊發(fā)生前的主動(dòng)探測(cè)[10],但隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大,攻擊圖的生成存在空間狀態(tài)爆炸問題,產(chǎn)生了很多冗余的攻擊路徑,往往影響網(wǎng)絡(luò)安全管理員的分析效率。為了解決這一問題,本文提出了一種基于攻擊圖的空間復(fù)雜性優(yōu)化算法,將復(fù)雜的攻擊圖轉(zhuǎn)換成一種只包含攻擊者、漏洞結(jié)點(diǎn)和攻擊目標(biāo)的簡(jiǎn)化圖,增大了攻擊圖的可用性,并通過實(shí)驗(yàn)證明了該方法的有效性。后續(xù)將在現(xiàn)有的成果上進(jìn)一步研究該簡(jiǎn)化圖在網(wǎng)絡(luò)脆弱性量化分析上的作用,進(jìn)一步完善攻擊圖模型在網(wǎng)絡(luò)脆弱性評(píng)估中的價(jià)值。