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

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


Introdução e Parâmetros



RainbowCrack é um programa que gera 'rainbow tables' para serem usadas na quebra de senhas. O RainbowCrack difere dos programas de força bruta convencionais, pois utiliza tabelas previamente criadas, chamadas rainbow tables, para reduzir drasticamente o tempo necessário para quebrar senhas.

Um ótimo programa utilizado para quebrar senhas Windows com rainbow tables é o Ophcrack:

# aptitude install ophcrack

Outro programa, que quebra inclusive hashs 'MD5', 'SHA1', 'SHA2' e etc, é o Cain (que roda em Windows).

Para baixar Rainbow Tables:
Para entender mais:

RainbowCrack é uma ferramenta cujo objetivo é quebrar hash de senhas.

O método utilizado pela ferramenta é o Brute Force. Neste método, todas as senhas em texto plano e seus 'hashs' correspondentes são computados um por um.

O 'hash' computado é comparado com o 'hash' alvo. Se um deles for igual, a senha em texto plano é encontrada. Do contrário, o processo continua até finalizar todas as senhas possíveis.

No método time-memory, a tarefa de computar 'hashs' é feita através do armazenamento dos resultados, o qual chamamos de 'rainbow table'. Depois disso, os 'hashes' podem ser acessados a partir das 'rainbow tables' sempre que necessário.

O processo pré computacional precisa de muito tempo para criar as chaves que serão posteriormente utilizadas. No entanto, uma vez que esse processo tenha terminado, a performance da 'rainbow tables' pode ser de centenas a milhares de vezes maior do que o método de 'brute force'.

Vamos ver um passo a passo sobre como utilizar o software RainbowCrack. Este software inclui três ferramentas que devem ser usadas em sequência para fazer a coisa funcionar:

- Passo 1: Usar o rtgen para gerar as 'rainbow tables'.

- Passo 2: Usar o rtsort para organizar as rainbow tables geradas pelo 'rtgen'.

- Passo 3: Usar o rcrack para buscar o conteúdo das 'rainbow tables' organizadas pelo 'rtsort'.

Parâmetros

O processo de buscar o conteúdo no passo final, é equivalente ao processo de quebra de 'hash'. E todas estas ferramentas são utilizadas através da linha de comando.

O programa 'rtgen' precisa de diversos parâmetros para gerar uma 'rainbow table', e a sintaxe do comando é:

rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index chain_len chain_num part_index

Explicação dos parâmetros:
  • hash_algorithm : O algoritmo dos hashs (lm, ntlm, md5 e assim por diante) usado na rainbow table.
  • charset : A configuração dos caracteres (charset) do texto plano na rainbow tables. Todos os charsets possíveis estão definidos no arquivo charset.txt.
  • plaintext_len_min e plaintext_len_max : Estes dois parâmetros definem o tamanho possível de todo o texto plano na 'rainbow tables'. Se o 'charset' é numérico, o 'plaintext_len_min' é 1, e o 'plaintext_len_max' é 5, então a string "12345" será incluída na tabela, mas "123456" não.
  • table_index, chain_len, chain_num e part_index : Estes quatro parâmetros são mais difíceis de explicar em poucas palavras. Ler e compreender o artigo original de Philippe Oechslin (criador do RainbowCrack), pode ajudar a entender o significado exato.
    • O 'table_index' está relacionado ao 'reduce function' que é utilizado na 'rainbow table'.
    • O 'chain_len' é o tamanho de cada 'rainbow chain' na 'rainbow table'. Uma 'rainbow chain' configurada como 16 bytes é a menor unidade em uma 'rainbow table'. Uma 'rainbow tables' contém diversas 'rainbow chains'.
    • O 'chains_num' é o número de 'rainbow chains' em uma 'rainbow table'.
    • O parâmetro 'part_index' determina como o 'start point' em cada 'rainbow chain' é gerado. Deve ser um número (ou começar com um número).

    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

Certificações em Segurança: para qual estudar?

Explorando celulares Android via Web com airbase-ng

Forense em Máquinas Virtuais

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

ARP Poisoning: compreenda os princípios e defenda-se

Leitura recomendada

Alta Disponibilidade com LVS

Escrevendo em discos sem sistemas de arquivos

Como forçar alteração de senha de usuário no próximo login no Linux

Fundamentos da criptografia assimétrica

Antivírus Clamav no Linux

  
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