A importância de uma senha segura em redes Wi-Fi
Atualmente, redes Wi-Fi fazem parte de nossas vidas onde quer que seja. Em casa, no trabalho, em shopping centers ou até mesmo redes abertas pela cidade, e com toda essa praticidade ao alcance, às vezes não nos preocupamos com a segurança dessas redes. Todos nós sabemos da importância de uma senha segura em redes domésticas, porém, em redes corporativas essa importância deve ser dobrada. Ao fornecer Wi-Fi para colaboradores, visitantes ou até mesmo para uso interno de equipamentos, a senha do Wi-Fi deve ser analisada com muita atenção.
Durante os últimos meses pude observar um padrão nos dispositivos Wi-Fi fornecidos pelas operadoras de internet Ultrawave e Vivo e alguns roteadores da marca TP-Link. A senha fornecida por padrão está diretamente relacionada ao nome da rede Wi-Fi e é sabendo dessa informação que começamos a identificar a facilidade em descobrir essa senha padrão. Logo, a senha deste aparelho que você utiliza em casa ou em sua empresa pode ser facilmente decifrada por alguém mal intencionado.
As senhas de conexões Wi-Fi são criptografadas usando o algoritmo WPA/WPA2 que são sim um modo seguro de criptografia desde que seja usada uma senha que inviabilize o modo de ataque de força bruta, ou brute force, que é um modo de descobrir senhas baseadas em comparação e tentativa. Quando uma senha é criptografada de algum modo por um serviço, é gerado um hash e é esse hash que é armazenado em algum banco de dados. Quando tentamos acessar novamente o serviço, o sistema criptografa novamente essa senha e a compara com o banco de dados para verificar se o hash da senha informada é idêntico ao que está salvo em seu banco de dados. Todos os tipos de criptografias estão sujeitas ao brute force mas aqui irei demonstrar como esse modo é muito mais viável ao detectar padrões e o motivo de se usar senhas consideradas fortes e complexas.
Senhas como “12345678”, “123456”, “142536”, “password” são senhas que não possuem nenhuma complexidade e são consideradas senhas fáceis. Senhas que possuem uma palavra conhecida, nome ou sobrenome, que não possuem caracteres especiais também são senhas fáceis e podem levar apenas algumas horas para serem descobertas. Já as senhas complexas como “wL!0$B@3#g&l”, “pR6!&R0&”, “iy5UUevW!&” podem levar centenas de anos para serem quebradas utilizando o método de brute force, o que inviabiliza a utilização desse método. Uma senha complexa deve conter no mínimo: 8 caracteres, letras maiúsculas e minúsculas, caracteres especiais e números.
Em vazamentos de senhas nota-se uma certa quantidade de senhas iguais, senhas fáceis ou até mesmo senhas complexas, mas com isso hackers criam as chamadas wordlists. Essa lista de palavras contém o hash da senha criptografada e a senha em si, o único trabalho é automatizar para que o software compare o hash que ele precisa com o hash disponível em uma dessas listas. A internet fornece inúmeras destas listas o que torna mais fácil detectar senhas conhecidas.
Utilizando o hashcat, uma ferramenta para auxílio no brute force descrita como “o utilitário de recuperação de senha mais rápido e avançado do mundo” pelo próprio site, é possível realizar alguns comandos e preparar o hashcat para que inicie o brute force ou a análise em alguma wordlist. Para ajudar na realização de tentativas, o hashcat disponibiliza opção de utilizar o processador ou a placa de vídeo do computador. Já possuo os dados do Wi-Fi coletado, tenho o hash de comparação da senha e irei realizar o brute force via placa de vídeo pois, neste caso, levará menos tempo.
Aqui tenho alguns cenários com que posso me deparar quando realizo uma tentativa de brute force:
1º cenário: sei que a senha possui 8 caracteres mas não sei outra informação da senha então utilizo caracteres maiúsculos e minúsculos, números e caracteres especiais para tentar descobrir a senha. Este é o resultado do hashcat:
Time.Estimated: Tempo estimado para quebrar a senha é incalculável, ou como o hashcat informa, no Próximo Big Bang; Guess.Mask: Máscara usada para informar como pode ser a senha e/ou usar padrões em determinadas partes da senha. Neste caso sei apenas que ela possui 8 caracteres; Guess.Charset: Aqui informo quais letras e caracteres serão usados na tentativa de quebra de senha. Neste caso são todos pois não sei nenhuma parte da senha e cada caractere contido nessa lista passará pela máscara informada como "?1"; Guess.Queue: Quantidade de listas de caracteres usadas, neste caso, uma lista com 94 caracteres; Speed.#1: Velocidade com que o hashcat está comparando os hashes, 165 mil hashes por segundo via placa de vídeo; Recovered: Informa quando encontrar a senha ou se já encontrou alguma quando são diversas senhas; Progress: Quantos hashes foram comparados e quantas possibilidades existem. São sete quatrilhões, oitocentos e trinta e sete trilhões, quatrocentos e trinta e três bilhões, quinhentos e noventa e quatro milhões, trezentos e setenta e seis mil e novecentos e sessenta e uma possibilidades de senhas diferentes;
2º cenário: Eu sei que em roteadores, geralmente, são apenas letras maiúsculas, minúsculas e números então não preciso de caracteres especiais:
Time.Estimated: Agora temos um tempo estimado mensurável: quase 42 anos; Guess.Queue: Quantidade de listas de caracteres usadas, neste caso, uma lista mas agora com 62 caracteres; Progress: A quantidade de hashes possíveis diminuiu e temos “apenas” duzentos e dezoito trilhões, trezentos e quarenta bilhões, cento e cinco milhões, quinhentos e oitenta e quatro mil e oitocentos e noventa e seis possibilidades.
Com isso já é possível perceber a inviabilidade de um simples brute force levando em conta apenas 8 caracteres de senha sem informações relevantes, mas e se houver um padrão?
Como informado, o nome da rede disponível por padrão nos fornece algo muito importante: os 4 últimos dígitos do nome da rede são os 4 últimos dígitos da senha. Exemplos:
Sabendo que os 4 últimos dígitos da senha sempre estão ligados ao nome da rede, basta que eu descubra os 4 primeiros dígitos. Irei utilizar o hashcat mais uma vez, mas agora sabendo que são apenas números e letras e usando uma máscara para informar que precisarei apenas dos 4 primeiros dígitos pois os 4 últimos já sei quais são.
3º cenário: agora sei quais os últimos 4 dígitos da senha, que pode ter 8 caracteres e que podem ser letras maiúsculas, minúsculas e números:
Time.Estimated: Apenas 1 minuto e 27 segundos para encontrar a senha; Guess.Mask: Como observado, os 4 caracteres do nome da rede compõe os 4 últimos caracteres da senha; Progress: Agora há um valor bem menos expressivo para que o hashcat compare: duzentos e trinta e oito mil e trezentos e vinte e oito hashes;
Como visto acima, o tempo mudou drasticamente, não precisaria de mais que isso pois é um tempo extremamente curto mas tem um outro detalhe: tanto a senha quanto o nome da rede se limitam a caracteres hexadecimais maiúsculos e ao utilizar apenas eles os valores mudam ainda mais.
4º cenário: além de saber os 4 últimos caracteres da senha, agora sei também que apenas letras maiúsculas e números limitados ao sistema numérico hexadecimal, que vai de 0 a 9 e A a F, são utilizados na senha:
O tempo estimado foi de 0 segundo pois a placa de vídeo consegue comparar até 165 mil hashes por segundo mas não foi preciso testar as mais de sessenta e cinco mil e quinhentas possibilidades pois encontrou antes disso. Aqui utilizamos a máscara "?H" disponível no hashcat que informa apenas caracteres hexadecimais maiúsculos.
Existem diversas empresas e residências que utilizam roteadores com senhas fracas ou com senhas que vêm por padrão em seus roteadores e isso gera uma brecha de segurança enorme na rede. Senhas contendo o nome da empresa ou da família, apenas números, com apenas 8 caracteres são senhas que podem levar algum tempo, mas que com certeza serão facilmente descobertas por alguém que esteja realmente disposto se o conteúdo disponível naquela rede for de valor para o interessado. Empresas sempre devem ter cuidados especiais pois seus dados, em grande maioria, são delicados e podem comprometer a empresa em caso de vazamento ou criptografia dos arquivos em troca de pagamento. O melhor a ser feito é sempre trocar as senhas padrões de todos os equipamentos e sistemas, manter sempre uma senha forte que siga o padrão mínimo de 8 caracteres, letras maiúsculas e minúsculas, sempre utilizando caracteres especiais e evitando usar a mesma senha para vários serviços.
Database Consultant | Accenture Brasil
4 aExcelente artigo Murilo Aippe, coisas que passam desapercebidas no dia a dia até mesmo para quem trabalha na área de tecnologia, mas detalhes como este podem comprometer drasticamente a segurança da informação de uma empresa. Parabéns pelo estudo e explicações contidos neste artigo!
Researcher and Professor (Unesp) / Technical Research Council (IEEE Computer Society)
4 aParabéns Murilo! Sucesso para todos vocês.
Gerente de Projetos Sênior na ANEEL | CEO na Consolti® Labs e Co-Founder na PassPlan | Inovação e Inteligência da Informação
4 aÓtimo artigo, Murilo Aippe! Parabéns!
CEO Fundador
4 aEXCELENTE Murilo Aippe, parabéns, está muito completo e bem explicado!