Home🏡

CLARO_NzA3NzZF

“💻 🤝 🛜 > 🔑“

Já adianto que essa falha é conhecida tem pelo menos uns 7~8 anos de acordo com alguns repositórios que encontrei no Github. Minha ideia neste post é demonstrar como foi o meu processo de entendimento e exploração da falha.


Uns 2 anos atrás eu estava fazendo um teste com um adaptador wifi (Alfa AWUS036NH) e acabei encontrando um padrão entre o BSSID (Mac Address) de uma rede wifi, com o ESSID (Nome da rede wifi) e a senha da rede.

Analisando esta imagem que peguei da internet, tente dar uma olhada em todas as informações e veja se você consegue encontrar alguns padrões peculiares.

alt

Doidera, né!?

Rede: CLARO_2G584D19
Senha: 67584D19

Usuário do Roteador: CLARO_584D19
Senha do Roteador: B4F267584D19

Se você tiver uma placa de rede ou adaptador de rede que suporta o modo de monitoramento, você consegue monitorar os pacotes que as redes wifi enviam e assim ter acesso aos seus respectivos BSSIDS e nome da Rede, basicamente com isso você consegue invadir a rede wifi e ainda por cima acessar o roteador.

Na imagem ele mostra o CM MAC e o EMTA MAC, em resumo o CM MAC é o mac address usado para conexão com a internet e o EMTA MAC é o mac address usado pra VOIP, isso se o roteador suportar essa funcionalidade.


Tendo essas informações em mãos, vamos a campo para validar a teoria. O adaptador de rede que eu uso é este aqui, e a posição ideal pra capturar mais redes da CLARO e NET foi pendurando ele na grade de proteção da janela kk

No meu caso, eu tentei utilizar o adaptador com várias distros do linux pelo WSL mas infelizmente não rolou. A única forma que consegui foi criando uma máquina virtual pelo VMWare, no caso escolhi o Kali por já vir com uma porrada de ferramentas.

Depois de instalar os drivers do adaptador e tudo estiver rodando. Ele aparecerá mais ou menos assim:

Depois precisamos setar o adaptador para o modo de monitoramento, para isso vamos usar a ferramenta airmon:

Notem que agora o adaptador mudou para wlan0mon e o Mode mudou para Monitor.

O próximo passo é começar a listar as redes wifi próximas, onde vamos associar o BSSID (Mac Address) com o nome da rede. Para ficar mais fácil a listagem, vamos usar o airodump e utilizar um regex simples como filtro:

sudo airodump-ng wlan0mon --essid-regex (CLARO_|NET_)

alt text

Escondi o nome de algumas redes que possuem nomes de pessoas reais.

A rede que vou usar no teste é a CLARO_2G290F5C por conta da quantidade de Beacons que a rede está enviando. Entenda Beacon como pacotes que o access point fica enviando periodicamente (a cada 100ms) pelo ar, para que quando você abra seu celular e procure um wifi, essa rede apareça na tela de listagem de redes.

O próximo passo é tentar capturar o handshake ou PMKID, primeiro vou demonstrar utilizando o handshake e no final um exemplo com o PMKID.


De forma resumida, sempre que nos conectamos com uma rede wifi, rola um handshake de 4 vias.

  1. O access point (rede wifi) envia para o client (dispositivo) um número aleatório chamado ANonce.
  2. O client gera um número aleatório chamado SNonce e calcula o PTK (Pair Transient Key) usando o PMK (Pairwise Master Key) e os endereços MAC do client e do access point e depois envia o SNonce para o access point.
PMK = PBKDF2-HMAC-SHA1(senha_wifi + SSID, 4096 iterações) #lembrando que SSID é o nome da rede
PTK = PRF-512(PMK + ANonce + SNonce + MAC_AP + MAC_Client)
  1. O access point, agora tem o SNonce, gera o PTK da mesma forma que o client gerou e envia uma mensagem criptografada para o client para confirmar.
  2. O client confirma que recebeu a mensagem e a comunicação com a rede wifi é feita.

Continuando a utilizar os componentes do aircrack, com o airodump nós conseguimos "escutar" as conexões com esse access point e utilizando o aireplay, conseguimos forçar a desautenticação dos clients conectados nesse access point e assim forçar eles a logarem novamente na rede, nesse processo nós conseguimos capturar esse handshake de 4 vias.

E nesse handshake, nós capturamos o ANonce, SNonce e os MACs do client e access point. Dessa forma, conseguimos usar posteriormente uma outra ferramenta que fará a força bruta utilizando uma lista de senhas nessa formula que passei acima.

