王 婷,董 浩,陳鐵明
(浙江工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,杭州 310023)
互聯(lián)網(wǎng)是一柄雙刃劍,在給人們帶來便利與機(jī)遇的同時(shí),也使人們暴露在危險(xiǎn)之中.隨著計(jì)算機(jī)和互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)規(guī)模日趨龐大,網(wǎng)絡(luò)復(fù)雜性越來越高,幾乎每天都有新的漏洞出現(xiàn),網(wǎng)絡(luò)安全面臨的挑戰(zhàn)日趨增多.近年來網(wǎng)絡(luò)攻擊越來越多,呈現(xiàn)途徑多樣化、手段復(fù)雜化的趨勢(shì).攻擊者往往將原本孤立的網(wǎng)絡(luò)漏洞有機(jī)結(jié)合起來,不同漏洞的組合使攻擊者可以進(jìn)行很難識(shí)別和防御的多步驟攻擊.
目前保護(hù)網(wǎng)絡(luò)系統(tǒng)免受安全威脅成為了熱門的研究領(lǐng)域.傳統(tǒng)的漏洞掃描技術(shù)將網(wǎng)絡(luò)中的攻擊行為割裂開,獨(dú)立地分析每個(gè)漏洞,無法洞察它們相互作用而產(chǎn)生的威脅,因此不足以應(yīng)對(duì)現(xiàn)如今復(fù)雜且隱蔽的網(wǎng)絡(luò)攻擊.攻擊圖[1,2]作為一種基于的網(wǎng)絡(luò)脆弱性分析技術(shù)[3],可以展現(xiàn)出不同脆弱性之間關(guān)聯(lián)關(guān)系,對(duì)網(wǎng)絡(luò)安全威脅評(píng)估具有十分重要的意義.本文提出一種面向攻擊圖的即時(shí)路徑搜索方法對(duì)大規(guī)模網(wǎng)絡(luò)進(jìn)行安全評(píng)估.通常情況下,只需構(gòu)造目標(biāo)網(wǎng)絡(luò)的部分狀態(tài)空間,就可以快速搜索到一條可能的完整路徑.特別是對(duì)大規(guī)模網(wǎng)絡(luò),這有利于網(wǎng)絡(luò)安全人員更快速地找到網(wǎng)絡(luò)系統(tǒng)的安全隱患.
本文第2節(jié)介紹了相關(guān)研究工作以及本文算法的思路;第3節(jié)詳細(xì)介紹了攻擊圖,并提出了攻擊模型;第4節(jié)介紹了攻擊路徑搜索和攻擊路徑補(bǔ)全過程,以及相關(guān)算法;第5節(jié)用對(duì)比實(shí)驗(yàn)來說明本文所提方法具有良好的性能和可擴(kuò)展性;最后在第6節(jié)做出總結(jié),指明未來的工作方向.
根據(jù)構(gòu)建方式攻擊圖可分為狀態(tài)攻擊圖和屬性攻擊圖,早期的攻擊圖大多是狀態(tài)攻擊圖[4-6],由網(wǎng)絡(luò)安全研究人員以配置文件、攻擊者檔案、攻擊模板數(shù)據(jù)庫為依據(jù),手動(dòng)創(chuàng)建.在此基礎(chǔ)上,結(jié)合模型檢測(cè)、智能規(guī)劃技術(shù)自動(dòng)生成攻擊圖,羅列出所有系統(tǒng)狀態(tài),來展現(xiàn)網(wǎng)絡(luò)威脅轉(zhuǎn)移情況.
狀態(tài)攻擊圖在處理大規(guī)模網(wǎng)絡(luò)時(shí),存在空間爆炸問題[7],并且不夠直觀.因此近年來通常采用屬性攻擊圖進(jìn)行網(wǎng)絡(luò)脆弱性分析研究.文獻(xiàn)[8]基于屬性攻擊圖搜索所有攻擊路徑,并提出了最優(yōu)彌補(bǔ)集問題的近似算法,以最小的代價(jià)獲得最大的安全收益.文獻(xiàn)[9]針對(duì)工業(yè)控制系統(tǒng),根據(jù)記錄的目標(biāo)狀態(tài)描繪出所有攻擊場(chǎng)景.文獻(xiàn)[10]利用反向搜索算法找出物聯(lián)網(wǎng)系統(tǒng)所有可能攻擊路徑并將威脅程度量化,制定最優(yōu)防御策略.文獻(xiàn)[11]提出了一種緊湊的圖規(guī)劃算法,從目標(biāo)狀態(tài)開始提取相關(guān)信息,反向生成所有攻擊路徑.同樣的,文獻(xiàn)[12]使用反向深度優(yōu)先算法生成攻擊圖,檢測(cè)網(wǎng)絡(luò)可達(dá)性,為評(píng)估整個(gè)網(wǎng)路系統(tǒng)的安全性提供了依據(jù).文獻(xiàn)[13]利用鄰接矩陣自動(dòng)評(píng)估網(wǎng)絡(luò)漏洞風(fēng)險(xiǎn),對(duì)大規(guī)模網(wǎng)絡(luò)中的重要漏洞進(jìn)行重點(diǎn)分析,并實(shí)現(xiàn)分析結(jié)果可視化.文獻(xiàn)[14]基于貝葉斯攻擊圖,采用啟發(fā)式策略,由針對(duì)性的制定防御措施.
應(yīng)用狀態(tài)規(guī)約技巧可以優(yōu)化攻擊圖分析方法,即時(shí)驗(yàn)證技術(shù)[15-17]只展開基本分支,而不需要構(gòu)造完整的攻擊圖.也就是說,在分析網(wǎng)絡(luò)系統(tǒng)時(shí)并不是把系統(tǒng)全部構(gòu)造完成后再去評(píng)估,而是根據(jù)網(wǎng)路系統(tǒng)的待檢測(cè)的安全屬性去展開攻擊路徑,一邊構(gòu)造網(wǎng)絡(luò)系統(tǒng)模型一邊驗(yàn)證攻擊行為是否成立.這樣做最大的優(yōu)點(diǎn)是,一旦找到一個(gè)反例,即一條攻擊路徑,算法就會(huì)終止,而不必生成其它狀態(tài)空間,在一定程度上解決了狀態(tài)空間爆炸問題.
基于上述分析,本文在前人研究的基礎(chǔ)上提出了一種面向攻擊圖的即時(shí)驗(yàn)證方法,快速尋找網(wǎng)絡(luò)中一條可能的攻擊路徑,而不需要訪問所有節(jié)點(diǎn)以及找到所有路徑,以實(shí)現(xiàn)大規(guī)模網(wǎng)絡(luò)安全的快速查找和分析.其主要思路是,首先將網(wǎng)絡(luò)漏洞、攻擊者權(quán)限、網(wǎng)絡(luò)連接情況等信息抽象成攻擊圖模型的輸入,然后在此基礎(chǔ)上構(gòu)建攻擊路徑搜索算法APS(Attack Path Search)來快速搜尋出一條可行路徑.由于APS算法得到的攻擊路徑丟失了部分信息,必須利用路徑補(bǔ)全算法APF(Attack Path Fix)將此攻擊路徑補(bǔ)充完整.在平均情況下改進(jìn)明顯.
攻擊圖AG在網(wǎng)絡(luò)脆弱性分析領(lǐng)域被廣泛應(yīng)用,主要可以分為狀態(tài)攻擊圖和屬性攻擊圖,為了增加可讀性,本文所提到的攻擊圖均為屬性攻擊圖.攻擊圖是一個(gè)有向圖,通常包含兩類節(jié)點(diǎn)和兩類邊.節(jié)點(diǎn)包括屬性節(jié)點(diǎn)和攻擊節(jié)點(diǎn),其中屬性節(jié)點(diǎn)包括網(wǎng)絡(luò)脆弱性和權(quán)限信息,網(wǎng)絡(luò)脆弱性描述網(wǎng)絡(luò)主機(jī)固有的安全漏洞,而權(quán)限節(jié)點(diǎn)描述攻擊者所具備的權(quán)限等級(jí).兩類邊中,一類是由屬性節(jié)點(diǎn)指向攻擊節(jié)點(diǎn),另一類是由攻擊節(jié)點(diǎn)指向?qū)傩怨?jié)點(diǎn).攻擊圖定義如下.
定義1.AG=(S,T,E),其中:
1)S={A∪N}是屬性節(jié)點(diǎn)集合,A是初始條件節(jié)點(diǎn)集合,N是可達(dá)屬性節(jié)點(diǎn)集合,T是攻擊節(jié)點(diǎn)集合.
2)E={ES∪ET}表示有向邊集合,即集合ES?S×T表示屬性節(jié)點(diǎn)觸發(fā)攻擊節(jié)點(diǎn)的邊集合,集合ET?T×N表示經(jīng)過攻擊動(dòng)作獲得可達(dá)屬性節(jié)點(diǎn)的邊集合.
圖1 小型網(wǎng)絡(luò)配置Fig.1 Simple network topology
3) 一個(gè)攻擊動(dòng)作的成功實(shí)施,需要滿足它所有的前置條件,即前置條件間是與(AND)的關(guān)系.假設(shè)tn的precon={n1,n2,…,nn},那么tn←n1∧n2∧…∧nn.一個(gè)屬性的獲得,只需成功實(shí)施一個(gè)攻擊動(dòng)作即可,即如果有多種攻擊可以獲得該屬性,那么攻擊動(dòng)作間是或(OR)的關(guān)系.假設(shè)t1,t2,…,tn的postcon={nn},那么nn←t1∨t2∨…∨tn.
表1 攻擊圖實(shí)例中的屬性Table 1 Attributes of attack graph
圖1是一個(gè)小型網(wǎng)絡(luò),由主機(jī)0、主機(jī)1和主機(jī)2組成,其中主機(jī)0被攻擊者控制,主機(jī)1和主機(jī)2是目標(biāo)主機(jī).主機(jī)都存在某些漏洞,攻擊者可以利用這些漏洞在主機(jī)0發(fā)動(dòng)攻擊來獲得目標(biāo)主機(jī)的控制權(quán).
表2 攻擊圖實(shí)例中的原子攻擊Table 2 Atom attacks of attack graph
針對(duì)圖1小型網(wǎng)絡(luò)的攻擊圖如圖2所示,該圖中圓形代表屬性節(jié)點(diǎn),其含義由表1給出.矩形代表攻擊節(jié)點(diǎn),其含義由表2給出.如果屬性節(jié)點(diǎn)有一條指向攻擊節(jié)點(diǎn)的邊,那么該屬性節(jié)點(diǎn)就是該攻擊節(jié)點(diǎn)的前置條件.如果攻擊節(jié)點(diǎn)有一條指向?qū)傩怨?jié)點(diǎn)的邊,那么該屬性節(jié)點(diǎn)就是該攻擊節(jié)點(diǎn)的后置條件.例如,圖2中user(0)和ftp(0,2)是Ftp-rhost(0,2)的前置條件,而trust(0,2)則是Ftp-rhost(0,2)的后置條件.
圖2 小型網(wǎng)絡(luò)攻擊圖Fig.2 Attack graph of simple network
定義2.攻擊路徑是從源主機(jī)開始,攻擊者實(shí)施一系列攻擊行為后達(dá)到目標(biāo)goal的過程,由一系列原子攻擊按照一定順序關(guān)聯(lián)而成,定義如下.
1)goal是目標(biāo)節(jié)點(diǎn),ai∈A,si∈S,ti∈T,0≤i≤n,則粗糙路徑*path(goal)=ai→s0→t0→s1→t1→s2→…→si→ti.
2) 對(duì)粗糙攻擊路徑進(jìn)行補(bǔ)全操作,并且只保留其中的攻擊節(jié)點(diǎn),則得到完全攻擊路徑cpath(goal)=t0→t1→…→ti.
以圖2為例,假設(shè)goal=root(2),搜索得到一條可能的粗糙路徑*path(root(2))=user(0)→sshd-bof(0,1)→user(1)→ftp(1,2)→Ftp-rhosts(1,2)→trust(1,2)→rsh(1,2) →user(2)→local-bof(2).由于有AND關(guān)系的存在,粗糙路徑不能代表完整的攻擊過程,要對(duì)其進(jìn)行補(bǔ)全操作.經(jīng)過補(bǔ)全并移除屬性節(jié)點(diǎn)而得到的完全攻擊路徑應(yīng)當(dāng)是cpath(root(2))=→sshd-bof(0,1)→Ftp-rhosts(1,2)→rsh(1,2)→local-bof(2).具體算法將在后續(xù)章節(jié)中給出.
攻擊者要想成功實(shí)施一次攻擊,必須滿足某些前提條件.攻擊者需要先通過漏洞掃描發(fā)現(xiàn)某網(wǎng)絡(luò)上的主機(jī)是否存在可用于嘗試攻擊的漏洞,再發(fā)動(dòng)攻擊.單次成功實(shí)施的攻擊不一定能直接達(dá)到攻擊者的目的.大多數(shù)網(wǎng)絡(luò)攻擊包括一系列攻擊,這些攻擊會(huì)逐漸增加網(wǎng)絡(luò)的脆弱性,直到滿足最終攻擊的先決條件.成功實(shí)施攻擊的結(jié)果可能包括發(fā)現(xiàn)新的漏洞、提升用戶權(quán)限、打破原有篩選規(guī)則以及在其他主機(jī)中添加信任關(guān)系等.以下為對(duì)攻擊模型的相關(guān)定義.
定義3.漏洞定義為一元組vulner(attribute),其attribute表示網(wǎng)絡(luò)系統(tǒng)的固有安全隱患.例如,協(xié)議漏洞、軟件漏洞、硬件漏洞等.
定義4.網(wǎng)絡(luò)連接定義為二元組link(sid,did),sid是源主機(jī)的主機(jī)號(hào),did是目標(biāo)主機(jī)的主機(jī)號(hào).例如,link(s,d)表示主機(jī)s和主機(jī)d存在網(wǎng)絡(luò)連接.
定義5.漏洞存在性定義為二元組defect(vulner,link),其中vulner表示目標(biāo)主機(jī)上可利用的漏洞,link表示源主機(jī)和目標(biāo)主機(jī)存在網(wǎng)絡(luò)連接.例如,假設(shè)vulner=(x),link=(a,b),那么defect(x,(a,b))表示主機(jī)a和主機(jī)b之間存在著攻擊者可以利用的漏洞x.
定義6.權(quán)限定義為二元組right=(id,privilege),其中id表示主機(jī)號(hào),privilege表示攻擊者在該主機(jī)上擁有的權(quán)限,包括none、user和root.例如,right(n,root)表示攻擊者在主機(jī)n上擁有root權(quán)限.
定義7.攻擊模板定義為三元組template(atom,precon,postcon),其中atom是原子攻擊,precon是原子攻擊的前置條件集合,postcon是原子攻擊的后置條件集合.例如,攻擊者具有主機(jī)a的user權(quán)限(即right(a,user),主機(jī)a和主機(jī)b存在網(wǎng)絡(luò)連接(即link=(a,b)),且主機(jī)b存在漏洞x(即defect(x,(a,b)),則攻擊模板中的atom=x,precon={user(a),x(a,b)},如果攻擊結(jié)果是獲得主機(jī)b的user權(quán)限,則postcon={user(b)}.
屬性節(jié)點(diǎn)在攻擊過程中是不斷擴(kuò)展的,相當(dāng)于攻擊者知識(shí)庫.從初始節(jié)點(diǎn)開始進(jìn)行廣度優(yōu)先搜索,后續(xù)節(jié)點(diǎn)的產(chǎn)生過程根據(jù)節(jié)點(diǎn)類型不同有所區(qū)別.對(duì)屬性節(jié)點(diǎn)來說,查找可進(jìn)行的攻擊從而獲得攻擊節(jié)點(diǎn):根據(jù)當(dāng)前屬性節(jié)點(diǎn)(單個(gè)節(jié)點(diǎn)),首先遍歷攻擊模板庫,找到前置條件中包含該屬性節(jié)點(diǎn)的所有模板,然后遍歷攻擊者知識(shí)庫,檢查每個(gè)模板所有前置條件是否滿足,如果符合則生成一個(gè)后續(xù)攻擊節(jié)點(diǎn).由攻擊節(jié)點(diǎn)查找屬性節(jié)點(diǎn)較為容易,只需要根據(jù)攻擊模板的后置結(jié)果得出.給定任意一個(gè)節(jié)點(diǎn)node,將上述后續(xù)節(jié)點(diǎn)生成過程定義為getChildren(node).
算法1如圖3所示,為基于廣度優(yōu)先的攻擊路徑搜索算法.算法中有4個(gè)數(shù)據(jù)結(jié)構(gòu),其中有序列表visited(按照訪問先后順序排列)記錄已經(jīng)訪問過的節(jié)點(diǎn),隊(duì)列working存儲(chǔ)待訪問的節(jié)點(diǎn),列表path記錄當(dāng)前節(jié)點(diǎn)路徑,列表集合paths存儲(chǔ)訪問過的path.在第6行-第23行的循環(huán)中,首先當(dāng)前節(jié)current從working出列,current所在路徑path從paths出列.第9行-第12行判斷current是否滿足goal,如果滿足則停止搜索,否則繼續(xù)搜索直到working為空.current和path,working和paths兩組變量各自同步變化,以此來跟蹤記錄當(dāng)前路徑.第13行判斷current是否有后續(xù)子節(jié)點(diǎn),如果存在,則執(zhí)行第14-第21行的循環(huán),將所有沒有被訪問過的后續(xù)節(jié)點(diǎn)加入visited并入隊(duì)working,再加入對(duì)應(yīng)的path,并將path入列paths.第24行返*path(goal),如果全部節(jié)點(diǎn)搜索完畢,沒有發(fā)現(xiàn)目標(biāo)節(jié)點(diǎn),則返回的*path(goal)為空集.
在進(jìn)行補(bǔ)全操作時(shí),一個(gè)必要的步驟使獲得某節(jié)點(diǎn)的父節(jié)點(diǎn).如果由屬性節(jié)點(diǎn)查找父攻擊節(jié)點(diǎn),則需要遍歷攻擊模板庫,找到后置條件中包含該屬性節(jié)點(diǎn)的所有模板,得到所有可能的攻擊節(jié)點(diǎn);如果由攻擊節(jié)點(diǎn)查找父屬性節(jié)點(diǎn),則只需要根據(jù)對(duì)應(yīng)攻擊模板的前置條件得出所有屬性節(jié)點(diǎn).給定任意一個(gè)節(jié)點(diǎn)node,將上述節(jié)點(diǎn)生成過程定義為getParents(node).此外,如果node1在*path(goal)中位于node2之前,將其定義為node1.Pre(node2,*path(goal))為真.
算法2如圖4所示,為基于廣度優(yōu)先的路徑補(bǔ)全算法.將初始節(jié)點(diǎn)集合A,由算法1得到的已訪問節(jié)點(diǎn)集合visited和粗糙路徑*path(goal)一并作為算法2的輸入,并沿用算法1的數(shù)據(jù)結(jié)working.在第2行-第21行的循環(huán)中,*path(goal)中所有的攻擊節(jié)點(diǎn)進(jìn)行判斷,對(duì)于某個(gè)攻擊節(jié)點(diǎn)current的每一個(gè)父節(jié)點(diǎn)(current的前置條件),如果該節(jié)點(diǎn)在*path(goal)中沒有位于current之前,且該節(jié)點(diǎn)不屬于A,并且在整個(gè)攻擊過程中最先生成該節(jié)點(diǎn)的攻擊節(jié)點(diǎn)(current的前置條件的父節(jié)點(diǎn))在*path(goal)中也沒有位于current之前,就進(jìn)行相應(yīng)的插入操作.重復(fù)上述過程直到working為空.最后移除*path(goal)中的屬性節(jié)點(diǎn)得到cpath(goal),需要注意的是,如果此時(shí)攻擊路徑中還有重復(fù)的節(jié)點(diǎn),則只需保留第一個(gè)即可.
用圖5的例子來說明算法1和算法2,其中A={a0,a1,a2,a3,a4,a5},N={s0,s1,s2,s3,s4,s5,s6,s7,s8},T={t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}.首先將A中節(jié)點(diǎn)全部入隊(duì)working并加入visited,利用current和path,working和paths兩組變量各自同步變化實(shí)現(xiàn)搜索路徑的自動(dòng)切換.然后進(jìn)行廣度優(yōu)先搜索,對(duì)current的后續(xù)子節(jié)點(diǎn)進(jìn)行判斷其是否已經(jīng)被訪問,如果是,則進(jìn)行相應(yīng)操作.經(jīng)過循環(huán)可以得到一條最先到達(dá)t7的路徑*path(s6)=a3→t5→s4,但是因?yàn)閠7的precon={s2,s4,s5},此時(shí)s2和s5還不在visited中,所以無法得到s4的后續(xù)節(jié)點(diǎn)t7,并且此時(shí)還沒有找到goal,所以要繼續(xù)搜索其他路徑.不斷重復(fù)上述過程,當(dāng)t7的precon全部在visited中,會(huì)找到一條可能的粗糙攻擊路徑*path(s6)=a5→t9→s8→t8→s7→t6→s5→t7→s6.
將由算法1得到的*path(s6)作為算法2的輸入,算法2的第一個(gè)while循環(huán)首先檢查t9,將t9入working.t9出隊(duì)后,由于t9的父節(jié)點(diǎn)只有初始節(jié)點(diǎn)a5且其已經(jīng)處于*path(s6)中t9之前的位置(表示攻擊者已擁有的知識(shí)庫),因而接著while循環(huán)檢查t8.當(dāng)檢查到t7時(shí),由于getParents(t7)={s2,s4,s5},其中s5已經(jīng)處于*path(s6)中t7之前的位置,則跳過.對(duì)于s2來說,其父節(jié)點(diǎn)為t4,發(fā)現(xiàn)兩者都不處于*path(s6)中t7之前的位置,則將t4和s2按順序插入到*path(s6)的t7之前,注意此時(shí)t4一定在visited里,再將t4入隊(duì)working;對(duì)于t5和s4的操作也是一樣,將兩者按順序插入到*path(s6)的t7之前并將t5加入隊(duì)列.從隊(duì)列中獲得t4,發(fā)現(xiàn)其父節(jié)點(diǎn)為s1,而s1有3個(gè)父節(jié)點(diǎn)t0、t1和t2.對(duì)于這種有多個(gè)父攻擊節(jié)點(diǎn)的情況,只選擇在visited中位置最靠前的節(jié)點(diǎn)即可.這是由于在visited中位置越靠前的節(jié)點(diǎn)越接近A,有利于補(bǔ)全操作提早結(jié)束.假設(shè)在visited中t0比t1位置靠前,則將t0入隊(duì)并把t0和s1按照順序插入到*path(s6)的t4之前.其余部分以此類推.經(jīng)過上述過程,得到*path(s6)=a5→t9→s8→t8→s7→t6→s5→t0→s1→t4→s2→t5→s4→t7→s6.最后再移除*path(s6)中的屬性節(jié)點(diǎn)得到*path(s6)=t9→t8→t6→t0→t4→t5→t7.
文獻(xiàn)[9-12]所提算法利用深度優(yōu)先或廣度優(yōu)先搜索攻擊路徑,均是基于屬性攻擊圖進(jìn)行反向搜索,必須要遍歷所有節(jié)點(diǎn).將上述方式與本文的路徑搜索算法和路徑補(bǔ)全算法進(jìn)行對(duì)比實(shí)驗(yàn),比較不同方法在不同網(wǎng)絡(luò)設(shè)置、不同網(wǎng)絡(luò)規(guī)模下的CPU運(yùn)行時(shí)間,單位為秒(S),以及所遍歷的節(jié)點(diǎn)個(gè)數(shù).設(shè)置時(shí)間閾值,如果運(yùn)行時(shí)間大于3000秒,則認(rèn)為算法失效.模擬網(wǎng)絡(luò)由主機(jī)、防火墻和路由器構(gòu)建而成.實(shí)驗(yàn)環(huán)境為:CPU是Intel Core i5-7300HQ,主頻為2.50GHz,RAM是16G,操作系統(tǒng)是windows 10.
在實(shí)驗(yàn)1中,目標(biāo)網(wǎng)絡(luò)規(guī)模主機(jī)數(shù)量從只有3臺(tái)逐漸擴(kuò)大到1000臺(tái),將防火墻過濾規(guī)則全部設(shè)置為any,路由器不進(jìn)行IP過濾,即各主機(jī)之間是全連接的.如表3所示,反向搜索方式和本文算法隨著主機(jī)數(shù)量的增加,CPU運(yùn)行時(shí)間和遍歷的節(jié)點(diǎn)數(shù)量也隨之增加.然而使用反向搜索方式對(duì)網(wǎng)絡(luò)進(jìn)行分析時(shí),必須要找出所有攻擊路徑,本文算法正向搜索到目標(biāo)節(jié)點(diǎn)就停止搜索,補(bǔ)全后給出一條完全的攻擊路徑,無須生成整個(gè)攻擊圖,遍歷的節(jié)點(diǎn)數(shù)量明顯少于反向搜索方式,所以本文算法擁有良好的性能.
表3 全連接網(wǎng)絡(luò)對(duì)比實(shí)驗(yàn)Table 3 Fully connected network comparison experiment
由于現(xiàn)實(shí)世界中很少有全連接的網(wǎng)絡(luò)結(jié)構(gòu),所以我們通過設(shè)置防火墻和路由器的端口過濾和IP過濾規(guī)則,控制主機(jī)間的可達(dá)性,使目標(biāo)網(wǎng)絡(luò)不再是全連接.這意味著攻擊者要想達(dá)到目標(biāo)節(jié)點(diǎn),可能需要搜索更多節(jié)點(diǎn),進(jìn)行更多次的原子攻擊.實(shí)驗(yàn)2目標(biāo)網(wǎng)絡(luò)規(guī)模主機(jī)數(shù)量從只有3臺(tái)逐漸擴(kuò)大到1000臺(tái),觀察兩種算法在更接近現(xiàn)實(shí)的網(wǎng)絡(luò)環(huán)境中的性能表現(xiàn).如表4所示,當(dāng)實(shí)驗(yàn)2中的目標(biāo)網(wǎng)絡(luò)中的主機(jī)數(shù)量達(dá)到1000時(shí),反向搜索方式失效.可以看出,本文算法擁有良好的可擴(kuò)展性.
表4 非全連接網(wǎng)絡(luò)對(duì)比實(shí)驗(yàn)Table 4 Non-fully connected network comparison experiment
為了驗(yàn)證本文算法在最壞情況下依然可行,實(shí)驗(yàn)3依舊選取反向搜索方式和本文算法進(jìn)行比較.目標(biāo)網(wǎng)絡(luò)規(guī)模主機(jī)數(shù)量從只有3臺(tái)逐漸擴(kuò)大到500臺(tái),網(wǎng)絡(luò)設(shè)置同實(shí)驗(yàn)1.選擇特定目標(biāo)節(jié)點(diǎn)goal使本文算法需要搜索所有路徑才能找到goal.如表5所示,在最壞的情況下,即需要搜索全部路徑才能找到目標(biāo)節(jié)點(diǎn)goal時(shí),本文算法的CPU運(yùn)行時(shí)間以及所遍歷的節(jié)點(diǎn)數(shù)量略大于反向搜索方式,但是不會(huì)帶來過多額外開銷.這是因?yàn)楸疚乃惴ㄔ谡业侥繕?biāo)節(jié)點(diǎn)后,要對(duì)其中一條粗糙攻擊路徑進(jìn)行補(bǔ)全操作,給出一個(gè)完整的攻擊過程.實(shí)驗(yàn)3表明,即便在最壞的情況下,本文算法依然有較高的性能和良好的擴(kuò)展性.
表5 最壞情況下的全連接網(wǎng)絡(luò)對(duì)比實(shí)驗(yàn)Table 5 Worst case fully connected network comparison experiment
本文針對(duì)大規(guī)模網(wǎng)絡(luò)的安全驗(yàn)證問題進(jìn)行了研究,提出了面向攻擊圖的即時(shí)驗(yàn)證方法,采用正向搜索方式,并包括補(bǔ)全操作,多數(shù)情況下無須生成完整攻擊圖,就可以給出一條完整的攻擊路徑.實(shí)驗(yàn)結(jié)果表明,本文方法具有良好的擴(kuò)展性和算法性能,可用于快速分析大型網(wǎng)絡(luò).未來將繼續(xù)研究算法優(yōu)化問題,并且進(jìn)一步探索其如何更好地解決實(shí)際問題.