Ao contrário do WEP, o WPA e o WPA2 não possuem falhas conhecidas de segurança, que permitam descobrir a chave rapidamente. Apesar disso, ainda é possível usar ataques de força bruta para descobrir passphrases fáceis, baseadas em palavras do dicionário ou sequências numéricas simples. Vamos então entender melhor como o processo funciona.
O primeiro passo é instalar o pacote aircrack-ng, sucessor do pacote aircrack que usamos anteriormente, que contém as ferramentas que utilizaremos.
Para funcionar, ele precisa que a placa wireless suporte o modo monitor, que é suportado por padrão em um número cada vez menor de drivers. Na maioria dos casos, você vai precisar primeiro modificar os drivers da placa, baixando o fonte, instalando um patch e compilando o driver modificado. Para isso, você precisa ter instalados os headers do kernel e os compiladores básicos.
Você pode encontrar informações detalhadas de como fazer isso em conjunto com diversas placas no: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link] Outra opção é utilizar o BackTrack, que já vem com os patches instalados.
Para aplicar o teste, comece usando o Kismet para descobrir o SSID e o canal utilizado pela rede que deseja testar, além do endereço MAC do ponto de acesso e o endereço MAC de pelo menos um cliente que esteja conectado a ele. Se você está testando sua própria rede, basta checar as informações na configuração do ponto de acesso.
O passo seguinte é usar o airmon-ng para capturar o processo de autenticação de um dos clientes da rede. Ele é baseado no uso de um "four-way handshake", onde uma série de quatro pacotes é usada para negociar uma chave criptográfica entre o cliente e o ponto de acesso, que é então usada para criptografar o processo de autenticação.
Naturalmente, capturar esta sequência de pacotes não permite descobrir a passphrase da rede, mas oferece a possibilidade de executar o ataque de força bruta, testando várias possibilidades até descobrir a chave correta.
Comece colocando a placa wireless em modo monitor, usando o comando "airmon-ng start interface", como em:
# airmon-ng start eth1
No caso das placas com chipset Atheros, é necessário desativar a interface "ath0" e recriá-la em modo monitor, usando os comandos:
# airmon-ng stop ath0
# airmon-ng start wifi0
O passo seguinte é capturar o processo de autenticação de um dos clientes. Vamos fazer isso abrindo dois terminais. O primeiro será usado para rodar o airodump-ng e assim capturar as transmissões e o segundo para rodar o aireplay-ng, desconectando o cliente e obrigando-o a se reconectar ao ponto de acesso, de forma que os pacotes possam ser capturados.
No primeiro terminal, ative o airodump-ng, especificando onde será gravado o arquivo com os pacotes capturados, o canal usado pelo ponto de acesso e a interface, como em:
# airodump-ng -w logrede --channel 2 ath0
Com isso, será gerado um arquivo "logrede.cap" no diretório atual.
No outro terminal, rode o comando "aireplay-ng --deauth 1", especificando o endereço MAC do ponto de acesso (-a) e o endereço MAC do cliente que será desconectado (-c), como em:
# aireplay-ng --deauth 1 -a 00:50:50:81:41:56 -c 00:19:7D:4C:CA:07
Este comando faz com que seu PC envie um pacote falseado ao ponto de acesso, simulando o processo de desconexão do cliente especificado. Enganado pelo pacote, o ponto de acesso desconecta o cliente, o que faz com que ele se re-autentique em seguida, um processo executado de forma automática pela maioria dos sistemas operacionais. Com isso, o processo de autenticação será gravado pela captura iniciada no outro terminal.
Para realizar o ataque baseado em dicionário, é necessário utilizar um arquivo de texto, contendo uma lista das palavras que serão testadas. Existem diversos arquivos de dicionário largamente disponíveis na web (faça uma busca por "wordlists" no Google), como o repositório disponível no [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Na maioria das distribuições, você encontra também uma lista de palavras que pode ser usada na forma do arquivo "/usr/share/dict/words" e você pode também comprar um CD com uma coleção de arquivos, contendo listas com palavras de todas as línguas no: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Com o arquivo de palavras em mãos, use o comando abaixo para testar as combinações, especificando o SSID da rede, o arquivo com as palavras e o arquivo com a captura dos pacotes (gerado pelo airmon-ng), como em:
$ aircrack-ng -e rede -w dict.txt logrede.cap
... onde o "rede" indica o SSID da rede, o "dict.txt" indica a localização do dicionário e o "logrede.cap" é o arquivo com a captura. É necessário indicar o SSID da rede, pois ele é uma das informações incluídas no processo de autenticação.
O teste é feito em modo offline, usando os pacotes de autenticação capturados para simular o processo de autenticação usando cada uma das palavras incluídas no arquivo. O volume de processamento necessário para cada uma faz com que o teste demore um bom tempo. Um Celeron-M de 1.4 GHz, por exemplo, consegue processar (mesmo com todas as otimizações incluídas no aircrack-ng) apenas cerca de 100 possibilidades por segundo, o que resulta em um ritmo de 360 mil combinações por hora, ou 8.64 milhões de combinações por dia.
Pode parecer bastante, mas nesse ritmo demoraria mais de um milhão de anos para testar todas as possibilidades de uma passphrase com 8 caracteres contendo letras, números e caracteres especiais (e exponencialmente mais para passphrases mais longas). É por isso que o ataque se concentra em testar uma lista de palavras, e não em realmente testar todas as possibilidades possíveis.
É possível também usar o John the Ripper para testar variações das palavras do dicionário, permitindo assim descobrir passphrases construídas com base em variações ou em combinações de palavras, como "paralelep1ped0" o que é bastante comum.
Você pode baixá-lo no: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Para usá-lo, descompacte o arquivo, acesse a pasta "src" (dentro da pasta criada) e rode o comando "make". Isso gerará o executável do programa dentro da pasta "run", que pode então ser executado, como em "./john".
O John é uma ferramenta muito usada para testar senhas, pois ele pode lançar ataques de força bruta, testando todas as combinações ou utilizando um arquivo de dicionário em praticamente todo tipo de arquivo de senhas. No nosso caso, usaremos o John para processar o arquivo de dicionário, direcionando a saída para o aircrack-ng. O comando ficaria:
$ ./john --wordlist=dict.txt --rules --stdout | aircrack-ng -e rede -w logrede.cap
Como pode ver, o processo de quebrar chaves WPA é bastante demorado e, mesmo assim, é inefetivo contra passphrases construídas com caracteres aleatórios, principalmente no caso de passphrases longas. Com a geração atual de programas, você pode garantir a segurança da sua rede usando uma boa passphrase.
Uma passphrase longa, com 20 caracteres ou mais (que não seja a combinação de duas ou mais palavras), é impossível de quebrar usando força bruta. A única forma de obter acesso à rede seria convencer algum dos usuários a revelá-la.
Uma solução para este último problema seria utilizar uma passphrase impossível de memorizar (imagine o caso de uma passphrase com 50 caracteres ou mais . Você pode então imprimir a passphrase em papel, digitá-la no cliente para autorizar a conexão e em seguida destruir a cópia impressa.
Carlos E. Morimoto
O primeiro passo é instalar o pacote aircrack-ng, sucessor do pacote aircrack que usamos anteriormente, que contém as ferramentas que utilizaremos.
Para funcionar, ele precisa que a placa wireless suporte o modo monitor, que é suportado por padrão em um número cada vez menor de drivers. Na maioria dos casos, você vai precisar primeiro modificar os drivers da placa, baixando o fonte, instalando um patch e compilando o driver modificado. Para isso, você precisa ter instalados os headers do kernel e os compiladores básicos.
Você pode encontrar informações detalhadas de como fazer isso em conjunto com diversas placas no: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link] Outra opção é utilizar o BackTrack, que já vem com os patches instalados.
Para aplicar o teste, comece usando o Kismet para descobrir o SSID e o canal utilizado pela rede que deseja testar, além do endereço MAC do ponto de acesso e o endereço MAC de pelo menos um cliente que esteja conectado a ele. Se você está testando sua própria rede, basta checar as informações na configuração do ponto de acesso.
O passo seguinte é usar o airmon-ng para capturar o processo de autenticação de um dos clientes da rede. Ele é baseado no uso de um "four-way handshake", onde uma série de quatro pacotes é usada para negociar uma chave criptográfica entre o cliente e o ponto de acesso, que é então usada para criptografar o processo de autenticação.
Naturalmente, capturar esta sequência de pacotes não permite descobrir a passphrase da rede, mas oferece a possibilidade de executar o ataque de força bruta, testando várias possibilidades até descobrir a chave correta.
Comece colocando a placa wireless em modo monitor, usando o comando "airmon-ng start interface", como em:
# airmon-ng start eth1
No caso das placas com chipset Atheros, é necessário desativar a interface "ath0" e recriá-la em modo monitor, usando os comandos:
# airmon-ng stop ath0
# airmon-ng start wifi0
O passo seguinte é capturar o processo de autenticação de um dos clientes. Vamos fazer isso abrindo dois terminais. O primeiro será usado para rodar o airodump-ng e assim capturar as transmissões e o segundo para rodar o aireplay-ng, desconectando o cliente e obrigando-o a se reconectar ao ponto de acesso, de forma que os pacotes possam ser capturados.
No primeiro terminal, ative o airodump-ng, especificando onde será gravado o arquivo com os pacotes capturados, o canal usado pelo ponto de acesso e a interface, como em:
# airodump-ng -w logrede --channel 2 ath0
Com isso, será gerado um arquivo "logrede.cap" no diretório atual.
No outro terminal, rode o comando "aireplay-ng --deauth 1", especificando o endereço MAC do ponto de acesso (-a) e o endereço MAC do cliente que será desconectado (-c), como em:
# aireplay-ng --deauth 1 -a 00:50:50:81:41:56 -c 00:19:7D:4C:CA:07
Este comando faz com que seu PC envie um pacote falseado ao ponto de acesso, simulando o processo de desconexão do cliente especificado. Enganado pelo pacote, o ponto de acesso desconecta o cliente, o que faz com que ele se re-autentique em seguida, um processo executado de forma automática pela maioria dos sistemas operacionais. Com isso, o processo de autenticação será gravado pela captura iniciada no outro terminal.
Para realizar o ataque baseado em dicionário, é necessário utilizar um arquivo de texto, contendo uma lista das palavras que serão testadas. Existem diversos arquivos de dicionário largamente disponíveis na web (faça uma busca por "wordlists" no Google), como o repositório disponível no [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Na maioria das distribuições, você encontra também uma lista de palavras que pode ser usada na forma do arquivo "/usr/share/dict/words" e você pode também comprar um CD com uma coleção de arquivos, contendo listas com palavras de todas as línguas no: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Com o arquivo de palavras em mãos, use o comando abaixo para testar as combinações, especificando o SSID da rede, o arquivo com as palavras e o arquivo com a captura dos pacotes (gerado pelo airmon-ng), como em:
$ aircrack-ng -e rede -w dict.txt logrede.cap
... onde o "rede" indica o SSID da rede, o "dict.txt" indica a localização do dicionário e o "logrede.cap" é o arquivo com a captura. É necessário indicar o SSID da rede, pois ele é uma das informações incluídas no processo de autenticação.
O teste é feito em modo offline, usando os pacotes de autenticação capturados para simular o processo de autenticação usando cada uma das palavras incluídas no arquivo. O volume de processamento necessário para cada uma faz com que o teste demore um bom tempo. Um Celeron-M de 1.4 GHz, por exemplo, consegue processar (mesmo com todas as otimizações incluídas no aircrack-ng) apenas cerca de 100 possibilidades por segundo, o que resulta em um ritmo de 360 mil combinações por hora, ou 8.64 milhões de combinações por dia.
Pode parecer bastante, mas nesse ritmo demoraria mais de um milhão de anos para testar todas as possibilidades de uma passphrase com 8 caracteres contendo letras, números e caracteres especiais (e exponencialmente mais para passphrases mais longas). É por isso que o ataque se concentra em testar uma lista de palavras, e não em realmente testar todas as possibilidades possíveis.
É possível também usar o John the Ripper para testar variações das palavras do dicionário, permitindo assim descobrir passphrases construídas com base em variações ou em combinações de palavras, como "paralelep1ped0" o que é bastante comum.
Você pode baixá-lo no: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Para usá-lo, descompacte o arquivo, acesse a pasta "src" (dentro da pasta criada) e rode o comando "make". Isso gerará o executável do programa dentro da pasta "run", que pode então ser executado, como em "./john".
O John é uma ferramenta muito usada para testar senhas, pois ele pode lançar ataques de força bruta, testando todas as combinações ou utilizando um arquivo de dicionário em praticamente todo tipo de arquivo de senhas. No nosso caso, usaremos o John para processar o arquivo de dicionário, direcionando a saída para o aircrack-ng. O comando ficaria:
$ ./john --wordlist=dict.txt --rules --stdout | aircrack-ng -e rede -w logrede.cap
Como pode ver, o processo de quebrar chaves WPA é bastante demorado e, mesmo assim, é inefetivo contra passphrases construídas com caracteres aleatórios, principalmente no caso de passphrases longas. Com a geração atual de programas, você pode garantir a segurança da sua rede usando uma boa passphrase.
Uma passphrase longa, com 20 caracteres ou mais (que não seja a combinação de duas ou mais palavras), é impossível de quebrar usando força bruta. A única forma de obter acesso à rede seria convencer algum dos usuários a revelá-la.
Uma solução para este último problema seria utilizar uma passphrase impossível de memorizar (imagine o caso de uma passphrase com 50 caracteres ou mais . Você pode então imprimir a passphrase em papel, digitá-la no cliente para autorizar a conexão e em seguida destruir a cópia impressa.
Carlos E. Morimoto