4、Wi-Fi安全抓包:WPA2四次握手抓包、PMKID抓包、Deauth攻击检测

各位同学,欢迎来到第四章。前面我们聊了怎么把无线网卡调到监听模式,也看了Beacon帧和Probe帧这些管理帧长什么样。今天咱们来点硬核的——Wi-Fi安全抓包。

说白了,就是盯着WPA2/WPA3的认证过程,把密钥协商的每一个字节都录下来。我做了这么多年物联网安全,可以负责任地告诉你:无线协议里,安全握手的抓包分析是最容易出活儿的地方。不管是做渗透测试、排查连接故障,还是搞合规审计,这章的内容你迟早用得上。

本章核心知识点:
  • WPA2四次握手的帧结构 & 关键字段
  • PMKID抓包原理 & 离线破解思路
  • Deauth攻击的检测方法 & 特征提取
Wi-Fi 安全抓包知识体系 Wi-Fi 安全抓包:三大核心场景 Wi-Fi 安全抓包 WPA2 四次握手 PMKID 抓包 Deauth 攻击检测 Message 1 (AP → STA): ANonce Message 2 (STA → AP): SNonce + MIC Message 3 (AP → STA): GTK + MIC Message 4 (STA → AP): ACK PMKID = HMAC-SHA1(PMK, "PMK Name" | ...) 抓取 EAPOL-Key 帧 (Message 1) 离线破解: hashcat -m 22000 Deauth 帧: Reason Code (7 = 非关联) 检测特征: 高频 Deauth 帧风暴 防御: 启用 802.11w (PMF) 提示: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 确认安装密钥
实战技巧: 如果你在抓包时只看到 Message 1 和 Message 2,没有后续帧,那大概率是密码错误。我在项目中遇到过好几次这种情况——客户说“Wi-Fi连不上”,我一抓包,发现四次握手只走了两步就断了。查一下日志,果然是PSK输错了。

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的工具链我推荐这样搭配:

  1. hcxdumptool:专门用来抓取PMKID和四次握手哈希的工具
  2. hcxpcaptool:把抓到的pcapng转换成hashcat可识别的22000格式
  3. hashcat:用 -m 22000 模式跑字典或暴力破解

一条命令搞定抓包:

# 抓取 PMKID(自动过滤 EAPOL 帧)
hcxdumptool -i wlan0mon -o capture.pcapng --enable_status=1
注意: PMKID 抓包只对支持 WPA2 的 AP 有效。如果 AP 开启了 802.11w(PMF),PMKID 可能不会被发送。另外,有些 AP 会在 Message 1 中省略 PMKID,这种情况下你还是得老老实实抓四次握手。

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 帧/秒
防御建议: 如果你的物联网设备支持802.11w(Protected Management Frames),一定要开启。PMF会对Deauth帧进行加密和认证,攻击者伪造不了。我最近帮一个智能家居厂商做安全审计,他们所有设备都强制开启了PMF,Deauth攻击基本无效。

4.4 实战:一次完整的抓包流程

最后,我给大家串一个完整的实战流程。假设我们要对一个WPA2-PSK的AP进行安全评估:

  1. 环境准备:把无线网卡切到监听模式,确认能收到目标AP的Beacon帧。
  2. 抓取PMKID:用hcxdumptool抓30秒,看能不能直接拿到PMKID。
  3. 如果没拿到PMKID:等待客户端连接,抓取完整的四次握手。
  4. 提取哈希:用hcxpcaptool把pcapng转成22000格式。
  5. 离线破解:用hashcat跑字典或暴力破解。
  6. 检测Deauth:在抓包过程中,同时监控Deauth帧的频率和来源。

这个流程我用了好几年,基本覆盖了90%的Wi-Fi安全评估场景。你刚开始做的时候可能会觉得步骤多,但多做几次就顺手了。

本章小结:
  • WPA2四次握手是密钥协商的基础,抓全四帧才能离线破解。
  • PMKID抓包更高效,但依赖AP是否发送PMKID。
  • Deauth攻击检测的关键是频率分析和源MAC验证。
  • 802.11w(PMF)是目前最有效的Deauth防御手段。