Descobrindo senhas MD5 e SHA1 em menos de 10 minutos.

Um grande problema hoje em dia, é que muitos sistemas antigos estão com as senhas em Hash feitas por algoritmos de hash considerados inseguros, como MD5 (Message-Digest algorithm 5) e SHA1 (Secure Hash Standard em inglês), que são fáceis de descobrir com ataque de força bruta. Vou mostrar nessa Postagem como descobrir a senha em Hash/Digest, em menos de 10 minutos. Não estamos falando de Criptografia nesse artigo, esse já outro assunto.

MD5 é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Securit. Por ser um algoritmo unidirecional (one-way), foi feito para não ser transformada novamente no texto que lhe deu origem. O método de verificação é, então, feito pela comparação das duas hash (uma da mensagem original confiável e outra da mensagem recebida). Quando você define sua senha, você geralmente não recebe sua senha de texto simples em troca. Isso porque o serviço online não armazena sua senha em texto plano. Ele armazenam um valor de hash para a senha, para não ter nenhuma ideia da sua senha real. Se os dois hash são idênticos, então a transmissão é autêntica.

0_1454040321712_HASH.png

0_1454040882073_passStore.jpg

O Processo de Autenticação funciona dessa forma:
0_1454068615474_cliente e server.jpg
Digest authentication. How Digest authentication works.
Fonte: https://www.microsoft.com/mspress/books/sampchap/6429.aspx

Apesar de algumas empresas usarem funções hash segura, elas não exigem que os usuários escrevam senhas fortes, não vai adiantar muita coisa nesse caso, pós o Hacker pode montar um dicionário de senhas fracas e facilmente encontrar a senha, mesmo tendo um Hash/Digest seguro.

A figura abaixo mostra as senhas mais comuns. Geralmente o que mais vejo nos meus anos de trabalho, é a combinação do nome+123, password123, test123, teste12345, nome da empresa+ano, ou nome da empresa+123, nome+data de aniversário, número de telefone. Essas técnicas de combinações são bem usadas pelos hackers.

0_1454027977311_senhas.png

Agora vou mostrar a técnica de força bruta para quebrar a criptografia, vou usar um dos melhores programas o Hashcat, um advanced password recovery, o Hashcat tem versão pra Windows como pra Linux. No site http://www.sha1hash.com vamos criptografar a senha test1234. A ideia aqui não é fazer um tutorial, é somente demonstrar de forma simples o problema de usar uma criptografia fraca.

Segundo a OWASP Testing Guide v3 define de seguinte forma o ataque de força bruta:
" Brute-forcing consists of systematically enumerating all possible candidates for the solution and checking whether each candidate satisfies the problem’s statement. In web application testing, the problem we are going to face with the most is very often connected with the need of having a valid user account to access the inner part of the application. Therefore we are going to check different types of authentication schema and the effectiveness of different brute-force attacks. "

Na figura abaixo mostra o HashcatGUI, ele tem o modo interface gráfica como o modo Shell/CMD, uma dica cuidado com GPU options, você deve abortar o teste caso sua Placa de Vídeo esta esquentando muito, deixe menos de 85 degrees celsius, procure ver no site do fabricante qual a temperatura máxima da sua placa de vídeo é o mais aconselhado, ou deixe como padrão .
0_1454028088990_Hashcat.png

Usei o cudaHashcat binary, ele vai usar a minha placa de vídeo NVIDIA GTX 760 2GB para realizar o teste. Caso sua placa de vídeo não for NVIDIA você vai ter que baixar outro binário correspondente com sua placa.

0_1454028179841_dos.png

Em menos de 5 minutos ele encontrou a nossa senha de 8 caracteres, uma combinação de letras e números. Não foi usado nenhum dicionário de senhas aqui somente por força bruta. Existe outros tipos de ataques mais elaborados como o Ataque Híbrido, combina a força bruta com dicionário de dados.

Abrindo o arquivo texto definido no campo Output, temos os dados da nossa senha descoberta.
0_1454028312260_AAEAAQAAAAAAAAclAAAAJDAwZTZlMTJhLTFlZDgtNDdmNS05NThlLTEzMWNjNDUxMWMwYw.png

