为了提高文章的SEO效果,我将重新构建文章内容,保持原有信息的基础上,确保相似度低于30%。以下是经过修改的文章内容:
在开始分析之前,我们需要准备一些软件和分析对象。本次分析使用的操作系统是Windows10 1909,部分分析需要使用虚拟机安装的Kali Linux。代码部分使用Python 2.7作为解释器版本。数据包分析工具则使用经典的Wireshark。
如果您想自己捕获设备的WPA握手包,需要额外的软件,并将网卡设置为Monitor Mode。下面简单介绍一下在Windows和Linux平台上的操作。
root@kali:~# airmon-ng start wlan0
root@kali:~# airmon-ng start wlan0
Found 2 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to run 'airmon-ng check kill'
PID Name
1959 NetworkManager
1989 wpa_supplicant
PHY Interface Driver Chipset
phy0 wlan0 rt2800usb Ralink Technology, Corp. RT2870/RT3070
(mac80211 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon)
(mac80211 station mode vif disabled for [phy0]wlan0)
请注意,如果遇到网卡被占用的情况,需要使用airmon-ng check kill命令来结束占用进程。此时网卡名称可能会变成wlan0mon,需要注意。
设置完监听模式后,可以打开Wireshark并选择网卡wlan0mon进行捕获。
握手前的准备工作包括计算PMK(Pairwise Master Key)。PMK是由Wi-Fi的SSID和Pre-Shared-Key(即Wi-Fi密码)计算而来,使用的算法是Password-Based Key Derivation Function 2 (PBKDF2),它使用SSID作为盐值进行哈希计算。在默认的Python环境中,需要安装pbkdf2库来支持这种算法。可以使用pip install pbkdf2命令来安装。另外,也可以使用Linux系统中的wpa_passphrase工具来计算PMK。
在第一次握手中,AP向STA发送ANonce,STA本地生成SNonce并进行PTK的计算。在第二次握手中,STA向AP发送SNonce,AP根据前两次握手包中的数据计算PTK。PTK的计算需要使用PRF512算法,其中包括ANonce、SNonce和双方的MAC地址等参数。计算出的PTK包含KCK、KEK和TK三个部分,分别用于密钥确认、加密和后续通信数据加密。
在验证MIC(Message Integrity Code)时,需要将整个报文提取出来,并将WPA Key MIC字段替换为0,然后进行计算。MIC的计算是以KCK为密钥,整个802.1X报文为消息体进行HMAC运算得出的结果。
在第三次握手中,AP向STA发送加密后的GTK,并安装计算出的TK作为后续通信的加密密钥。在第四次握手中,STA向AP发送确认信息,表示密钥已经安装完毕,AP也会进行密钥安装。至此,双方的密钥安装全部完成,后续通信将按照前面步骤中的密钥进行加密。
以上是WPA四次握手的过程,其中第三次握手的密钥安装部分是KRACK Attack漏洞的重点。KRACK Attack利用了wpasupplicant在第三次握手时对TK的处理来进行攻击。由于wpasupplicant在安装密钥后会将其从内存中清除,攻击者可以利用这一点来安装全0的密钥,从而实现中间人攻击。
总结一下,WPA的四次握手过程中,前两次握手用于计算PTK,第三次握手用于验证AP的身份并安装密钥,第四次握手用于确认密钥安装完成。在实际应用中,需要注意安全漏洞,如KRACK Attack,以保护无线网络的安全性。
参考链接:
[1] WPA/RSN四次握手和PTK
[2] KEYS, KEYS, AND EVEN MORE KEYS!
[3] WPA/WPA2-PSK认证过程
[4] 四次握手
[5] 安全协议系列(二)—-CCM与CCMP
[6] [7] [8] 国内研究人员首次Wifi重大漏洞利用实现 | Krack攻击测试套件打包
[9] WPA2 密钥重装攻击 KRACK Attacks 分析报告
[10] Understanding WPA/WPA2 Hash (MIC) Cracking Process In Python
[11] HowToDecrypt802.11