4、Wi-Fi安全抓包:WPA2四次握手抓包、PMKID抓包、Deauth攻击检测
各位同学,欢迎来到第四章。前面我们聊了怎么把无线网卡调到监听模式,也看了Beacon帧和Probe帧这些管理帧长什么样。今天咱们来点硬核的——Wi-Fi安全抓包。
说白了,就是盯着WPA2/WPA3的认证过程,把密钥协商的每一个字节都录下来。我做了这么多年物联网安全,可以负责任地告诉你:无线协议里,安全握手的抓包分析是最容易出活儿的地方。不管是做渗透测试、排查连接故障,还是搞合规审计,这章的内容你迟早用得上。
- WPA2四次握手的帧结构 & 关键字段
- PMKID抓包原理 & 离线破解思路
- Deauth攻击的检测方法 & 特征提取
4.1 WPA2 四次握手抓包
WPA2-Personal(也就是我们常说的PSK模式)的认证过程,核心就是这四次握手。嗯,这里要注意:四次握手不是加密过程,而是密钥派生过程。AP和STA通过这四帧,各自独立计算出PTK(Pairwise Transient Key),然后才用这个密钥加密后续的数据流量。
我个人习惯在抓四次握手时,把过滤条件写成这样:
# 只抓 EAPOL 帧(四次握手就是 EAPOL-Key 帧)
wlan.fc.type_subtype == 0x08 && eapol
# 或者更精确一点,只抓 Key 类型为 2(Pairwise)的 EAPOL-Key
wlan.fc.type_subtype == 0x08 && eapol.keydes_info_key_type == 2
抓下来之后,你会看到四条连续的EAPOL-Key帧。我刚开始做Wi-Fi分析时,经常搞混哪条是Message 1、哪条是Message 3。后来我总结了一个规律:
| 消息序号 | 发送方 | 关键字段 | 作用 |
|---|---|---|---|
| Message 1 | AP → STA | ANonce(随机数) | AP 提供自己的随机数 |
| Message 2 | STA → AP | SNonce + MIC | STA 提供自己的随机数,并证明自己知道 PSK |
| Message 3 | AP → STA | GTK + MIC | AP 发送组密钥,并确认 STA 身份 |
| Message 4 | STA → AP | ACK(确认) | STA 确认安装密钥 |
4.2 PMKID 抓包
PMKID 抓包是近几年非常火的一种攻击手法。说白了,它比传统的四次握手抓包更简单——你只需要抓到第一个EAPOL-Key帧(Message 1)就够了。
为什么会这样?因为PMKID是AP在Message 1里主动发出来的。它的计算公式是:
PMKID = HMAC-SHA1(PMK, "PMK Name" || BSSID || STA MAC)
你看,PMKID里包含了PMK的信息。而PMK又是从PSK派生出来的。所以只要拿到PMKID,我们就可以离线暴力破解PSK。
我记得有一次做红队测试,目标AP的WPA2密码是12位纯数字。我用hcxdumptool抓了大概3秒钟,就拿到了PMKID。然后丢给hashcat,不到5分钟就破解出来了。你想想看,如果是传统四次握手抓包,你还得等客户端主动连接,还得抓全四帧,麻烦多了。
抓PMKID的工具链我推荐这样搭配:
- hcxdumptool:专门用来抓取PMKID和四次握手哈希的工具
- hcxpcaptool:把抓到的pcapng转换成hashcat可识别的22000格式
- hashcat:用 -m 22000 模式跑字典或暴力破解
一条命令搞定抓包:
# 抓取 PMKID(自动过滤 EAPOL 帧)
hcxdumptool -i wlan0mon -o capture.pcapng --enable_status=1
4.3 Deauth 攻击检测
Deauth攻击,全称是Deauthentication攻击。攻击者伪造AP发送Deauth帧,强制客户端断开连接。这种攻击在物联网环境里特别常见——你想想看,一个智能灯泡突然掉线了,用户第一反应是重启路由器,但实际上是有人在搞鬼。
检测Deauth攻击的核心思路就一条:看Deauth帧的发送频率和来源。
正常的Deauth帧很少出现。比如AP重启时,会发一个Deauth帧通知所有客户端。但攻击者会以每秒几十甚至上百个的速度狂发。我在Wireshark里常用的过滤条件:
# 只显示 Deauth 帧
wlan.fc.type_subtype == 0x0c
# 显示 Deauth 帧 + 统计频率
wlan.fc.type_subtype == 0x0c && frame.time_delta_displayed < 0.1
第二个过滤条件的意思是:如果两个Deauth帧之间的时间间隔小于0.1秒,那就是高频攻击。嗯,这里要注意:不是所有高频Deauth都是攻击。我曾经遇到过一种情况:某个AP的固件有bug,每次客户端连上来都会自动发一个Deauth帧,导致客户端反复重连。这种属于故障,不是攻击。
区分攻击和故障,我一般看三个特征:
| 特征 | 攻击行为 | 故障行为 |
|---|---|---|
| 源MAC地址 | 伪造的AP MAC(与真实AP不同) | 真实AP的MAC |
| 目标MAC | 广播地址或特定STA | 通常是广播地址 |
| Reason Code | 常为 1(未指定)或 7(非关联) | 常为 3(AP 重启)或 4(不活动) |
| 发送频率 | > 10 帧/秒 | < 1 帧/秒 |
4.4 实战:一次完整的抓包流程
最后,我给大家串一个完整的实战流程。假设我们要对一个WPA2-PSK的AP进行安全评估:
- 环境准备:把无线网卡切到监听模式,确认能收到目标AP的Beacon帧。
- 抓取PMKID:用hcxdumptool抓30秒,看能不能直接拿到PMKID。
- 如果没拿到PMKID:等待客户端连接,抓取完整的四次握手。
- 提取哈希:用hcxpcaptool把pcapng转成22000格式。
- 离线破解:用hashcat跑字典或暴力破解。
- 检测Deauth:在抓包过程中,同时监控Deauth帧的频率和来源。
这个流程我用了好几年,基本覆盖了90%的Wi-Fi安全评估场景。你刚开始做的时候可能会觉得步骤多,但多做几次就顺手了。
- WPA2四次握手是密钥协商的基础,抓全四帧才能离线破解。
- PMKID抓包更高效,但依赖AP是否发送PMKID。
- Deauth攻击检测的关键是频率分析和源MAC验证。
- 802.11w(PMF)是目前最有效的Deauth防御手段。