WIFI WPA1/2 Crack for Windows

wyzsk發表於2020-08-19
作者: boywhp · 2016/03/24 10:45

0x00 前言


目前WIFI WPA破解主要 以“aircrack-ng”為代表,執行於Linux系統( 如Kali Linux ),Windows系統比較少見,主要是Windows系統下WIFI網路卡收發原始包比較困難,且缺少有主流WIFI網路卡開原始碼可參考。因此WPA破解通常流程是先在Linux機器(或Linux虛擬機器)在抓取WPA 四次握手包,然後再透過以“Elcomsoft Wireless Security Auditor”為代表的密碼字典爆破軟體在Windows下進行破解。

0x01 WIFI協議基礎


  • AP (Access Point):WIFI熱點,通常是一個WIFI路由裝置
  • SSID(Service Set Identity):AP的名稱,0-32個字元組成
  • BSSID(Basic Service Set Identity):基本服務集標識,通常是AP的MAC
  • STA(STATION):連線到AP的客戶端
  • DS:分散式系統,多個AP可以組成分散式無線系統。
  • DA:目標MAC地址
  • SA:源MAC地址
  • WIFI資料幀:WIFI資料幀主要分為物理層、MAC層、資料層。物理層通常

由具體硬體處理,實際只需要考慮MAC(Media Access Control)和LLC(邏輯鏈路控制),具體資料幀如下:

p1

MPDU是MAC層的協議頭,其中常用的是FrameControl欄位和Addr1、Addr2、Addr3等。

  • ToDs/FromDS:指明瞭MPDU地址格式,具體組合如下。

p2

WIFI協議的MPDU頭長度不是固定的,是可變的。

Type/SubType:共同指明瞭接下來的資料幀的格式,其中Type 2bits,指明瞭幀型別,SubType 4bits,進一步指定了資料的具體格式。

Type 00/管理幀 01/控制幀 10/資料幀 11/保留

WPA破解時用到的主要有WIFI管理幀和資料幀,其中管理幀對應的SubType情況見下表:

p3

STA在登入AP前,首先需要透過一系列的管理幀,建立同AP的資料聯絡,然後才能實施登入並啟用加密數傳,同時WIFI管理幀是不加密的,具體流程如下:

序號 SubType 說明
1 8 Beacon,STA接受AP信標幀,感知到AP,獲取SSID及AP引數
2 4 STA主動傳送Probe探測請求
3 5 AP應答STA Prob Response
4 11 STA傳送Authentication請求認證
5 11 AP應答Authentication請求,指示STA認證成功或失敗
6 STA傳送Association請求
7 1 AP應答Association Response

一旦STA完成上述流程後,STA和AP之間即可進行資料幀傳輸,以便接下來的WPA使用者認證。

0x02 WPA密碼破解原理


WPA-PSK(WPA個人版)在STA和AP建立數傳後,使用了EAPOL(Extensible Authentication Protocol OVER LAN)協議處理使用者的登入認證,具體由四次握手組成,如下圖。

p4

AP首先向STA傳送一個32位元組的ANonce隨機數(實際上一般是累加計數器),STA收到該隨機數後,自己也產生一個32位元組的SNonce隨機數,同時根據這兩個隨機數以及登入密碼計算出一個PTK(Pairwise Transient Key),具體計算過程如下:

1、PMK = PBKDF2(HMAC−SHA1, pwd, ssid, 4096, 256)

首先使用PBKDF2(Password-Based Key Derivation Function 2)演算法生成一個32位元組的PMK key,該演算法需要執行4096*2輪,WPA破解時運算量主要集中在該key的計算,同時由於使用了SSID(0-32字元)進行salt,導致很難使用彩虹表進行預計算。

2、PTK = PRF-512(PMK, “Pairwise key expansion”, Min(AP_Mac, Sta_Mac) ||Max(AP_Mac, Sta_Mac) || Min(ANonce, SNonce) || Max(ANonce, SNonce))

PTK使用PRF-512(pseudo random functions 512bits)演算法產生,透過PMK、固定字串、AP_Mac、Sta_Mac、ANonce、SNonce六個輸入引數得到一個64位元組PTK。

p5

PTK由5部分組成,如下:

p6

