2014年6月26日 星期四

二樓守衛 - WPA/WPA2

WPA (Wi-Fi Protected Access) 和 WPA2 是取代 WEP 的二樓無線規格。

WPA 和 WPA2 比它們的兄長 WEP 要複雜許多。最主要的是以下三項:
1. Authentication:就是驗證你是誰,並且判斷是否給你網路的存取權限。
2. Key Management:金鑰的產生與交換多了一些彈性選項。
3. Data Confidentiality & Integrity:透過增強的加解密功能,提供更好的保密性與完整性。

加解密

先來說比較單純的加解密功能,這裡所要說的加解密功能是發生在 Station (STA,例如說你的 iPhone 或者 PC) 到 AP 之間的二樓無線通訊。

等一下我們談到 Authentication 和 Key Management 的時候會看到 EAP 這個東西,那時候就會把 AP 和 AP 後方的 AS (Authentication Server) 牽扯進來,包括 AP 和 AS,以及 STA 與 AS 之間通訊,那時候問題就複雜多了。這個時候我們只先考慮你那可愛的 MacBook Pro 和我這可愛的 iPhone 要連到咖啡館提供的無線基地台這中間的空間所傳輸的無線信號問題。

WPA 是 WEP 到 WPA2 的過度產品,它允許韌體或軟體在既有的 WEP 硬體下,透過升級或者修改,直接支援到 WPA。

WPA 使用 TKIP (Temporal Key Integrity Protocol) 來進行加解密,它仍然和 WEP 一樣使用 RC4 加解密演算法,但是它使用比較長的金鑰 128 bits,另外它也確保每次使用的金鑰不會重複,不像 WEP 有 IV 重複的問題。

WPA2 使用 CCMP (Counter mode Cipher block chaining Message authentication code Protocol,或者說 Counter mode Cbc-Mac Protocol,或者說 CCMP,注意到大寫的位置,這名字真是長的可以) 來進行加解密。基本上也是使用 128 bits 長度的金鑰,使用的是 AES 加解密演算法。Counter mode 基本上確定不會有 IV 重複問題,只要計數器 (Counter) 選得好就可以,這一切都定義在 802.11i。

WPA2 也相容支援 TKIP。

以上就是 WAP/WPA2 加解密的部份。

認證與金鑰產生

WPA 和 WPA2 在認證與金鑰管理上功能一致,所以以下單以 WPA2 稱呼之。

EAP (Extensible Authentication Protocol)

WPA2 的使用者認證與金鑰產生都是透過 EAP (Extensible Authentication Protocol) 來運作,EAP 是一個框架,它主要是拿來做認證的 (authentication),實際上在這個框架裡面可以用許多不同的方法 (methods),例如常見的 EAP-TLS、EAP-TTLS、EAP-MD5、EAP-PSK 等等,這些都是在說內部用什麼方式來認證。

和 EAP 有關的另一個技術是包裝 (encapsulation),指的是如何將 EAP 封包放在網路封包內的格式。EAP 原先是使用在 PPP 之上,後來也支援 Ethernet 和 WLAN,我們稱其技術為 EAPOL (EAP Over LANs)。另外還有 PEAP 技術,就是透過 TLS 加密與認證的 tunnel 技術,將 EAP 封包都透過 TLS 連線所建立的隧道來傳送,這種包裝法可以搭配 EAP-MS-CHAPv2 這一類比較弱的協定。

所以不要搞混了,和 EAP 相關的專有名詞與規格有一卡車,所以要分清是指內部認證的「方法」,像是 EAP-TLS,或者是「包裝」的格式,像是 EAPOL。PEAP 也是一種包裝,不過通常是包裝使用較弱認證方法的 EAP 技術,例如 PEAP 搭配 EAP-MS-CHAPv2,或是搭配 EAP-GTC (Generic Token Card, 類似 One-Time Pad 的技術)。

我只能說,能夠搞得如此複雜,也是挺不容易的。這可能還是跟商業行為有關。

可以這樣看整個 EAP 模型,有三個角色,一邊是使用者 STA (Station),中間是 AP (Access Point),AP 後面的另一邊是 AS (Authentication Server),假設為 RADIUS 伺服器。 STA 和 AP 走 WLAN frame,其上是 EAPOL 格式。AP 和 AS 之間走 RADIUS 的 UDP,如下圖,整個三方互動就是 EAP 所協定的抽象模型:

STA <----> AP <----> AS
^^^^^^^^^^^^^^^^^^^^^^^ <- EAP-TLS, EAP-MSCHAPv2, ...
^^^^^^^^^^^^^           <- EAPoL  (WLAN frame)
           ^^^^^^^^^^^^ <- RADIUS (UDP)

另外一種比較簡單的模型,沒有 AS:

STA <----> AP
^^^^^^^^^^^^^ <- EAP-PSK
^^^^^^^^^^^^^ <- EAPoL  (over WLAN frame)


