Dr. White Hat

Abre-te Sésamo – Criando senhas fortes (parte 2)

Setembro 12, 2008 · 1 Comentário

(Parte 1)

Como funciona o “password cracker”

Os programas quebradores de senhas “clássicos” costumam seguir determinados passos para obter sucesso na quebra de uma senha.

  • A primeira coisa que eles fazem é tentar senhas a partir de variações do próprio nome de usuário. Ex: usuário Administrator, senha Administrator; Administrator/admin; root/root
  • O segundo passo é o ataque de dicionário, que consiste em utilizar uma lista de palavras geralmente criadas a partir de palavras de um determinado idioma. Existem listas com mais de 150 mil palavras disponíveis na internet para cada idioma desejado.
  • O terceiro passo é o ataque de força bruta propriamente dito, onde o programa gera todas as variações possíveis dentro de um universo de caracteres previamente estabelecido. Quanto maior esse conjunto, mais demorado é o processamento, mas aumentam as possibilidades de sucesso.
  • Em alguns programas, como o LM hash é dividido em duas partes, a quebra de uma parte já é utilizada para restringir as tentativas em um dicionário para quebrar a segunda parte.
  • Uma vez quebrada a senha LM hash, o programa parte para variações de minúsculas e maiúsculas para obter a senha NT hash.

A ilustração abaixo mostra um programa de quebra de senha onde criei 6 usuários, com diferentes tipos de senhas, para que você possa ter idéia da velocidade com que esses programas funcionam.

