sexta-feira, 20 de agosto de 2010

Segurança de Redes sem Fio: Injetando Pacotes

Há duas semanas, eu iniciei uma série de posts sobre segurança de redes sem fio, onde meu intuito era mostrar que as soluções de segurança não são assim tão seguras, e demonstrei o uso de uma técnica de captura de IVs para a obtenção da chave usada no modelo de criptografia Wep.

Dando prosseguimento ao post quebrando Criptografia Wep, hoje nós vamos falar sobre a injeção determinados tipos de pacotes na rede para acelerar o processo de captura dos IVs.



AVISO LEGAL: Acessar redes sem fio (e outros recursos particulares) de outras pessoas sem sua autorização expressa é uma atividade ilegal. Este blog, e seu autor, não toleram ou aprovam o uso ilegal das informações contidas neste tutorial, de qualquer forma que isso se processe. Não nos responsabilizamos por qualquer uso indevido deste material, que possui caráter de estudo.

como vocês já sabem, este post está dividido em cinco partes:

Parte 1: Quebrando a Criptografia Wep
Parte 2: Injetando Pacotes
Parte 3: Tratando Problemas Específicos de Injeção
Parte 4: Injetando sem Clientes Conectados
Parte 5: Quebrando a Criptografia Wpa

Vamos então para a segunda parte de nosso tutorial.




Parte 2: Injetando Pacotes

Teoria

Bom, acredito que todos que estão lendo este material tenham passado pelo primeiro passo e capturado algumas centenas de IVs de suas redes de teste. Esse procedimento é demorado pois você espera o AP enviar os pacotes certos.

No entanto, conforme mostrado no post anterior, há formas de acelerarmos o processo de captura de pacotes simplesmente reenviando alguns pacotes de volta para a rede. Mas, quais pacotes?

Bom, isso é simples. Se você analisar os protocolos de rede (IGMP, ARP), verá que alguns têm tamanhos fixos. Isso permite que, mesmo que o pacote chegue criptografado, saibamos que ele é um pacote de determinado protocolo. No caso, os pacotes usados são os pacotes do protocolo ARP.

O que é o protocolo ARP? O ARP é um protocolo de resolução de endereços de rede que converte um endereço IP (como 8.8.8.8) para o endereço físico da placa de rede associada (00:ff:2a:5c:1f:63) e, caso este ip não esteja presente naquela rede.

Mas porque usar ARP e não todos os pacotes que podem ser intuídos pelo tamanho? Por uma simples questão: o AP responde um pacote ARP com outro. Ou seja, se você enviar milhares de pacotes ARP para o AP, ele responderá cada um dos pacotes, e cada pacote virá com um IV que pode ser útil para a obtenção da chave. Para outros pacotes o AP simplesmente não responde. Então, vamos pra prática agora.

Comentário: Em criptografia, um vetor de inicialização (IV) é um bloco de bits necessário para permitir que uma cifra de fluxo ou de bloco seja executada para produzir um fluxo único independente de outros fluxos produzidos pela mesma chave criptográfica, sem ter que passar por um processo (normalmente demorado) de encriptação.

Prática

A injeção de pacotes não funciona com todas as placas de rede sem fio. Somente algumas placas possuem drivers que suportam injeção completa. Para averiguar se sua placa suporta injeção, você pode conferir o site do Aircrack-ng e verificar se a sua está na lista.

O Backtrack possui em sua base de drivers e firmware todos os drivers que suportam injeção de pacotes para as placas listadas no site do Aircrack-ng. Se a sua placa não se encontra listada, pode ser que ela não suporte injeção e só com um teste de injeção você poderá realmente saber se ela conseguirá injetar ou não.

Teste de Injeção de Pacotes

Nem sempre a injeção de pacotes é bem sucedida. Vários fatores podem influenciar na injeção como proximidade, qualidade do sinal, quantidade de clientes conectados, o próprio driver da placa que não suporta injeção, etc. Então, antes de iniciarmos a injeção, é interessante fazermos um teste para saber se teremos sucesso na injeção de pacotes em um determinado AP.

aireplay-ng -9 -e [SSID] -a [BSSID] wlan0


Onde:
-9 indica que estamos executando o teste de injeção
-e [SSID] o nome da rede que queremos injetar
-a [BSSID] o MAC do Access Point

Depois de rodar esse comando, será dada a seguinte saída:

09:23:35 Waiting for beacon frame (BSSID: 00:14:6C:7E:40:80) on channel 9
09:23:35 Trying broadcast probe requests...
09:23:35 Injection is working!
09:23:37 Found 1 AP

09:23:37 Trying directed probe requests...
09:23:37 00:14:6C:7E:40:80 - channel: 9 - 'teddy'
09:23:39 Ping (min/avg/max): 1.827ms/68.145ms/111.610ms Power: 33.73
09:23:39 30/30: 100%


Levando-se em conta que a rede se chama teddy, seu MAC é 00:14:6C:7E:40:80 e está transmitindo no canal 9.

A última linha indica o percentual de pacotes que foram injetados com sucesso. Valores abaixo de 100% normalmente indicam que você deve se aproximar mais (ou se afastar, em alguns casos) do AP para que a injeção funcione normalmente. Caso não haja pacotes indetados, isso indica que os drivers atuais da sua placa de rede não suportam injeção.

Daqui para frente, vamos assumir que sua placa injeta pacotes e que você conseguiu uma boa posição de injeção. Caso você não tenha conseguido injetar, sugiro procurar drivers que suportam ou utilizar outra placa de rede que suporte injeção.

Falsificando uma autenticação ao Access Point

Para que a nossa injeção tenha sucesso, é necessário que o MAC fonte que estejamos a usar esteja associado à rede. Se o MAC que você está usando para injetar não estiver associado ao AP, então o AP irá simplesmente ignorar os pacotes e irá enviar de volta um pacote "DeAutenthication", em texto puro. Neste caso, nenhum IV é gerado porque o AP estará ignorando todos os pacotes.

AVISO: A não associação ao AP é a principal causa pela qual a injeção costuma falhar. Lembre-se da regra de ouro: O MAC que você vai usar para injetar pacotes precisa estar conectado à rede, ou você deverá falsificar uma autenticação.

Para falsificar a associação ao Access Point, você pode usar o seguinte comando:

aireplay-ng -1 0 -e [SSID] -a [BSSID] -h [MAC da Placa] wlan0


Onde:
-1 indica que faremos uma falsificação de autenticação
0 o tempo em segundos para fazer novamente uma reassociação
-e [SSID] o nome da rede sem fio
-a [BSSID] o MAC da rede sem fio
-h [MAC da placa] o MAC da placa de rede

Uma autenticação de sucesso ocorre quando a seguinte saída é fornecida:

18:18:20 Sending Authentication Request
18:18:20 Authentication successful
18:18:20 Sending Association Request
18:18:20 Association successful :-)


Em alguns APs, esse comando pode não funcionar, pelo tempo de reassociação ser zero. Para estes, o comando é um pouco diferente:

aireplay-ng -1 5000 -o 1 -q 10 -e [SSID] -a [BSSID] -h [MAC da placa] wlan0


Onde:
5000 indica que a reautenticação deverá acontecer a cada 5 mil segundos. O longo período faz com que pacotes para manter a conexão ativa sejam enviados.

Neste caso, a saída se parecerá com isto:

18:22:32 Sending Authentication Request
18:22:32 Authentication successful
18:22:32 Sending Association Request
18:22:32 Association successful :-)
18:22:42 Sending keep-alive packet
18:22:52 Sending keep-alive packet


Caso a autenticação não dê certo, a saída será parecida com esta:

18:28:02 Sending Authentication Request
18:28:02 Authentication successful
18:28:02 Sending Association Request
18:28:02 Association successful :-)
18:28:02 Got a deauthentication packet!
18:28:05 Sending Authentication Request
18:28:05 Authentication successful
18:28:05 Sending Association Request
18:28:10 Sending Authentication Request


Note o "Got a deauthentication packet!" e as tentativas seguintes. Só prossiga para o próximo passo caso você consiga se autenticar.

Dica: Alguns APs estão configurados com filtragem por MAC, o que significa que a autenticação não irá funcionar a não ser que você conheça um MAC válido que usa esta rede.

Iniciando a injeção com o Aireplay-ng no modo ARP request replay mode

Agora que você conseguiu se autenticar no AP, é hora de começar a injeção de pacotes. Como citado anteriormente, o propósito da injeção é reenviar pacotes ARP para o AP para que ele os reenvie de volta, trazendo novos IVs, que serão capturados pelo airodump-ng.

No terminal, execute o seguinte comando:

aireplay-ng -3 -b [BSSID] -h [MAC da placa] wlan0


Onde:
-3 indica que estamos querendo injetar pacotes
-b [BSSID] o MAC da rede sem fio
-h [MAC da placa] o MAC da placa de rede

Imediatamente, o Aireplay-ng passa a esperar por um pacote do tipo ARP Request e quando ele encontrar um, irá começar e injetá-lo na rede imediatamente.

Quando a injeção está funcionando perfeitamente, é assim que aparece no terminal:

Saving ARP requests in replay_arp-0321-191525.cap
You should also start airodump-ng to capture replies.
Read 753879 packets (got 324353 ARP requests), sent 158991 packets...


Isto confirma que estamos realmente injetando pacotes. A quantidade de IVs capturados pelo Airodump irá crescer rapidamente. Dependendo da rede, serão gerados em torno de 300 a 400 IVs, mas isso pode variar desde taxas como 100 a 600 por segundo.

Gerando pacotes ARP de teste

Como estamos testando em um AP nosso, de testes, é possível gerar pacotes ARP simplesmente se conectando com outro computador na rede sem fio e, por exemplo, pingar um endereço IP inexistente. Isso por si só já gerará uma quantidade de requisições ARP suficiente para nosso tutorial.

Prováveis problemas

Se você receber uma mensagem "Got a deauth/disassoc packet. Is the source mac associated?", isto significa que você foi desassociado da rede. A partir desse momento, todos os pacotes injetados serão ignorados. Quando isso ocorrer, você deve voltar e começar com a falsificação da injeção novamente.

Conclusão

A injeção de pacotes não é algo difícil de se fazer. No entanto, você deve tomar certos cuidados em relação a autenticação pois como citado no começo, a maioria dos problemas que ocorrem, ocorrem porque a autenticação não foi feita corretamente, já que a injeção só funciona se a autenticação tenha sido feita com sucesso.