Soluções para esse problema:

  1. Usar uma função hash criptográfica segura como SHA-2 512 ou SHA-3 512, um dos melhores é o SHA-3/Keccak.

Segundo o site da HP não recomenda o uso de funções Hash MD5 e SHA1:
"Weak cryptographic hashes cannot guarantee data integrity and should not be used in security-critical contexts.
EXPLANATION
MD2, MD4, MD5, RIPEMD-160, and SHA-1 are popular cryptographic hash algorithms often used to verify the integrity of messages and other data. However, as recent cryptanalysis research has revealed fundamental weaknesses in these algorithms, they should no longer be used within security-critical contexts. "

Fonte: http://www.hpenterprisesecurity.com/vulncat/en/vulncat/dotnet/weak_cryptographic_hash.html

  1. Usar combinações forte de senha, com Letras Minúsculas+Maiúscula+ Números+Símbolos:

Na figura abaixa mostra quanto maior o número combinações(Minúsculas+Maiúscula+ Números+Símbolos) e quantidade de caracteres , maior a complexidade da sua senha. Resumindo uma senha com 10 caracteres e combinações(Minúsculas+Maiúscula+ Números+Símbolos), vai ter o número de combinações muito grande igual a 4,343884542×10¹⁹ ou seja (26+26+10+30)^10.

0_1454028481378_pass.jpg

Uma solução preventiva é forçar ou sugerir o usuário digitar uma senha forte, posso citar como referência o banco da caixa online força o usuário a digitar uma senha forte, com caracteres não repetidos em sequência.
0_1454028631872_forte.png

  1. Adicionar o salt ao código:
    “In cryptography, a salt is random data that is used as an additional input to a one-way function that “hashes” a password or passphrase. The primary function of salts is to defend against dictionary attacks versus a list of password hashes and against pre-computed rainbow table attacks.”

0_1454091276331_Hash-plus-Salt.png
fonte: https://www.wordfence.com/learn/how-passwords-work-and-cracking-passwords/
http://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right

  1. Não use interface externas pra acessar o banco de dados, como habilitar o phpMyAdmin para ter acesso externo ao banco MySQL:

O que fizemos aqui nessa postagem foi acelerar o ataque de força bruta com a nossa placa de vídeo (GPUs or graphics processing units) . Geralmente um Hacker faz isso não com uma placa de vídeo, mas com diversas GPUs o que torna o ataque mais eficiente.
No site “The WordPress Security Learning Center” fala sobre esse mesmo assunto:
It turns out that modern graphics processing hardware (GPUs or graphics processing units) is very good at hashing and can do it in parallel. Using an off-the-shelf high-end gaming graphics card you can hash passwords thousands of times faster than even the fastest CPU on the market. This has resulted in most competent hackers purchasing GPUs for password cracking or using an online GPU accelerated password cracking cluster.

Bom espero que tenham gostado, esse assunto é muito importante hoje em dia, facilmente um sistema é invadido, e os dados dos clientes são roubados e facilmente as senhas são descobertas. Falamos de Senhas mal elaboradas aqui porque o ataque de força bruta pode ser feito direto no menu de login, se não existe nenhum bloqueio ele é eficaz, neste caso é melhor montar um dicionário de senhas comuns.
No nosso caso foi um ataque direto na senha em hash, para descobrir a senha em texto. Primeiramente neste caso é preciso tem acesso a senha em hash, o Hacker primeiramente procura uma Interface externa de acesso ao banco de dados, para conseguir efetuar o login, e ter acesso a senha em hash, ou seja por meio de SQL Injection.
Esse Postagem não foi feita pra causar polêmica, mas pra conscientização que os testes de segurança são essenciais para qualquer aplicação.

Referências:

No site da microsoft abaixo podemos verificar a qualidade da nossa senha.
https://www.microsoft.com/pt-br/security/pc-security/password-checker.aspx

https://github.com/hashcat/oclHashcat

https://pt.wikipedia.org/wiki/SHA-1

https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions

http://wpengine.com/unmasked/

http://keccak.noekeon.org/

http://hashcat.net/oclhashcat/

