1 概述
歐洲魯汶大學的博士后安全研究員 Mathy Vanhoef 在10月15日披露無線網絡(Wi-Fi)保護協議標準 WPA2 的高危漏洞[1,2]。漏洞允許在 Wi-Fi 范圍內的攻擊者監聽計算機和接入點之間的 Wi-Fi 流量。該漏洞影響協議本身,且對 WPA 和 WPA2 均有效,因此支持 WPA/WPA2 協議的軟件或硬件均受到影響。
漏洞披露后,安天與煉石的工程師迅速響應,對該漏洞展開聯合分析,形成此報告。
2 漏洞分析
WPA全名為 Wi-Fi Protected Access,有 WPA 和 WPA2 兩個標準,是一種保護無線網絡(Wi-Fi)安全的協議[3]。WPA 實現了IEEE 802.11i標準的大部分,是在802.11i完備之前替代WEP的過渡方案,后被 WPA2 取代。由于 WPA 和 WPA2 均基于802.11i,因此在技術層面上幾乎是相同的,主要區別在于WPA2要求支持更安全的CCMP。WPA 和 WPA2 均使用802.11i中定義的四次握手,客戶端(Station, STA)和接入點(Access Point, AP)通過四次握手相互驗證和協商名為成對臨時密鑰(Pairwise Transient Key, PTK)的會話密鑰。PTK 通過成對主密鑰(Pairwise Master Key, PMK)、AP 隨機數 ANonce、STA 隨機數 SNonce 和雙方 MAC 地址等計算生成,其中 PMK 由登錄密碼等雙方均已知的信息計算生成。而后續正常數據加密所使用的臨時密鑰(Temporal KEY, TK)即派生自 PTK。各密鑰、參數的關系如下圖所示。
四次握手的過程可概括如下:
- AP 發送自己的隨機數 ANonce 給 STA;
- STA 生成隨機數 SNonce,計算出 PTK,并將 SNonce 和信息完整性校驗碼 MIC 發送給 AP;
- AP 收到 SNonce,計算出 PTK(此時雙方都已有 PTK),將組密鑰GTK加密后連同 MIC 發給 STA;
- STA 收到 GTK,安裝 PTK 和 GTK,發送 ACK 確認。AP 收到確認后安裝 PTK。
Vanhoef 將披露的漏洞攻擊命名為 KRACK(Key Reinstallation Attack),攻擊者通過在 Wi-Fi 范圍內利用中間人的手段對 WPA/WPA2 協議的四次握手交互驗證的第三階段進行攻擊。此時受害者已經安裝了密鑰,通過中間人手段進行增量式重放攻擊后,迫使受害者使用攻擊之前的密鑰流加密數據。鑒于 WPA/WPA2 為對稱加密,因此可以通過簡單的明文密文得到可重復利用的密鑰流。攻擊者一旦獲得密鑰流就可以對 Wi-Fi 流量數據解密。
2.1 利用原理
此漏洞利用的核心在于密鑰重裝,該模式基于WPA/WPA2協議中建立連接時的四次握手流程。在四次握手過程中,AP和客戶端將會協商一個用于加密接下來通信數據的加密密鑰,客戶端在收到AP發來的第三次握手的信息(消息3)后會核實MIC,若正確將會安裝加密密鑰key,用于加密正常的數據幀,并向AP發送響應作為確認。根據協議規則,若AP無法正確接收到確認,將引發數據重傳,重新發送消息3。客戶端每次接收到消息3時都會重裝相同的會話密鑰。攻擊者可利用此次握手過程,暴力增量式發送消息3,從而強制重置數據保密協議使用的增量傳輸數據包數(nonce)和接收重放計數器,導致密鑰重用。攻擊者可以通過這種方法重放、解密和/或偽造數據包。
KRACK攻擊可分為4種場景:
- 客戶端(受害者)接受消息3的明文重傳時的密鑰重裝攻擊;
- 受害者僅接受消息3的加密重傳時的密鑰重裝攻擊;
- 對組密鑰握手攻擊即時密鑰安裝;
- 對組密鑰握手攻擊延遲密鑰安裝。
圖2-3中展示了攻擊者解密一個密文數據包的攻擊流程。如果攻擊者已知第一個發送的密文數據包的明文,則可以恢復出用于加密該明文數據的密鑰流。由于四次握手協議的設計允許通過重傳消息3來重裝密鑰PTK和GTK,并重置待發送數據包的nonce值,導致客戶端使用相同的密鑰流加密下一個數據包,進而導致攻擊者可以解密客戶端發送的下一個密文數據包。
上述解密過程是基于攻擊者知道第一個數據包明文這一前提,然而攻擊者有時無法預知數據包中的全部字段值(比如可能存在的隨機字段), 所以攻擊者可能需要多次重傳消息3以收集更多數據來進行解密。圖2-3中僅展示了恢復一個密文數據包的攻擊過程,但是攻擊者可以通過多次重傳并合理選擇重傳時機(等待客戶端在重傳之前發送足夠多的數據),甚至通過解除對客戶端的認證來迫使客戶端重新執行四次握手協議,實現解密多個數據包的目的。
由于2.4和2.5版本的 wpa_supplicant(Android 6及以上的版本)在收到重傳的消息3后對密鑰重裝過程的錯誤實現,使得在客戶端接收到攻擊者重傳的消息3后,數據加密密鑰 TK 被置為全0。這一錯誤實現極大的簡化了密文恢復攻擊,利用數據加密密鑰為全0這個信息,攻擊者不再需要已知明文條件就可以解密客戶端發送的后續數據包。基于上述背景,攻擊者通過中間人攻擊迫使客戶端改用全0的密鑰之后,就可實現對客戶端流量劫持,監控并篡改客戶端發出的全部數據。
2.2 KRACK攻擊中nonce重用的密碼分析
Nonce 重用引發的后果與所采用的數據保密協議密切相關。三種數據保密協議TKIP、CCMP和GCMP所采用的數據加密算法分別為流密碼RC4、認證加密算法AES-CCM和認證加密算法AES-GCM,其中AES-CCM和AES-GCM的加密部分都是基于CTR模式的流式加密。即可認為TKIP、CCMP和GCMP三種協議均采用流式加密,即明文數據與算法生成的密鑰流按比特逐位異或后得到密文數據。流式加密的問題是在密鑰固定的條件下重用nonce時總會生成相同的密鑰流。這一特性可以被利用來解密數據包。
上圖展示了CTR模式下用密鑰k和計數器ctr加密明文消息
的過程,其中
分別表示一個分組長度(采用AES算法時為128比特,明文消息長度并不一定是分組長度的整數倍)。注意圖中沒有展示CCM和GCM模式中應用CTR模式進行加密時所涉及到的一些細節。正確使用的情況下,計數器ctr的值不斷累加(值不重復!!)并在算法和密鑰的作用下生成具有強偽隨機特性的密鑰流,
則對應的密文為
TKIP中基于RC4流密碼的加密過程與此類似不再贅述。
在KRACK的攻擊中,通過重放消息3能夠達到迫使受害者重用nonce,導致上述加密過程中相同計數器ctr值的重復出現。相同密鑰相同計數器ctr條件下,生成的密鑰流
值相同,攻擊者可據此解密數據包。用KeyStream表示該密鑰流,P1和P2表示兩組明文數據,假設KeyStream,P1,P2具有相同的比特長度,則兩組明文對應的密文分別為:
C1 = P1 ^ KeyStream
C2 = P2 ^ KeyStream
其中 ^ 表示逐比特異或操作。攻擊者可以通過網絡收集到密文C1和C2,如果攻擊者知道密文C1對應的明文P1,則可以據此恢復明文P2的信息:
P2 = C2 ^ keystream = C2 ^ (P1 ^ C1)
在實際情況中,通常能找到已知內容的數據包,所以可以認為在密鑰固定的條件下重用nonce時獲得密文數據包可根據上述過程解密。即使已知內容的數據包確實無法獲得,當對消息類型有足夠的知識(比如消息為英文字符)的條件下,也可能解密還原出明文。值得注意的是,雖然nonce重用會導致密文數據包被解密,但并不導致密鑰TK、PTK、PMK以及WiFi登陸密碼的泄露,因此WPA2的密碼體系只是被繞過,并沒有被攻破。分組密碼算法(AES)本身的安全性保證了即使在輸入
和輸出
已知的條件下,加密密鑰k也不會泄露。
TKIP、CCMP和GCMP三種數據加密協議,在數據機密性之外,還提供數據完整性保護。而重用nonce在不同的數據加密條件下在數據完整性保護方面會帶來不同等級的安全隱患。
使用TKIP協議時,當解密完整的TKIP數據包之后(包括MIC字段),攻擊者可進一步攻擊Michael算法獲得相應的MIC密鑰。這是由于Michael算法本身的脆弱性導致的,在給定明文數據以及MIC值的條件下,攻擊者可恢復出MIC密鑰。借助恢復出的MIC密鑰,攻擊者可偽造該數據傳輸方向上的數據幀(TKIP在不同的數據傳輸方向上使用不同的MIC密鑰)。
使用CCMP協議時,雖然有研究展示了在重用nonce條件下數據偽造攻擊的可能性,但都是停留在理論層面的攻擊,難以在實際中生成真正的偽造數據包,僅能執行重放攻擊以及數據包解密。
使用GCMP協議時nonce重用導致的安全問題最為嚴重。nonce重用使得攻擊者能夠恢復出GCM模式中的認證密鑰(H),由于GCMP協議在數據傳輸的兩個方向上使用相同的密鑰進行數據保護,這賦予了攻擊者在數據傳輸的兩個方向上均可偽造數據包的能力。作為認證加密的一種工作模式,GCM模式由CTR加密算法以及GHASH驗證算法組合而成,其中CTR算法部分直接采用傳遞給GCM模式的密鑰k進行加密,而GHASH運算所需的驗證子密鑰H是AES算法利用密鑰k加密全128比特的全0明文得到的128比特密文值。法國密碼學家Joux指出當nonce重用時,攻擊者可恢復出驗證子密鑰H的值(注意從H的值無法推算出GCM的輸入密鑰,這是由AES算法本身的安全性保證的)。攻擊者獲得H的值之后,GCMP所提供的數據完整性保護形同虛設,也因此攻擊者可以偽造數據包。
總體來說,對于TKIP和GCMP,KRACK攻擊影響極其嚴重,攻擊者可以對數據包重放、解密和偽造。對于CCMP,雖然攻擊者不能偽造,但是基于TCP/IP協議的特點,只要攻擊者能夠獲得序列號,攻擊者就可以劫持TCP流并將惡意數據注入到其中,后果同樣十分嚴重。
3 漏洞影響及響應情況
通過此漏洞可實現解密Wi-Fi流量數據、數據包重組、TCP連接劫持、HTTP內容注入等。KRACK攻擊是通用的,適用于連接或使用WPA/WPA2的WiFi網絡的所有類型設備。針對個人和企業網絡以及所使用的任何加密套件(WPA-TKIP,AES-CCMP和GCMP)都有效,包括Android,iOS,Windows,Linux, MacOS, OpenBSD以及嵌入式和物聯網(IoT)設備。尤其是Android 6及以上的版本,研究人員表示可針對Android 6系統客戶端 wpa_supplicant “完美攻擊”,并且該攻擊技術易于實現。根據安天移動安全統計數據,Android設備中Android 6系統占比約為41.9%。
由于此次漏洞影響較大,范圍較廣,供應商紛紛發起響應或發布補丁,部分供應商響應情況見下表:

