蔡勇平,朱士瑞,許曉東
(1.江蘇大學 計算機科學與通信工程學院,江蘇 鎮(zhèn)江 212013;2.江蘇大學信息化中心,江蘇 鎮(zhèn)江 212013)
當前,網絡系統(tǒng)結構的復雜性越來越高,網絡攻擊手段也更加復雜化和多樣化。為了對網絡安全制定更好的防御措施,需要對各種復雜的網絡攻擊行為進行形式化描述。目前,學術界已提出攻擊語言、攻擊樹、攻擊網和攻擊圖等建模方法[1]。攻擊圖能夠徹底找出網絡中安全漏洞的所有關聯,并對網絡中各主機上的脆弱性關聯起來進行綜合分析,用圖的方式將所有攻擊路徑展現出來。安全管理人員利用攻擊圖可以直觀觀察到網絡中各脆弱性之間的關系,然后選擇最小的代價對網絡脆弱性進行鞏固防御。
但是,隨著復雜網絡中主機數量的增加,生成的攻擊圖異常復雜,極大地影響了它的可視性。為此,研究人員提出了一些方法。例如,文獻[2]為了解決這一問題,提出了不包括定量測量的標準安全評估基線,并使用CVSS作為一個標準的復合評分系統(tǒng),但不能檢測漏洞之間的關聯性;文獻[3]為了解決漏洞之間的關聯性,攻擊圖技術被用于開發(fā)識別企業(yè)網絡的多級攻擊;文獻[4]則重點研究了攻擊圖的生成和改進算法的復雜度。這項研究工作的主要優(yōu)點是考慮了企業(yè)網絡中脆弱點之間的相互關系。但是,在大規(guī)模網絡中,生成的攻擊圖過于復雜,無法被安全管理人員直接理解和使用。為了解決這一問題,文獻[5]試圖通過化簡數據來改進攻擊圖的可視性,但是并沒有從根本上解決這一問題。為此,Sawila和Ou等[6]將Google的頁面分級方法引入攻擊圖中節(jié)點的重要性計算中。
本文提出了一種基于攻擊圖的空間復雜性優(yōu)化算法,將復雜的攻擊圖轉換成一種只包含攻擊者、漏洞結點和攻擊目標的簡化圖,增大了攻擊圖的可用性,為安全管理人員制定更加精準的系統(tǒng)安全防范措施提出了可靠意見。
攻擊圖是為了發(fā)現復雜網絡中存在的攻擊路徑,通過綜合攻擊者、漏洞結點、攻擊目標主機和網絡連接關系等因素,提出的一種描述網絡安全狀態(tài)的表示形式。攻擊者對網絡目標進行攻擊時,首先利用某個主機上的脆弱點來獲得某個權限,然后在此基礎上發(fā)起新的攻擊。如此反復,直至攻擊者達到其攻擊的最終目標。因此,攻擊者實施的過程是從前提網絡狀態(tài)到結果網絡狀態(tài)的躍遷過程。
定義1:攻擊圖。攻擊圖是一個四元組T=(S,τ,S0,SG),其中S表示狀態(tài)集,顯示系統(tǒng)中存在可能遭受的攻擊路徑,由系統(tǒng)中漏洞之間的關聯關系描述;τ∈S×S是一個傳遞函數,指的是攻擊之間的關系,由攻擊間的因果聯系和網絡連接狀態(tài)決定;S0∈S是開始狀態(tài)集,表示攻擊者首先發(fā)起的攻擊,如進行拓撲掃描等;SG∈S是成功狀態(tài)集,表示滿足攻擊者攻擊目的的攻擊狀態(tài),同時也是攻擊者的最后一步攻擊。
定義2:攻擊路徑。對于一個目標狀態(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:脆弱點,指網絡系統(tǒng)中存在的漏洞。本文用通用漏洞評分系統(tǒng)(Common Vulnerability Scoring System)CVSS來表示脆弱點的強弱。
定義4:攻擊復雜度。脆弱點的攻擊復雜度是用來衡量攻擊者成功利用該脆弱點的難易程度。為了更準確闡述本文所用的方法,本文只取最后root權限的攻擊結果。
脆弱點的攻擊復雜度是計算脆弱點被成功利用概率的基礎。它受多種因素的影響,不容易計算。本文參考汪立冬等[7]人對脆弱點攻擊復雜度分級的思想,結合實際情況做出修改,將脆弱點的攻擊復雜度分為5級,如表1所示,以10為滿值。攻擊復雜度越趨近于10,越不容易攻擊成功。

表1 攻擊復雜度量化標準
攻擊圖模型的生成采用了MulVal工具。MulVal工具是一種多主機、多級漏洞分析的工具,是一種被安全從業(yè)人員利用的研究工具,是一種對網絡風險主動探測的工具,可以有效檢測到網絡的配置信息。MulVal常用來生成網絡攻擊圖,生成攻擊圖的時間復雜度在O(n2)和O(n3)之間。
MulVal的設計原理中,大部分的配置信息可以使用數據記錄(Datalog)元組的方式來表示。大部分的攻擊技巧和系統(tǒng)安全語義可以使用數據記錄規(guī)則分類。一個服務程序中暴露出來的可以導致權限提升的規(guī)則可以表示如下:
execCode(Attacker,Host,User):-networkService(Ho st,Program,Protocol,Port,User),
vulExists(Host,VulID,Program,remoteExploit,privEscalation),
netAccess(Attacker,Host,Protocol,Port)
MulVal推理引擎采用了一個名為XSB[8]、由StonyBrook開發(fā)的建立在邏輯學理論基礎上的Prolog系統(tǒng)。它基于輸入的關鍵因子評估數據記錄之間的相互關系。
MulVal工具生成攻擊圖時,主要依賴于網絡系統(tǒng)中本身存在的脆弱性信息、網絡中主機端口開放情況以及信息系統(tǒng)內部的配置等信息。網絡的脆弱性信息主要從傳統(tǒng)的漏洞掃描器中獲得。不同的漏洞掃描器會產生不同的掃描報告,這就要求該攻擊圖生成工具有適配器的功能去適配不同的漏洞掃描系統(tǒng)產生的文件。如圖1所示,本地數據庫同步NVD(National Vulnerability Database)[9]數 據, 漏洞掃描器結合本地同步數據庫,對局域網內脆弱性漏洞信息進行掃描。MulVal工具提供了兩種漏洞掃描器掃描報告的轉化適配器,一種是OVAL掃描器,一種是Nessus漏洞掃描器。適配器的功能主要是將漏洞掃描器產生的報告文件規(guī)劃為統(tǒng)一的格式,該格式的文件結合網絡的配置信息能重新整合成一個標準的攻擊圖,從而生成工具MulVal的輸入文件,可以使用MulVal生成標準的攻擊圖模型。

圖1 漏洞掃描器報告適配方式
通過MulVal生成的攻擊圖可能太大和過于復雜,因此提出了一個將攻擊圖的空間復雜性優(yōu)化為簡化圖的算法。該算法將復雜攻擊圖轉換成只包含攻擊者、漏洞結點和攻擊目標的簡化圖,很好展示攻擊者在漏洞之間的動向。具體的空間復雜性優(yōu)化算法流程如圖2所示,分為4個步驟:
步驟1:找到攻擊目標和包含漏洞的葉節(jié)點之間的所有路徑。
步驟2:在包含漏洞的葉節(jié)點之間找到所有的頂點以及找到所有有攻擊目標的葉節(jié)點。
步驟3:找到從葉節(jié)點到攻擊目標的頂點。
步驟4:發(fā)現攻擊者首先可能的步驟和相關頂點。
MulVal的 輸 出 包 括“input.txt”“Vertices.CSV”“ARCS.CSV”以及“AttackGraph.txt”。其中,“input.txt”是MulVal的輸入文件,主要包括一些網絡配置、網絡結點和漏洞的相關信息。“Vertices.CSV”包含攻擊圖的一些頂點,“ARCS.CSV”包含所有頂點之間的邊。“AttackGraph.txt”是攻擊圖的文件格式模板。
在空間復雜性優(yōu)化算法中,Vt(16行)是簡化圖的頂點,Et(15行)代表的是簡化圖的邊。

圖2 算法流程
簡化圖的算法過程如下:
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ī)分析儀進行血常規(guī)檢查。
20.End procedure
過程1中(第12行,算法中definePathvul Exists())返回的是所有攻擊目標到包括的邊的路徑。這個過程中,使用一種改進的深度優(yōu)先搜索算法生成所有由目標到頂點的路徑。
過程1:攻擊目標與漏洞之間的路徑
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行)返回的是邊和包含漏洞的葉結點之間的路徑和攻擊目標到邊之間的路徑。
過程2:尋找邊到葉結點為真的路徑
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的第二個輸出找到攻擊目標的所有邊。
過程3:找到攻擊目標的所有邊
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行)在簡化圖上找到攻擊者第一步可能的邊。
過程4:找到攻擊者首先可能的步驟和簡化圖的相關邊
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
網絡拓撲圖如圖3所示,有包含Web服務器和文件服務器在同一子網的五種服務。一個Citrix和VPN服務器在同一個網絡中,還具有兩個工作站運行Acrobat和瀏覽器。另外,有兩層防火墻為網絡和路由器防火墻。此網絡拓撲中的網絡連接用以下規(guī)則闡述:①攻擊者在Internet上可以通過HTTP協議和HTTP端口訪問Web服務器、VPN服務器、Citrix服務器和通信服務器。②web服務器和其他機器之間雙向連接。③VPN服務器和Citrix服務器、工作站通過HTTP協議和HTTP端口之間存在雙向連接。④通信服務器和數據之間通過HTTP協議和端口進行雙向訪問。⑤文件服務器和工作站可以通過NFS協議和NFS端口相互訪問。

