• 沒有找到結果。

尋找認證協定的漏洞

第三章 系統設計與實作

3.2 Proposed 驗證認證協定演算法

3.2.4 尋找認證協定的漏洞

根據 3.2.2 和 3.2.3 這兩節,我們找到了要攻擊的目標 Item( 重要的 Item ) 和可以利用的資源,因此接下來我們開始介紹我們利用這兩筆資料如何找出認證

協定的漏洞。

我們利用攔截直接使用的資源和可控制的資源分別來搭配攻擊的目標 Item( 重要的 Item )來找出認證協定的漏洞。

z 攔截直接使用的資源和攻擊的目標 Item( 重要的 Item ) z 可控制的資源和攻擊的目標 Item( 重要的 Item )

void DirectAttack(Item item_temp, Item important) {

Item important_temp = important;

Item observation = NULL;

/* 找出所有資料數量跟重要的 Item 一樣的 Item */

while(important _temp != NULL ) {

int numberOfImportantTempItem = important_temp.number;

while(item_temp!= NULL ) {

if(item_temp is ciphertext ) {

int numberOfItemTemp = item_temp.number;

if( numberOfImportantTempItem == numberOfItemTemp ) copy the item_temp to observation;

//不在意 item 在 observation 中的順序

//copy 代表將這個 item 複製到 observation(不包含 Structure 裡的 next 欄位)。

}

item_temp = item_temp.next;

}

important _temp = important _temp.next;

}

/* 根據 content 和 key 相不相同來判斷是否可以攻擊 */

while( observation != NULL ) {

if( observation.content == important.content ) { /* 內容一樣 */

if( observation.key == important.key ) { /* content 一樣、key 一樣 */

if( important.content doesn’t include Nonce or Timestamp ) {

important.flag = true;

int loc = important.location;

if( 找出 important 中 location 大於等於 loc 的 item) if( 找到的所有 item 的 flag == true )

attacker 直接 replay 這個 message 即可攻破。

} }

else /* 內容一樣,key 不一樣 */

{

Item observation_temp = observation.include;

important_temp = important.include;

Boolean flag = true;

while( observati on_temp != null && important_temp!= null ) {

if( include( item_temp, observation_temp) == false ||

include( item_temp, important_temp) == false ) //如果 observation_temp 和 important_temp 有 Kab 這個 Item,不用判斷 item_temp 是否包含他。 以找到 important_item 是由 C 發出的,而 observation_temp 是由 A 或 S 發出的,

而且這個新的 Run 的 observation_temp 會是一開始 A 跟 B 要溝通的 Run 的 important_item。所以可以用多個 Run 攻破此 Protocol。

} }

else /* 內容不一樣 */

{

if( observation.key == important.key ) { /* 內容不一樣,key 一樣 */

DirectAttack function 的用意是找出直接利用參數 item_temp 當成 important 的攻擊,important 就是 3.2.2 節找到的要攻擊的目標 Item( 重要的 Item )。

DirectAttack function 裡面是由兩個 while loop 組成的。

z 第一個 while loop 主要是找出資料數量跟攻擊的目標 Item( 重要的 Item )一 Nonce、Timestamp 這些用來確保 Fresh 機制的資料,而且如果 important 中所有 location 欄位值大於等於目前分析的 Item,而這些 Item 的 flag

identity),譬如像 Na、Nb 不一樣可是他們的格式都是 Nonce,所以也 算 content 一樣。另外在這種情況下,如果目前分析的 Item 和目前分析 的重要的 Item 中被自己加密的資料有包含在 DirectAttack function 第一 個參數的 Structure 中的話,那麼 Attacker 可以使用多個 Run 來攻破此 認證協定。(附錄二有範例詳細的說明)

„ 第三種結果是 content 不一樣、key 一樣:在這種情況下,兩個 Item 的 content 不一樣,如果不一樣的 content 中就是 session key 的話,那麼

Attacker 可以 replay 這個 Item 當成攻擊的目標 Item( 重要的 Item )來攻 破此認證協定。(附錄三有範例詳細的說明)

„ 第四種結果是 content 不一樣、key 也不一樣:在這種情況下,Attacker 無法攻破此認證協定。 只要分析這個 Item 是否包含 Nonce、Timestamp 這些用來確保 Fresh 的機制。

如果這個 Item 沒有包含 Fresh 機制的資料,還不能說一定可以攻擊,因為後

是由 A 發出的,不管目前分析的 item 是由 B 還是 S 發出的(因為用來加密 的 key 如果是 S 的 key 那麼沒人可以解開,所以加密的 key 一定是 B 的 key)。 只要 Attacker 新開一個 Run,偽裝成 C(C is anyone)要跟 A 溝通,這一個 新的 Run 可以找到攻擊的目標 Item( 重要的 Item )是由 C 發出的,而目前 分析的 Item 是由 A 或 S 發出的,而這個新的 Run 目前分析的 Item 會是一 開始 A 跟 B 要溝通的 Run 的攻擊的目標 Item( 重要的 Item )。所以可以用 多個 Run 攻破此 Protocol。(附錄二有範例詳細的說明)

z 第三種結果 content 不一樣、key 一樣:目前分析的 Item 跟攻擊的目標 Item( 重要的 Item )中 content 不一樣,而攻擊的目標 Item( 重要的 Item ) 跟目前分析的 Item 不一樣的資料中如果剛好是 session key,那麼 Attacker 只要 replay 目前分析的 Item 就可以將目前分析的 Item 裡面某筆資料當成 session key 來攻破此認證協定。(附錄三有範例詳細的說明)

z 第四種結果 content 不一樣、key 也不一樣:很明顯的 Attacker 找不到可以當 成攻擊的目標 Item( 重要的 Item )的 Item 來攻破此認證協定,所以在這種 情況下,Attacker 是無法攻破此認證協定。

最後還要判斷所有被認為是攻擊的目標 Item( 重要的 Item )的 Item 是否皆 出現在可控制的資源中。如果有,那麼就代表 Attacker 可以控制這些被認為是攻 擊的目標 Item( 重要的 Item ),也因此很明顯的,Attacker 自然可以攻破此認證 協定。另外除了判斷是否出現在可控制的資源之外,還會判斷目前分析的 Item 的上一個 Message 中所有 Item 是否都有出現在可控制的資源中(第一個 Message 例外),有的話也代表 Attacker 可以控制此 Item。為了方便之後的說明,我們稱 這個判斷是找出 Message 彼此間關係的漏洞。

3.3 Proposed 驗證認證協定演算法的防護範圍

在這一小節中,我們會分析我們 Proposed 的驗證認證協定演算法可以找出 哪些漏洞。

從 3.1 節可以知道我們設計的演算法是站在 Attacker 的角度上來思考如何攻 擊任何一個認證協定。而思考後的結果就是要找出攻擊的目標 Item( 重要的 Item )和所有可以利用的資源,並利用可以利用的資源來攻擊要攻擊的目標 Item( 重要的 Item )。

另外我們在 3.2.4 節中分別是用攔截直接使用的資源和可控制的資源跟攻擊 的目標 Item( 重要的 Item )搭配來尋找認證協定的漏洞。

很明顯的 Attacker 直接拿攔截直接使用的資源去攻擊要攻擊的目標

Item( 重要的 Item ),也就是說 Attacker 只要找出認證協定中他想要攻擊的目標 Item( 重要的 Item ) 就可以不耗任何力量試著去攻擊認證協定了。因此利用攔 截直接使用的資源跟攻擊的目標 Item( 重要的 Item )搭配分析出來的結果,可以 找出 Attacker 不需做任何事,而直接利用攔截直接使用的資源來攻擊認證協定的 漏洞(包含 Freshness attack、Type flaw attack、Man-in-the-middle attack)。

而利用可控制的資源搭配攻擊的目標 Item( 重要的 Item )來尋找認證協定 的漏洞可以找到哪些類型的漏洞呢?首先在 3.2.3 節的最後我們提到了利用這個 方法經由不斷的更新 “有意義的 Item” 和 “沒有意義的 Item”,我們可以找出所 有 Attacker 可以控制的 Item。每一次的更新都是經由舊的 “有意義的 Item” 當 已知的知識分析後所得到的,換句話說得到的這個 Item 可以經由舊的 “有意義 的 Item” 組合起來,那也可以說是 Attacker 只要多一個 Run 就可以製造並得到

這個 Item。因此可控制的資源會是 Attacker 經由一個或一個以上的 Run 就可以 取得的 Item。所以利用可控制的資源搭配攻擊的目標 Item( 重要的 Item )來尋找 認證協定的漏洞可以找出一個或一個以上的 Run 所取得的 Item 直接來攻擊認證 協定的漏洞(同樣也包含 Freshness attack、Type flaw attack、Man-in-the-middle attack)。

另外我們在 3.2.4 節的最後一段說明了找出 Message 彼此間關係的漏洞的方 法,前面提到的兩個方法都是判斷已經找到或是已經找好路徑的 Item 來攻擊的,

而這個方法是先假設 Attacker 不知道路徑去得到攻擊的目標 Item( 重要的 Item ) 的所有 Item,然後利用可控制的資源來判斷是否可以找到路徑去取得這些 Item。

前面三段說明利用攔截直接使用的資源和可控制的資源分別來搭配攻擊的 目標 Item( 重要的 Item )還有 Message 彼此間的關係所能找出認證協定的漏洞的 範圍。這三個方法找到的漏洞的範圍是有重疊的部份,首先第三個方法可能會找 出已經被前兩個方法找到的路徑,但是經由判斷 Message 彼此間的關係卻能找出 前兩個方法沒找到的攻擊路徑。另外第一個方法並不是第二個方法的特例,因為 攔截直接使用的資源不一定會是可控制的資源。如圖 3.2 就是他們的關係圖。

攔截直接使用 的資源

可控制的資源 Message 彼此

間的關係

圖 3.2: 三種方法尋找到的漏洞範圍

第四章 系統介面與模擬結果

在這一章節,我們使用 Woo and Lam Authentication Protocol 當範例來說明我 們這個系統的程式執行流程和系統分析模擬後的結果。

4.1 系統執行流程

我們以 Borland JBuilder 2006 為開發此系統的平台。接著說明我們系統的執 行流程。

DirectAttack、pieceTogether 和 Relationship 這三類的訊息。DirectAttack 是圖 3.2 左邊的圓,pieceTogether 是右邊的圓,Relationship 是上方的圓。

圖 4.1 程式初始介面

圖 4.2 程式中手動輸入認證協定

圖 4.3 程式中手動輸入認證協定

圖 4.4 程式中檔案輸入認證協定

圖 4.5 程式中檔案輸入認證協定

圖 4.6 手動輸入認證協定介面

圖 4.7 選擇儲存有認證協定的檔案

圖 4.8 輸入認證協定後的介面

圖 4.9 選擇模擬認證協定流程

圖 4.10 一步一步的觀看認證協定流程

圖 4.11 選擇模擬攻擊者行為找出認證協定漏洞

圖 4.12 系統偵測出認證協定的漏洞

4.2 系統分析後的結果

在 4.1 節中我們以圖解說明了我們這個系統分析 Woo and Lam Authentication Protocol 的執行過程。因此在這一小節中會探討我們系統分析後得到的資料究竟 有什麼功用?

在圖 4.12 的 Hacker 區塊中有三類資訊。分別是 DirectAttack 的訊息、

pieceTogether 的訊息和 Relationship 的訊息。在這個例子中,DirectAttack 和 pieceTogether 的訊息是一樣。

B 在 2.3 裡要傳送給對方的{Nb}Kbs 攔截下來,這時候 Attacker 就已經成功 的取得了{Nb}Kbs 了。

最後 Attacker 將 1.4 裡 B 要傳送給受信任的第三者的資料攔截下來,接 著偽裝成受信任的第三者將 2.3 拿到的{Nb}Kbs 傳送給 B,而這時候 Attacker 也就成功的偽裝成 A 來跟 B 溝通了。

2. 第二個訊息是說找到第五個 Message 的{Nb}Kbs 和第三個 Message 的 {Nb}Kas 只有加密的 key 不一樣,所以可以經由多個 Run 來取得 {Nb}Kas。經由多個 Run 去取得{Nb}Kas 之後,認證協定也是會繼續執 行到第五個 Message。另外因為 Nb 是隨機的,所以第五個 Message 的 {Nb}Kbs 是無法利用其他 Run 取得第三個 Message 的{Nb}Kas,況且既 然是同一個 Run,Attacker 早在攔截下第三個 Message 的時候就已經成 功取得{Nb}Kas 了。因此拿第五個 Message 的{Nb}Kbs 去取得第三個 Message 的{Nb}Kas 是一件非常沒有意義的事情,所以這段訊息就不加 以理會。

z pieceTogether 的訊息:

1. 第一個訊息說明系統找到第三個 Messgae 的{Nb}Kas 和第五個 Message 的{Nb}Kbs 只有加密的 key 不一樣,所以可以經由多個 Run 來取得 {Nb}Kbs。在 4.1 節我們提到 pieceTogether 代表的是圖 3.2 右邊的圓,

而這個圓代表的意義在 3.3 節我們也提到用來分析的 Item 可以經由一個 或一個以上的 Run 取得。因此第三個 Message 的{Nb}Kas 可以找出一 個 Run 或一個 Run 以上來取得,當拿到之後再經由多個 Run 來成功取 得第五個 Message 的{Nb}Kbs。

流程如下:

1.1 I(M) -> B : M M 代表任何人 1.2 B - > I(M) : Nb

1.3 I(M) -> B : anything

1.4 B -> I(S) : {m, anything}Kbs

2.1 N -> I(O) : N N, O 代表任何人 2.2 I(O) -> N : Nb

2.3 N -> I(O) : {Nb}Kns

3.1 I(N) -> B : N N 指的是 2.1 的 N

3.1 I(N) -> B : N N 指的是 2.1 的 N

相關文件