注:如表中鏈接無法打開,可以從參考資料4中獲取。
我們對表中Linux對應的八個補丁進行了分析,下面展示了各個補丁的作用原理。
1.ebased-v2.6-0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch
在握手階段Reassociation-Response時避免將TK重新安裝到驅動程序部分,防止密鑰重裝攻擊。

另外,只有在TK確認已經被卸載時,才允許安裝配置,且不允許重復安裝(當且僅允許成功配置一次)

2.rebased-v2.6-0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch
跟蹤當前正在使用的GTK和IGTK,當接收到(可能重傳)的第一次握手階段的消息或WNM-睡眠模式響應時,如果密鑰已經在使用中,則不安裝新的密鑰。這阻止了攻擊者欺騙客戶端去重置或更改與組密鑰關聯的序列計數器的行為。
安裝igtk時:

WNM-睡眠模式響應時:

3.rebased-v2.6-0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch
這個補丁追蹤最后配置的GTK / IGTK值,分別與EAPOL-Key幀和WNM-睡眠模式幀配合,因為當這兩種不同的機制的GTK / IGTK發生變化時候,跟蹤單個值不足以及時發現檢測可能的密鑰重新配置行為。
記錄兩種模式下的GTK:

記錄兩種模式下的Igtk:

4.rebased-v2.6-0004-Prevent-installation-of-an-all-zero-TK.patch
跟蹤PTK是否已經安裝到驅動程序,并且TK部分已經從內存中清除。 這樣可以防止攻擊者欺騙客戶端來安裝全零TK。

