Rainbow Crack e Rainbow Tables

Técnica de quebra de senhas com maior rapidez e porcentagem de acerto. Pode ser utilizado tanto para quebra de senhas locais, quanto
remotas e de redes Wireless (com Cowpatty).

[ Hits: 40.856 ]

Por: Luiz Vieira em 13/01/2012 | Blog: http://hackproofing.blogspot.com/


Pós-Processamento e Quebra de senha



As 'rainbow tables' geradas pelo programa 'rtgen' precisam de um pós-processamento para tornar sua consulta mais fácil e rápida. O programa 'rtsort' é utilizado para organizar todas as 'rainbow chains' em uma 'rainbow table'.

Utilize os seguintes comandos:

# rtsort md5_loweralpha-numeric#1-7_0_3800x33554432_0.rt
# rtsort md5_loweralpha-numeric#1-7_1_3800x33554432_0.rt
# rtsort md5_loweralpha-numeric#1-7_2_3800x33554432_0.rt
# rtsort md5_loweralpha-numeric#1-7_3_3800x33554432_0.rt
# rtsort md5_loweralpha-numeric#1-7_4_3800x33554432_0.rt
# rtsort md5_loweralpha-numeric#1-7_5_3800x33554432_0.rt


Cada comando acima, leva cerca de 1 a 2 minutos para completar sua execução. O programa 'rtsort' gravará a 'rainbow table' organizada por sobre o arquivo original.

Não interrompa a execução do comando, do contrário, o arquivo original será danificado.

Agora o processo de organização das 'rainbow tables' está completo.

O programa 'rcrack' é utilizado para acessar as 'rainbow tables'. Ele aceita apenas 'rainbow tables' organizadas.

Assumindo que as 'rainbow tables' organizadas estejam no mesmo diretório do programa, para quebrar hashes únicos a linha de comando será:

# rcrack *.rt -h aqui_vai_o_hash_para_ser_quebrado

O primeiro parâmetro especifica o caminho para buscar nos arquivos das 'rainbow tables'. Os caracteres '*' e '?' podem ser usados para especificar vários arquivos.

Normalmente isto leva algumas dezenas segundos para finalizar, se a 'string' existir dentro do 'range' o 'charset' e tamanho de 'strings' selecionados. Do contrário, leva-se muito mais tempo para buscar por todas as tabelas, apenas para não encontrar nada.

Quebra de senha

Para quebrar múltiplos 'hashs', coloque todos os 'hashs' em um arquivo de texto, com um 'hash' por linha. E então especifique o nome do arquivo na linha de comando do programa 'rcrack':

# rcrack *.rt -l arquivo_com_lista_de_hashes

Se as 'rainbow tables' que gerou usam o algoritmo 'lm', o programa 'rcrack' possui um suporte especial para o parâmetro '-f'. Um arquivo de 'dump de hash' no formato 'pwdump' é necessário como input para o programa 'rcrack'.

O conteúdo do arquivo parecerá com o seguinte:

Administrator:500:1c3a2b6d939a1021aad3b435b51404ee:e24106942bf38bcf57a6a4b29016eff6:::

Guest:501:a296c9e4267e9ba9aad3b435b51404ee:9d978dda95e5185bbeda9b3ae00f84b4:::


O arquivo 'pwdump' é a saída de utilitários tais como 'pwdump2', 'pwdump3' ou outros. E contém os hashes tanto 'lm' quant 'ntlm'.

Para quebrar 'hashes lm' em arquivos 'pwdump', use o seguinte comando:

# rcrack *.rt -f arquivo_pwdump

O algoritmo de 'hash lm' converte todas as letras minúsculas em strings maiúsculas; como resultado disso, todas as strings quebradas através do 'hashe lm', nunca contém letras minúsculas, enquanto que a string original pode conter letras minúsculas.

O programa 'rcrack' tentará corrigir isto em 'hashes ntlm' armazenados no mesmo arquivo e exibir a string original.

Previamente publicado em: http://segurancalinux.com/artigo/Rainbow-Crack-e-Rainbow-Tables
Página anterior    

Páginas do artigo
   1. Introdução e Parâmetros
   2. Exemplo e Criação de Rainbow Tables
   3. Pós-Processamento e Quebra de senha
Outros artigos deste autor

Race Condition

Elevação de privilégios locais

Boot Linux - o que acontece quando ligamos o computador

Virtualização: VMware ou VirtualBox no Ubuntu 9.04 com kernel 2.6.29-11?

Segurança da Informação: Necessidades e mudanças de paradigma com o avanço da civilização

Leitura recomendada

Análise passiva (parte 2)

SAMSB - Snort + Apache2 + MySQL + Snorby e BarnYard2 no Debian

Arquivo de configuração do mod_security

Como funcionam os sistemas de biometria: um estudo geral

Terceirização de segurança gera dúvidas em profissionais de TI

  
Comentários
[1] Comentário enviado por vagnerfonseca em 13/01/2012 - 13:19h

Grande Luiz,

Ainda não li seu artigo que sei que deve estar excelente como sempre, mas não pude deixar de logar o site pra desabafar: Até que enfim você trocou aquela foto de 10 anos atrás do seu avatar...hehehe


Abraços.

[2] Comentário enviado por removido em 13/01/2012 - 13:34h

Fala grande Luiz,

Outro artigo show de bola !

Abração.

[3] Comentário enviado por luizvieira em 13/01/2012 - 13:43h

Hahahahaha é verdade Vagner.. e olha que a foto era só de 4 anos atrás :-) pra vc ver o que SP faz com a gente: barrigudo, cabelo branco...

Mas dessa vez tomei vergonha e troquei a foto, que vai ficar por pelo menos 5 anos rsrsrs.

Abração, e valeu pelo comentário tbm Thalysson!

[4] Comentário enviado por vagnerfonseca em 13/01/2012 - 14:04h

O mais engraçado são essas faixas de cabelo grisalho nas laterais "à lá" Reed Richards...

Gostei do artigo, muito bom e com uma didática muito boa.

Abraços.

[5] Comentário enviado por luizvieira em 13/01/2012 - 14:11h

Dr. Fantástico :-)

Valeu Vagner!

[6] Comentário enviado por moskadebar em 14/01/2012 - 15:15h

Boa Tarde Luiz,

Só não entendi uma coisa porque eu preciso gerar 6 tabelas diferentes como demostrado abaixo?

Comandos para gerar as tabelas
Os comandos do 'rtgen' usados para gerar as 'rainbow tables' são:

# rtgen md5 loweralpha-numeric 1 7 0 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 1 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 2 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 3 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 4 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 5 3800 33554432 0

Grato

[7] Comentário enviado por luizvieira em 15/01/2012 - 23:07h

moska, não há uma obrigatoriedade em gerar 6 tabelas. Você pode gerar mais, menos ou apenas uma. O grande problema de ter apenas uma tabela, é o tamanho gigantesco com o qual ela ficará, e divindo-a em várias, é mais rápido o processo de indexação das informações contidas na mesma.

[8] Comentário enviado por moskadebar em 16/01/2012 - 11:17h

Entendi, mas por exemplo se eu quisesse gerar apenas uma tabela ou oito qual parametro no comando abaixo eu teria que modificar para o programa entender quantas tableas eu gerarei?

# rtgen md5 loweralpha-numeric 1 7 0 3800 33554432 0

Muito grato pela explicação

[9] Comentário enviado por luizvieira em 16/01/2012 - 11:31h

Para uma tabela apenas:

# rtgen md5 loweralpha-numeric 1 7 0 3800 33554432 0

Para 8 tabelas
# rtgen md5 loweralpha-numeric 1 7 0 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 1 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 2 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 3 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 4 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 5 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 6 3800 33554432 0
# rtgen md5 loweralpha-numeric 1 7 7 3800 33554432 0

É necessário perceber que, criando uma tabela apenas, vc não terá todas as combinações que poderiam ser geradas em 8 tabelas gravadas em uma só. Mas vc pode aumentar esses dois valores "3800 33554432" para que sua única tabela tenha mais combinações. Portanto, o ideal é sempre criar mais tabelas, pois a chance de sucesso é maior.

[10] Comentário enviado por moskadebar em 17/01/2012 - 18:26h

Acredito que eu entendi Luiz, pois cade vez que eu gero uma nova tabela ela me gera uma sequencia nova de combinações não é isso? E posso alterar o tamanho dessas combinações através dos valores "3800 33554432".

Muito grato pela explicação.

[11] Comentário enviado por leafrax em 23/12/2012 - 10:40h

Se a senha da rede for de 15 carateres ,
esse progama vai gerar uma tabela muito
grande com acontece no crunch?

[12] Comentário enviado por elgio em 13/03/2014 - 17:33h

Só lembrando que esta técnica não funciona para senhas protegidas por salt numbers (as do Linux, por exemplo... :-D)

[13] Comentário enviado por luizvieira em 13/03/2014 - 17:39h

Fala Elgio!
Meu caro, a bem da verdade funciona... Só que existe a questão do custo. O custo é muito alto para se gerar uma tabela para um hash com salt, sem contar que cada tabela servirá apenas para hashs com aquele salt específico. Logo, acaba valendo mais a pena utilizar cracking com bruteforce ou wordlists do que arcar com o custo de gerar e armazenar a gigantesca RT gerada.

[ ]'s

[14] Comentário enviado por elgio em 13/03/2014 - 18:03h


[13] Comentário enviado por luizvieira em 13/03/2014 - 17:39h:

Fala Elgio!
Meu caro, a bem da verdade funciona... Só que existe a questão do custo. O custo é muito alto para se gerar uma tabela para um hash com salt, sem contar que cada tabela servirá apenas para hashs com aquele salt específico. Logo, acaba valendo mais a pena utilizar cracking com bruteforce ou wordlists do que arcar com o custo de gerar e armazenar a gigantesca RT gerada.

[ ]'s



Estamos com um problema de terminologia entre "funciona" e "viável".

Força bruta também funciona, mas para um tamanho considerado de chave, é inviável.

No caso de salt numbers, para a mesma senha "Teste123", se forem considerados 10 cars de salt e cada car podendo ser A-Za-z0-9 (exclui simbolos), teria-se 62 elevado na 10 hashes diferentes só para esta senha. Ou, mais especificamente, 839.299.365.868.340.224 hashes diferentes para uma mesma senha.

Se cada entrada na rainbow consumisse apenas 1 byte, seria necessário 763mil TERABytes de espaço para armazenar todos os hashes com seus salts para a senha "Teste123".

Pura matemática.

;-)

[15] Comentário enviado por elgio em 13/03/2014 - 18:29h

http://gravatai.ulbra.tche.br/~elgio/senhas.php

Cópia de um email que enviei aos meus alunos de segurança em 2007.

Um anos depois, em 2008, escrevi o http://www.vivaolinux.com.br/artigo/Armazenamento-de-senhas-no-Linux/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts