Desenvolvimento

22 mar, 2017

Quebrando a banca com força bruta!

Publicidade

Já parou pra pensar que hoje em dia ainda utilizam funcionalmente a técnica de brute-force? Dentre outros, um fator é causa de sucesso: um bom dicionário de palavras e uma vítima bem previsível. E vale a pena citar outro fator, a quebra offline que utiliza processamento da placa de vídeo em computadores com HD’s SSD usando uma rainbow table como dicionário… Mas isso é papo para outro dia.

Dando sequência à Semana da Segurança CS, hoje vamos tratar de uma parte fundamental nesse tipo de abordagem: a criação de um dicionário para ataque a um alvo previsível.

A ideia

O brute-force – ou força bruta – é uma abordagem exaustiva de tentativas e erros em busca de uma correspondência positiva, que às vezes até termina sem correspondência.

De posse de uma coleção – pode ser de nomes, números, letras aleatórias, cores, posições ou qualquer outra coisa combinável ou permutável – o indivíduo busca, tentando cada elemento da coleção, um retorno positivo como adivinhar a senha de uma credencial desconhecida, acessar uma pasta oculta em um endereço da web etc.

Para ter algum sucesso, precisaremos de uma boa wordlist (ou dicionário de palavras), que será nossa coleção de correspondências. Geralmente as pessoas se valem de alguma já pronta para uso, porém isso pode comprometer um tempo precioso até achar a correspondência, sendo necessário, então, elaborar uma para o nosso escopo.

Para a elaboração da wordlist, podemos gerar combinações aleatórias, permutar elementos conhecidos, coletar elementos  dentro de um contexto para combinação ou permutação ou combinar tudo isso.

A coleta dentro de um contexto seria o profiling, isto é, montamos uma lista de correspondências com base no perfil do alvo, como por exemplo uma lista de hobbies de uma pessoa – existe uma grande chance de uma senha dessa pessoa ser uma palavra relacionada ao hobbie.

Vejamos agora como criar nossa wordlist, com estilo.

Ferramentas para gerar uma wordlist

1. Crunch

É um gerador de wordlist com base no conjunto de símbolos especificados para sua execução, com o qual é possível obter todas as combinações possíveis do conjunto fornecido.

Em outras palavras, é um algoritmo de força bruta baseado em conjunto de caracteres. E você pode obter uma cópia do programa em https://sourceforge.net/projects/crunch-wordlist/.

Como exemplo de uso, execute o comando:

./crunch 5 5 12345 -o numbers.txt

e veja o crunch gerar sequências de tamanho mínimo e máximo igual a 5 combinando os símbolos 12345 e armazenando tudo em um arquivo numbers.txt, respectivamente.

2. Cewl

Escrito em Ruby, CeWL realiza spidering (indexação) em um site e retorna uma lista de palavras que podem ser usadas em quebra de senhas. O que este programa faz é vasculhar todas as palavras de um dado site até uma determinada profundidade de sublinks e montar uma lista customizada. Você pode obter uma cópia do programa aqui.

Vamos ver um exemplo. Execute o comando:

./cewl.rb --depth 0 --min_word 8 --write amor.txt --verbose http://www.thesaurus.com/browse/love

Aqui não vamos visitar nenhum sublink, vamos pegar palavras de tamanho mínimo 8 e enviar para um arquivo amor.txt, respectivamente.

3. Who’s Your Daddy – WYD

Legado, escrito em Perl, WYD objetiva o profiling de senhas com base em diferentes tipos de arquivos, incluindo áudios, para gerar uma wordlist. O programa pode ser obtido aqui.

Vamos ver um exemplo prático. Digite o comando:

./wyd.pl -o test.txt -s 8 -b -e -v testfiles/

Aqui, vamos obter um arquivo test.txt contendo palavras de até 8 letras, desabilitando a remoção de letras non-alpha do começo e fim das palavras contidas no diretório testfiles – o programa fornece esse diretório para teste junto com o script.

4. Common User Passwords Profile – CUPP

Dessa vez em Python, o CUPP cria wordlists a partir de um repositório de perguntas interativas ou a partir dos resultados do WYD, citado anteriormente. E, para alegria da comunidade de desenvolvedores, essa ferramenta está disponível para download pelo GitHub aqui. Vamos experimentar o modo interativo:

./cupp.py -i

Um pedaço da lista mariana.txt gerada:

Quer sujar as mãos?

Carregados de palavras, podemos escolher hoje o que tentaremos conquistar. Com sorte, o objeto da abordagem terá uma correspondência previsível dentro de seu contexto, e se isso ocorrer então o tempo até encontrar essa correspondência será relativamente curto se afunilarmos a probabilidade da nossa coleção.

Enfim, para alimentar a criatividade, vou mencionar alguns casos de uso e suas respectivas ferramentas, assim você já pode estudar situações que precisam de uma wordlist:

  • Reversão de hashes com John the Ripper;
  • Autenticação indevida com SSH em servidores usando Hydra;
  • Criptoanálise de WPA-PSK, ou seja, descobrindo a senha do seu roteador, com a suíte do Aircrack-ng;
  • Localizar pastas ou arquivos ocultos em sites com Dirb;
  • Quebrar senhas em arquivos com esteganografia (gerados por JSteg-Shell, JPHide ou OutGuess 0.13b) com Stegbreak.

Lembrem-se de usar os conhecimentos adquiridos aqui para fins legais, nos dois aspectos da palavra. =) E é isso! Espero que tenham gostado e, por favor, cuidem de suas senhas!

Dica: porque não utilizam diceware para gerar novas senhas hoje mesmo?

Ficou alguma dúvida ou tem alguma contribuição? Aproveite os campos abaixo!

***

Artigo originalmente publicado em: http://www.concretesolutions.com.br/2017/03/17/quebrando-a-banca-com-forca-bruta/