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

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

Resenha do livro: Praticando a Segurança da Informação

Linux no Pendrive

Shellter Project - Ferramenta para bypass de AV

Distribuição CAINE Linux para forense digital: em Live-CD, pendrive, máquina virtual ou direto em seu Ubuntu 10.04

Vulnerabilidade em mais de 6 milhões de sites com flash

Leitura recomendada

Transferindo arquivos de modo seguro entre Windows e Linux

Race condition - vulnerabilidades em suids

VPN entre servidores CentOS 6 e Windows 7

Desenvolvimento Web - Simples dicas de segurança

Carnivore e Altivore: Os predadores do FBI

  
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