WPA1 TKIP的PTK長度512bits,WPA2 CCMP的PTK長度為384bits,其中KCK用來計算WPA EAPOL KEY訊息的MIC;AP使用KEK加密WPA EAPOL KEY訊息的額外Key Data資料;TEK用於單播資料加密。

WPA破解最關鍵的部分就是透過KCK計算MIC,其演算法如下:

WAP MIC = HMAC(EVP_sha1(), KCK, 16, eapol_data,eapol_size) WAP2 MIC = HMAC(EVP_md5(), KCK, 16, eapol_data,eapol_size)

總結一下WPA具體破解流程如下:

序號 說明
1 抓取4-way握手包,實際上只需要前兩次即可
2 透過密碼字典計算PMK
3 透過PMK、ANONCE、SNONCE、MAC1、MAC2計算PTK
4 透過PTK得到KCK,計算第2次EAPOL報文對應的MIC
5 同第2次EAPOL報文中MIC比較,匹配則密碼正確

0x03 Window WIFI資料包收發


目前Windows下比較成熟的WIFI資料包收發軟體是CommView for WiFi,該軟體是一款商業軟體,相容的網路卡較多,功能也比較強大。該軟體的BMD目錄下有一個比較通用的WiFi Capture Driver,結合網際網路蒐集整理的資料發現,Windows NDIS6框架下能夠實現WIFI資料包收發功能,決定使用NDIS6 Filter Driver進行WIFI資料包收發。

除錯開發環境

使用VirtualBox + VirtualKD + Windbg + RTL8187 USB WIFI網路卡,目標系統Window7 x86,注意VirtualBox需要安裝VirtualBox擴充套件包,否則無法將主機USB網路卡切換到虛擬機器中除錯。 Windows WDK 7600編譯環境,WDK中的filter、usbnwifi示例原始碼極具參考價值,filter是NDIS 6 NDIS Filter示例程式碼,usbnwifi是usb wifi網路卡驅動的一個參考程式碼,在沒有實際USB網路卡驅動原始碼的情況下,可以大致瞭解底層網路卡的一些實現細節。

WIFI資料嗅探

NDIS6框架下底層網路卡最終透過呼叫NdisMIndicateReceiveNetBufferLists指示上層NDIS驅動接受資料包,檢視該函式呼叫情況如下:

p7

主要有三個地方呼叫了該函式,分別是MpHandleRawReceiveInterrupt、MpHandleDefaultReceiveInterrupt、MpHandleSafeModeReceiveInterrupt,重點看前兩個函式,在MpAdjustReceiveHandler函式中有如下初始化程式碼:

p8

很明顯,這兩個函式對應了不同網路卡模式下WIFI網路卡的資料接受函式,在WIFI破解時需要將網路卡設定成monitoring mode。

MpAdjustReceiveHandlerMpSetCurrentOperationMode時被呼叫,在MpSetInformation函式中:

p9

OID_DOT11_CURRENT_OPERATION_MODE是NDIS 標準WIFI OID請求,用來設定WIFI網路卡的工作模式,定義的模式有:

p10

總結一下WIFI破解時,資料接受的處理流程就是:首先設定網路卡為監控模式(混雜模式),然後在網路卡驅動之上的Filter驅動裡,處理原始資料包接受,通常可以先接受到臨時佇列裡,再在應用層使用IoControl讀取該佇列,實現WIFI資料包嗅探。

WIFI資料傳送

NDIS小埠驅動透過NdisMRegisterMiniportDriver註冊驅動程式,註冊的同時需指明Ndis資料傳送函式。

p11

該函式中會首先檢查網路卡的狀態,如果狀態不合適就不會繼續傳送資料包,具體檢查程式碼如下:

p12

MP_ADAPTER_CANNOT_SEND_PACKETS宏定義如下:

p13

MP_ADAPTER_CANNOT_SEND_MASK掩碼定義如下:

p14

注意其中高亮的部分,很明顯,微軟的NDIS USB WIFI驅動示例程式碼預設是不允許在監控模式下發包的,鑑於WDK示例程式碼的權威性,有理由相信,採用該WDK模版程式碼修改的USB WIF驅動都不能在監控模式下發包,這也是Windows WIFI破解需要面臨的一個大問題。

