WPA密码破解-字典攻击(python实现)

WPA

WPA(英语:Wi-Fi Protected Access),意即“Wi-Fi访问保护”,是一种保护无线网络(Wi-Fi)访问安全的技术标准。它是应研究者在前一代的有线等效加密(WEP)系统中找到的几个严重的弱点而产生的。当前广泛实现的有WPA、WPA2两个标准,WPA实现了IEEE 802.11i标准的大部分,是在802.11i完备之前替代WEP的过渡方案。WPA的设计可以用在所有的无线网卡上,但未必能用在第一代的无线接入点上。WPA2具备完整的标准体系,但其不能被应用在某些旧型的网卡上。

WPA = 802.1x + EAP + TKIP +MIC = Pre-shared Key + TKIP + MIC

802.11i(WPA2)= 802.1x + EAP + AES + CCMP= Pre-shared Key + AES + CCMP

802.1x + EAP,Pre-shared Key是身份校验算法

TKIP和AES是数据传输加密算法

MIC和CCMP数据完整性编码校验算法

WPA四次握手

1)WPA-PSK 初始化工作

使用 SSID 和passphares使用以下算法产生PSK 在WPA-PSK 中

PSK=PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)

2)第一次握手

AP广播SSID,AP_MAC(AA)→STATION

STATION 端

使用接受到的SSID,AP_MAC(AA)和passphares使用同样算法产生PSK

PSK=PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)

3)第二次握手

STATION 发送一个随机数SNonce,STATION_MAC(SA)→AP

AP端

接受到SNonce,STATION_MAC(SA)后产生一个随机数ANonce

然后用PMK,AP_MAC(AA),STATION_MAC(SA),SNonce,ANonce 用以下算法产生PTK

PTK=SHA1_PRF(PMK, Len(PMK),”Pairwise key expansion”,MIN(AA,SA) ||Max(AA,SA) || Min(ANonce,SNonce) || Max(ANonce,SNonce))

MIC Key=PTK前16个字节

提取这个PTK 前16 个字节组成一个MIC KEY

4)第三次握手

AP发送上面产生的ANonce→STATION

STATION 端

用接收到ANonce 和以前产生PMK,SNonce,AP_MAC(AA),STATION_MAC(SA)用同样的算法产生PTK。提取这个PTK 前16 个字节组成一个MICKEY使用以下算法产生MIC值用这个MIC KEY 和一个802.1x data 数据帧使用以下算法得到MIC值

MIC = HMAC_MD5(MIC Key,16,802.1x data)

5)第四次握手

STATION 发送802.1x data ,MIC→AP

STATION 端

用上面那个准备好的802.1x 数据帧在最后填充上MIC值和两个字节的0(十六进制)让后发送这个数据帧到AP。

AP端

收到这个数据帧后提取这个MIC。并把这个数据帧的MIC部分都填上0(十六进制)这时用这个802.1xdata 数据帧,和用上面AP产生的MIC KEY 使用同样的算法得出MIC’。如果MIC’等于STATION发送过来的MIC。那么第四次握手成功。若不等说明则AP 和STATION 的密钥不相同,或STATION 发过来的数据帧受到过中间人攻击,原数据被篡改过。握手失败了。

6)MIC的产生过程

PSK=PMK=pdkdf2_SHA1(passphrase, SSID, SSID length,4096)

PTK=SHA1_PRF(PMK, Len(PMK),”Pairwise key expansion”,MIN(AA,SA) || Max(AA,SA) || Min(ANonce,SNonce) || Max(ANonce,SNonce))

MIC KEY=提取PTK 的前16 个字节

MIC = HMAC_MD5(MIC Key,16,802.1x data)

字典攻击

字典攻击,就是把密码的可能性罗列起来组成一个密码字典。然后把字典里的密码和SSID,AP_MAC,
STATION_MAC,SNonce,ANonce,802.1x data,这些信息元素。通过pdkdf2_SHA1,SHA1_PRF,HMAC_MD5 这些算法最后生成MIC’。当在字典里找到一个密码他的MIC’等于握手包中的MIC。这时字典破解成功。这就是我们要的那个密码。如果把字典里的所有密码都找遍了还有没有符合上述条件的,那么破解失败。

攻击步骤

1.抓取无线网络握手包

使用专用网卡抓取无线网络握手包。可以守株待兔等有人去链接wifi,也可以直接攻击已连接用户迫使其断线重连。

2.运行程序破解WPA-PSK的口令

程序流程如下:

1)获取密码字典列表

2)使用SSID,AP_MAC,
STATION_MAC,SNonce,ANonce,802.1x data和密码生成MIC
,并与抓到的包中的MIC进行比较。

在第二步中,由于当字典比较大的时候程序的运行时间会很长,所以加入多进程来
减少程序的运行时间。

具体代码:
github