Pular para o conteúdo

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).
Luiz Vieira luizvieira
Hits: 42.513 Categoria: Linux Subcategoria: Segurança
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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).

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução e Parâmetros
   2. Exemplo e Criação de Rainbow Tables
   3. Pós-Processamento e Quebra de senha

Armitage: a nova interface gráfica do Metasploit

Forense em Máquinas Virtuais

Segurança da Informação no Brasil, qual é nossa realidade?

XSS - Cross Site Scripting

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

Nessus Portscanner

Configuração de um servidor com clamav

Servidor para centralização de logs - Fedora 7

Biometria - Reconhecimento Facial

Usando HTTP autenticado no Apache

#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.

;-)

Contribuir com comentário

Entre na sua conta para comentar.