https://hashkiller.co.uk/hashcat-gui.aspx

https://www.owasp.org/images/5/56/OWASP_Testing_Guide_v3.pdf

https://www.wordfence.com/learn/how-passwords-work-and-cracking-passwords/

Quando você fala em “algoritmos desatualizados” me dá muito medo e receio de que você não entende os níveis de criptografia de dados e pra que cada um deles serve.

A relação entre senhas fracas e “roubo e acesso indevido de dados” fica no mesmo bolo e quem não entende o assunto pode tomar conclusões erradas.


A ideia de se ter algo criptografado é que você possa descriptografar para usar o dado mais tarde.

O MD5 é meio que uma função criptográfica de uma mão única… não existe uma forma documentada" de se conseguir de volta o que gerou a HASH MD5.
Ataque de força bruta são “eficazes” para md5 pois vc vai gerando HASHs das combinações e comparando com o que você já tem…

MD5 é padrão para checagem de consistência de arquivos (md5sum) (usado em p2p)

Já outras formas de criptografia como blowfish requerem uma chave para criptografar e descriptografar … ou seja… mesmo que a senha do amigo seja 123mudar, sem saber a chave você não consegue saber qual era a senha.


Fica a dica para melhorar o artigo.

@Leonardo-Galani O que você falou é verdade, a intenção é falar de forma simples, não entrar em dados técnicos, mas vou dar uma melhorada sim, ficar bem evidente o que desejo passar.

@Leonardo-Galani Galani existe pesquisas documentada de "How to Break MD5 and Other Hash Functions"
http://merlot.usc.edu/csac-f06/papers/Wang05a.pdf

Leia na Wikipedia Attacks, tem várias matérias sobre o assunto, não sou especialista em Cryptanalysis pra afirmar, mas existe vários artigos publicados.
https://en.wikipedia.org/wiki/SHA-1

@ReinaldoMateus é vc que tá deletando seus próprios comentários ou é falha do AT? Não era mais fácil editar um comentário?

-3

@stefanteixeira disse:

@ReinaldoMateus é vc que tá deletando seus próprios comentários ou é falha do AT? Não era mais fácil editar um comentário?

responder

Stefan esses comentários é somente sobre mudar alguns conteúdos do texto, que foi acrescentado, como o leonardo sugeriu como melhoria, não tem sentido ficar aí.

@ReinaldoMateus - Olha, acho bem interessante manter os comentários, uma vez que fica muito estranho esses “buracos” no histórico do post.

Patrícia Gonçalves

-3

@Patrícia-Araújo-Gonçalves Eu acho que fica estranho, é uma coisa que geralmente faço por email ou skype com amigos, se fosse uma Dúvida ou Pergunta tudo bem!

@ReinaldoMateus Não vejo nada de estranho em alguém dar uma sugestão de melhoria. Imagina só se toda vez que eu sugerisse melhorias no projeto que eu trabalho, o Product Owner fosse lá e deletasse?! Uma vez que vc faz um post aqui, vc está trazendo um assunto com um determinado ponto de vista, mas, como nós fazemos parte de uma comunidade e tem muitos profissionais com experiências diversas, é natural essa contribuição. Acho muito válido!!!

Patrícia Gonçalves

@ReinaldoMateus Claro que faz sentido, é o histórico dos comentários. Desse jeito fica uma thread floodada de comentários deletados, aí sim que não faz o menor sentido e ainda prejudica os leitores.

Não custa nada deixar, é bom pra que as pessoas possam ver o que foi discutido na thread. Comentários de um post ou pergunta são bastante importantes e fazem parte do processo de aprendizado.

(Edit pra complementar a resposta): Nós, que trabalhamos com tecnologia, lemos blog posts e perguntas no Stack Overflow sempre, e é muito comum vermos coisas que resolvem nossos problemas ou que nos dão aquela “luz” em comentários de posts ou respostas (até as mais “escondidas”, com menos upvotes).

@stefanteixeira Ok galera, vou deixar os cometários a partir de agora, talvez meu ponto de vista esteja errado!

7B011215187E09

Log in to reply

Looks like your connection to Agile Testers was lost, please wait while we try to reconnect.