• 沒有找到結果。

第一章 序論

1.2 研究目標

在這篇論文中,我們假設認證協定所使用的加密方法是完美沒有缺陷的,也 就是說 Attacker 無法利用密碼學上的攻擊方式來攻擊認證協定,譬如像利用 Known plaintext、Chosen plaintext、Chosen ciphertext、Chosen text attacks 這些攻 擊方法找出加密的 key 或是找出 hash function 的碰撞來攻擊。因此在這裡提到的 漏洞指的是認證協定邏輯上的漏洞,譬如像利用 Man in the middle attack、Parallel session attack、Type flaw attack、Freshness attack 這些攻擊方法偽裝成別人欺騙對 方,或是拿已經知道的資料當成 session key 來欺騙對方,而這些漏洞通常都是設 計者沒有考慮的很詳細下所產生出來的邏輯上的漏洞。接下來在這篇論文中提到 的漏洞指的都是邏輯上的漏洞。

由於以前的學者們設計出各式各樣的認證協定,然而這些認證協定在事後被 證實有漏洞的存在,甚至連修改後的版本也仍然有漏洞存在。因此就有學者根據 已經存在的漏洞來分析一個好的、安全的認證協定需要有哪些特性才能夠避免這 些漏洞,但是如果根據檢查這些特性來決定認證協定是否安全沒有漏洞將會是一

件非常危險的事情,因為如果今天有一個特性沒有被發現,那麼直到這個特性被 發現之前永遠不會找到這個漏洞。因此就有學者設計驗證演算法來確認認證協定 是否安全,而在分析認證協定安全性的演算法範疇中,最著名的莫過於 BAN logic[1],BAN logic 是使用邏輯假設來推導認證協定是否安全,只是 BAN logic 需要一個很有經驗的人在分析前先列出需要的邏輯假設,但是只要邏輯假設錯誤

z [11]一文中探討了 SSL3.0 不安全的地方,包括 SSL 本身架構設計上所 產生的漏洞,同時也說明 SSL 如何防禦一些邏輯上的漏洞。

z [6]一文中探討了 UMTS 中因為要考慮向下相容的關係,導致 UMTS 和 GSM 用戶溝通時產生了 Man in the middle attack。

另外在[7]這篇文章中,作者設計一個用來確認認證協定是否安全的演算 法,並詳細的說明他們提出的方法的原理、概念和模擬結果。

z [7]一文中將認證協定每一個訊息和他們彼此間的關係對應出來。譬如 第一個訊息可以得到某筆資料,第二個訊息可以取得另一筆資料,而這 兩個訊息間的關係是只要將第一個訊息的資料傳送給第二個訊息的接 收者,Attacker 就可以取得第二個訊息的資料。而利用訊息彼此間的關 係來找出攻擊認證協定的方法。

1.4 論文架構

在第二章我們會介紹認證協定基本概念和常用的標記,另外還有本文中會用 到的標記和定義。第三章詳細的介紹我們演算法的想法、架構和可以找出哪些範 圍的漏洞。第四章顯示程式的介面和分析模擬後的結果。第五章結論和提出未來 可以改進的方向。

第二章 何謂認證協定

2.1 認證協定的基本概念

z 認證協定指的是至少兩個或兩個以上的參與者經過一連串的訊息傳遞後,可 以確定彼此身份的一系列步驟。

z 認證協定必須由第一個訊息開始,由最後一個訊息結束,而且訊息必須從第 一個依序到最後一個,其中任何一個訊息不能沒有執行到,否則認證協定就 會中止。

z 認證協定中的參與者通常除了要溝通的雙方之外還會有一個受信任的第三 者(通常用S來代表受信任的第三者)。

z 認證協定中所使用的加解密演算法有三種類型,第一類是對稱式加密演算 法、第二類是非對稱式加密演算法,最後一類是前兩個類型交互使用。

2.2 認證協定常用的標記

z Na:由參與者 A 產生的亂數。

z Ta:由參與者 A 產生的 Timestamp。

