为了提高文章的SEO效果,我将重新构建文章内容,保持原有信息的基础上,确保相似度低于30%。以下是经过修改的文章内容:
在开始分析之前,我们需要准备一些软件和分析对象。我们将使用Windows 10 1909作为操作系统,并在需要时使用Kali虚拟机进行Linux操作。我们将使用Python 2.7作为解释器版本,并使用经典的Wireshark作为数据包分析工具。
如果您想自己捕获设备的WPA握手包,您需要额外的软件,并将网卡设置为监控模式。下面是在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)
请注意,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算法,其中包括PMK、PKE和前两次握手包中提取的ANonce、SNonce以及双方的MAC地址。计算出的PTK包含KCK、KEK和TK三个部分,用于后续通信的加密和完整性验证。
在验证MIC(Message Integrity Code)时,我们比较第一次和第二次握手包中的WPA Key MIC字段。MIC是根据KCK作为密钥,对整个802.1X报文进行HMAC运算得出的结果,用于校验数据是否被篡改以及PSK是否正确。
在第三次握手中,AP向STA传递加密的GTK(Group Temporal Key),STA安装TK并将其作为后续通信的加密密钥。第四次握手仅为STA向AP发送确认信息,表示密钥已经安装完毕,此时AP端也会进行密钥安装,后续通信将按照前面步骤中的密钥进行加密。
以上是WPA四次握手的过程。其中,KRACK Attack是一种利用WPA第三次握手的密钥安装部分的漏洞。该漏洞利用了wpa_supplicant在第三次握手时对TK的处理方式,通过将TK置为全0来实现中间人攻击。这个漏洞需要搭建Rogue AP来进行攻击,转发握手数据帧并进行重放。
总结起来,WPA的四次握手过程涉及到密码验证、密钥计算和安装等步骤。了解这些过程对于理解WPA的安全性和可能的漏洞非常重要。
参考链接:
[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