攻擊樹的定義
攻擊樹(Attack trees) 為我們提供了一種正式而條理清晰的方法來描述系統所面臨的安全威脅和系統可能受到的多種攻擊。我們用樹型結構來表示系統面臨的攻擊,其中根節點代表被攻擊的目標,葉節點表示達成攻擊目標的方法。
攻擊樹的節點
攻擊樹具有多級節點,其中包括根節點和葉節點。根節點的下級就是葉節點,葉節點的下級依然是葉節點。對於一個葉節點,由它直接引出的下級葉節點就是它的子節點,自然,該葉節點就是其下級子節點的父節點。在下圖中我們可以看到,葉節點C的子節點是葉節點D和葉節點F,那么葉節點C就是葉節點D和葉節點F的父節點。在攻擊樹中,子節點必須滿足使其父節點為真的條件(即節點D可以導致節點C為真)。
根節點A
/ \
葉節點B 葉節點C
/ \
葉節點D 葉節點F
一個實例
舉一個具體例子,在一個教室中一台電腦放在講台桌上,其中電腦與講台桌被被鋼絲鎖連接。如果想偷取這個電腦,我們假設可以採取兩種方法,剪斷鋼絲或想辦法打開鎖,我們可以通過撬鎖或者得到鑰匙來開鎖,要想獲得鑰匙,我們可以通過威脅鑰匙的所有者,賄賂鑰匙的所有者,從儲存鑰匙的地方直接拿取等方法。現在我們將這個偷取電腦的攻擊繪製成攻擊樹,自然,根節點就是這個攻擊的最終目標,偷取電腦。
偷取電腦
/ \
/ \
切斷鋼絲 打開鎖
/ \
/ \
撬鎖 取得鑰匙
/ | \
/ | \
脅迫 賄賂 從存鑰匙的地方拿取
現在我們從下往上看,所有子節點都滿足使父節點成立的條件(如賄賂鑰匙所有者可以取得鑰匙,撬鎖可以打開鎖)。
子節點間的關係
我們注意到,在上圖中,所有同級子節點間的關係都是“或”的關係,即單獨使用一個節點的攻擊方法就能使其父節點為真,當然在現實中也存在必須將兩種或兩種以上的攻擊方法
結合使用才能使攻擊實現的情況,不如在上例中,如果在切斷鋼絲的同時,報警器會報警,那么必須使切斷鋼絲與令報警器失效同時生效,才能偷取電腦,那么,切斷鋼絲與令報警器失效兩個節點就是“和”的關係 。
偷取電腦
/ -and- | \
令報警器失效 切斷鋼絲 打開鎖
/ \
撬鎖 取得鑰匙
/ | \
脅迫 賄賂 從存鑰匙的地方拿取
(由於用文本繪圖的局限,可能引起誤會,真正繪圖方法參見上傳的圖片)
結論
當攻擊樹套用在具體實例中時,其結構可能變得龐大而複雜。一個完整的攻擊樹很可能包括成百上千的葉節點,即便如此,攻擊樹也可以在很大程度上幫助我們判斷系統存在的威脅和決定應對攻擊的方法。