Brute force de senhas no Linux com loncrack

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.

[ Hits: 12.169 ]

Por: Ricardo Longatto em 15/09/2014


Brute force de senhas no GNU/Linux



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:
Linux: Brute force de senhas no Linux com 
loncrack
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:

   

Páginas do artigo
   1. Brute force de senhas no GNU/Linux
Outros artigos deste autor

Single Honeypot

Leitura recomendada

Como prevenir o Buffer Overflow

Programação Segura

Biometria digital - Sistemas AFIS em Gnu/Linux

PostgreSQL - Embutindo comandos SQL no seu código C

Cuidado com números em Ponto Flutuante

  
Comentários
[1] Comentário enviado por removido em 17/09/2014 - 12:48h

Eu ja coloquei wordlist de 4 gb no hydra e coloquei minha senha no topo e nunca deu certo!

[2] Comentário enviado por guimaraesrocha em 20/09/2014 - 21:42h

Gostei do artigo, conheço muito pouco sobre o arquivo /etc/shadow. Informações como esta referente a segurança e criptografia para mim são sempre bem vindas.

[3] Comentário enviado por ricardolongatto em 20/09/2014 - 22:53h


[1] Comentário enviado por AgnaldoLucindo em 17/09/2014 - 12:48h:

Eu ja coloquei wordlist de 4 gb no hydra e coloquei minha senha no topo e nunca deu certo!


Eu uso o hydra as vezes e funciona de boa..

[4] Comentário enviado por ricardolongatto em 20/09/2014 - 22:53h


[2] Comentário enviado por guimaraesrocha em 20/09/2014 - 21:42h:

Gostei do artigo, conheço muito pouco sobre o arquivo /etc/shadow. Informações como esta referente a segurança e criptografia para mim são sempre bem vindas.


Obrigado

Abraço

[5] Comentário enviado por vitinho217 em 28/09/2014 - 19:15h

Eu dei uma melhorada no seu script, só retirei a variável f, que poderia ser removida sem causar grande diferença no código:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
FILE *arq;
arq = fopen(argv[1],"r");

char senha[75];
char salt[25];
char comp[100];
char *result;

printf("Digite o Hash completo\n");
scanf("%s", comp);

printf("Digite o Salt\n");
scanf("%s",salt);

while(fscanf(arq, "%s", &senha) != EOF)
{
result = (char *) crypt(senha, salt);
if (strcmp(comp,result)==0){
printf("Senha encontrada: %s \n", senha);
return 0;
}else{
printf("Testando.. %s \n", senha);
}
}

printf("Senha não encontrada..\n");

return 0;
}

[6] Comentário enviado por ricardolongatto em 28/09/2014 - 20:10h

Valew vitinho217, na época que escrevi o código usei a variável como uma flag porque o software não parava quando encontrava a senha, foi a "gambiarra" que funcionou kkk não sou desenvolvedor.. só me viro quando preciso ai sai esses código toscos..

Abraço

[7] Comentário enviado por removido em 30/11/2016 - 12:16h

Boa escolha de linguagem para o programa, ela é bem rápida.

O programa já foi testado?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts