李海浩,吳亞鋒,王曉強(qiáng)
(1.中國(guó)人民解放軍91404部隊(duì),河北 秦皇島 066000; 2.江蘇自動(dòng)化研究所,江蘇 連云港 222061)
滲透測(cè)試是一種進(jìn)行漏洞攻擊的安全性測(cè)試方法。該方法通過(guò)合法授權(quán)來(lái)定位某個(gè)計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng),摧毀該系統(tǒng)的安全防護(hù)措施,并最終取得計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)的控制權(quán)[1]。滲透測(cè)試的目的是使這些被測(cè)計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)更加安全,使其能夠抵御惡意攻擊。滲透測(cè)試是一種需要較高技術(shù)能力的安全性測(cè)試工作。滲透測(cè)試人員使用與惡意攻擊者相同的技術(shù)、策略、工具和手段來(lái)模擬惡意攻擊者的破壞行為,從而對(duì)特定組織給出安全防護(hù)建議,因此又將他們稱為“道德黑客”。滲透測(cè)試對(duì)真實(shí)環(huán)境進(jìn)行攻擊模擬,其仿真程度決定了滲透測(cè)試效果[2]。
滲透測(cè)試成功的關(guān)鍵在很大程度上依賴于滲透測(cè)試攻擊模型的構(gòu)建,因此滲透測(cè)試攻擊模型一直受到學(xué)術(shù)界和工業(yè)界的高度關(guān)注。目前比較流行的滲透測(cè)試攻擊模型包括基于攻擊樹(shù)的滲透測(cè)試攻擊模型、基于攻擊圖的滲透測(cè)試攻擊模型和基于Petri網(wǎng)的滲透測(cè)試攻擊模型。
Weiss[3]最早將攻擊樹(shù)的建模方法應(yīng)用于信息系統(tǒng)中,隨后Schneier[4]在信息安全領(lǐng)域應(yīng)用了攻擊樹(shù)建模方法。這些方法都集中于并行模型,即假設(shè)所有的基本攻擊行為同時(shí)發(fā)生,但是這種并行模型用來(lái)描述實(shí)際情況并不準(zhǔn)確,因?yàn)樵诂F(xiàn)實(shí)生活中,攻擊者可以決定開(kāi)展攻擊行為的順序[5]。羅森林等[6]提出了一種串行攻擊樹(shù)模型,該方法的主要思想是首先引入攻擊序列,為所有葉子節(jié)點(diǎn)賦予權(quán)重,實(shí)現(xiàn)對(duì)攻擊步驟的量化分析,能夠有效克服并行模型效率低下、實(shí)用性較差的缺陷。孫卓等[7]為了解決核反應(yīng)堆數(shù)字化控制系統(tǒng)在信息安全方面的脆弱性,提出了基于攻擊樹(shù)模型的數(shù)字化控制系統(tǒng)信息安全分析方法?;诠魳?shù)的滲透測(cè)試模型具有直觀、可視化等優(yōu)點(diǎn),但是其不能描述攻擊者的行為和漏洞攻擊方法。
Phillips等[8]在對(duì)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)進(jìn)行研究的過(guò)程中提出了攻擊圖的概念,然而該攻擊圖只能依靠手動(dòng)構(gòu)建。Kotenko等[9]將安全矩陣引入滲透測(cè)試,提出一種基于安全矩陣的攻擊圖構(gòu)建方法,該方法能夠有效評(píng)估網(wǎng)絡(luò)的安全性。崔穎等[10]通過(guò)對(duì)被測(cè)目標(biāo)網(wǎng)絡(luò)進(jìn)行分析,找出網(wǎng)絡(luò)脆弱點(diǎn)及其相互之間的邏輯關(guān)系,從而提出一種能夠自動(dòng)生成測(cè)試方案的攻擊圖建模方法,該方法滿足了網(wǎng)絡(luò)安全管理的需要。劉淵等[11]對(duì)攻擊圖中的入侵動(dòng)作進(jìn)行分析,為其構(gòu)建加權(quán)防御策略集,并結(jié)合二進(jìn)制粒子群算法,提出了基于攻擊圖和改進(jìn)粒子群算法的網(wǎng)絡(luò)防御策略。陳鋒[12]通過(guò)對(duì)復(fù)雜網(wǎng)絡(luò)劃分子網(wǎng),提出一種基于多目標(biāo)攻擊圖的層次化網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估方法。趙超等[13]將啟發(fā)式算法應(yīng)用于滲透測(cè)試的攻擊圖模型分析,提出能夠適應(yīng)大規(guī)模網(wǎng)絡(luò)安全加固的攻擊方法。曾賽文等[14]通過(guò)逆向模擬攻擊過(guò)程來(lái)生成攻擊圖,提出一種基于不確定攻擊圖模型的滲透測(cè)試方法,該方法能夠有效解決狀態(tài)空間爆炸問(wèn)題。何江湖等[15]對(duì)漏洞關(guān)聯(lián)代價(jià)進(jìn)行分析,并結(jié)合攻擊圖自動(dòng)生成算法,提出一種基于漏洞關(guān)聯(lián)攻擊代價(jià)的攻擊圖模型構(gòu)建方法,該模型能夠反應(yīng)不同漏洞之間的關(guān)聯(lián)關(guān)系。謝冬青等[16]提出了一種將攻擊圖最小化的算法,該方法能夠有效地解決路徑冗余問(wèn)題。孫彥臣[17]利用CVSS評(píng)分系統(tǒng),并對(duì)攻擊步長(zhǎng)做出限制,提出一種低代價(jià)攻擊圖測(cè)試方法,該方法有效地縮小了攻擊圖的規(guī)模。徐丙鳳等[18]將攻擊圖模型應(yīng)用于信息物理融合系統(tǒng),提出了攻擊信息物理融合系統(tǒng)的最優(yōu)攻擊路徑策略選擇方法。劉龍等[19]通過(guò)對(duì)網(wǎng)絡(luò)連通性進(jìn)行分析,提出一種能夠自動(dòng)生成完備攻擊圖的方法。付亮[20]通過(guò)對(duì)節(jié)點(diǎn)的攻擊成功概率進(jìn)行量化分析,提出基于概率攻擊圖模型的滲透測(cè)試方法。
楊濤等[21]將有色Petri網(wǎng)應(yīng)用到滲透測(cè)試攻擊模型的構(gòu)建中,提出基于有色Petri網(wǎng)的滲透測(cè)試攻擊模型,該模型能夠有效模擬網(wǎng)絡(luò)攻擊過(guò)程。羅森林等[22]以時(shí)間Petri網(wǎng)為滲透測(cè)試攻擊模型的構(gòu)建基礎(chǔ),提出一種能夠清晰地表述滲透測(cè)試攻擊過(guò)程的方法,該方法有效地提高了自動(dòng)化建模的程度。韓璐璐[23]將有色Petri網(wǎng)應(yīng)用到具體的滲透測(cè)試攻擊過(guò)程中,建立基于有色Petri網(wǎng)的滲透測(cè)試模型。杜鎮(zhèn)宇等[24]通過(guò)研究高持續(xù)性威脅攻擊過(guò)程的完整路徑,提出基于Petri網(wǎng)模型的APT攻擊模型生成方法,該方法可以對(duì)高持續(xù)性威脅攻擊進(jìn)行有效的預(yù)測(cè)。欒俊超[25]對(duì)網(wǎng)絡(luò)環(huán)境進(jìn)行自動(dòng)化建模和攻擊,提出一種基于Petri網(wǎng)的單目標(biāo)自動(dòng)化攻擊方法。
本文以漏洞為基本單元,以時(shí)間Petri網(wǎng)中庫(kù)所的時(shí)間區(qū)間表示漏洞的發(fā)生區(qū)間,構(gòu)建以時(shí)間Petri網(wǎng)為基礎(chǔ)模型的滲透測(cè)試攻擊模型,給出快速漏洞利用路徑、穩(wěn)定漏洞利用路徑和最佳漏洞利用路徑的定義,能夠有效描述完成一次滲透測(cè)試攻擊的最低代價(jià)和最佳操作路徑。
在整個(gè)滲透測(cè)試過(guò)程中,滲透測(cè)試攻擊模型的構(gòu)建是最為關(guān)鍵的執(zhí)行環(huán)節(jié),攻擊模型的選擇直接決定滲透測(cè)試效果。本文將滲透測(cè)試攻擊過(guò)程細(xì)化為單漏洞模型構(gòu)建、滲透測(cè)試攻擊模型整合、獲取快速漏洞利用路徑、獲取穩(wěn)定漏洞利用路徑以及計(jì)算最佳漏洞利用路徑5個(gè)子步驟,從而實(shí)現(xiàn)Petri網(wǎng)模型在滲透測(cè)試過(guò)程中更加有效的應(yīng)用。下面給出基于時(shí)間Petri網(wǎng)的滲透測(cè)試攻擊模型的定義。
在滲透測(cè)試攻擊過(guò)程中,每個(gè)漏洞步驟的執(zhí)行完成時(shí)間與實(shí)際網(wǎng)絡(luò)環(huán)境的質(zhì)量有關(guān),因此可以根據(jù)網(wǎng)絡(luò)環(huán)境的質(zhì)量對(duì)漏洞步驟的執(zhí)行完成時(shí)間做出范圍評(píng)估。下面給出漏洞的各個(gè)步驟執(zhí)行完成所需的時(shí)間下限和時(shí)間上限的定義。
定義2被測(cè)系統(tǒng)網(wǎng)絡(luò)環(huán)境質(zhì)量良好,能夠以較短時(shí)間完成各漏洞步驟的執(zhí)行,則稱該時(shí)間為完成漏洞步驟的最小時(shí)間;被測(cè)系統(tǒng)網(wǎng)絡(luò)環(huán)境惡劣,需要較多時(shí)間完成各漏洞步驟的執(zhí)行,稱該時(shí)間為完成漏洞步驟的最大時(shí)間。
根據(jù)單漏洞的各個(gè)步驟之間的關(guān)聯(lián)關(guān)系,給出單漏洞時(shí)間Petri網(wǎng)模型構(gòu)建過(guò)程:
1)假設(shè)單漏洞中步驟pi是步驟pj的前驅(qū)步驟,即執(zhí)行完成步驟pi之后,步驟pj才能執(zhí)行,則在步驟pi和步驟pj之間添加步驟pij,使得?pij=tij1,pij?=tij2,并賦予庫(kù)所pij的時(shí)間區(qū)間為[0,0]。有順序關(guān)系的步驟構(gòu)造如圖1所示。
圖1 有順序關(guān)系的步驟構(gòu)造
2)假設(shè)單漏洞中的步驟p1,p2,…,pn都沒(méi)有前驅(qū)步驟,t1,t2,…,tn代表步驟p1,p2,…,pn開(kāi)始執(zhí)行的變遷,則添加初始庫(kù)所p0,同時(shí)將變遷t1,t2,…,tn合并為變遷t0,使得?t0={p0},t0={pi|步驟pi無(wú)前驅(qū)步驟},?p0=?,p0?={t0},并賦予初始庫(kù)所p0的時(shí)間區(qū)間為[0,0]。
3)假設(shè)單漏洞中的步驟p1,p2,…,pn無(wú)后繼步驟,t1,t2,…,tn代表步驟p1,p2,…,pn結(jié)束執(zhí)行的變遷,則添加結(jié)束庫(kù)所pe,同時(shí)將變遷t1,t2,…,tn合并為變遷te,使得?te={pi|步驟pi無(wú)后繼步驟},te?={pe}, ?pe={te},pe?=?,并賦予庫(kù)所pe的時(shí)間區(qū)間為[0,0]。
4)設(shè)置初始標(biāo)識(shí)M0,使得M0(p0)=1,M0(p)=0 (p≠p0)。
由上述步驟1~步驟4得到的Petri網(wǎng)模型是包含有很多時(shí)間區(qū)間為[0,0]的庫(kù)所,從開(kāi)始節(jié)點(diǎn)遍歷該P(yáng)etri網(wǎng)模型,當(dāng)遍歷到時(shí)間區(qū)間為[0,0]的庫(kù)所(不包括p0、pe)時(shí),刪除該庫(kù)所,同時(shí)合并該庫(kù)所的前驅(qū)步驟的結(jié)束變遷與該庫(kù)所的后繼步驟的開(kāi)始變遷。由此,構(gòu)造的模型即為單漏洞時(shí)間Petri網(wǎng)模型。
在獲得單漏洞模型集合后,需要將集合中的單漏洞模型進(jìn)行整合,構(gòu)造包含所有漏洞利用過(guò)程的滲透測(cè)試攻擊模型。
滲透測(cè)試攻擊過(guò)程中相互關(guān)聯(lián)的漏洞之間存在如下關(guān)系:
1)串行關(guān)系。如果漏洞Σi和Σj之間需要嚴(yán)格按照先后順序執(zhí)行,則稱漏洞Σi和Σj為串行關(guān)系。
2)并行關(guān)系。如果漏洞Σi和Σj的執(zhí)行互不影響,相互獨(dú)立,則稱漏洞Σi和Σj為并行關(guān)系。
3)混合關(guān)系。如果漏洞Σi和Σj之間無(wú)串行關(guān)系也無(wú)并行關(guān)系,則稱漏洞Σi和Σj為混合關(guān)系。
根據(jù)漏洞之間存在的串行關(guān)系、并行關(guān)系和混合關(guān)系,對(duì)2個(gè)單漏洞模型進(jìn)行整合,其整合算法如算法1所示。
算法12個(gè)漏洞模型的整合算法。
輸入:2個(gè)漏洞模型Σi、Σj。
步驟1若漏洞模型Σi、Σj之間為串行關(guān)系,假設(shè)Σi在Σj之前執(zhí)行,則將Σi的結(jié)束變遷與Σj的初始庫(kù)所相連,獲得模型Σ′;若漏洞模型Σi、Σj之間為并行關(guān)系,則將漏洞模型Σi或Σj添加到余下的漏洞模型集合;若漏洞模型Σi、Σj之間為混合關(guān)系,則執(zhí)行以下步驟。
步驟2讀取漏洞模型Σi中的一個(gè)庫(kù)所pm。
步驟3若在漏洞模型Σj中存在與庫(kù)所pm相似的庫(kù)所pn,則添加新庫(kù)所pmn,刪除庫(kù)所pm與pn,同時(shí)將庫(kù)所pmn并入Σ′;若漏洞模型Σj中不存在與庫(kù)所pm相似的庫(kù)所,則將庫(kù)所pm并入Σ′。
步驟4如果遍歷完Σi中的所有庫(kù)所,則執(zhí)行步驟5;否則,執(zhí)行步驟2。
步驟5把漏洞模型Σj剩余的庫(kù)所加入模型Σ′中,并保持順序不變。
步驟6在漏洞模型Σ′中,P′=Pi∪Pj;T′=Ti∪Tj;F′=Fi∪Fj;M′=Mi∪Mj;W保持不變。
假設(shè)任意一個(gè)滲透測(cè)試攻擊過(guò)程包含的單漏洞模型構(gòu)成單漏洞集合{Σ1,Σ2,…,Σk},將其中任意2個(gè)漏洞模型Σi、Σj利用整合算法進(jìn)行整合,獲得整合后的漏洞模型Σ′。把漏洞模型Σ′添加到余下的漏洞模型集合,獲得新的漏洞模型集合。重復(fù)執(zhí)行上述過(guò)程,直至漏洞模型集合中僅存有一個(gè)漏洞模型,則稱該模型為滲透測(cè)試攻擊模型。
滲透測(cè)試攻擊路徑的選擇主要考慮完成一次滲透攻擊所需耗費(fèi)時(shí)間最少的攻擊路徑,以及所花時(shí)間最穩(wěn)定的攻擊路徑。根據(jù)完成滲透攻擊所耗時(shí)間的多少及穩(wěn)定程度,給出快速漏洞利用路徑及穩(wěn)定漏洞利用路徑。
1.3.1 快速漏洞利用路徑
定義3如果滲透測(cè)試攻擊過(guò)程中的每個(gè)步驟pi都在最小時(shí)間α(pi)完成,則稱:
為步驟pi的最早開(kāi)始執(zhí)行時(shí)間,當(dāng)步驟pi為步驟pe時(shí),則稱T(pe)為執(zhí)行一次滲透攻擊過(guò)程所需的最短時(shí)間。
定義4如果某個(gè)滲透測(cè)試包含有n個(gè)滲透攻擊過(guò)程,Tk(pe)為執(zhí)行第k次攻擊過(guò)程需要花費(fèi)的最短時(shí)間,則稱T=min {Tk(pe)}(1kn)為完成該次滲透測(cè)試攻擊過(guò)程所需的最短時(shí)間。
定義5滿足公式T=min {Tk(pe)}(1kn)的從p0到pe的有向路徑稱為快速漏洞利用路徑。
根據(jù)快速漏洞利用路徑的定義,給出快速漏洞利用路徑算法如算法2所示。
算法2快速漏洞利用路徑算法。
輸入:漏洞列表。
步驟1根據(jù)漏洞列表構(gòu)造單漏洞模型Σ1,Σ2,…,Σn。
步驟2通過(guò)模型整合算法構(gòu)造完整的滲透測(cè)試攻擊模型Σ。
步驟3遍歷步驟2中的模型Σ,計(jì)算完成第k次滲透攻擊過(guò)程所需的最短時(shí)間Tk(pe)。
步驟4若步驟2中的模型Σ遍歷完成,求出滿足公式T=min {Tk(pe)}(1kn)的從p0到pe的有向路徑,否則,繼續(xù)執(zhí)行步驟3。
1.3.2 穩(wěn)定漏洞利用路徑
定義6對(duì)于滲透測(cè)試攻擊過(guò)程中的每個(gè)步驟pi都在時(shí)間區(qū)間[α(pi),β(pi)]內(nèi)完成,則稱:
為步驟pi的穩(wěn)定度,當(dāng)步驟pi為步驟pe時(shí),則稱S(pe)為執(zhí)行一次滲透攻擊過(guò)程的穩(wěn)定度。
定義7如果某個(gè)滲透測(cè)試包含有n個(gè)滲透攻擊過(guò)程,完成第k次滲透攻擊過(guò)程的穩(wěn)定度記為Sk(pe),則稱S=min {Sk(pe)}(1kn)為完成該次滲透測(cè)試攻擊的穩(wěn)定度。
定義8滿足公式S=min {Sk(pe)}(1kn)的從p0到pe的有向路徑稱為穩(wěn)定漏洞利用路徑。
根據(jù)穩(wěn)定漏洞利用路徑的定義,給出穩(wěn)定漏洞利用路徑算法如算法3所示。
算法3穩(wěn)定漏洞利用路徑算法。
輸入:漏洞列表。
步驟1根據(jù)漏洞列表構(gòu)造單漏洞模型Σ1,Σ2,…,Σn。
步驟2通過(guò)模型整合算法構(gòu)造完整的滲透測(cè)試攻擊模型Σ。
步驟3遍歷步驟2中的模型Σ,計(jì)算完成第k次滲透攻擊過(guò)程的穩(wěn)定度Sk(pe)。
步驟4若步驟2中的模型Σ遍歷完成,求出滿足公式S=min {Sk(pe)}(1kn)的從p0到pe的有向路徑,否則,繼續(xù)執(zhí)行步驟3。
1.3.3 最佳漏洞利用路徑
快速漏洞利用路徑滿足滲透測(cè)試人員對(duì)滲透測(cè)試攻擊過(guò)程花費(fèi)時(shí)間最短的要求,穩(wěn)定漏洞利用路徑滿足滲透測(cè)試人員對(duì)滲透測(cè)試攻擊過(guò)程花費(fèi)時(shí)間穩(wěn)定度的要求。然而,在實(shí)際的滲透測(cè)試過(guò)程中,快速漏洞利用路徑與穩(wěn)定漏洞利用路徑可能并不是同一個(gè),需要在二者之間做出取舍。因此,本文給出最佳漏洞利用路徑的概念。
定義9假設(shè)某個(gè)滲透測(cè)試包含有n個(gè)滲透攻擊過(guò)程,Tk(pe)為完成第k次攻擊過(guò)程需要花費(fèi)的最短時(shí)間,Sk(pe)為完成第k次攻擊過(guò)程的穩(wěn)定度,存在有ω1,ω2∈[0,1],且ω1+ω2=1,滿足min {ω1Tk(pe)+ω2Sk(pe)}(1kn)的從p0到pe的有向路徑稱為最佳漏洞利用路徑。
根據(jù)最佳漏洞利用路徑的定義,給出最佳漏洞利用路徑算法如算法4所示。
算法4最佳漏洞利用路徑算法。
輸入:漏洞列表、ω1和ω2。
步驟1根據(jù)漏洞列表構(gòu)造單漏洞模型Σ1,Σ2,…,Σn。
步驟2通過(guò)模型整合算法構(gòu)造完整的滲透測(cè)試攻擊模型Σ。
步驟3遍歷步驟2中的模型Σ,計(jì)算完成第k次滲透攻擊過(guò)程的最短時(shí)間Tk(pe)和穩(wěn)定度Sk(pe)。
步驟4若步驟2中的模型Σ遍歷完成,求出滿足min {ω1Tk(pe)+ω2Sk(pe)}(1kn)的從p0到pe的有向路,否則,繼續(xù)執(zhí)行步驟3。
為了驗(yàn)證本文所提滲透攻擊路徑選擇算法的有效性,在VMware Workstation虛擬平臺(tái)上搭建本文所需要的實(shí)驗(yàn)環(huán)境,其中攻擊主機(jī)安裝Kali Linux操作系統(tǒng),靶機(jī)安裝Windows Server 2003操作系統(tǒng),并通過(guò)IIS6.0搭建Web服務(wù)器。選擇國(guó)家信息安全漏洞庫(kù)中最新發(fā)布的漏洞作為本文的實(shí)驗(yàn)數(shù)據(jù),選擇的實(shí)驗(yàn)數(shù)據(jù)描述如表1所示。
表1 實(shí)驗(yàn)數(shù)據(jù)表
根據(jù)1.2節(jié)所提滲透測(cè)試攻擊模型構(gòu)建方法進(jìn)行模型整合,則將單漏洞時(shí)間Petri網(wǎng)模型Σa,Σb,…,Σh進(jìn)行整合,得到時(shí)間Petri網(wǎng)模型Σ,如圖2所示。
圖2 基于時(shí)間Petri網(wǎng)的滲透測(cè)試模型
對(duì)圖2所示的時(shí)間Petri網(wǎng)模型Σ進(jìn)行遍歷,在開(kāi)始庫(kù)所p0和結(jié)束庫(kù)所pe之間存在5條攻擊路徑,如表2所示。
表2 攻擊路徑描述
本文提出一種以時(shí)間Petri網(wǎng)為基礎(chǔ)模型的滲透測(cè)試攻擊模型,該模型的基本粒度為漏洞,以時(shí)間Petri網(wǎng)中庫(kù)所的時(shí)間區(qū)間表示漏洞的發(fā)生區(qū)間,根據(jù)漏洞間的串行、并行和混合關(guān)系,給出了模型整合算法;同時(shí)定義了快速漏洞利用路徑、穩(wěn)定漏洞利用路徑和最佳漏洞利用路徑,并提供快速漏洞利用路徑選擇算法、穩(wěn)定漏洞利用路徑選擇算法和最佳漏洞利用路徑選擇算法。最后通過(guò)模擬實(shí)驗(yàn)驗(yàn)證本文所提滲透攻擊路徑選擇算法的有效性。