terça-feira, 10 de setembro de 2013

Quebrando redes sem fio: WPA/WPA2

Este material é um complemento ao material de quebra de redes sem fio, cuja primeira parte referia-se às redes WEP. Nesse post inclusive, partiremos diretamente para a quebra de protocolo propriamente dita, uma vez que os procedimentos para ativar a interface de monitoramento e spoofar o MAC Address dessa interface podem ser vistos no primeiro artigo.

O WPA (Wifi Protected Access ou Acesso Protegido de Redes Sem Fio) usa o algoritmo de criptografia TKIP (Temporal Key Integrity Protocol ou Protocolo de Integridade de Chave Temporária), que foi desenvolvido para aprimorar o protocolo WEP (Wired Equivalent Privacy) sem a necessidade de aquisição de um hardware totalmente novo para rodá-lo. Já o WPA2 usa o algoritmo de encriptação AES-CCMP (Advanced Encryption Standard - Counter Mode with Cipher Block Chaining Message Authentication Code Protocol ou Padrão de Encriptação Avançada - Modo de Contagem com Protocolo de Código de Autenticação de Mensagem CBC), que é muito mais poderoso e robusto que o TKIP e precisa de hardware específico. Ambos os mecanismos permitem autenticação baseada em EAP (Extensible Authentication Protocol ou Protocolo de Autenticação Extensível), utilizando um esquema de autenticação de servidores Radius (Enterprise) ou uma PSK (Pre-Shared Key ou Chave Pré Compartilhada). Nesse post discutiremos sobre a chave PSK.

O WPA/WPA2 PSK é vulnerável a ataques de dicionário, diferentemente do WEP que é suscetível a ataques de força bruta. A grosso modo, numa comunicação através do WPA uma combinação de "Passprhase" (frase-senha) e SSID são enviados através do PBKDF2 (Password Based Key Derivation Function ou Função de Derivação da Chave Baseada em Senha), onde a saída dessa combinação é a Pre-Shared Key 256 bits (ou chave compartilhada de 256-bits).


Para a autenticação são utilizados os seguintes parâmetros:
  • chave pré-compartilhada.
  • SSID da rede.
  • Anúncio do autenticador (Authenticator Nounce).
  • Anúncio do suplicante (Supplicant Nounce).
  • MAC Address do Autenticador (Authenticator MAC Address ou Access Point MAC).
  • MAC Address do Suplicante (Supplicant MAC Address ou Wi-fi Client MAC).

A combinação desses parâmetros irá gerar as chaves transitórias PTK (Pairwise Transient Key). A chave transitória PTK será então utilizada para verificar o MIC (Message Integrity Check ou Checagem de Integridade da Mensagem). Se a combinação bater, então a chave pré-compartilhada estava correta e o cliente será autenticado, caso contrário não.

Sniffando a rede, o único parâmetro que um atacante não consegue obter é a chave pré-compartilhada (pois não tem a passphrase para compô-la). Entretanto o SSID da rede, o anúncio do autenticador, o anúncio do suplicante, o MAC Address do autenticador e o MAC Address do suplicante podem ser obtidos sniffando-se a rede. Por isso realiza-se o ataque de dicionário, pois é a única maneira de gerar chaves pré-compartilhadas para tentar gerar PTKs que passem na checagem de integridade (MIC).  Dessa maneira, cada palavra no arquivo de dicionário será utilizada para a geração de uma chave que será testada contra o protocolo de autenticação. Logo, a qualidade do seu arquivo de dicionário é uma peça fundamental nesse tipo de ataque, uma vez que a senha deverá estar contida nele. Irrelevante dizer que o sucesso desse ataque, depende exclusivamente da qualidade da senha configurada na rede sem fio.
 

Muitos dos utilitários para ataques de dicionário  permitem que você especifique arquivos de dicionários de terceiros chamadas "wordlists", que você cria ou baixa da Internet. Aqui segue uma lista com alguns sites populares onde você pode baixar diversas wordlists:

ftp://ftp.cerias.purdue.edu/pub/dict
ftp://ftp.ox.ac.uk/pub/wordlists
http://packetstormsecurity.nl/Crackers/wordlists
http://www.outpost9.com/files/WordLists.html
http://rs159.rapidshare.com/files/184075601/BlackKnightList.rar
http://wordlist.sourceforge.net/

Note que estas listas estão todas em inglês, portanto é imprescindível que você procure por listas que utilizam palavras da língua portuguesa também bem como em outros idiomas (italiano, espanhol, "Klingon" ;o) e etc).

Uma outra possibilidade é utilizar programas que criam wordlists "personalizadas", como o "Cupp". O Cupp é uma ferramenta que roda em Python e já vem junto com o BT5. Para rodá-lo, você abre um terminal, entra no diretório "/pentest/passwords/cupp" e digita "./cupp.py" (sem as aspas).

Para gerar uma wordlist digite "./cupp.py -i". Ao rodar o programa, ele fará perguntas sobre a vítima como nome, sobrenome, apelido e data de nascimento do alvo, da esposa e do seu filho(a). O programa também pergunta o nome do animal de estimação do alvo e a empresa onde trabalha. É possível escolher se serão adicionadas algumas informações aleatórias sobre a vítima (aqui é possível inserir nomes de agremiações esportivas, ou outras palavras que são comumente associadas ao alvo, por exemplo), se é preciso adicionar números aleatórios ao final das palavras, entre outras opções.
Após fornecidas as informações sobre o usuário, será criada uma wordlist específica, personalizada para ele. No exemplo acima, apenas inserindo informações sobre a vítima, sem gerar caracteres aleatórios, foi criado um arquivo com 3400 palavras. Para exemplificarmos melhor o risco que é utilizar senhas inseguras, com nomes de familiares, datas de aniversário e etc, vamos supor que o nosso alvo chama-se "Francisco", é casado com a "Paula" e ambos têm um filho chamado "Guilherme" que nasceu em 01/02/2012. Como Francisco não tem muito conhecimento sobre como criar senhas fortes, ele cadastrou a senha da rede wifi como "Gu1lh3rm32012" (que é apenas Guilherme 2012, trocando-se alguns caracteres numéricos por letras).

Para esse cenário precisaremos de:
- um roteador wi-fi configurado com o protocolo WPA ou WPA2. 


- um computador/laptop com interface de rede sem fio, rodando o Linux BackTrack.
- um cliente legítimo conectado a esse roteador;

Uma vez que o BackTrack 5 já está bootado e com um adaptador sem fio funcional, vamos ao ataque ;)

Vamos utilizar o "airodump-ng" na interface "mon0" para verificar as redes disponíveis:

- airodump-ng mon0


A exemplo do ataque WEP, utilizaremos o airodump-ng para sniffar o tráfego da rede wi-fi:

airodump-ng –c 9 –w CENARIO_WPA2 --bssid 00:1E:58:C3:2C:35 mon0 (lembrando que serão criados arquivos CENARIO_WPA2*)

Também como no cenário WEP, precisamos de um cliente conectado ao AP. Podemos esperar uma nova conexão ou forçar uma reconexão com um pacote de de-autenticação de broadcast, forçando os clientes atuais a se reconectarem.

- aireplay-ng -0 5 -a 00:1E:58:C3:2C:35 mon0


Tão logo conseguimos capturar o WPA Handshake, podemos finalizar a captura.


O próximo passo é tentar quebrar a o arquivo capturado, sempre lembrando que, a eficiência do ataque depende absolutamente do arquivo de dicionário utilizado. O Backtrack fornece um arquivo padrão (darkc0de.lst), mas é possível que ele seja insuficiente, principalmente porque questões regionais sempre devem ser levadas em consideração. O ideal é sempre procurarmos uma wordlist da região onde nos encontramos. Como o nosso caso é realizar um ataque personalizado, utilizaremos o arquivo "francisco.txt" que foi gerado com o "cupp".

De posse da wordlist, podemos tentar quebrar o arquivo com o aricrack-ng:

aircrack-ng CENARIO_WPA2-01.cap –w /root/francisco.txt


Veja na imagem acima que a wordlist personalizada funcionou neste caso, encontrando a senha: Gu1lh3rm32012

Da mesma maneira que o WEP, se for necessário decriptografar os pacotes de dados capturados anteriormente, podemos utilizar o comando "airdecap-ng":

airdecap-ng –p Gu1lh3rm32012 CENARIOWPA2-01.cap –e “CENARIO_WPA2”

O arquivo resultante CENARIO_WPA2-01-dec.cap, poderá ser aberto com o Wireshark ou outro sniffer.




Apesar de todo o procedimento aqui explicado ser amplamente difundido Internet afora, é sempre bom reforçar o caráter educacional desse post e recomendar o uso de todo e qualquer conhecimento, tanto obtido nesse artigo como em outras postagens, com responsabilidade. Não invada redes alheias e muito cuidado, até porque você nunca sabe quem pode estar do outro lado.

Importante ressaltar que, a vítima nesse cenário, apesar de usar uma senha relativamente forte (com 13 caracteres maiúsculos, minúsculos e números, faltando apenas algum símbolo), esqueceu-se de uma regra básica para a criação de senhas: jamais utilizar nomes de parentescos, datas de aniversários etc, nem mesmo combinadas, pois programas como o "Cupp", servem justamente para esse tipo de situação. Se o cenário fosse sobre uma quebra de senha por força bruta, segundo o site "How Secure is my Password" contabiliza, precisaríamos de 1 milhão de anos para quebrar essa senha utilizando o poder de processamento de um computador desktop comum (e veja que o site ainda sugere que sejam inseridos símbolos nessa senha).


Porém como esse foi um ataque de dicionário, e o usuário utilizava uma senha fraca, a quebra aconteceu em poucos minutos. Conscientize-se e crie senhas fortes. O WPA2 permite senhas de até 63 caracteres ASCII, se for necessário, utilize-os.


Bons estudos.

P.S.: No segundo parágrafo, como eram muitas referências a serem feitas e o objetivo do post não era fornecer documentação sobre cada protocolo específico e sim mostrar a quebra do WPA, foram utilizados diversos links que apontam apenas para a Wikipedia. Sugiro que você procure por fontes adicionais caso você queira se aprofundar em algum desses protocolos e não permaneça numa única fonte. 

t+
Cristiano
"A grandeza não consiste em receber honras, mas em merecê-las." - Aristóteles

Nenhum comentário:

Related Posts Plugin for WordPress, Blogger...