在第一種模型中,透過 EAP,STA 與 AS 可以互相認證身份,交換金鑰,兩者共同得到一組 Master Key,AS 再用這組 Master Key 產生 PMK (Pairwise Master Key),並傳遞給 AP,STA 自行從 Master Key 也可得到 PMK,所以 AP 與 STA 會擁有相同的 PMK。

在第二種模式裡,PMK 是由使用者選擇的 PassPhrase 經過計算產生出來的 Preshared Key 來擔任。

WPA2 支援兩種模式,一種叫 Personal,另一種叫 Enterprise,所以我們常會看到無線基地台上提供 WPA2-Personal 或 WPA2-Enterprise。

WPA2-Enterprise 就是上面的第一種模式,WPA2-Personal 就是上面的第二種模式。

以下分別這兩種模式來介紹。

WPA2-Personal

Personal 模式需要使用者預先設定好一組通關密語 (PassPhrase),這也是一般家用基地台最常見的方式,同一個 WLAN 之內都是用同一組密語。

密語長度限制為 8 到 63 bytes,所以可以輸入相當長的字串。

一方面你在基地台的設定頁面裡輸入一組密語,然後你的 Windows 筆電連上網的時候,也是輸入同樣一組密語。透過這個密語,WAP2 再去產生一組金鑰,因為金鑰等效於是預先設定好的,因此我們叫這組金鑰為 Preshared Key (PSK),也就是預先設定好的金鑰的意思。

這種模式也被稱為 WPA2-PSK。

使用者輸入的 PassPhrase 會被當作金鑰產生器,用來產生 PSK。產生過程是這樣:PassPhrase 加上 AP 的 SSID,透過 PKCS (Public-Key Cryptography System) 標準中的 PBKDF2 函式 (Password-Based Key Derivation Function 2) 來產生一組固定長度 256 bits 的金鑰,這組金鑰就是 PSK,我們也會稱呼它為 Pairwise Master Key (PMK)。

WPA2-PSK 的 PBKDF2 長相如下(參考 IEEE 802.11i 文件):
PSK = PBKDF2(PassPhrase, ssid, ssidLength, 4096, 256)

還真是複雜不是嗎?如果去看 IEEE 802.11i 規格書會更複雜,WPA2 比它的哥哥 WEP 複雜多了,而且 PassPhrase 和 PMK (也就是 PSK) 都不是拿來實際加解密封包用的。

實際加解密的金鑰,是透過 PMK 搭配 AP 產生出的 Nounce (隨機數值),STA 產生出的 Nounce,以及 AP 和 STA 的 MAC 地址,這幾組數值兜在一起,而產生來的一組金鑰。這組實際被用來加解密的金鑰,我們稱之為 Pairwise Transient Key (PTK)。

這樣 PTK 被拿來在 WPA2-Personal 模式中做實際加解密封包的工作,加解密協定如我們最前面所述,WPA 是使用 TKIP,而 WPA2 使用 CCMP 或相容性支援 TKIP。

WPA2-Enterprise

另一種 Enterprise 模式,支援 AP 背後還有個認證伺服器 (Authentication Server, AS),這個 AS 常用 RADIUS 伺服器來擔任。RADIUS 是一個七樓的協定,常見的開放原碼的軟體有 FreeRADIUS

透過 EAP,STA 與 AS 可以互相認證身份,交換金鑰,得到一組 Master Key,AS 再用這組 Master Key 產生 PMK,並傳遞給 AP,所以 AP 與 STA 會擁有相同的 PMK。在 WPA2-Personal 模式,PMK 是由使用者選擇的 PassPhrase 產生的。在 WPA2-Enterprise 模式,PMK 則是由 STA 和 AS 協定交換的過程中自動產生。

簡言之,WPA2-Personal 模式就是設定共享的密碼。而 WPA2-Enterprise 就是透過背後的認證伺服器來管理比較大量的使用者。

攻擊 WPA2-Personal

對 WPA2-Personal 最有效的攻擊方式是抓取到一開始的 EAPoL 封包,關鍵的是前面的幾個封包,我們稱其為 4-Way Handshake 封包,就是一開始 STA 與 AP 之間的 Nounce 交換過程,透過開源碼工具 aircrack-ng 使用字典檔方式來破解,詳見本站文章

攻擊 WPA2-Enterprise

攻擊 WPA2-Enterprise 需要偽造 AP 以及預備一台 AS,讓 STA 斷線 (deauth'ed) 後,等待其連上你的偽 AP,然後當它要跟你的 AS 建立連接時,抓取其 EAP handshake 封包,再使用 aircrack-ng 字典檔攻擊破解之,手法比較複雜。

這裡有一篇不錯的投影片,介紹攻擊 Enterprise。

但這只是用於帳密型的 EAP 認證方法,如果是像 EAP-TLS 這類用 X.509 憑證的機制,就無法破解了,除非偷到憑證檔案,或者能直接在端點安裝惡意的根憑證。

沒有留言:

張貼留言