既然官方驅動不能在監控模式下發包,那麼就只能自己動手了,直接給官方驅動打個簡單的Patch,找到關鍵的檢測位置,然後手動patch一下好了。當然實際廠商的驅動可能會有所不同,需要多除錯和測試好。

總結下WIFI破解時,資料傳送的處理流程如下:首先找一款支援監控模式下能發包的網路卡和驅動(CommView for WIFI自帶的驅動應該都可以),或者手動Patch好官方驅動,然後在應用層IoControl寫Raw WIFI資料到Filter驅動,Filter構造NET_BUFFER_LIST,最後使用NdisFSendNetBufferLists將資料傳送給底層WIFI網路卡驅動。

0x04 WPA破解流程


WPA破解主要分為如下幾個具體步驟,一是開啟網路卡嗅探模式,對周圍WIFI資料包進行捕獲,二是分析周圍AP和S他的分佈情況,為Deauth攻擊做好準備,三是實施Deauth攻擊,四是捕獲EAPOL握手資料包。

開啟網路卡嗅探

NDIS6透過OID_DOT11_CURRENT_OPERATION_MODE設定網路卡的工作模式,因此直接透過驅動傳送OID設定網路卡模式即可,該OID對應的引數資料結構為DOT11_CURRENT_OPERATION_MODE,具體如下:

p15

透過核心直接傳送OID會出現一些問題,主要是Windows WIFI應用層不能即時獲取通知,導致Windows應用層在嗅探模式設定功能後,嘗試連線網路,出現模式干擾,但CommView就不會出現該情況。

分析CommView驅動後發現,CommView並沒有在驅動裡面進行具體模式的設定,而是在應用層ca2k.dll呼叫了Wlan API設定監控模式。

p16

WlanSetInterface的OpCode碼為12,對應:

wlan_intf_opcode_current_operation_mode(12),具體程式碼如下:

p17

AP/STA探測

WPA破解時需要用到AP的SSID以及MAC地址,AP探測主要透過信標幀以及探測應答幀來實現,具體如下:

p18

WIFI信標幀格式如下

DOT11_MGMT_HEADER DOT11_BEACON_FRAME DOT11_INFO_ELEMENT INFO...

其中DOT11_MGMT_HEADERDOT11_BEACON_FRAME是固定的,AP的MAC地址可以從DOT11_MGMT_HEADER中獲取,固定頭後跟了一個DOT11_INFO_ELEMENT的列表,定義如下:

p19

需要依次遍歷其中ElementID,獲取AP的一系列屬性,一些常用的ID定義如下:

p20

分別對應AP的SSID、當前頻道、WPA2引數等。

S他的探測主要透過資料幀來實現,WPA破解目前只用到了S他的MAC地址,根據每個資料幀的FromDS、ToDS情況,解析資料包MAC地址,即可實現抓取線上通訊的STA地址,具體如下:

p21

Deauth攻擊

根據WIFI協議規定,客戶端在接受到Deauth管理幀後,應該主動斷開同AP的連線,一旦斷開後,STA會自動嘗試重連,這時就方便抓取EAPOL四次握手包了,因此成功實施Deauth攻擊可以極大提高WPA破解的效率。

Aircrack裡面的Deauth攻擊模版如下:

p22

其中\xC0\x00指明瞭該幀是Deauth管理幀,最後的\x02\00指定了本次Deauth的Code碼,Aircrack裡是\x06\x00,區別起見,修改了下。

傳送Deauth攻擊時,將DA替換成目標S他的MAC地址(或廣播),SA、BSSID填上AP的MAC即可。

p23

EAPOL捕獲

EAPOL幀的識別比較簡單,因為802.1x資料幀前,LLC(邏輯鏈路控制)頭會有一個標識0x888e,直接記憶體搜尋即可定位EAPOL幀,稍微麻煩一點的是要確定當前EAPOL包在四次握手中次序,因為在實際網路嗅探時,有很大可能出現漏抓的情況。

EAPOL資料包格式如下:

p24

其中ProType=3表示是Key,Key描述資料結構如下:

p25

其中KEY_INFO資料定義了一系列的標誌位,EAPOL四次握手時,各個階段的標誌位會不盡相同,透過分析這些標誌位情況,可以獲取其在四次握手時的次序。一旦監控到一次的完整四次握手,即可認為當前AP握手包抓取成功。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章