压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

WPA2 “KRACK” 漏洞簡介與重現

作者:啟明星辰ADLab

1、概述

2017年10月,比利時安全研究員Mathy Vanhoef披露了無線網絡協議WPA2存在高危漏洞,漏洞允許攻擊者監聽AP和接入點STA之間傳輸的Wi-Fi數據流量。作者公布了漏洞驗證演示視頻[1][2]。由于漏洞存在于WiFi協議層,理論上所有支持WPA2的客戶端(桌面操作系統、移動OS、路由器、物聯網設備等)都將受到“KRACK”攻擊的影響(其透過WiFi傳輸的數據存在被篡改、嗅探的風險,諸如被攻擊者的支付、財產賬號、用戶名、密碼、郵件、照片等敏感信息可被截獲,危害大影響范圍廣)。

啟明星辰ADLab通過對全零密鑰漏洞的分析成功重現“KRACK”攻擊。

2、協議簡介

802.11i是IEEE工作組為無線網絡802.11協議組定義的安全標準。WPA實現了IEEE 802.11i標準的大部分,是在802.11i完備之前替代WEP的過渡方案,后被WPA2取代[3]。WPA和WPA2都是基于802.11i,區別在于WPA2要求支持更安全的CCMP。WPA和WPA2均使用802.11i中定義的四次握手。

下圖是客戶端(Station, STA)連接接入點(Access Point, AP)的消息交互過程。

STA和AP在四次握手中協商會話密鑰PTK(Pairwise Transient Key),PTK是由PMK和PKE計算生成,而PMK由ANonce、SNonce和雙方MAC地址等計算生成。PTK分為KCK,KEK和TK三部分,其中,KCK用于MIC校驗,KEK用于加密GTK,TK為數據加密密鑰。四次握手完成后,傳輸數據使用TK進行加密。

3、漏洞原理

wpa_supplicant是linux系統下WiFi客戶端,用于連接無線網絡,Android WiFi系統引入了wpa_supplicant,它的整個WiFi系統是以wpa_supplicant為核心來定義上層用戶接口和下層驅動接口。

下圖為wpa_supplicant版本發布時間線。Android 6.0 WiFi系統是基于v2.5,Android 6.0+ WiFi系統是基于v2.6。

v2.4版本引入了一個全零密鑰漏洞。這個漏洞是由802.11標準中的一句話引起的,該標準間接建議在安裝了TK之后從內存清除TK;2016年10月發布的V2.6對這個漏洞進行了一次修復,由于考慮不全面,代碼仍然存在漏洞;在2017年10月發布的補丁中,最終修復了這個漏洞。下面結合代碼對漏洞進行詳細分析。

3.1.? V2.4(2.5)

wpa_supplicant 2.4(2.5) 四次握手中的狀態轉移如下圖所示:

(1)當連接到無線網絡進行四次握手的時候,首先進入PTK_INIT狀態。

(2)當接收到Msg1時,進入PTK-START階段。wpa_supplicant會隨機生成一個SNonce,計算一個臨時PTK(TPTK),并且在Msg2中將SNonce發送給AP。

(3)當接收到Msg3時,如果MIC和replay counter校驗成功,進入PTK-NEGOTIATING狀態。然后將TPTK賦值給PTK,并發送Msg4。

(4)接著進入PTK-DONE階段,安裝PTK和GTK,并且打開802.1x的端口,使wpa_supplicant和AP正常接收和發送數據包。

由于無線網絡存在干擾,可能會造成數據幀的丟失,因此在802.11i規定如果AP沒有收到Msg2和Msg4,會相應的重傳Msg1和Msg3。從圖中可以看出,當完成PTK安裝后,如果收到重傳的Msg3,會重新安裝PTK。

當wpa_supplicant收到Msg3后,會調用wpa_supplicant_install_ptk函數安裝PTK,其中wpa_sm_set_key函數負責將密鑰PTK.TK安裝到驅動。在supplicant v2.4(v2.5)中,在調用wpa_sm_set_key函數完成PTK的安裝后,執行os_memset(sm->ptk.tk, 0, WPA_TK_MAX_LEN),對PTK.TK進行清零操作。

如果攻擊者劫持Msg3或Msg4,造成Msg3的重傳,根據狀態轉移圖,STA會重新安裝PTK,而PTK.TK之前已經被清零,導致STA安裝全零加密密鑰。

3.2.? V2.6

下面結合V2.5和V2.6的源代碼進行分析。

(1)V2.6在wpa_sm結構體中添加了一個標志位tk_to_set。

(2)V2.6修改了wpa_supplicant_install_ptk函數。在安裝完PTK后,將tk_to_set賦值為0,當再次進入該函數時,如果tk_to_set==0,直接return,不再重裝PTK。

(3)V2.6修改wpa_supplicant_process_1_of_4函數。當每次收到Msg1時,計算tptk,并將tk_to_set重置為1。

針對V2.6,攻擊者通過在重傳的Msg3之前插入一個偽造的Msg1,仍然可以實現全零密鑰的安裝。雖然STA首次安裝PTK后對tk_to_set進行清零,但是緊接處理偽造的 Msg1時,將tk_to_set重置為1,因此在最后處理重傳Msg3時,成功繞過wpa_supplicant_install_ptk函數的tk_to_set條件判斷代碼。

在2017年10月發布的補丁中,刪除了wpa_supplicant_process_1_of_4函數中的sm->tk_to_set = 1;語句,修復了全零密鑰漏洞。

4、漏洞重現

啟明星辰ADLab “KRACK”重現視頻地址為:https://v.qq.com/x/page/m0538vcwqbb.html 。

視頻中出現的步驟及提示字幕:

1.本實驗使用Nexus6手機作為被攻擊設備。

2.首先,Nexus連接到真實AP(SSID=wap,加密方式是WPA2,信道10,頻率2457)。

3.接著,運行Hostapd創建克隆AP(SSID=wap,加密方式是WPA2,信道3,頻率2422)。

4.同時,啟動wireshark監聽克隆AP網卡,捕獲客戶端數據。

5.運行攻擊腳本,指定AP的SSID和Nexus的Mac地址。

6.運行ssltrip,進行Https降級。

a.wireshark顯示了建立連接的數據包。

b.攻擊成功,Nexus連接到克隆wap,頻率2422。

c.訪問uk.match.com 顯示當前連接為http連接,輸入測試用戶名和密碼。

d.wireshark可以成功捕獲用戶名和密碼。

e.關閉Hostapd(頻率2422)。

f.重新連接到真實wap(頻率2457),再次訪問uk.match.com 顯示連接為https連接。

下表中列出了重現視頻中使用的設備:

5、漏洞編號及修復情況

“KRACK”涉及的相關漏洞編號:

CVE-2017-13077: 在四次握手中重裝成對加密密鑰(PTK-TK)

CVE-2017-13078: 在四次握手中重裝組密鑰(GTK)

CVE-2017-13079: 在四次握手中重裝完整組密鑰(IGTK)

CVE-2017-13080: 在組密鑰握手中重裝組密鑰(GTK)

CVE-2017-13081: 在組密鑰握手中重裝完整組密鑰(IGTK)

CVE-2017-13082: 接受重新傳輸的快速BSS切換(FT)重新關聯請求,重裝成對加密密鑰(PTK-TK)

CVE-2017-13084: 在PeerKey握手中重裝STK密鑰

CVE-2017-13086: 在TDLS(Tunneled Direct-Link Setup)握手中重裝TDLS PeerKey(TPK)

CVE-2017-13087: 處理無線網絡管理(WNM)休眠模式響應幀時重裝組密鑰(GTK)

CVE-2017-13088: 處理無線網絡管理(WNM)休眠響應幀時重裝完整組密鑰(IGTK)

修復情況:

2017年10月2日,Linux的hostapd和wpa_supplicant 補丁已公布,詳見 https://w1.fi/security/2017-1/。

2017年10月10日,微軟在Windows 10 操作系統中發布補丁 KB4041676。

蘋果在最新的 beta 版本iOS、macOS、 tvOS和 watchOS中修復了無線網絡安全漏洞。

6、參考鏈接

[1]https://www.krackattacks.com/

[2]https://papers.mathyvanhoef.com/ccs2017.pdf

[3]https://zh.wikipedia.org/wiki/WPA

上一篇:CVE-2017-5123 漏洞利用全攻略

下一篇:Google Project Zero 成員教你網絡安全入門