5.rebased-v2.6-0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch
用于PTK rekeying的授權狀態機,會在隨機數生成的時候繞過authenication2狀態,而直接進入之PKT-START狀態,因為此時無需再次確認PMK,可能導致隨機數不“隨機”,或遭致其他問題。
針對此問題,當切換至PTKSTART狀態時,便生成一個新的ANonce。

6.rebased-v2.6-0006-TDLS-Reject-TPK-TK-reconfiguration.patch
當成功配置TPK-TK后,禁止重新配置相同的參數至驅動。

7.rebased-v2.6-0007-WNM-Ignore-WNM-Sleep-Mode-Response-without-pending-r.patch
如果WNM-睡眠模式尚未使用,則忽略對應的WNM-睡眠模式請求。這可以避免處理意外的重傳數據幀。

8.rebased-v2.6-0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch
驅動部分除非在客戶端明確請求一個新的連接時才會開啟一個連接事件。不過,重新配置相同的成對密鑰或組密鑰會導致nonce被重用的問題,因此要進行額外的檢查以避免惡意攻擊的發生,包括因為某種環境因素導致意外收到重傳數據包的情況。

4 結論
KRACK漏洞利用主要針對WPA/WPA2的四次握手過程,沒有利用AP接入點,而是針對客戶端的攻擊。因此,用戶的路由器可能不需要更新。對于普通家庭用戶,應多關注各終端設備廠商的安全公告,及時更新配置或打補丁,優先更新筆記本電腦和智能手機等客戶端。
對該漏洞的利用并沒有破壞密碼體系本身,而是對實現過程進行了攻擊,因此基本可以繞過所有的安全監控設備。利用該漏洞能夠在一個良好實現的網絡環境中,通過良好實現的WiFi打開攻擊面,為后續攻擊打開通路。
目前使用WPA2的大多數家庭和商業無線應用客戶端升級相對容易,但對于數百萬難以及時更新的IoT無線設備,可能造成巨大影響。請大家保持警惕,我們會持續關注相關事件并積極應對。
附錄:參考資料
- Mathy Vanhoef, Frank Piessens. Key Reinstallation Attacks
- Mathy Vanhoef, Frank Piessens. Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2
- Wikipedia. WPA
- Kristate, Github. Vendor Response
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/420/
暫無評論