10 de fev de 2015

Ataques de força bruta em senhas



Os ataques de força bruta são muito citados em diversos livros e cursos de segurança da informação. Acontece que esses ataques, na maioria das vezes, não são tão eficientes se forem executados as cegas. O ataque deve ser bem planejado e informações relevantes sobre a vítima devem ser coletadas. Além disso, ainda existem hardwares específicos para ataques bruteforce, como é o caso de processamento com GPU. Vamos tratar esses e mais alguns assuntos nesse post.




O QUE SÃO ATAQUES DE FORÇA BRUTA?

Esses ataques geralmente tem como objetivo, no geral, decifrar uma senha que está criptografada (Qual criptografia utilizar?) ou tentar conseguir acesso a um sistema que necessita de autenticação, seja ele online ou offline. O ataque tem como objetivo testar senhas de forma consecutiva, até acertar. Uma modalidade de ataque é quando o atacante possui uma lista de senhas, mais conhecida como wordlist.


WORDLISTS

Esse tipo de lista geralmente contém as senhas mais comuns ou um conjunto de senhas personalizadas de acordo com a vítima. Um exemplo de wordlist com as senhas mais comuns seria algo do tipo:

123456
password
minhasenha
admin
administrador
mudar123
...

Confira a lista das senhas mais utilizadas em 2014.

Agora imagine que a vítima se chama João Paulo. Uma possível wordlist personalizada para a vitima seria algo do tipo


joao123
123joao
paulo123
123paulo
joaopaulo
joaopaulo123
123joaopaulo
paulojoao
paulojoao123
123paulojoao
10031990   (Data de nascimento)
joaopaulo10031990
10031990joaopaulo
88263636   (Número do celular)
joaopaulo88263636
...

Acho que deu pra entender.
Para gerar esse tipo de wordlist existe um programa chamado crunch.
Segue aqui um link para um tutorial sobre ele.


GERANDO TODAS AS SENHAS POSSÍVEIS

Além dessas duas modalidades utilizando wordlists, também existe a opção de ataque gerando todas as senhas possíveis. A senha pode começar sendo "0" e terminar sendo "ZZZZZZZZZZ", passando por todas as possibilidades que contenham dígitos, letras minúsculas e maiúsculas e símbolos. Esse tipo de ataque é mais complicado pois exige muito poder de processamento de quem está atacando ou, além disso, muita velocidade de upload em um caso de ataque remoto.


ATAQUES LOCAIS E REMOTOS

Um caso em que seria possível realizar um ataque localmente seria o caso em que o atacante tem uma senha criptografada e deseja encontrar a senha correspondente. Nesse caso o atacante precisa de poder de processamento pois já tem a senha criptografada. O que ele necessita fazer é criptografar as senhas de uma wordlist (ou gerar todas as senhas possíveis até encontrar) e comparar estas com a senha criptografada da vítima. Nesse tipo de ataque a única limitação é o poder de processamento do atacante.

Um ataque remoto é bem mais complicado de se realizar. Existe a limitação da velocidade de upload do atacante. Além disso, diversas técnicas de segurança já são amplamente implementadas hoje em dia. Uma delas é o captcha. Por mais que existam meios de se burlar o captcha a quantidade de senhas por segundo ainda será baixa. Além disso, um firewall pode bloquear um determinado IP que faça muitas requisições por segundo.


BYPASSANDO AS LIMITAÇÕES




Entre as limitações citadas, as de ataque local podem ser resolvidas caso o atacante tenha o interesse em investir em um cluster criado especificamente para quebrar senhas. A utilização de GPUs para esse tipo de atividade aumenta monstruosamente a quantidade de senhas geradas por segundo. Se você quer entender um pouco melhor o porquê de as GPUs serem melhores para quebrar senhas, leia esta resposta do stackexchange.

Caso tenha interesse nisso é só dar uma procurada no Google algo do tipo "build gpu cluster". Como eu nunca fiz um desse, não tenho nenhum artigo para recomendar.

Existem softwares que são feitos para quebrar senhas localmente. Um exemplo é o hashcat. Esse software possui inclusive as implementações necessárias para trabalhar com diversos núcleos, possibilitando um ataque produtivo através de Processadores multicore e GPUs.

Além disso, um outro meio de se "quebrar" uma senha criptografada seria utilizando o processamento distribuído em uma botnet. Sabendo que existem botnets com MILHÕES de zumbis, o processamento de tantos computadores concentrado para quebrar senhas é uma ótima ideia.


Para contornar as limitações dos ataques remotos, como o captcha, pode-se utilizar serviços específicos para esse fim, como o Death By Captcha, um serviço que você paga por captcha quebrado. Existe uma outra técnica para identificar captchas. Algumas pessoas tentam implementar o sistema de captcha na unha e acabam cometendo alguns erros graves de segurança. Uma técnica genial foi apresentada no blog hc0der, onde o autor se aproveitou do fato de que os sons utilizados no captcha eram sempre os mesmos. Confira a técnica descrita aqui.

Levando em conta que em ataques de força bruta necessitam de uma resposta do servidor, não é possível contornar o bloqueio dos firewalls apenas utilizando técnicas de IP Spoofing. Uma maneira de contornar o bloqueio do firewall seria através de uma botnet, ou técnicas específicas em explorar falhas do firewall.

Um software bastante utilizado para ataques de força bruta remotamente é o hydra.


COMO SE PROTEGER?



Primeiramente, tente armazenar suas senhas criptografadas de forma segura. Faça todos os procedimentos necessários para não ser invadido. Mas caso seja, as senhas não podem estar em texto puro ou utilizando uma criptografia que seria facilmente quebrada em um ataque de força bruta. Por isso eu recomendo o método de criptografia bcrypt. Os ataques de força bruta se tornam ineficientes nesse tipo de criptografia pois ela se baseia justamente na quantidade de processamento necessário para gerar a senha criptografada. Esse método pode se adaptar ao tempo, pois conforme os processadores e GPUs evoluem, a variável "custo" pode ser incrementada, aumentando assim a segurança.

Você pode conferir esses dois posts sobre bcrypt:

Qual criptografia utilizar para armazenar senhas?
Como utilizar bcrypt em python?


Obs: Existem trabalhos feitos especificamente para atacar o o método bcrypt. Mas o bcrypt ainda se mostra um dos métodos mais seguros disponíveis (e acessíveis) hoje em dia.
Confira o ataque ao bcrypt aqui.


Contra ataques remotos, os captchas podem resolver boa parte do problema. Use um serviço de quem entende de segurança. Use o reCAPTCHA do Google.  Algumas regras no iptables podem bloquear ataques vindos de um mesmo IP. Já ataques de botnets são mais complicados de se proteger pois é muito complicado verificar quais requisições ao servidor são autênticas.


Espero que tenham gostado do post. Até a próxima.

Nenhum comentário:

Postar um comentário