z A:參與者 A 的 identity。

z Kas:代表只有參與者 A 和受信任的第三者 S 才擁有的 key。

z Kab:參與者 A 和參與者 B 在這次溝通中用來加解密的 Session key。

z {message}Kas:message 用 Kas 加密。

2.3 自訂的標記和定義

z Message:認證協定中的每一個訊息都是 Message,也就是說認證協定是由 多個 Message 所組成的。如圖 2.1 總共有五個 Message。

z Item:以圖 2.1 的第一個 Message 來說,這個 Message 有三個 Item,分別是

A、B、Na。Item 可以是沒有加密過的,也可以是有加密過的,甚至於可以 是多重加密的(例如{Na, A, {Na}Kas}Kas、{Na}Kas 都是 Item)。

z 資料數量:有多少個 Item。如果是要計算 Message 有多少個資料數量,那麼 只要計算這個 Message 有多少 Item 即可,不必管 Item 是否有多重加密。如 果是要計算一個 Item 有多少個資料數量,假設這個 Item 沒有加密,那麼資 料數量只有一個,假設這個 Item 有加密,那麼只要計算被這個 Item 加密的 Item 有多少個,一樣不必管 Item 是否有多重加密。舉例來說,圖 2.1 的第 二個 Message 只有一個資料數量(也就是{Na, B, Kab, {Kab, A}Kbs}Kas),

而這個 Item 有四個資料數量(也就是 Na、B、Kab 和{Kab, A}Kbs)。

z 重要的 Item:顧名思義指的是 Item,而這個 Item 必須是有加密過的,並且 還要跟接下來的 Message 比對才可判斷是否是重要的 Item。判斷方式詳見 3.2.2 節。

z 有意義的 Item:Attacker 可以製造出來或拿的到也看的懂的 Item,也就是說 Attacker 可以控制這個 Item。如果 Item 沒有加密,很顯然 Attacker 可以製造 出這個 Item 而且也看的懂這個 Item 是什麼;如果 Item 有加密,Attacker 不 一定可以製造的出來或看的懂這個加密的 Item 裡面的資料是什麼。

z 沒有意義的 Item:Attacker 無法製造出來或拿的到但看不懂的 Item。很明顯 沒有意義的 Item 一定是有加密的 Item,因為這樣 Attacker 才會看不懂是什 麼資料。

圖 2.1: Needham-Schroeder Protocol

第三章 系統設計與實作

在這一章節中,我們開始詳細的介紹我們提出的驗證演算法,在顯示這個演 算法的虛擬碼時也同時說明這樣子做的原因。

3.1 Proposed 驗證認證協定演算法的介紹

要攻擊金融機構的安全系統,必須要先對他們的系統有深入的了解,剖析之 後才能知道要怎麼攻擊這個系統。在法律方面,要鑽法律漏洞必須要先對法律條 文滾瓜爛熟之後才能知道有哪些法律遺漏、沒有規範到的事情。即使在認證協定 也是一樣的,要防止任何人入侵,破壞我們的系統之前,必須要先知道我們的系 統有哪些漏洞可能會被攻擊,也就是說要防護之前必須要先知道怎麼破壞。因此 為了要找出認證協定的漏洞,我們希望能夠站在 Attacker 的角度上來剖析認證協 定。當 Attacker 要攻擊認證協定的時候,他並不是想要攻擊就可以攻擊成功,而 是會去把所有可以搜集的資料都搜集齊全,接著在尋找如何利用這些現有的資料 去攻擊。這個想法就是我們演算法的中心概念。

以 Attacker 的想法來剖析認證協定之後,我們發現兩個重要的特性。

z 要攻擊的目標 Item ( 重要的 Item )

