鐘志成,徐丙鳳,顧久根
(南京林業(yè)大學 信息科學技術(shù)學院,南京 210037)
信息物理融合系統(tǒng)(Cyber Physical System,CPS)是一種利用現(xiàn)代傳感器技術(shù)、計算技術(shù)和網(wǎng)絡技術(shù)實現(xiàn)3C(Computation,Communication,Control)融合,將物理世界和網(wǎng)絡世界有效聯(lián)結(jié)的復雜系統(tǒng),是推動工業(yè)4.0發(fā)展的核心技術(shù)[1]。近年來,CPS被廣泛應用于電力、醫(yī)療、交通運輸、供水(天然氣)等工業(yè)控制系統(tǒng),是工業(yè)界和學術(shù)界的研究熱點[2]。由于CPS各個部件之間的通信主要依靠網(wǎng)絡,因此其易受網(wǎng)絡攻擊影響,而CPS物理部件和網(wǎng)絡部件之間存在高度耦合性,網(wǎng)絡攻擊很容易引起物理部件的故障,從而導致嚴重后果[3]。隨著CPS系統(tǒng)不斷發(fā)展,其面臨的攻擊手段也在不斷更新,攻擊方式的多樣性和隱蔽性給系統(tǒng)造成了極大的安全威脅[4]。為防止各種網(wǎng)絡攻擊對CPS造成災難性后果,對CPS中的一些節(jié)點增加防御措施十分必要。但是由于CPS的復雜性很高,針對其中所有節(jié)點都增加有效的防御措施比較困難,防御代價較高,因此找到一種既能降低防御代價又能有效防御攻擊的方法具有重要意義。
利用攻擊樹(Attack Tree,ATree)[5]、攻擊防御樹(Attack Defense Tree,ADTree)[6]、攻擊對策樹(Attack Countermeasure Tree,ACT)[7]等圖形化模型可以對CPS進行風險建模。圖形化模型可以直觀地體現(xiàn)CPS中攻擊者和防御者的行為,為CPS防御策略的分析工作提供便利。文獻[8]提出為ADTree中的節(jié)點添加攻擊事件的攻擊收益(Return of Attack,ROA)和防御措施的防御收益(Return of Investment,ROI)兩個經(jīng)濟指標,以此評估ADTree的有效性并指導最佳防御策略的選擇。文獻[9]提出一種ACT和ACT在不同約束下的最優(yōu)防御措施計算方法,利用約束矩陣和貪心算法計算覆蓋攻擊節(jié)點最多的防御節(jié)點的集合。文獻[10]利用ADTree建立SCADA(Supervisory Control and Data Acquisition)系統(tǒng)[11]的攻防博弈模型,通過求解該博弈模型的納什均衡,得到攻防雙方的策略選擇概率分布結(jié)果,從而確定攻防雙方為實現(xiàn)自身收益最大化而選擇的最優(yōu)策略。文獻[12]利用ATree對智能電網(wǎng)進行風險建模,并基于布爾可滿足性問題提出一種最小數(shù)目原子節(jié)點防御措施計算方法。
當前的研究工作主要以防御措施的數(shù)量為標準,在此基礎上結(jié)合其他經(jīng)濟參數(shù)來評估防御策略的優(yōu)劣,然而防御措施的數(shù)量并不能決定系統(tǒng)整體防御代價,選擇最小數(shù)目的防御措施未必能達到降低防御成本的目的。為此,本文針對CPS的安全防護成本問題,提出一種CPS最小防御代價的計算方法,并設計相應的計算軟件,以提高防御措施的有效性。
目前對CPS做安全風險評估的定性分析方法,典型的有攻擊樹、攻擊防御樹、故障樹、攻擊圖等。攻擊樹[5]是一種系統(tǒng)化的攻擊場景建模方法,文獻[13]對其做了正式的定義。攻擊樹按從上至下的順序逐層建模攻擊場景,將攻擊目標逐層分解成原子攻擊,可以對攻擊場景做定性和定量分析,被廣泛應用于系統(tǒng)安全性評估。但是攻擊樹僅能描述攻擊場景,無法體現(xiàn)攻擊者和防御者之間的交互行為。為此,文獻[6]提出了攻擊防御樹的概念。攻擊防御樹在攻擊樹的基礎上增加了防御節(jié)點,可以建模攻擊防御場景從而對系統(tǒng)進行安全評估。
文獻[14-19]利用攻擊防御樹對CPS進行定量風險評估。文獻[14]針對SCADA系統(tǒng)提出一種基于層次分析法和攻擊防御樹模型的SCADA系統(tǒng)脆弱性評估方法。文獻[15]利用ADTree對CPS進行風險評估,并提出兩個經(jīng)濟指標來評估攻擊防御樹的有效性。文獻[16]基于攻擊防御樹提出一種針對APT攻擊的風險評估理論模型。文獻[17]通過網(wǎng)絡攻防行為樹來描述網(wǎng)絡攻防場景并利用該模型評估防御措施的效果。文獻[18]利用帶時序邏輯的拓展攻擊防御樹模型,構(gòu)建一種基于博弈論方法的攻擊防御場景分析框架。文獻[19]針對高級持續(xù)性威脅,建立一種攻擊防御樹量化模型,同時分析攻擊行為對防御措施的影響。然而,目前的攻擊防御樹定量分析方法較少考慮對最小防御代價的計算,本文將對此進行研究。
為求解CPS的最小防御代價,首先要用ADTree建模CPS中的攻擊事件和防御事件。建模完成后,需要對ADTree進行轉(zhuǎn)換以提高算法效率,然后計算轉(zhuǎn)換得到的ADTree的徑集,最后計算徑集對應的防御代價并找到最小防御代價。最小防御防御代價計算流程如圖1所示。
圖1 最小防御代價計算流程
如果基于傳統(tǒng)的ADTree來求解最小防御代價,則需要遞歸查詢ADTree的子樹,效率較低。為此,本文提出原子攻擊防御樹(Atom Attack Defense Tree,A2DTree)的概念。A2DTree是一種特殊類型的ADTree,其對一般的ADTree做了如下限制:1)根節(jié)點的類型是攻擊節(jié)點;2)只有原子節(jié)點才有相應的防御節(jié)點,其他節(jié)點沒有防御節(jié)點。由于A2DTree的結(jié)構(gòu)比較特殊,因此要求解A2DTree的最小防御代價,只需要求解A2DTree的徑集并代入防御代價進行計算,即可求出最小防御代價。A2DTree示例如圖2所示。
圖2 原子攻擊防御樹示例Fig.2 Example of atom attack defense tree
原子攻擊防御樹的形式化描述如下:
A2DTree=
其中:Vat表示所有攻擊節(jié)點的集合;Vdf表示所有防御節(jié)點的集合;e={vs,vd}∈E,表示一條從節(jié)點vs到vd的邊;Q={AND,OR,SAND},表示攻擊防御樹中邏輯門的集合;vr∈Vat,表示根節(jié)點;Vl表示原子攻擊節(jié)點的集合,Vdf和Vl存在一一映射關(guān)系。
割集和徑集提供了關(guān)于系統(tǒng)脆弱性的重要信息,下面給出原子攻擊防御樹割集和徑集的定義。
定義1原子攻擊防御樹的割集是導致頂部攻擊事件發(fā)生的基本攻擊事件的集合。
?Vc,?vc∈Vc,有vc∈Vl,若集合Vc中的攻擊事件全部成功,頂層攻擊會成功,則Vc是A2DTree的一個割集,Vl是原子攻擊節(jié)點的集合。
定義2原子攻擊防御樹的徑集是保證頂部攻擊事件不發(fā)生的基本攻擊事件的集合。
?Vp,?vp∈Vp,有vp∈Vl,若集合Vp中的攻擊事件全部失敗,頂層攻擊會失敗,則Vp是A2DTree的一個徑集,Vl是原子攻擊節(jié)點的集合。
2.3.1 攻擊防御樹到原子攻擊防御樹的轉(zhuǎn)換算法
針對中間攻擊節(jié)點也有防御節(jié)點的常用ADTree,利用A2DTree的特征求解其最小防御代價,提出一種將一般ADTree轉(zhuǎn)化為與A2DTree結(jié)構(gòu)一致的等價樹的算法。利用轉(zhuǎn)化后的ADTree來求解最小防御代價,可以提高ADTree最小防御代價計算算法的性能。
ADTree轉(zhuǎn)化為A2DTree的形式,需要將所有存在防御子節(jié)點的中間攻擊節(jié)點下移,使中間攻擊節(jié)點成為葉子節(jié)點。下移過程分為以下5個步驟:
1)構(gòu)造2個中間替補節(jié)點T1、T2。
2)將需要下移的中間節(jié)點N1添加到T1的子節(jié)點集合中。
3)將原N1的子節(jié)點添加到T2的子節(jié)點集合中,原N1子節(jié)點之間的邏輯關(guān)系不變。
4)將T2節(jié)點添加到T1的子節(jié)點集合中,T1子節(jié)點之間的邏輯關(guān)系為AND。
5)將T1節(jié)點添加到原N1父節(jié)點的子節(jié)點集合中。
從ADTree的根節(jié)點開始遞歸遍歷,對有防御子節(jié)點的中間節(jié)點執(zhí)行上述下移過程,可得到最小防御代價與原ADTree相等的A2DTree。ADTree轉(zhuǎn)化為A2DTree的示例如圖3所示。
圖3 攻擊防御樹轉(zhuǎn)化為原子攻擊防御樹的示例Fig.3 Example of attack defense tree being transformed into atom attack defense tree
可以證明ADTree中任意子樹的最小防御代價和經(jīng)過轉(zhuǎn)換得到的新子樹的最小防御代價相等。假設ADT1是ADTree中某一棵以N1為根節(jié)點的子樹,N1為中間攻擊節(jié)點并且有防御節(jié)點D1。ADT1能防御成功且防御代價可能最小的方案有2種:1)采用D1防御節(jié)點;2)不采用D1防御節(jié)點,采用ADT1中其他所有能防御成功的防御節(jié)點組合中防御代價最小的組合。2種方案對應的最小防御代價分別為C1、C2,ADT1的最小防御代價MinCost1為C1、C2中的較小值。ADT1經(jīng)過轉(zhuǎn)換后得到ADT2,N1移動成為葉子節(jié)點。假設T1是ADT2的根節(jié)點,T2是N1原來的子節(jié)點的新父節(jié)點。因為N1和T2之間的邏輯關(guān)系為AND且T1、T2沒有防御子節(jié)點,所以ADT2防御成功且防御代價可能最小的方案有2種:1)采用D1防御措施;2)采用使T2防御成功的防御節(jié)點組合中防御代價最小的組合。2種方案對應的最小防御代價分別為C3、C4,ADT2的最小防御代價MinCost2為C3、C4中的較小值。因為C1=C2,C3=C4,所以MinCost1和MinCost2相等,即ADT1的最小防御代價和ADT2的最小防御代價是一致的。推廣以上結(jié)論,可以證明ADTree的最小防御代價和A2DTree的最小防御代價相等。
假設待求解的ADTree共有A個攻擊節(jié)點和D個防御節(jié)點。攻擊防御樹的轉(zhuǎn)換過程,實際上是遍歷整個ADTree并把有防御節(jié)點的中間攻擊節(jié)點下移的過程,因此,轉(zhuǎn)換算法具有線性時間復雜度O(A+D)。
算法1攻擊防御樹轉(zhuǎn)換為原子攻擊防御樹
輸入攻擊防御樹ADTree
輸出原子攻擊防御樹A2DTree
1.procedure ConverseToA2DTree(節(jié)點root)
2.Children:={root的子節(jié)點集合};
3.NewChildren={};
4.i:=1;
5.repeat
6.child:=Children中第i個節(jié)點;
7.if child是中間攻擊節(jié)點且有防御子節(jié)點
8.then
9.T1:=新的攻擊節(jié)點;
10.T1的子節(jié)點關(guān)系:=child的子節(jié)點關(guān)系;
11.T1的子節(jié)點:=child的子節(jié)點;
12.T2:=新的攻擊節(jié)點;
13.T2的子節(jié)點關(guān)系:=AND;
14.將child添加到T2的子節(jié)點集合中;
15.將T1添加到T2的子節(jié)點集合中;
16.call conversToA2DTree(T1);
17.將T2添加到Newchildren中;
18.else
19.call ConversToA2DTree(child);
20.將child添加到Newchildren中;
21.end if
22.i:=i+1;
23.until i=Children的子節(jié)點個數(shù)+1;
24.root的子節(jié)點集合:=NewChildren;
25.end procedure
26.NewRoot:=新的根節(jié)點;
27.將ADTree的根節(jié)點添加到NewRoot的子節(jié)點集合中;
28.call ConverseToA2DTree(NewRoot);
2.3.2 最小防御代價求解算法
將ADTree轉(zhuǎn)化為A2DTree后,利用成功樹法求A2DTree的徑集。求出A2DTree的對偶樹,將原A2DTree中的AND換成OR,OR換成AND,對偶樹的割集就是原A2DTree的徑集。本文采用代數(shù)法求攻擊防御樹的割集,具體步驟如下:
1)將A2DTree的攻擊節(jié)點看作布爾變量,從根節(jié)點開始逐層向下遞歸,計算出用原子攻擊節(jié)點表示根節(jié)點的布爾表達式。
2)展開布爾表達式,得到一個析取范式(DNF)。
3)提取該DNF中的每一個簡單合取式,合取式中所有文字對應的攻擊節(jié)點構(gòu)成的集合即A2DTree一個割集。
求出A2DTree的所有徑集后,計算各個徑集中所有原子攻擊對應防御代價之和,所有防御代價中的最小值即為最小防御代價。
假設待求解的ADTree共有A個攻擊節(jié)點和D個防御節(jié)點,其中有防御節(jié)點的中間攻擊節(jié)點有A1個。ADTree轉(zhuǎn)換得到的A2DTree有(A+2A1)個攻擊節(jié)點和D個防御節(jié)點。算法需要遍歷整個A2DTree求得由原子攻擊節(jié)點組成的布爾表達式來計算最小防御代價,因此,其時間復雜度為O(A+2A1+D)。
算法2計算攻擊防御樹最小防御代價
輸入原子攻擊防御樹A2DTree
輸出A2DTree的最小防御代價和需要防御的攻擊節(jié)點集合
1.BooleanExpression:=A2DTree的邏輯表達式;
2.PathSets:={BooleanExpression中的所有簡單合取式,即A2DTree所有徑集的集合};
3.MinCost:=+∞;
4.PathSet:={};
5.j:=1;
6.repeat
7.pathset:=PathSets中的第j個徑集;
8.cur_cost:=cutset對應的防御代價;
9.if cur_cost 10.then 11.MinCost:=cur_cost; 12.PathSet:=pathset; 13.end if 14.j:=j+1; 15.until j=PathSets中子集合的個數(shù)+1; 基于攻擊防御樹建模方法,本文在Eclipse平臺上利用Java語言實現(xiàn)了最小防御代價計算軟件(獲取地址為https://github.com/zzc1/ADTree_Min_DefCost/releases/tag/1.0),其用戶界面如圖4所示。具體實現(xiàn)功能如下: 圖4 最小防御代價計算軟件用戶界面Fig.4 User interfaces of the minimum defense cost calculation software 1)導入攻擊防御樹建模工具生成的XML文件,生成相應的攻擊防御樹模型。 2)為防御節(jié)點賦予防御代價屬性值。 3)將攻擊防御樹轉(zhuǎn)換成為原子攻擊防御樹。 4)計算出原子攻擊防御樹的所有徑集和相應的防御代價,并排序輸出。 下面以文獻[20]中電力系統(tǒng)的SCADA系統(tǒng)為例,對本文提出的方法進行驗證。SCADA系統(tǒng)由控制中心網(wǎng)絡、控制中心和變電站之間的通信網(wǎng)絡、變電站自動化系統(tǒng)等網(wǎng)絡組件構(gòu)成,攻擊者利用網(wǎng)絡組件的漏洞可以對SCADA進行攻擊,獲得非法的操作權(quán)限,從而給電力系統(tǒng)造成安全隱患和經(jīng)濟損失[20]。在本實例中,攻擊者通過網(wǎng)絡攻擊向控制保護繼電器發(fā)出跳閘命令,導致斷路器無故障跳閘,從而造成停電。通過本文方法給文獻[20]中的攻擊樹添加防御節(jié)點,所得到的攻擊防御樹如圖5所示,其中各節(jié)點的具體含義如表1所示。 圖5 斷路器無故障跳閘攻擊防御樹 表1 攻擊防御樹各節(jié)點的含義 通過對防御措施的實現(xiàn)難度、需要的時間和資金等因素進行綜合評估,評估人員根據(jù)實際情況對防御代價等級進行評級,得到各防御節(jié)點的防御代價等級,等級如表2所示。 表2 各防御節(jié)點防御代價等級Table 2 Defense cost levels of defense nodes 利用攻擊防御樹建模軟件對攻擊防御樹進行建模,并將模型輸出為XML文件導入攻擊防御樹最小防御代價計算軟件。文件導入結(jié)果如圖6所示。 圖6 XML文件導入結(jié)果Fig.6 Result of XML file import 選擇“添加防御代價屬性”為防御節(jié)點添加防御代價值,防御代價值是一個非負實數(shù),使用具體值還是防御代價等級用戶可自行選擇。屬性賦值結(jié)果如圖7所示。 圖7 屬性賦值結(jié)果Fig.7 Result of attribute assignment 屬性賦值完成后,選擇“計算防御代價”計算最小防御代價,所有的計算結(jié)果會按防御代價的大小升序顯示在彈出的文本框中。部分計算結(jié)果如圖8所示。 圖8 部分計算結(jié)果Fig.8 Partial calculation results 由最小防御代價計算工具輸出的結(jié)果可知,有2個節(jié)點集合對應的防御代價最小。根據(jù)該結(jié)果,可以對集合中相應的攻擊節(jié)點加強防御,降低防御成本。 為進行相關(guān)工作的對比,本文采用文獻[21]中的軟件ADTool對ADTree進行最小防御代價計算,ADTool采用的是自頂向下遞歸算法(UTDRE_ALGO),該算法需要計算原樹的所有包含根節(jié)點的子樹的徑集。上文提出的先將攻擊防御樹進行轉(zhuǎn)換的算法(CONV_ALGO)則需要計算轉(zhuǎn)換后的攻擊防御樹的徑集。為判斷兩種算法的優(yōu)劣程度,分別用兩種算法求解5個ADTree模型的最小防御代價,并統(tǒng)計算法的時間和空間消耗。所有的實驗均是在一臺雙核四線程,CPU頻率為2.5 GHz、內(nèi)存為8 GB的計算機上完成的,實驗結(jié)果如表3所示。 表3 兩種算法的時間和空間消耗 由表3可知,CONV_ALGO的時間和空間消耗都優(yōu)于UTDRE_ALGO。UTDRE_ALGO的時間復雜度和攻擊防御樹的包含根節(jié)點的子樹個數(shù)有關(guān),CONV_ALGO的時間復雜度和攻擊防御樹的節(jié)點個數(shù)有關(guān)。當攻擊防御樹的規(guī)模比較大時,子樹的個數(shù)會比較多。例如實驗中的攻擊防御樹E,經(jīng)過粗略計算,樹E中包含根節(jié)點的子樹個數(shù)約有50 000個,即UTDRE_ALGO需要計算約50 000個ADTree的徑集,而CONV_ALGO只需計算轉(zhuǎn)換后的A2DTree的徑集,從而減少了計算徑集的時間,提高了效率。 本文對CPS安全防御代價評估問題進行研究,通過建模攻擊防御樹和求解徑集,設計一種適用于CPS 的防御代價計算方法?;诠舴烙鶚浣o出原子攻擊防御樹的概念,將攻擊防御樹轉(zhuǎn)換成原子攻擊防御樹,在此基礎上求解原子攻擊防御樹的徑集并計算相應的防御代價。實例驗證結(jié)果表明,該方法較自頂向下直接求解的算法效率更高。后續(xù)將進一步改進攻擊防御樹的結(jié)構(gòu),對帶有時序邏輯的攻擊防御樹進行最小防御代價求解,同時優(yōu)化攻擊防御樹徑集的求解方法,減少中間過程,從而提高算法效率。3 軟件實現(xiàn)與實驗分析
3.1 軟件實現(xiàn)
3.2 實例分析
3.3 性能比較
4 結(jié)束語