Para esse teste, o conjunto de caracteres utilizado compreendia letras (maiúsculas e minúsculas), números e símbolos (!@#$%^&*()-_+=~`[]{}|\:;”‘<>,.?/) – 65 trilhões de combinações segundo meus cálculos. O dicionário de palavras constava apenas um conjunto de 29 mil palavras da língua inglesa e o computador utilizado foi um Celeron de 2.4 Ghz com 1Gb de memória (um computador modesto para os dias atuais).

Os usuários e senhas criados foram:

  • User1, senha “User1”: quebrado em menos de um segundo por ser igual ao nome do usuário.
  • User2, senha “computational”: quebrado em menos de um segundo por ser uma palavra de dicionário.
  • User3, senha “Senha”: quebrado em 45 segundos por força bruta por ser uma palavra pequena.
  • User4, senha “MinhaSenha”: por ser uma senha de 10 caracteres, o método de força bruta já levou 4:40 horas para quebrá-la.
  • User5, senha “U$er5”: apesar de conter letras maiúsculas, minúsculas, números e símbolos, foi quebrado em 1 minuto e 24 segundos por ser uma senha curta.
  • Admin, senha “M!nh@53nh@”: por ser uma senha de 10 caracteres, usando maiúsculas, minúsculas, números e símbolos, ela só foi quebrada parcialmente (3 últimos caracteres) ao longo de 6 horas de processamento, que foi a duração do meu teste.

Observe no lado direito da imagem, no quadro “BRUTE FORCE”, alguns dados interessantes:

  • time elapsed: 0d 6h 0m 2s – tempo de processamento decorrido (6 horas, 0 minutos).
  • time left: 1d 14h 19m 38s – tempo estimado para conclusão do processamento (1 dia 14 horas e 19 minutos).
  • % done: 13,5367% – percentual concluído.
  • keyrate: 4995560 k/s – número de senhas testadas por segundo.

O que se pode concluir desses dados: após 6 horas de processamento, apenas uma senha não havia sido quebrada, entretanto, somente 13,5% do total de combinações havia sido explorado. Em menos de 2 dias, com uma máquina modesta, essa senha seria quebrada com absoluta certeza, já que todos os caracteres utilizados estavam contidos no universo testado, à uma velocidade de cerca de 5 milhões de senhas por segundo!!!

Claro que isso só é possível porque o limite máximo do LM hash é de 7 caracteres “case insensitive”. Aumentando tamanho da senha (sem LM hash) e o número de caracteres do conjunto, poderíamos levar meses e até anos de processamento. É só fazer as contas….

Tabelas pré-computadas

Os métodos mais modernos de quebra de senha utilizam tabelas de hash pré-computadas, trocando poder de processamento por uso de memória. Ao invés de calcular o hash em tempo real, todo esse processamento é feito antecipadamente e armazenando em tabelas. O problema desse método, é que tabelas de hash a partir de um conjunto completo de caracteres podem facilmente chegar aos 120 Gb de armazenamento ou até mais dependendo dos comprimentos de senha pre-computados.

A imagem a seguir foi feita a partir de um programa que utiliza tabelas pre-computadas, abrangendo somente letras (maiúsculas e minúsculas) e números. Um conjunto pequeno de caracteres mas que já gerou tabelas cujo tamanho total aproximado é de 700 Mb.

Com esse programa, as senhas do “User5” e “Admin” não foram quebradas porque utilizavam símbolos que não constavam do conjunto gerador das tabelas de hash. O detalhe importante a ser notado, é que o “User4”, cuja senha é “MinhaSenha”, foi quebrado em menos de 3 minutos (veja o Time elapsed no canto inferior direito) contra quase 5 horas consumidas pelo método tradicional. Se eu tivesse 120 Gb de tabelas de hash, ao invés de 2 dias de processamento, todas as senhas seriam quebradas em questão de minutos!

Faça seu próprio teste

Para que você tenha idéia da velocidade com que uma senha é quebrada usando tabelas pré-computadas, acesse o site http://www.objectif-securite.ch/en/products.php. No final da página existe um teste para quebra de senha online conforme pode ser visto na figura seguinte.

Essa demonstração só abrange letras e números. No campo “password”, digite a senha que você deseja testar e clique no botão “submit password”. Logo abaixo, vai aparecer o hash da senha que você digitou.

Selecione o hash criado, copie (ctrl+C), cole (ctrl+V) no campo acima onde está escrito “hash” e clique no botão “submit hash”.

Uma vez clicado no botão “submit hash”, não clique em mais nada e nem recarregue ou atualize a página. De qualquer forma você não vai precisar aguardar muito para obter a senha quebrada a partir do hash.

Como melhorar a segurança das senhas

Existem algumas recomendações para melhorar a segurança das suas senhas. A primeira já deve ser óbvia para você a essa altura do campeonato.

Crie senhas longas: quanto maior for a senha e quanto mais diversificados forem os caracteres utilizados, mais difícil se torna a quebra.

Troque de senha periodicamente: por mais longa e diversificada que seja a senha, ela pode ser quebrada. É só uma questão de tempo e poder computacional.

Crie seu próprio “alfabeto”: evite usar somente letras. Além de evitar o risco de ataques por dicionário, você diversifica o conjunto de caracteres. Para facilitar a memorização você pode substituir a letra A por 4, E por 3, I por !, O por 0 (zero), C por (, T por 7, S por $, L por 1 (um) e por aí vai. Assim, ao invés de escrever MinhaSenha, escreva M!nh4$3nh4.

Use senhas diferentes: alguns sistemas ou serviços são mais seguros que outros. Se você usa a mesma senha em diversos lugares diferentes, pode ser que ela seja quebrada em algum lugar e utilizada em outro. Uma forma de fazer isso é utilizar um sufixo ou prefixo que identifique o serviço. Por exemplo: M!nh4$3nh4/Hm1 para hotmail, M!nh4$3nh4/Gm1 para Gmail. Se você achar isso muito complicado, procure pelo menos agrupar as senhas por tipo de serviço: uma só para banco, outra para e-mails e sites de relacionamento, outra para usuário da rede, outra para usuário administrador, outra para sites diversos.

Use gerenciadores de senha: existem vários programas disponíveis na internet com essa finalidade, permitindo que você tenha uma senha diferente para cada lugar. O importante é que ela armazene as senhas com uma criptografia forte e que você use uma senha forte. É importante também que você tenha cópias em lugares distintos para evitar a sua perda. Você pode usar volumes criptografados e sincronizados, conforme já publiquei em posts anteriores.

Mantenha seu servidor trancado: essa recomendação é para administradores de rede. Se o servidor não estiver em um local seguro contra acessos físicos e permitir boot a partir de um CD, é possível extrair o arquivo de senhas do sistema para serem quebradas em outro computador ou simplesmente, pode-se apagar a senha de qualquer conta ou ainda elevar o privilégio de um usuário comum, tornando-o administrador do sistema.

Desabilite o LM Hash: também para administradores de rede. O LM hash pode ser desabilitado mas pode gerar alguns problemas de conectividade. Veja maiores detalhes em: http://support.microsoft.com/kb/299656

A recomendação final é a que eu sempre cito para quaisquer medidas de segurança: Bom senso. Medidas de segurança extremas implicam em maior dificuldade no uso e pode representar uma perda de tempo e energia para proteger algo que não requeira proteção elevada.

—–

Adicione um comentário

Categorias: segurança · senha