作为网络安全工程师,我经常遇到这样的场景:办公室Wi-Fi突然大面积掉线,或者监控系统频繁报警显示异常连接。这时候第一个反应就是抓包分析,而四次握手过程就像无线网络的"指纹识别",能直接反映连接的安全状态。
记得去年排查某企业网络故障时,发现员工手机频繁断开重连。用Wireshark抓包后发现,超过60%的四次握手在第三阶段失败。进一步分析发现是AP的GTK密钥生成算法存在兼容性问题。这个案例让我深刻意识到,理解四次握手就像掌握无线网络的"听诊器"。
在开始前需要准备:
关键配置步骤:
bash复制# 设置网卡监控模式
sudo airmon-ng start wlan0
# 只捕获EAPOL帧(四次握手专用协议)
tshark -i wlan0mon -Y "eapol" -w handshake.pcap
AP发送包含以下要素的EAPOL帧:
常见问题:如果抓包看不到第一次握手,可能是STA的探测请求未被AP响应,建议检查信道配置。
STA收到A-Nonce后:
Wireshark技巧:右键帧→Protocol Preferences→勾选"Validate key MIC"可自动验证MIC正确性。
这个阶段AP会:
重要细节:GTK是用KEK加密后传输的,在Wireshark中显示为"Encrypted Key Data"。
STA需要:
典型故障:如果此阶段失败,通常会在系统日志看到"0x3-0xE"错误代码,表示MIC校验失败。
KRACK攻击的关键特征:
检测方法:
bash复制tshark -r attack.pcap -Y "eapol && wlan.rsn.ie.pmkid" | grep -A 3 "Message 3"
手动验证PTK生成(以WPA2-PSK为例):
python复制import hashlib, hmac
def generate_ptk(pmk, a_nonce, s_nonce, ap_mac, sta_mac):
# 简化版的PTK生成算法
prf = lambda k,s: hmac.new(k, s, hashlib.sha1).digest()
return prf(pmk, b"".join([a_nonce, s_nonce, ap_mac, sta_mac]))[:32]
| 现象 | 可能原因 | 验证方法 |
|---|---|---|
| 握手卡在Message 3 | GTK生成失败 | 检查AP系统日志 |
| 频繁重传Message 1 | 信号干扰 | 查看RSSI值波动 |
| MIC校验失败 | 密码错误 | 对比PMK哈希 |
获得PTK后,可以在Wireshark中解密流量:
实测发现TKIP加密的数据需要额外配置:
config复制wlan.enable_decryption: TRUE
wlan.decryption.key_count: 1
wlan.decryption.key(0): xx:xx:xx...
处理大型抓包文件时:
eapol && wlan.rsn.ie.pmkid某咖啡店Wi-Fi出现随机断开现象,抓包分析发现:
最终定位是AP固件bug导致GTK更新异常。通过抓包分析,我们不仅解决了问题,还优化了AP的部署位置。