秦虎, 王建利, 彭逍遙
(中國信息安全測評中心,北京 100085)
在風(fēng)險(xiǎn)評估和滲透測試過程中,漏洞掃描是一項(xiàng)非常重要的工作. 然而,傳統(tǒng)的漏洞掃描僅單獨(dú)報(bào)告每個(gè)漏洞的名稱、類型、危害、修復(fù)建議等信息,對于目標(biāo)系統(tǒng)之間、各個(gè)漏洞之間的關(guān)系卻難以分辨,因而無法凸顯整個(gè)信息系統(tǒng)最薄弱的環(huán)節(jié). 為了解決該問題,學(xué)術(shù)界提出了許多嘗試對網(wǎng)絡(luò)攻擊進(jìn)行模型描述的安全評估模型,其中攻擊圖是最為常用的模型之一[1]. 攻擊圖分析模型加入了攻擊行為模擬和過程執(zhí)行[2],能夠直觀地展示攻擊者可能的攻擊路徑,進(jìn)一步揭示各個(gè)漏洞之間的關(guān)聯(lián)性以及綜合利用所有漏洞可能造成的危害. 利用攻擊圖,可以對信息系統(tǒng)進(jìn)行風(fēng)險(xiǎn)分析、可靠性分析、最短攻擊路徑分析等[3]更加深入的分析.
最初,Phillips和Swiler等[4-5]提出了攻擊圖的概念,但構(gòu)建模型過于復(fù)雜,且只能由滲透測試人員手工繪制;Ritchey等[6]提出了模型檢測的方法用于分析網(wǎng)絡(luò)的脆弱點(diǎn),但模型過于簡單,無法表現(xiàn)某些復(fù)雜的攻擊行為. Sheyner等[3]同樣使用了模型檢測的方法,首次自動(dòng)構(gòu)建攻擊圖;馮慧萍等[7]提出基于可靠性理論的脆弱性分析模型,使用模型檢驗(yàn)迭代算法搜索狀態(tài)集合的技術(shù)自動(dòng)構(gòu)建攻擊圖;Bhattacharya等[8]提出利用智能規(guī)劃技術(shù)自動(dòng)構(gòu)建攻擊圖. 以上3種方法雖然可以自動(dòng)構(gòu)建攻擊圖,但由于需要對目標(biāo)網(wǎng)絡(luò)和攻擊者的狀態(tài)之間的相互作用關(guān)系進(jìn)行綜合分析,因此不可避免地存在狀態(tài)爆炸的問題[9],無法應(yīng)用于大規(guī)模的目標(biāo)網(wǎng)絡(luò). 為了解決該問題,Ammann等[10]首次提出攻擊者能力的單調(diào)性假設(shè),即假設(shè)攻擊者在攻擊過程中的攻擊能力是不斷增長的,且已經(jīng)獲得的能力在每次原子攻擊中都不會(huì)失去,并在該假設(shè)的基礎(chǔ)上將攻擊圖構(gòu)建的復(fù)雜度由指數(shù)復(fù)雜度降為多項(xiàng)式復(fù)雜度;Ou等[11]基于邏輯編程技術(shù)生成邏輯攻擊圖的方法,進(jìn)一步降低了生成攻擊圖的復(fù)雜度,并用實(shí)驗(yàn)驗(yàn)證了該方法可以在20 min以內(nèi)生成1 000臺主機(jī)規(guī)模的網(wǎng)絡(luò)攻擊圖;陳峰[12]在提出AGML建模語言的基礎(chǔ)上,使用攻擊模式過濾技術(shù)、屬性壓縮技術(shù)和實(shí)例化檢查技術(shù)3中優(yōu)化技術(shù)對攻擊模式和屬性進(jìn)行預(yù)處理,從而降低算法復(fù)雜度;葉云等[13]采用了陳峰提出的AGML建模語言,通過預(yù)先將目標(biāo)環(huán)境屬性按照主機(jī)和謂詞分類,從而減少匹配次數(shù),降低算法復(fù)雜度.
本文對攻擊圖構(gòu)建過程進(jìn)行研究,提出一種基于權(quán)限提升矩陣的攻擊圖生成方法. 該方法在攻擊模式庫和目標(biāo)環(huán)境描述基礎(chǔ)上,將權(quán)限提升作為攻擊者攻擊能力提升的判斷標(biāo)準(zhǔn),以矩陣描述目標(biāo)網(wǎng)絡(luò)中主機(jī)之間的關(guān)系,根據(jù)目標(biāo)環(huán)境描述生成權(quán)限提升矩陣,并以權(quán)限提升矩陣為依據(jù)生成攻擊圖.
攻擊圖采用有向圖的方式表示攻擊者如何逐步獲取目標(biāo)網(wǎng)絡(luò)控制權(quán)限的攻擊路徑,通常由節(jié)點(diǎn)和邊組成. 在過去的研究中,研究者先后提出狀態(tài)攻擊圖、屬性攻擊圖、滲透依賴攻擊圖、屬性依賴攻擊圖、邏輯攻擊圖、聚合攻擊圖等多種攻擊圖表示方法[14]. Ammann提出的屬性依賴攻擊圖[10]可清晰地顯示屬性轉(zhuǎn)換前后的依賴關(guān)系. 本文參考屬性依賴攻擊圖,現(xiàn)將攻擊圖定義如下.
定義1攻擊圖AG=(A0∪Ad,E),其中,A0表示攻擊者和目標(biāo)網(wǎng)絡(luò)在攻擊逐步實(shí)施后可達(dá)的屬性節(jié)點(diǎn)集合,Ad表示攻擊者和目標(biāo)網(wǎng)絡(luò)的初始屬性節(jié)點(diǎn)集合,E為有向邊集合,表示所有的原子攻擊.
攻擊模式是指攻擊者利用一類軟件漏洞進(jìn)行的攻擊方式的抽象描述,可以由具體的屬性實(shí)例化為原子攻擊. 本文采用攻擊模式庫存儲攻擊者可以采取的攻擊模式,且以面向漏洞的方式描述攻擊模式. 攻擊模式可以形式化地描述為三元組AttackPattern=〈Pre,Vuls,Eff〉,其中,Vuls為目標(biāo)主機(jī)存在的安全漏洞,可包括一個(gè)或多個(gè)安全漏洞,當(dāng)Vuls數(shù)目為兩個(gè)或兩個(gè)以上時(shí)表示須結(jié)合多個(gè)漏洞實(shí)現(xiàn)該攻擊模式;Pre為攻擊的前提條件,包括針對主機(jī)進(jìn)行攻擊所需的權(quán)限、Vuls對應(yīng)的服務(wù)及其運(yùn)行權(quán)限;Eff為攻擊產(chǎn)生的結(jié)果,包括獲取權(quán)限、拒絕服務(wù)、非身份信息泄露.
需要特別說明的是,相較于其他文獻(xiàn)中的攻擊模式,本文的攻擊模式庫模型做了必要的簡化,不再將攻擊者可能實(shí)施的正常操作行為列為單獨(dú)的攻擊模式,如遠(yuǎn)程登陸等. 例如,本文不將“通過遠(yuǎn)程FTP寫入漏洞修改.rhosts文件,并遠(yuǎn)程SSH登錄”這種攻擊行為描述為“通過遠(yuǎn)程FTP寫入漏洞修改.rhosts文件”和“遠(yuǎn)程SSH登錄”兩種攻擊模式,而是合并為一種,其攻擊前提條件Pre中的服務(wù)合并為“FTP服務(wù)及SSH服務(wù)”. 同樣,在攻擊圖中也表示為一種原子攻擊.
目標(biāo)環(huán)境描述是對目標(biāo)網(wǎng)絡(luò)環(huán)境中的主機(jī)配置、網(wǎng)絡(luò)配置、存在漏洞等信息的形式化描述. 目標(biāo)環(huán)境可以形式化地描述為二元組Scenario=〈Hosts,Connections〉,其中Hosts為主機(jī)信息集合,以〈HostID,Vuls,InitPriv〉描述,意為主機(jī)HostID存在漏洞Vuls,攻擊者在該主機(jī)上擁有初始權(quán)限InitPriv;Connections為連接信息集合,以〈HostSrc,HostDst,Services〉描述,意為主機(jī)HostSrc可以訪問主機(jī)HostDst的Services服務(wù).
絕大部分情況下,攻擊者攻擊能力的提升都可以歸結(jié)為權(quán)限的提升,當(dāng)攻擊者獲得某臺主機(jī)的攻擊權(quán)限后,即獲得了攻擊與該主機(jī)相連的其他主機(jī)的能力. 在某些特殊情況下,攻擊者在攻擊過程中可能獲取改變網(wǎng)絡(luò)連接情況的能力,例如攻擊者獲取防火墻或網(wǎng)閘的控制權(quán)限并可以隨意更改網(wǎng)絡(luò)配置的情況,但是由于與具體網(wǎng)絡(luò)配置結(jié)合過于緊密,導(dǎo)致攻擊后果難以預(yù)測,這些特殊情況很難抽象為通用的攻擊模式. 因此,在本文的攻擊圖生成方法中,僅考慮通用情況下的攻擊圖生成,即本文假設(shè)網(wǎng)絡(luò)連接情況在攻擊過程中是不會(huì)發(fā)生改變的. 同樣,目標(biāo)網(wǎng)絡(luò)中主機(jī)的服務(wù)運(yùn)行情況和存在漏洞情況也不會(huì)隨著攻擊者的攻擊而發(fā)生改變. 可見,網(wǎng)絡(luò)連接情況、服務(wù)及其運(yùn)行權(quán)限僅可作為攻擊模式的前提屬性,拒絕服務(wù)、非身份信息獲取盡可作為攻擊模式的結(jié)果屬性,而攻擊者的權(quán)限既可作為前提屬性,也可作為結(jié)果屬性. 因此,本文將攻擊者權(quán)限的提升作為攻擊圖構(gòu)建的接力點(diǎn).
本文以矩陣描述各主機(jī)之間的關(guān)系,下面給出幾個(gè)矩陣的定義.
定義2網(wǎng)絡(luò)連接矩陣C={Cij},當(dāng)i=j時(shí),Cij=0;當(dāng)i≠j時(shí),Cij=1表示第i個(gè)主機(jī)可以訪問第j個(gè)主機(jī)存在漏洞的服務(wù),Cij=0表示第i個(gè)主機(jī)無法訪問第j個(gè)主機(jī)存在漏洞的服務(wù).
定義3主機(jī)遠(yuǎn)程漏洞矩陣V={vij},當(dāng)i≠j時(shí),vij=0;當(dāng)i=j時(shí),vij為第i個(gè)主機(jī)存在的遠(yuǎn)程漏洞ID列表.
定義4權(quán)限提升矩陣R={rij},當(dāng)i=j時(shí),rij=0;當(dāng)i≠j時(shí),rij為漏洞列表表示攻擊者可以由第i個(gè)主機(jī)利用相關(guān)漏洞獲取第j個(gè)主機(jī)的控制權(quán)限,rij=0表示攻擊者無法由第i個(gè)主機(jī)獲取第j個(gè)主機(jī)的控制權(quán)限.
給定一個(gè)n臺主機(jī)的目標(biāo)網(wǎng)絡(luò),其目標(biāo)環(huán)境描述為Scenario,所有主機(jī)按照0~n標(biāo)號,那么攻擊圖的生成過程可分為權(quán)限提升矩陣計(jì)算和攻擊圖生成2個(gè)過程. 權(quán)限提升矩陣計(jì)算的步驟如下:
① 設(shè)置一個(gè)n維主機(jī)權(quán)限記錄向量d={di},di=0表示攻擊者未獲得第i個(gè)主機(jī)的控制權(quán)限,di=1表示攻擊者獲得了第i個(gè)主機(jī)的user權(quán)限,di=2表示攻擊者獲得了第i個(gè)主機(jī)的root權(quán)限. 攻擊者不會(huì)重復(fù)獲取已經(jīng)獲取過的控制權(quán)限[15],主機(jī)權(quán)限記錄向量可用于記錄權(quán)限獲取情況,避免重復(fù)計(jì)算攻擊路徑,從而降低運(yùn)算量;
② 遍歷目標(biāo)環(huán)境描述Scenario中的Hosts集合,生成主機(jī)遠(yuǎn)程漏洞矩陣V,同時(shí)初始化權(quán)限記錄向量d;
③ 在遍歷的同時(shí),根據(jù)其中的Vuls查詢攻擊模式庫,匹配相應(yīng)的攻擊模式,得到部分實(shí)例化[11]攻擊模式集合PartialAP,并將PartialAP按照漏洞的遠(yuǎn)程或本地屬性分為遠(yuǎn)程攻擊模式集合rPartialAP和本地攻擊模式集合lPartialAP,即PartialAP=rPartialAP∪lPartialAP;
④ 遍歷rPartialAP,根據(jù)其中的Vuls對應(yīng)服務(wù)遍歷目標(biāo)環(huán)境描述Scenario中的Connections集合,以“源主機(jī)是否可訪問目標(biāo)主機(jī)存在漏洞的服務(wù)”為標(biāo)準(zhǔn)生成網(wǎng)絡(luò)連接矩陣C;
⑤ 計(jì)算權(quán)限提升矩陣R,R=CV;
攻擊圖生成的步驟如下:
① 設(shè)置一個(gè)n維主機(jī)遍歷記錄向量t={ti}并初始化為零向量,ti=0表示攻擊圖未遍歷至該主機(jī),否則反之;
② 計(jì)算g=d⊕t,其中⊕為自定義運(yùn)算,表示兩向量對應(yīng)值進(jìn)行異或運(yùn)算,即gi=di⊕ti. 若g為零向量,則轉(zhuǎn)到步驟⑥;若g非零向量,則進(jìn)行步驟③;
③ 遍歷向量g中不為0的值,對于gi≠0,首先設(shè)置ti=1,然后遍歷權(quán)限提升矩陣R的行向量rj={rj0,rj1,…rjn},根據(jù)dj和rjk的值設(shè)置dk為相應(yīng)的權(quán)限值,并生成相應(yīng)的記錄語句用于生成攻擊圖,若tk=1,則忽略該攻擊路徑,以避免在攻擊圖中產(chǎn)生環(huán);
④ 更新dk的值后,根據(jù)dk的值遍歷本地攻擊模式集合lPartialAP,查詢是否存在可本地提權(quán)的原子攻擊,若存在,則繼續(xù)更新dk和tk的值并生成相應(yīng)的記錄語句;
⑤ 轉(zhuǎn)到步驟②繼續(xù)執(zhí)行循環(huán);
⑥ 循環(huán)結(jié)束,根據(jù)記錄語句生成攻擊圖.
在權(quán)限提升矩陣計(jì)算過程中,由于攻擊模式庫中的攻擊模式數(shù)量是一定的,因此步驟②和步驟③的復(fù)雜度O(aN),其中a為常數(shù);目標(biāo)環(huán)境描述Scenario中的Connections集合元素的最大數(shù)量可能為N2,因此步驟④的復(fù)雜度為O(N3);步驟⑤的復(fù)雜度為O(N2). 攻擊圖生成過程的實(shí)質(zhì)是遍歷所有可以獲得控制權(quán)限的主機(jī),嘗試能否以其作為跳板獲取其他主機(jī)的權(quán)限,因此該過程的復(fù)雜度為O(N2). 因此算法整體的復(fù)雜度約為O(N3).
本文搭建實(shí)驗(yàn)網(wǎng)絡(luò)驗(yàn)證了本文中的攻擊圖生成算法,如圖1所示.
實(shí)驗(yàn)網(wǎng)絡(luò)中共有6臺計(jì)算機(jī),分別以數(shù)字1~6作為標(biāo)號. 1號計(jì)算機(jī)為攻擊主機(jī),攻擊者擁有其完全控制權(quán)限;1號主機(jī)通過互聯(lián)網(wǎng)可訪問2號主機(jī),由于中間有防火墻攔截,僅可訪問其Web服務(wù);2號主機(jī)可訪問3、4、5號主機(jī),3號和5號主機(jī)為個(gè)人計(jì)算機(jī),4號主機(jī)為服務(wù)器,運(yùn)行Windows 2003操作系統(tǒng)和Internet Information Services 6.0服務(wù);4號主機(jī)可訪問6號個(gè)人主機(jī). 本文引用CVE(common vulnerabilities exposures)漏洞編號. 目標(biāo)網(wǎng)絡(luò)中所有主機(jī)的漏洞信息如表1所示.
圖1 實(shí)驗(yàn)網(wǎng)絡(luò)環(huán)境Fig.1 Experimental network environment
表1 實(shí)驗(yàn)網(wǎng)絡(luò)漏洞信息
根據(jù)目標(biāo)網(wǎng)絡(luò)信息描述,可以按照本文算法分別得出網(wǎng)絡(luò)連接矩陣C、主機(jī)遠(yuǎn)程漏洞矩陣V如下:
經(jīng)計(jì)算可得,權(quán)限提升矩陣R如下:
作為一種新興市場營銷模式的低碳市場營銷模式,在現(xiàn)實(shí)生活中還是會(huì)面臨很多意想不到的挑戰(zhàn)。從企業(yè)來說,如果想要真正實(shí)施低碳市場營銷模式,勢必會(huì)要徹底改變傳統(tǒng)的生產(chǎn)模式,將低碳的優(yōu)勢和理念融入到企業(yè)發(fā)展的每一個(gè)細(xì)節(jié)中。從實(shí)踐來說,要探討企業(yè)在碳關(guān)稅、碳交易等多方面所要克服的困難,進(jìn)而積極改進(jìn)發(fā)展思路,為企業(yè)的長遠(yuǎn)發(fā)展奠定堅(jiān)實(shí)的基礎(chǔ)。
主機(jī)權(quán)限記錄向量初始化為
d=[200000],
主機(jī)遍歷記錄向量初始化為
t=[000000].
按照本文算法的攻擊圖生成步驟,可生成攻擊圖如圖2所示.
圖2 實(shí)驗(yàn)網(wǎng)絡(luò)攻擊圖Fig.2 Attack graph of experimental network
其中包含4種原子攻擊:
① struts_exe:Struts2遠(yuǎn)程代碼執(zhí)行攻擊;
② local_bof:本地緩沖區(qū)溢出(local buffer overflow)提權(quán)攻擊;
④ iis_bof:IIS遠(yuǎn)程緩沖區(qū)溢出攻擊.
對攻擊圖構(gòu)建過程進(jìn)行了研究,提出了網(wǎng)絡(luò)連接矩陣、主機(jī)遠(yuǎn)程漏洞矩陣和權(quán)限提升矩陣,并通過對攻擊模式庫和目標(biāo)環(huán)境描述的模型化分析,提出了基于權(quán)限提升矩陣的攻擊圖生成方法,可以實(shí)現(xiàn)以O(shè)(N3)算法復(fù)雜度生成攻擊圖. 由于在本文的算法模型中,對攻擊者能力提升模型進(jìn)行了一定程度的簡化,因此僅適用于通用的網(wǎng)絡(luò)攻擊圖生成. 在下一步的工作中,可繼續(xù)豐富本文算法中的矩陣模型,從而能夠適用于更多的網(wǎng)絡(luò)攻擊場景.