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: 34.114 ]

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

SELinux - Security Enhanced Linux

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

Uma pequena introdução ao Assembly para Linux

Linux no Pendrive

Ferramentas de segurança - uma pequena compilação

Leitura recomendada

Rede wireless: autenticação em uma rede WPA

Os 5 princípios básicos de segurança para empresas

Snort - The Open Source Network Intrusion Detection System

Atirando o pau no gato com Metasploit

Malware, Vírus e Hacking. Estamos seguros usando 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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts