張書(shū)欽,李凱江,張 露,楊峻峰
(中原工學(xué)院 計(jì)算機(jī)學(xué)院,河南 鄭州 450007)
攻擊圖是一種脆弱性關(guān)聯(lián)分析技術(shù),主要用于對(duì)攻擊者的多步攻擊進(jìn)行分析。相對(duì)于傳統(tǒng)的漏洞掃描,攻擊圖技術(shù)更適合在大規(guī)模網(wǎng)絡(luò)中對(duì)網(wǎng)絡(luò)中的脆弱性、防護(hù)目標(biāo)等整體安全狀態(tài)進(jìn)行監(jiān)控。分布式中間件在大數(shù)據(jù)領(lǐng)域的大規(guī)模使用[1-3],使攻擊圖技術(shù)在整個(gè)網(wǎng)絡(luò)進(jìn)行安全狀態(tài)的分析中得到了更廣泛的應(yīng)用[4-5]。
目前,基于操作系統(tǒng)級(jí)別的安全防御已經(jīng)不能滿足用戶(hù)對(duì)安全的要求[6]。因此針對(duì)漏洞技術(shù)的掃描方式得到了大規(guī)模的使用,漏洞掃描為網(wǎng)絡(luò)安全的自動(dòng)化建模提供了可能。攻擊圖在不同的網(wǎng)絡(luò)應(yīng)用中具有不同的數(shù)據(jù)結(jié)構(gòu)組織方式和表現(xiàn)形式[7-8]。攻擊圖的生成方式大多使用傳統(tǒng)的圖結(jié)構(gòu)的遍歷和搜索進(jìn)行構(gòu)造。文獻(xiàn)[9]通過(guò)不確定圖模型提出了一種攻擊圖的生成算法,從攻擊者的目標(biāo)出發(fā),逆向模擬生成攻擊圖,可以較好的模擬現(xiàn)實(shí)攻擊情況并找出最可靠攻擊路徑[9]。文獻(xiàn)[10]利用一種逆向深度優(yōu)先攻擊圖生成算法和基于區(qū)間樹(shù)的規(guī)則匹配算法進(jìn)行攻擊圖的生成[10]。傳統(tǒng)的攻擊圖生成方式雖然有效,但隨著網(wǎng)絡(luò)規(guī)模的增大,使用傳統(tǒng)方法會(huì)產(chǎn)生攻擊圖中節(jié)點(diǎn)爆炸的現(xiàn)象。隨著分布式計(jì)算和大數(shù)據(jù)研究的發(fā)展,國(guó)內(nèi)外研究者也將該技術(shù)應(yīng)用在了攻擊圖中。如文獻(xiàn)[11]構(gòu)建了基于大數(shù)據(jù)的Nosql攻擊圖數(shù)據(jù)模型[11],文獻(xiàn)[12~13]利用了馬爾科夫鏈特性,將其應(yīng)用在了入侵檢系統(tǒng)的分析中,提高了防御的成功率[12-13]。文獻(xiàn)[14]通過(guò)對(duì)數(shù)據(jù)結(jié)構(gòu)的改進(jìn),在使用廣度優(yōu)先搜索算法的基礎(chǔ)上使用分布式技術(shù)生成了攻擊圖[14]。隨著計(jì)算能力和分布式計(jì)算的發(fā)展,基于無(wú)狀態(tài)的機(jī)器學(xué)習(xí)算法已成為網(wǎng)絡(luò)攻擊圖的一個(gè)研究熱點(diǎn)。
為了改善攻擊圖生成算法的效率和規(guī)模,文本將使用Q-learning機(jī)制進(jìn)行攻擊路徑的模擬生成,將智能體所處的環(huán)境作為攻擊圖。智能體通過(guò)場(chǎng)景對(duì)攻擊圖進(jìn)行構(gòu)造,當(dāng)智能體經(jīng)歷過(guò)所有的安全狀態(tài)空間時(shí),攻擊圖生成結(jié)束。
Q-learning是一種解決動(dòng)態(tài)規(guī)劃問(wèn)題的算法思想。結(jié)合攻擊圖的性質(zhì),其系統(tǒng)結(jié)構(gòu)如圖1所示。智能體通過(guò)漏洞掃描對(duì)攻擊圖環(huán)境進(jìn)行感知,并且通過(guò)攻擊模板查看當(dāng)前狀態(tài)的動(dòng)作,選擇動(dòng)作后獲取攻擊圖環(huán)境的回報(bào),并根據(jù)回報(bào)更新攻擊圖中的Q函數(shù)表。
圖1 攻擊圖生成中Q函數(shù)積累值的收斂過(guò)程
攻擊圖的拓?fù)浣Y(jié)構(gòu)是具有若干個(gè)初始節(jié)點(diǎn)和終端節(jié)點(diǎn)的有向圖的描述??梢詫⒁粋€(gè)攻擊圖定義為Q-learning的整個(gè)環(huán)境。整體定義如下。
定義1攻擊圖作為Q-learning智能體認(rèn)知的環(huán)境T=(State,Action,Stateinit,Statetarget,γ, refund),其中State代表攻擊圖中的節(jié)點(diǎn),有漏洞節(jié)點(diǎn)和狀態(tài)節(jié)點(diǎn)兩種類(lèi)型。Action代表智能體可以選取的動(dòng)作類(lèi)型,具有攻擊和防御兩種類(lèi)型。Stateinit代表智能體可以作為攻擊初始狀態(tài)節(jié)點(diǎn)的集合。Statetarget代表智能體的收斂狀態(tài)集合。其中折扣因子和收益兩部分是根據(jù)Q-learning狀態(tài)模型而來(lái)的輔助結(jié)構(gòu)。
定義2環(huán)境空間狀態(tài)空間State,代表攻擊圖中智能體可能到達(dá)的狀態(tài)的集合。節(jié)點(diǎn)類(lèi)型有兩種,分別為漏洞節(jié)點(diǎn)和狀態(tài)節(jié)點(diǎn)兩種類(lèi)型。節(jié)點(diǎn)用四元組表示(id,type,State_value)表示,其中id表示狀態(tài)節(jié)點(diǎn)序號(hào),type表示當(dāng)前節(jié)點(diǎn)類(lèi)型,State_value表示當(dāng)前節(jié)點(diǎn)描述,漏洞節(jié)點(diǎn)為漏洞組信息,狀態(tài)節(jié)點(diǎn)表示當(dāng)前的網(wǎng)絡(luò)狀態(tài)或者攻擊后狀態(tài)。
定義3動(dòng)作Action代表智能體可以進(jìn)行選擇的動(dòng)作集合,具有攻擊和防御兩種行為,用(src,dst,cveids,attack_qvalue,defense_qvalue)表示。其中src表示前驅(qū)狀態(tài)節(jié)點(diǎn),dst表示后繼狀態(tài)節(jié)點(diǎn),cveids表示利用或者修復(fù)的漏洞組中cveid序號(hào)集合,attack_qvalue表示利用脆弱性攻擊后的q值,defense_qvalue表示修復(fù)脆弱性后的q值。智能體在進(jìn)行攻擊時(shí),主要通過(guò)攻擊模板進(jìn)行攻擊前提(狀態(tài)節(jié)點(diǎn))和攻擊后果(狀態(tài)節(jié)點(diǎn))的判斷。攻擊模板
定義4折扣率γ表示攻擊者在進(jìn)行回報(bào)獲取時(shí),隨著攻擊的時(shí)序獲取回報(bào)的比率。
定義5立即獎(jiǎng)罰值refund表示智能體進(jìn)行動(dòng)作選取后得到的回報(bào)值。
Q-learning的數(shù)學(xué)本質(zhì)是馬爾科夫決策過(guò)程。在馬爾科夫決策過(guò)程(Markov decision process)中0,智能體可通過(guò)脆弱性掃描來(lái)對(duì)當(dāng)前網(wǎng)絡(luò)形成感知,通過(guò)對(duì)當(dāng)前環(huán)境的認(rèn)知,可以通過(guò)攻擊模板選擇合適的動(dòng)作(即在當(dāng)前節(jié)點(diǎn)選擇攻擊的方式以及防護(hù)的方式)。智能體通過(guò)決策作用于攻擊圖環(huán)境后,該攻擊者都可以感知當(dāng)前的State。網(wǎng)絡(luò)狀態(tài)空間都會(huì)對(duì)該決策進(jìn)行反映,給出相應(yīng)的回報(bào)rt=r(Statet,actionu),之后進(jìn)入下一個(gè)狀態(tài)Statet+1=g(Statet,actionu) 。在MDP中,r和g只依賴(lài)于當(dāng)前的Statet狀態(tài),并不依賴(lài)之前State序列。這充分滿足了馬爾科夫鏈的狀態(tài)性質(zhì)。
結(jié)合攻擊圖的特點(diǎn),對(duì)于具有特定目標(biāo)的攻擊,智能體可以將該目標(biāo)中的節(jié)點(diǎn)作為收斂狀態(tài)結(jié)束一次場(chǎng)景的學(xué)習(xí)。使用Q-learning機(jī)制最大的特點(diǎn)就是場(chǎng)景的無(wú)狀態(tài)性,每次智能體的學(xué)習(xí)過(guò)程都與其他的學(xué)習(xí)場(chǎng)景沒(méi)有必然的依賴(lài),因此可以采用多主機(jī)多線程的方式對(duì)攻擊圖進(jìn)行維護(hù)。
為進(jìn)行攻擊圖的構(gòu)造,將整個(gè)網(wǎng)絡(luò)狀態(tài)空間模擬為一個(gè)攻擊圖,將從當(dāng)前掃描的初始狀態(tài)為始發(fā)節(jié)點(diǎn)到攻擊目標(biāo)的攻擊序列模擬為攻擊路徑。通過(guò)Q-learning機(jī)制中的智能體可以對(duì)整個(gè)攻擊圖進(jìn)行攻防的模擬,并在模擬中對(duì)攻擊圖進(jìn)行構(gòu)造。攻擊者對(duì)網(wǎng)絡(luò)的攻擊可以看作是對(duì)當(dāng)前網(wǎng)絡(luò)中的某個(gè)狀態(tài)屬性的遷移。對(duì)于一次原子攻擊,攻擊者可以通過(guò)攻擊模板中的多種攻擊方式進(jìn)行選擇,并且在攻擊后獲得一定的回報(bào)。智能體通過(guò)采取多步攻擊防御,最終到達(dá)攻擊目標(biāo)對(duì)應(yīng)的收斂狀態(tài)。智能體在進(jìn)行攻擊防御過(guò)程中經(jīng)過(guò)的節(jié)點(diǎn)狀態(tài)序列形成了攻擊圖中的攻擊路徑。最終智能體通過(guò)在場(chǎng)景學(xué)習(xí)中完成對(duì)整個(gè)攻擊圖生成的過(guò)程。
智能體在進(jìn)行攻擊圖的生成過(guò)程中不可能進(jìn)行無(wú)休止的場(chǎng)景學(xué)習(xí)。對(duì)于智能體在進(jìn)行決策過(guò)程中是通過(guò)貝爾曼方程在Q-learning機(jī)制中的Q函數(shù)提供依據(jù)的。通過(guò)對(duì)當(dāng)前環(huán)境中Q-learning中的Q函數(shù)積累值收斂作為攻擊圖構(gòu)建完畢的條件。
(1)
其中,state,action表示當(dāng)前的狀態(tài)和行為,α代表當(dāng)前智能體的學(xué)習(xí)率。R(state,action)表示智能體在狀態(tài)state時(shí)采取action動(dòng)作得到的立即獎(jiǎng)罰值。
本文利用增強(qiáng)學(xué)習(xí)中Q-learning對(duì)網(wǎng)絡(luò)掃描狀態(tài)進(jìn)行轉(zhuǎn)換分析,并且對(duì)當(dāng)前的節(jié)點(diǎn)狀態(tài)進(jìn)行決策。通過(guò)維護(hù)攻擊圖的Q函數(shù)表為智能體的決策提供下一步的行為建議,并通過(guò)對(duì)學(xué)習(xí)率α的設(shè)置防止在攻擊圖生成過(guò)程中Q函數(shù)積累值過(guò)早的收斂。Q函數(shù)積累值的過(guò)早收斂會(huì)引起攻擊圖中的節(jié)點(diǎn)丟失。
該算法基本思想為:在進(jìn)行攻擊圖生成算法前,需要對(duì)網(wǎng)絡(luò)環(huán)境中的Q函數(shù)表進(jìn)行初始化(初始值為0)。算法的輸入中需要輸入攻擊模板、學(xué)習(xí)率、折扣率、攻擊目標(biāo)和初始節(jié)點(diǎn)集合,算法的輸出為攻擊圖。算法中,智能體根據(jù)對(duì)網(wǎng)絡(luò)環(huán)境的掃描從初始狀態(tài)節(jié)點(diǎn)出發(fā),根據(jù)當(dāng)前狀態(tài)節(jié)點(diǎn)與當(dāng)前攻擊圖中的后繼漏洞節(jié)點(diǎn)根據(jù)Q函數(shù)表和學(xué)習(xí)率進(jìn)行動(dòng)作的選擇。在進(jìn)行動(dòng)作選擇的過(guò)程中,智能體需要對(duì)Q函數(shù)表按照式(1)進(jìn)行維護(hù),并且通過(guò)攻擊模板的匹配結(jié)果對(duì)后繼漏洞節(jié)點(diǎn)和攻擊后果狀態(tài)節(jié)點(diǎn)進(jìn)行增量添加。智能體通過(guò)動(dòng)作選擇到達(dá)下一個(gè)攻擊后果狀態(tài)節(jié)點(diǎn)。通過(guò)一次次的動(dòng)作選擇,智能體把到達(dá)攻擊目標(biāo)狀態(tài)的攻擊路徑作為一次場(chǎng)景學(xué)習(xí)。智能體通過(guò)場(chǎng)景學(xué)習(xí)對(duì)攻擊圖進(jìn)行擴(kuò)展,直到當(dāng)前Q函數(shù)積累值Qsum收斂,則認(rèn)為該網(wǎng)絡(luò)狀態(tài)的攻擊圖生成結(jié)束。具體算法如下
input:target,attackRules,inits,γ,α
output attackGraph
attackgraph_build(target,attackRules,inits,γ,α){
attackGraph =null
∥Q函數(shù)積累值是否收斂
do{
∥判斷是否智能體完成該次場(chǎng)景
while(!init∈target){
∥初始狀態(tài)節(jié)點(diǎn)選擇
init=initChoose(inits)
attackpath=null;
∥智能體可選動(dòng)作集合構(gòu)造
chooseSet=null;
∥根據(jù)攻擊圖中的節(jié)點(diǎn),構(gòu)建智能體可選動(dòng)作集合
chooseSet=getchooseSet(attackGraph,init)
foreach(attackRule:attackRules){
∥如果攻擊圖中沒(méi)有該后繼節(jié)點(diǎn),并且攻擊模板中有,將添加到智能體的可選動(dòng)作集合中
if(init∈attackRule&&! chooseSet.contain(attackRule)){
chooseSet.add(attackRule,0)
}
}
∥根據(jù)式(1)進(jìn)行決策選擇和Q函數(shù)表更新
state=chooseStateByQ(chooseSet,α,γ)
Attackpath.add(state)
init=state
}
∥將攻擊路徑添加到當(dāng)前攻擊圖中
attackGraph.add(attackpath)
}while(!Qsum.is Convergence)
return attackGraph
}
為了進(jìn)行有效性的驗(yàn)證,設(shè)置的包含兩個(gè)主機(jī)的仿真平臺(tái)配置如表1。主機(jī)192.168.1.111作為普通PC,主機(jī)192.168.1.112搭建MDNS服務(wù),包含一個(gè)CVE-2007-2446漏洞。攻擊者處于該局域網(wǎng)外,但是可以通過(guò)路由器與該局域網(wǎng)通信。
表1 網(wǎng)絡(luò)實(shí)驗(yàn)配置
強(qiáng)化學(xué)習(xí)的方式本身就適合基于大數(shù)據(jù)的分布式方式。由于文中采取了基于智能體學(xué)習(xí)場(chǎng)景構(gòu)建的攻擊圖,并且智能體的每次學(xué)習(xí)過(guò)程獨(dú)立進(jìn)行。所以實(shí)驗(yàn)中采取多線程方式模擬分布式中基于RPC的通信方式進(jìn)行訓(xùn)練學(xué)習(xí)。
通過(guò)基于Q-learning機(jī)制的攻擊圖構(gòu)建,最后收斂時(shí)攻擊圖如圖2示,共包含22個(gè)節(jié)點(diǎn)和22條邏輯攻擊。
圖2 基于Q-learning機(jī)制的攻擊圖
圖2中共有22個(gè)節(jié)點(diǎn),一個(gè)攻擊目標(biāo)節(jié)點(diǎn)(節(jié)點(diǎn)7),9個(gè)初始狀態(tài)節(jié)點(diǎn)共(即初始掃描狀態(tài)),12個(gè)中間狀態(tài)節(jié)點(diǎn)。對(duì)于每一個(gè)節(jié)點(diǎn)都有最后收斂后的值函數(shù)的值,以及所對(duì)應(yīng)的狀態(tài)轉(zhuǎn)換的Q值。由于攻擊圖中節(jié)點(diǎn)和邊較多,這里僅給出部分?jǐn)?shù)據(jù)(見(jiàn)表2~表3)。
表2 節(jié)點(diǎn)屬性信息表
表3 邊屬性信息表
Q-learning機(jī)制中,智能體通過(guò)在場(chǎng)景中生成攻擊路徑與攻擊圖建立聯(lián)系。攻擊圖的生成過(guò)程是一個(gè)不斷迭代更新Q函數(shù)的過(guò)程,智能體通過(guò)學(xué)習(xí)場(chǎng)景不斷地將攻擊路徑加入到攻擊圖。Q-learning機(jī)制中的一個(gè)關(guān)鍵過(guò)程是對(duì)折扣因子和學(xué)習(xí)率的選取。實(shí)驗(yàn)中,結(jié)合攻擊路徑特征,選取的學(xué)習(xí)率為0.2。通過(guò)對(duì)學(xué)習(xí)率的設(shè)置可以實(shí)現(xiàn)智能體對(duì)網(wǎng)絡(luò)環(huán)境自動(dòng)探索的過(guò)程,防止Q函數(shù)積累值Qsum過(guò)早收斂。
在攻擊圖的生成過(guò)程中,采用本文算法對(duì)該網(wǎng)絡(luò)環(huán)境進(jìn)行攻擊圖的生成(設(shè)置到吸收態(tài)的Q值為99.9,折扣因子取0.9,學(xué)習(xí)率為0.2),進(jìn)行了47個(gè)攻擊場(chǎng)景的學(xué)習(xí),共計(jì)326次決策訓(xùn)練后數(shù)據(jù)趨于收斂(收斂過(guò)程如圖3),Q函數(shù)累積值收斂值為1 548.14。
圖3 攻擊圖生成中Q函數(shù)積累值的收斂過(guò)程
隨著網(wǎng)絡(luò)安全在工業(yè)控制網(wǎng)絡(luò)中的主動(dòng)防御的重要性的增強(qiáng)[15],攻擊圖作為一種基礎(chǔ)性的安全數(shù)據(jù)結(jié)構(gòu),被應(yīng)用于各種網(wǎng)絡(luò)安全領(lǐng)域。文中通過(guò)Q-learning機(jī)制進(jìn)行了攻擊圖的生成,實(shí)驗(yàn)表明通過(guò)基于Q-learning機(jī)制可以利用分布式集群對(duì)攻擊圖生成過(guò)程進(jìn)行生成。傳統(tǒng)的生成方式一般通過(guò)深度逆序的方式對(duì)攻擊圖進(jìn)行生成,文中通過(guò)將智能體模擬攻擊者的攻擊過(guò)程進(jìn)行攻擊路徑的生成,并通過(guò)Q-learning機(jī)制中的Q函數(shù)收斂作為攻擊圖生成結(jié)束的標(biāo)志。此外,文中通過(guò)多線程的方式進(jìn)行了多智能體的攻擊路徑生成,當(dāng)運(yùn)用到分布式集群時(shí)仍有許多限制需要進(jìn)一步突破。