Attacker 攻擊認證協定時,並不是真的盲目的用暴力法去攻擊整個認證協 定,而是會去剖析認證協定找出認證協定中的缺陷,就像鑽法律漏洞一樣,另闢 一條不正當的路徑來達到相同的目的。在我們看了很多認證協定後,我們發現認 證協定中的 Item 可以分為兩類,一類只是單純的訊息傳遞而已,另一類是用來 確認身分的 Item。因此很明顯的 Attacker 要攻擊的 Item 就是認證協定中用來確 認身分的 Item。只要 Attacker 能夠攻擊這些 Item 就可以成功的攻破認證協定。

z 可以利用的資源

當 Attacker 決定了攻擊目標之後,不會就這樣一股腦的去攻擊目標,而是會 盡量的去蒐集所有他可以到手的資料,然後想盡辦法去攻擊它。另外我們都知道 網路是一個很不安全的地方,任何人都可以在網路上攔截封包,當然 Attacker 也不例外。因此很明顯的 Attacker 可以拿到要攻擊的認證協定的所有 Item,拿到 這些 Item 之後,Attacker 會盡其所能的想辦法直接使用這些 Item 來當成要攻擊 的目標 Item( 重要的 Item )或是用來製造出要攻擊的目標 Item( 重要的 Item ),

以便來欺騙別人。

因此我們希望能找出所有可以利用的資源,並利用這些可以利用的資源來攻 擊要攻擊的目標 Item( 重要的 Item )。

3.2 Proposed 驗證認證協定演算法

在這一小節中,我們會先介紹我們設計用來儲存認證協定中的 Message、Item 這些資料的 Data Structure 並舉例說明如何將這些資料完美的連結起來。接下來 我們會介紹如何找出 3.1 節裡提到的攻擊的目標 Item( 重要的 Item )和可以利用 的資源這兩個特性。接著再繼續介紹我們如何找出認證協定的漏洞。

3.2.1 Data Structure

在這一小節中,我們提出我們設計的 Structure Message 和 Structure Item,這 兩個 Structure 分別是用來儲存認證協定中的 Message 和 Item。

struct Message {

String source; //記錄 source String destination; //記錄 destination Item item; //記錄 item;

Message *next; //記錄下一個 Message 的位置 }

struct Item {

String content; //記錄 Item 的內容 String key; //記錄用來加密的 key int number; //記錄總共有多少個 Item 數量

int location; //記錄 Item 是屬於認證協定的第幾個 Message Boolean important; //記錄 Item 是否是重要的 Item,預設是 False Boolean flag; //記錄是否已經找到可以攻擊的 Item,預設是 False Item*next; //記錄下一個 Item 的位置

Item*include; //記錄被加密的 Item 的位置 }

舉例說明:

假設有一個 Message 是 A -> B : A, {A, {Na}Kas}Kbs, Na。

1. 宣告一個 Message 變數是 message。

2. parsing 此 Message 後

2.1 A 會記錄在 message.source 2.2 B 會記錄在 message.destination

2.3 而 Message 的 item(A, {A, {Na}Kas}Kbs, Na)經 parsing 後會記錄在 message.item

2.4 *next 記錄下一個 Message 的位置。沒有下一個 Message 就是 NULL。

3. 首先分析第一個 item:A

3.1 由於這個 item 沒有被加密,所以變數 content 會被記錄為 A。

3.2 由於這個 item 沒有被加密,所以 message.item.key 仍然是 NULL。

3.3 由於這個 item 沒有被加密,所以資料數量只有一個,number 被記錄為 1。

3.4 假設此 Message 是認證協定的第一個 Message,則 location 會被記錄為 1。

3.5 當此 Item 被分析為重要的 Item 時,important 才會被記錄為 True。

3.6 flag 記錄該 item 是否已經被找到可以用來代替自己的 item。

3.7 *next 記錄下一個 item({A, {Na}Kas}Kbs)的位置。

3.8 由於這個 item 沒有被加密。因此變數 include 仍然是 NULL。

5. 全部分析完畢後,會變成圖 3.1 這樣的結構。因為 important 和 flag 這兩筆資

5. 全部分析完畢後,會變成圖 3.1 這樣的結構。因為 important 和 flag 這兩筆資

相關文件