圖3 網絡拓撲
網絡拓撲圖中有4種不同的漏洞,漏洞由唯一的標識符來識別。這些標識符由國家脆弱性數據庫(NVD)掌握。Citrix服務器包含了代號為“1020-0490”CVE漏洞,是基于瀏覽器的漏洞,它被攻擊后,遠程入侵者可以在目標計算機上執(zhí)行任意代碼的操作。VPN服務器包含的“2010-0492”CVE是有關IE8瀏覽器的,攻擊者可以在目標機器上執(zhí)行任意代碼。通信服務器中包含的漏洞為“2010-0483”CVE,主要與windows的VBScript有關。當使用IE瀏覽器時,攻擊者可以在目標計算機上執(zhí)行任意代碼。數據庫包含“2010-0494”CVE漏洞,主要與IE 6、IE 7和IE 8有關。攻擊者可以進行跨站點腳本攻擊,如表2所示。

表2 網絡拓撲中的漏洞
使用MulVal生成的網絡攻擊圖,如圖4所示,顯示了攻擊圖中的相關結點。攻擊圖中有3個不同的頂點。正方形頂點(結點6,結點13,結點8)與系統(tǒng)配置有關,如防火墻規(guī)則允許Web服務器從瀏覽器或機器上的故障軟件進行訪問。菱形頂點(結點10,結點3,結點28)表示攻擊者可能在系統(tǒng)中獲得潛在的特權或訪問權限,如Web服務器上的代碼執(zhí)行特權。橢圓的頂點(結點11,結點4,結點29)連接條件、后置條件,如攻擊者必須具有訪問漏洞的機器才能利用該漏洞獲得特權。
優(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
利用該算法對攻擊圖進行改進,結果如圖5所示。可以看出,轉換圖只包含攻擊者位置、漏洞和攻擊者的頂點。這種簡化圖可以很容易使安全管理員理解網絡的安全狀態(tài)。

圖4 攻擊圖

圖5 簡化圖
隨著互聯網技術的發(fā)展,接入到互聯網的主機數量呈現迅猛的發(fā)展趨勢,帶來的網絡安全問題日益凸顯。攻擊圖技術是一種在攻擊發(fā)生前的主動探測[10],但隨著網絡規(guī)模的擴大,攻擊圖的生成存在空間狀態(tài)爆炸問題,產生了很多冗余的攻擊路徑,往往影響網絡安全管理員的分析效率。為了解決這一問題,本文提出了一種基于攻擊圖的空間復雜性優(yōu)化算法,將復雜的攻擊圖轉換成一種只包含攻擊者、漏洞結點和攻擊目標的簡化圖,增大了攻擊圖的可用性,并通過實驗證明了該方法的有效性。后續(xù)將在現有的成果上進一步研究該簡化圖在網絡脆弱性量化分析上的作用,進一步完善攻擊圖模型在網絡脆弱性評估中的價值。