Ataque de dicionário com OpenSSL - quebrando senhas

Publicado por Marcelo Moreira de Mello em 20/10/2009

[ Hits: 16.749 ]

Blog: http://tchellomello.blogspot.com

 


Ataque de dicionário com OpenSSL - quebrando senhas



Olá,

Você já deve ter se perguntado: como que o Linux faz para autenticar um usuário no arquivo /etc/shadow?!?!

Hoje vou mostrar como podemos utilizar o OpenSSL para realizar um ataque de dicionário contra as senhas armazenadas no arquivo /etc/shadow.

Primeiramente irei setar a senha do usuário marcelo para finger. Coloquei finger?!?! Porque é uma palavra que está cadastrada no arquivo /usr/share/dict/linux.words, que será o arquivo de dicionário que irei utilizar como fonte de senhas.

# echo finger | passwd --stdin marcelo
Changing password for user marcelo.
passwd: all authentication tokens updated successfully.

Sim, podemos dizer que o arquivo /usr/share/dict/linux.words pode ser chamado de dicionário hacker, embora existam muito mais arquivos utilizados para essa finalidade e alguns com gigabytes de tamanho.

Para quebrarmos a senha com sucesso, precisamos entender como funciona o campo de senha do arquivo /etc/shadow.

# grep marcelo /etc/shadow
marcelo:$1$zFsqshA3$Sol9g2OAEwswwladdDCax0:14529:0:99999:7:::

Note que o caractere $ é utilizado como separador de argumentos dentro do campo de senha.

$1$ - Indica que estamos trabalhando com hashes em MD5. Algoritmos de MD5 são chamados de também de algoritmos de hash e possuem a característica de ser one-way, isto é, você fornece um arquivo ou uma string e ele gerará um conjunto de números (hash) que servirá como integridade do arquivo. Quando esse número for diferente, o arquivo ou a entrada foram alterados. One-way porque com o hash gerado você nunca conseguirá converter novamente na entrada ou arquivo original.

# echo linux rocks | md5sum
6453bea88e9acdd8d3ccead424063432 -
# echo Linux Rocks | md5sum
9d96c752c61fd1f96ddce20ec0be1dd4 -

$zFsqshA3$ - Campo destinado para o salt. Salt é uma string randomizada que é gerada no momento em que você cadastra a senha. Como trabalhamos com senhas com hash MD5, se não utilizássemos o salt, dois ou mais usuários que tivessem a mesma senha iriam ter o mesmo hash armazenado no arquivo /etc/shadow.

$Sol9g2OAEwswwladdDCax0 - A senha do usuário. Esse campo é a composição da senha + salt | hash md5

Vamos ao que interessa. Utilizaremos o comando openssl, chamando a função passwd para interpretar as informações do arquivo /etc/shadow e fazer um ataque de dicionário.

# openssl passwd --help
Usage: passwd [options] [passwords]
where options are
-crypt         standard Unix password algorithm (default)
-1             MD5-based password algorithm
-apr1          MD5-based password algorithm, Apache variant
-salt string   use provided salt
-in file       read passwords from file
-stdin         read passwords from stdin
-noverify      never verify when reading password from terminal
-quiet         no warnings
-table         format output as table
-reverse       switch table columns

Agrupando as informações:

# openssl passwd -1 -salt 'zFsqshA3' -table -in /usr/share/dict/linux.words | grep 'Sol9g2OAEwswwladdDCax0'
finger  $1$zFsqshA3$Sol9g2OAEwswwladdDCax0

Depois de 49 segundos a senha do usuário foi descoberta.

Faça o teste em seu servidor, teste a complexidade de sua senha e sempre lembre: alterne ao máximo o caracteres de sua senha com números, caracteres especiais, maiúsculas e minúsculas.

Grande abraço.

Dica originalmente publicada em meu blog: http://tchellomello.blogspot.com/2009/10/ataque-de-dicionario-com-openssl.html

Outras dicas deste autor

Ativando e desativando CPUs sob demanda

Utilizando o RPM como ferramenta de recovery e auditoria

Atualizando o seu Fedora com o Preupgrade

Dedicando uma CPU para processos específicos

Tunando o sistema de arquivos - entendendo o journal do EXT3

Leitura recomendada

Redirecionammento de portas com iptables e SNAT

Como detectar serviços abertos desnecessários e fechá-los

WLM/MSN 2009 não conecta com proxy autenticado - lista de contatos indisponível

Trancando arquivos criados VIM/VI

Definindo a inicialização em modo gráfico ou texto no Red Hat

  

Comentários
[1] Comentário enviado por stilldre em 22/10/2009 - 11:13h

muito bacana sua dica... mas e quando o salt da senha é precedido por $6$ ao invés de $1$ ?

grato desde já.

[2] Comentário enviado por tchello.mello em 22/10/2009 - 13:34h

Olá stilldre,

Algumas distribuições trocaram os hashes de MD5 para SHA512, pois o hash tem maior tamanho.

O Ubuntu foi a última distro que havia percebido a alteração.

Por exemplo:

[marcelo@mmello ~]$ echo linux rocks | md5sum
6453bea88e9acdd8d3ccead424063432 -
[marcelo@mmello ~]$ echo linux rocks | sha512sum
9bb2303a5c3deb6ca02078cd13c08d26d461b43ce0e2f983bcd9f7b3a5f86c276ccef655d1c7f7a2fcd05891a03ad1efa54a4e6fed272dd3f4238f54f103db96 -

Como pode perceber, o hash é maior e outra constatação que pode fazer é analisar dentro do arquivo principal de autenticação da PAM (RedHat/Fedora: /etc/pam.d/system-auth Ubuntu: /etc/pam.d/common-password) o seguinte:

RedHat / Fedora: /etc/pam.d/system-auth
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok

Ubuntu: /etc/pam.d/common-password
password [success=1 default=ignore] pam_unix.so obscure sha512


Obrigado pelo comment.
Abraços ao amigo.
mmm



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts