Rainbow Hash Cracking

O cracker de senhas multiplataforma Ophcrack é incrivelmente rápido. Quão rápido? Ele pode decifrar a senha “Fgpyyih804423” em 160 segundos. A maioria das pessoas consideraria essa senha bastante segura. O Verificador de força da senha da Microsoft classifica-a como “forte”. O Medidor de força da senha do Geekwisdom classifica-a como “medíocre”.

Por que o Ophcrack é tão rápido? Porque ele usa Tabelas Rainbow. Não, não é o tipo de arco-íris que tenho como plano de fundo da minha área de trabalho.

Uma captura de tela da minha área de trabalho do Windows. Oh Hello Kitty, eu me apaixonei pela senhora mais uma vez.

Embora esses também sejam lindos.

Para entender como o tabelas de arco-íris o senhor precisa primeiro entender como as senhas são armazenadas nos computadores, seja no seu próprio desktop ou em um servidor da Web remoto em algum lugar.

As senhas são nunca armazenados em texto simples. Pelo menos não deveriam ser, a menos que o senhor esteja criando o sistema mais inseguro do mundo usando os programadores mais ingênuos do mundo. Em vez disso, as senhas são armazenadas como a saída de uma função hash. Os hashes são operações unidirecionais. Mesmo que um invasor tenha acesso à versão com hash da sua senha, não é possível reconstituir a senha apenas com o valor do hash.

Mas é possível atacar o valor de hash de sua senha usando tabelas rainbow: valores de hash enormes e pré-computados para cada combinação possível de caracteres. Um PC atacante certamente poderia calcular todos esses hashes em tempo real, mas aproveitar uma tabela enorme de valores de hash pré-calculados permite que o ataque prossiga várias ordens de magnitude mais rapidamente – supondo que a máquina atacante tenha RAM suficiente para armazenar toda a tabela (ou pelo menos a maior parte dela) na memória. É um clássico troca de tempo e memória, exatamente o tipo de atalho que o senhor espera que um atacante de chapéu preto use.

Qual é o tamanho das tabelas rainbow? A caixa de diálogo de instalação do Ophcrack deve lhe dar uma ideia:

rainbow-hash-table-sizes

Leva muito tempo para gerar essas enormes tabelas rainbow, mas, uma vez que elas estejam disponíveis, todos os computadores atacantes podem aproveitar essas tabelas para tornar seus ataques a senhas com hash muito mais potentes.

A menor tabela rainbow disponível é a alfanumérica básica, e mesmo assim ela tem 388 megabytes. Essa é a tabela padrão que o senhor obtém com a ISO inicializável do Ophcrack. Mesmo essa tabela pequena é extremamente eficaz. Eu a utilizei para atacar algumas senhas que configurei em uma máquina virtual do Windows XP com os seguintes resultados:

encontrado? segundos
Senha1! 700
Fgpyyih804423 sim 159
Fgpyyih80442% 700
saMejus9 sim 140
thequickbrownfoxjumpsoverthelazydog 700

O senhor não esperaria que essa tabela arco-íris funcionasse com as senhas com caracteres não alfanuméricos (%&^$# e similares) porque a tabela não contém esses caracteres. O senhor também notará que essa as senhas, das quais sou um grande fã, são imunes a essa técnica devido ao seu comprimento. Mas, por outro lado, esse ataque cobriu 99,9% de todas as senhas alfanuméricas de 14 caracteres possíveis em 11 minutos, e isso foi com o menor das tabelas de arco-íris disponíveis. Poderíamos fazer melhor se usássemos tabelas rainbow maiores e mais completas. A documentação do Ophcrack descreve as diferenças entre as tabelas rainbow disponíveis que ele usa:

Alfanumérico 10k 388 MB Contém os hashes do LanManager de 99,9% de todas as senhas alfanuméricas. Essas senhas são compostas de letras maiúsculas e minúsculas e números (cerca de 80 bilhões de hashes). Como o hash do LanManager corta as senhas em duas partes de 7 caracteres, as senhas de comprimento 1 a 14 podem ser decifradas com esse conjunto de tabelas. Como o hash do LanManager também não diferencia maiúsculas de minúsculas, os 80 bilhões de hashes desse conjunto de tabelas correspondem a 12 septilhões (ou 283) senhas.
Alfanumérico 5k 720 MB Contém os hashes do LanManager de 99,9% de todas as senhas alfanuméricas. Entretanto, como as tabelas são duas vezes maiores, a quebra é cerca de quatro vezes mais rápida se o senhor tiver pelo menos 1 GB de RAM.
Estendido 7.5 GB Contém os hashes do LanManager de 96% de todas as senhas compostas de até 14 letras maiúsculas e minúsculas, números e os seguintes 33 caracteres especiais: !”#$%&'()*+,-./:;<=>?@[]^_`{|} ~. Há cerca de 7 trilhões de hashes nesse conjunto de tabelas, cobrindo 5 octilhões (ou 292) senhas.
NT 8.5 GB O senhor pode usar esse conjunto de tabelas para decifrar os hashes do NT em máquinas em que o hash do LanManager foi desativado. O conjunto contém 99,0% dos hashes das senhas compostas pelos seguintes caracteres:

  • até 6 letras maiúsculas e minúsculas, números e 33 caracteres especiais (o mesmo que acima)
  • 7 letras maiúsculas e números mistos
  • 8 letras minúsculas e números

Há 7 trilhões de hashes nessa tabela, o que corresponde a 7 trilhões de senhas (o hash do NT não apresenta os pontos fracos do hash do LanManager).

Observe que todas as tabelas rainbow têm comprimentos específicos e conjuntos de caracteres com os quais trabalham. As senhas que são muito longas ou que contêm um caractere que não está no conjunto de caracteres da tabela são completamente imunes a ataques dessa tabela rainbow.

Infelizmente, os servidores Windows são particularmente vulneráveis a ataques de tabelas rainbowdevido à imperdoável fraqueza do hashes legados do Lan Manager. Estou surpreso com o fato de o “recurso” de suporte do Lan Manager legado ainda estar ativado por padrão no Windows Server 2003. Ele é altamente aconselhável que o senhor desabilite os hashes do Lan Managerespecialmente em servidores Windows que armazenam credenciais de domínio para cada usuário. Seria uma pena incomodar todos os seus usuários do Windows 98, mas acho que o aumento na segurança vale a pena.

Eu li que O Windows Server 2008 finalmente eliminará os hashes LM quando for lançado no próximo ano. O Windows Vista já removeu o suporte a esses hashes obsoletos no desktop. A execução do OphCrack em minha caixa do Vista resulta nesta caixa de diálogo:

Todos os hashes LM estão vazios. Por favor, use as tabelas de hash do NT para decifrar os hashes restantes.

Eu adoraria, mas não consigo encontrar uma fonte confiável para a tabela rainbow de 8,5 GB de hashes NT que preciso para prosseguir.

A ferramenta Ophcrack não é muito flexível. Ela não permite que o senhor gere suas próprias tabelas rainbow. Para isso, o senhor precisará usar a ferramenta Projeto Rainbow Crack que podem ser usadas para atacar praticamente qualquer conjunto de caracteres e qualquer algoritmo de hashing. Mas cuidado. Há um motivo pelo qual os ataques à tabela rainbow só surgiram recentemente, pois o preço de 2 a 4 gigabytes de memória em uma máquina desktop se aproximou de níveis realistas. Quando eu disse maciço, eu quis dizer isso. Aqui estão alguns tamanhos de tabela rainbow gerados para o hash NT mais seguro:

Conjunto de caracteres Comprimento Tamanho da tabela
ABCDEFGHIJKLMNOPQRSTUVWXYZ 14 0.6 GB
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 14 3 GB
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+= 14 24 GB
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|:;"'<>,.?/ 14 64 GB

Um ataque de tabela arco-íris geralmente é um exagero para um computador de mesa. Se os hackers tiverem acesso físico ao computador, a segurança é irrelevante. Essa é a regra número 3 da 10 leis imutáveis da segurança de computadores. Há várias ferramentas que podem redefinir senhas com acesso físico à máquina.

Mas o senhor quando um hacker remoto obtém uma grande lista de senhas com hash de um servidor ou banco de dados, estamos em apuros. Há um risco significativo de um ataque de rainbow table. É por isso que o senhor nunca deve confiar apenas em hashes… sempre adicione um pouco de sal ao seu hash para que os valores de hash resultantes sejam exclusivos. Salgar um hash parece complicado (e vagamente delicioso), mas é bastante simples. O senhor prefixa um valor exclusivo à senha antes de fazer o hash:

hash = md5('deliciously-salty-' + password)

Se o senhor tiver salgado os hashes de suas senhas, um invasor não poderá usar um ataque de tabela arco-íris contra o senhor – os resultados de hash de “password” e “deliciously-salty-password” não serão iguais. A menos que o hacker saiba de alguma forma que todos os seus hashes são “deliciosamente salgados”. Mesmo assim, ele teria que gerar uma tabela rainbow personalizada especificamente para o senhor.

ATUALIZAÇÃO: Leia o artigo de Thomas Ptacek de Thomas Ptacek, excelente e informativa resposta a este post. Ela detalha muito mais os detalhes do hashing de senhas. Ao contrário de mim, Thomas é um verdadeiro especialista em segurança.