Neste artigo irei falar sobre brute force de senhas no
GNU/Linux. Quando se fala de quebrar senhas já imaginamos coisas de filmes onde o hacker aperta um botão e
o software descobre caractere a caractere até achar a senha, mas na verdade não é bem assim que funciona.
Hoje, os ataques de brute force mais bem sucedidos são baseados em
wordlist. Essa wordlist irá conter palavras do dicionário,
sequências numéricas, sequências do teclados, sequências do alfabeto, nomes comuns, times, países, palavrões etc.
Um bom hacker consegue deduzir e criar uma boa wordlist, também existe os dumps que vazam na internet de grandes sites no qual possuem varias senhas de
muitos usuários.
Tudo que um programa de brute force faz é testar as senhas da wordlist até que alguma seja válida, concedendo o acesso.
Antigamente o GNU/Linux armazenava suas senhas encriptadas no arquivo
/etc/passwd porém o arquivo /etc/passwd é acessível por
todos os usuários do sistema, o que era uma falha pois um usuário podia ver a senha encriptada dos outros usuários e poderia fazer um brute force.
Então criaram o arquivo
/etc/shadow no GNU/Linux no qual é acessível somente pelo root e mantém as senhas criptografada usando
um
salt.
Salt cria uma sequência aleatória na hora de criar a senha e faz a criptografia de acordo com aquele salt gerado, isso faz com que duas senhas iguais tenham um
hash diferente:
Antes vamos entender como o shadow armazena as senhas.
Cada campo é separado por ":" e o primeiro campo é o usuário, o segundo campo
começa no $ e vai até o 40. Neste exemplo esse é o hash criptografado, os
outros campos referem-se à data de expiração da senha, etc.
Ainda no campo de senha ele possui outro separador o
$, como podemos notar que "1StbwTiV$" é o salt sendo o ID do salt "$6$", o
resto é a senha.
O campo ID indica qual tipo de criptografia, você pode ver isso dando um "man crypt".
No nosso caso estamos trabalhando com tipo 6 = SHA-512.
Se criarmos dois usuários, um chamado "teste" e o outro "teste1" ambos com a senha "102030" eles vão ter hashs diferente, pois o salt era diferente na hora de
criar a senha:
Agora você deve estar se perguntando: "E como irei fazer brute force nesse
caso?" Eu criei uma ferramenta onde você coloca o hash e o salt a ser quebrado
e ela testa cada senha aplicando a criptografia de acordo com o salt e, comparando os hashs, se a senha estiver contida na wordlist ela será quebrada.
Loncrack e source code em C
Apresento-vos o
Loncrack escrito em C.
Para compilar use:
Para rodar use:
Digite o hash completo e o salt:
Após isso o programa começa o brute force:
Você pode baixá-lo nos seguintes endereços:
Abaixo segue o código fonte escrito em C:
Como podem ver é um código bem simples, ele abre a wordlist, faz uma leitura
linha a linha, pega a palavra + o salt passado e usa a função crypt para gerar
um hash. Depois compara esse hash com o que você quer descobrir. Se forem iguais ele para e mostra a senha.
Espero que gostem e quem quiser contribuir para melhorar a ferramenta pode entrar em contato comigo em ricardolongatto[at]gmail.com.
Ricardo Longatto.
Artigo também publicado em: