Ataque de dicionário com OpenSSL - quebrando senhas

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

[ Hits: 13.590 ]

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

Tunando o sistema de arquivos - entendendo o journal do EXT3

Ativando e desativando CPUs sob demanda

Dedicando uma CPU para processos específicos

Atualizando o seu Fedora com o Preupgrade

Utilizando o RPM como ferramenta de recovery e auditoria

Leitura recomendada

Prevenindo bruteforce em servidores Debian que rodam SSH e ProFTP

Revele o sistema com apenas 1 ping

Atualização de segurança no EPIC4

TrueCrypt: Open Source para criptografia

BIND: Ataque pode causar Negação de Serviço através do Dynamic Update

  

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:

[[email protected] ~]$ echo linux rocks | md5sum
6453bea88e9acdd8d3ccead424063432 -
[[email protected] ~]$ 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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts