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.301 ]

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


Exemplo e Criação de Rainbow Tables



Os valores corretos de todos os parâmetros dependem do que você precisa, e selecionar bons parâmetros requer um bom entendimento do algoritmo de 'time-memory tradeoff'.

Uma configuração que funciona está logo abaixo, como um exemplo:

hash_algorithm

lm, ntlm or md5

charset

alpha-numeric = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789] ou

loweralpha-numeric = [abcdefghijklmnopqrstuvwxyz0123456789]

plaintext_len_min

1

plaintext_len_max

7

chain_len

3800

chain_num

33554432

key space

36^1 + 36^2 + 36^3 + 36^4 + 36^5 + 36^6 + 36^7 = 80603140212


Key space é o número de possíveis 'strings' em texto plano para o 'charset', 'plaintext_len_min' e 'plaintext_len_max' selecionados.
table size

3 GB

success rate

0.999

O algoritmo de 'time-memory tradeoff' é um algoritmos probabilístico. Quaisquer que sejam os parâmetros selecionados, há sempre probabilidades de que as 'strings' dentro do 'charset' selecionado e o tamanho das 'strings' não seja completamente coberto.

A taxa de sucesso é de 99.9% com os parâmetros usados nesse evento.

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


Se precisar criar uma tabela de hashes 'ntlm' ou 'lm', substitua o 'md5' nos comandos acima por 'ntlm' ou 'lm'.

Se precisar de uma tabela com o 'charset alpha-numeric', substitua o 'loweralpha-numeric' nos comandos acima por 'alpha-numeric'.

Se uma tabela com 'hashes lm' for criada, tenha certeza de que seu 'charset' seja 'alpha-numeric' ao invés de 'loweralpha-numeric'. O algoritmo 'lm' nunca utiliza caracteres minúsculos como 'strings'.

Criação de Rainbow Tables

Agora é hora de criar uma 'rainbow table'.

Altere o diretório corrente em seu terminal de comando para o diretório do RainbowCrack, e execute o comando seguinte:

# cd /pentest/passwords/rcrack
# rtgen md5 loweralpha-numeric 1 7 0 3800 33554432 0

Esse comando leva 4 horas para ser completado em um computador com processador Core2 Duo E7300. É possível parar a execução do mesmo a qualquer momento pressionando 'Ctrl+C'.

Da próxima vez que o comando for executado com a mesma linha de comando, ele continuará a partir do ponto em que foi interrompido para continuar com a geração da tabela.

Quando o comando tiver terminado, um arquivo com o nome de "md5_loweralpha-numeric#1-7_0_3800x33554432_0.rt" e tamanho de 512 MB será criado. O nome do mesmo é simplesmente a linha de comando utilizada com os parâmetros interligados, com a extensão ".rt".

O programa 'rcrack' que será explicado mais a frente, precisa destas informações para saber quais os parâmetros existentes na 'rainbow table'. Portanto, não renomeie o arquivo.

As demais tabelas podem ser geradas da mesma forma, com os comandos:

# 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


Finalmente, estes arquivos serão gerados:
md5_loweralpha-numeric#1-7_0_3800x33554432_0.rt 512MB
md5_loweralpha-numeric#1-7_1_3800x33554432_0.rt 512MB
md5_loweralpha-numeric#1-7_2_3800x33554432_0.rt 512MB
md5_loweralpha-numeric#1-7_3_3800x33554432_0.rt 512MB
md5_loweralpha-numeric#1-7_4_3800x33554432_0.rt 512MB
md5_loweralpha-numeric#1-7_5_3800x33554432_0.rt 512MB

Agora, o processo de criação da 'rainbow table' está completo.
Página anterior     Próxima página

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

Cheops: uma ótima ferramenta de rede

Bypass de firewall com tunelamento por DNS

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

Análise de Malware em Forense Computacional

Uma pequena introdução ao Assembly para Linux

Leitura recomendada

Protegendo seu Linux de ataques de brute force via ssh

Hardening em sistemas operacionais Linux (Completo)

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

Bloqueio de repetidas tentativas de login ao seu Linux

Shellter Project - Ferramenta para bypass de AV

  
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