Então sempre que ele gerar um PTK, ele irá comparar com uma informação criptografada no arquivo do handshake chamada MIC, se essa hash bater com o MIC então a senha está correta. A pessoa que descobriu isso é gênio demais, agradeço por poder replicar de forma mínima o que ele/eles descobriu.


sudo airodump-ng -w capture -c 1 --bssid A0:FF:70:29:0F:60 wlan0mon

alt text alt text

O handshake só irá aparecer quando algum client logar na rede, nesse print eu tive sorte de ter esquecido o comando de deauth rodando antes de começar a capturar os pacotes da rede. Assim quando eu comecei a ler os pacotes um usuário logou na rede pois tinha caído antes.

Agora que temos o handshake capturado (foi criado um arquivo chamado capture-01.cap), vamos gerar uma wordlist para trabalharmos. De acordo com a imagem que vimos lá no começo, a senha será os ultimos 8 caracteres do MAC Address do access point. Porém no caso desse modelo do roteador, notei que o nome da rede CLARO_2G290F5C possui os dois ultimos caracteres diferentes do MAC A0:FF:70:29:0F:60.

Eu presumo que talvez, para essa versão do roteador eles tentaram "resolver" essa questão do nome e senha padrão ter relação direta com o MAC. Porém se for isso, falharam. Basicamente aqui eu gerei a wordlist seguindo o padrão do nome da rede.


Para gerar a wordlist, eu sempre utilizo a ferramente chamada Crunch. O comando que utilizei foi:

alt text

alt text

No comando, eu digo que quero gerar uma senha de tamanho mínimo e máximo de 8 caracteres, utilizando o alfabeto e números de 0 à 9 com o seguinte padrão: @@290F5C. Onde existe o @@ serão substituidos por números e letras aleatórios. Eu configurei dessa forma, pois após analisar algumas senhas padrão de roteadores da Claro, vi que são sempre 8 caracteres sendo que são os ultimos 6 do nome da rede e em alguns casos são os ultimos 8 caracteres do MAC Address.

Com a wordlist pronta, agora basta utilizarmos o aircrack para fazer todo aquele processo de geração da hash do PTK e fazer a comparação com o MIC do handshake.

alt text

E chegamos na senha da rede. E sim, boa parte dela está no próprio MAC Address do access point.


Agora um resuminho sobre a técnica do PMKID. O PMKID é um identificador que podemos capturar em um handshake e podemos usar para tentar fazer o cracking da senha da rede sem precisar do handshake de 4 vias.

Quando um dispositivo tenta se conectar a uma rede, o access point envia de forma criptografada para o client o PMKID que possui a seguinte função:

PMKID = HMAC-SHA1(PMK + "PMK Name" + MAC_AP + MAC_cliente)

Ou seja, de certa forma é uma técnica mais rápida e simples porém o tipo de ponto de acesso, configuração da rede, capacidade do roteador e até o ambiente de monitoramento podem influenciar se você vai conseguir capturar ou não. Abaixo vou apresentar um ambiente de sucesso que consegui.

alt text

Diferente do caso do handshake, nós temos que converter o arquivo .cap para .pcap, para isso usamos o editcap.

alt text

A partir disso, usamos a ferramenta hcxpcapngtool para gerar um arquivo no formato hc22000. Esse formato é necessário pois ele é gerado de forma estruturada para o ataque de força bruta, o hcxpcapngtool já elimina informações desnecessárias do arquivo e estrutura os dados que serão usados no ataque de forma que otimiza os testes.

alt text

Após a geração do arquivo, utilizei o hashcat pra fazer o cracking

alt text

Notem que a rede é diferente dos outros prints, por falha minha eu perdi a posição que o adaptador estava e eu perdi a conexão com a rede antiga, ai precisei procurar outras redes, testar todas elas para esse caso do PMKID. Mas em resumo os passos são os mesmos.


Voltando para a primeira rede que descobrimos a senha. Agora vamos testar se o login e senha do roteador também segue esse mesmo padrão.

alt text

Fiz o teste seguindo o padrão da imagem lá do começo:

  • Login: CLARO_(6 caracteres do MAC)
  • Senha: MAC Address
 user: CLARO_290F60
 pass: A0FF70290F60

E não funcionou, porém eu só alterei os 2 ultimos caracteres seguindo o padrão do nome da rede e bum.

 user: CLARO_290F5C
 pass: A0FF70290F5C

alt text


Fica a dica pra quem não trocou a senha padrão :)

Repositórios que encontrei falando sobre o mesmo assunto: