Criando um cluster de alta performance para quebrar senhas

Este artigo mostra como criar um cluster de alta performance, utilizando Debian Squeeze com 3 máquinas para quebra de senhas utilizando o John the Ripper, com cada nó (servidor) do cluster executando de maneira síncrona o mesmo algoritmo para quebra de senhas.

[ Hits: 58.259 ]

Por: Tarcisio Gambin em 10/08/2012


Quebrando senhas



Vamos iniciar um teste de execução do John the Ripper através do cluster, e em seguida, quebrar as senhas dos usuários locais do servidor master (deb01).

Verificando o funcionamento do cluster + John the Ripper

A partir de agora, toda utilização do cluster será feita no servidor master (deb01), que ficará responsável por controlar os processos em todos os servidores slaves.

Iremos iniciar novamente o teste de algoritmos do John the Ripper em modo cluster.

Para isso, digite o comando abaixo:

mpiexec -f hosts -n 3 john-1.7.9/run/./john -test

Neste momento, é possível observar nos servidores slaves o consumo de memória de processamento através do comando top.

Quebrando senhas com o John the Ripper em cluster

Agora iremos executar o John the Ripper em modo cluster, para quebrar as senhas dos usuários locais do servidor.

Para isso, acesse o terminal como root, e faça uma cópia dos arquivos /etc/passwd e /etc/shadow para o /cluster, através do seguinte comando:

# cp /etc/passwd /etc/shadow /cluster Acesse o diretório dos binários do John the Ripper, através do seguinte comando:

# cd /cluster/john/run

Agora iremos executar o unshadow, que será responsável por unir as informações dos arquivos copiados anteriormente em um único arquivo.

Para isso, digite o seguinte comando:

# ./unshadow /cluster/passwd /cluster/shadow > /cluster/senhas

Vale lembrar que você também pode editar este arquivo e remover as contas de usuário locais que não sejam utilizadas (as contas estão em texto limpo e as senhas criptografadas em seguida).

Agora será necessário que as permissões sejam alteradas para que todos os usuários do cluster tenham acesso ao arquivo.

Para isso, execute os seguintes comandos:

# chown mpiuser:mpigroup /cluster/senhas
# chmod 660 /cluster/senhas


Entre com o usuário "mpiuser" e acesse os binários do John the Ripper através do seguinte comando:

cd /cluster/john-1.7.9/run

Agora iremos iniciar o cluster através das indicação dos hosts presentes no arquivos hosts, juntamente com a execução do John the Ripper, através do seguinte comando:

mpiexec -n 3 -f hosts ./john /cluster/senhas

O comando acima foi responsável por executar o John the Ripper no arquivo senhas através do "mpiexec", utilizando 3 núcleos dos processados dos nós indicados no arquivo hosts.

O tempo de quebra de senhas poderá variar de acordo com o tamanho e caracteres utilizados, e também com a capacidade de processamento de todos os nós do cluster.

Conforme as senhas são quebradas, irão sendo exibidas automaticamente na tela.

Conclusão

Vimos, de um modo prático, como montar um cluster de alta performance com quantos nós desejarmos, utilizando tecnologia Open Source (e gratuita) para quebra de senhas.

Vale lembrar que com o cluster configurado, ainda é possível utilizá-lo para qualquer propósito (não apenas quebra de senha) que possa utilizar os benefícios do processamento distribuído.

E claro, o John the Ripper pode ser utilizado para vários outros algoritmos e combinado com dicionário de palavras, regras e até hashs pré-definidos. Mas isso tudo já merece um outro artigo. ;p

Espero que tenham gostado e que também possa ser útil!

Qualquer dúvida, sugestão ou melhoria, "arrebentem" nos comentários. ;p

Fontes de Pesquisa


Apostila Servidores de Aplicação Linux
Profº Erivelton Nunes
UNIARARAS

Artigo previamente publicado em:

Página anterior    

Páginas do artigo
   1. Introdução
   2. Configuração do servidor master
   3. Configuração dos servidores slaves
   4. Quebrando senhas
Outros artigos deste autor

AnyRemote - o poder em suas mãos!

Como configurar um IPTABLES simples e seguro no Slackware!

Leitura recomendada

Desafio: Análise Forense Computacional - Forense em Tráfego de Rede [Resolvido]

Implementação de NIDS com EasyIDS

Os 5 princípios básicos de segurança para empresas

Quando próximo, finja estar longe; quando longe, finja estar próximo

Projeto Sharingan

  
Comentários
[1] Comentário enviado por asdf2 em 10/08/2012 - 13:11h

muito bem feito, valeu

[2] Comentário enviado por levi linux em 10/08/2012 - 13:16h

Excelente artigo, muito bem escrito e bastante detalhado! Favoritado!

[3] Comentário enviado por cleysinhonv em 10/08/2012 - 17:18h

Olá é um ótimo artigo. Gostaria de saber se você focou especificamente para quebrar senhas ou esse cluster pode ser usado para outras aplicações. Se sim como fazer gerenciamento de filas, "checkpoint" de processos e transferência de jobs. Parabéns pelo artigo.

[4] Comentário enviado por gambin.br em 10/08/2012 - 17:59h

@asdf2 e @levi linux - muito obrigado :D

@cleysinhonv - com certeza!! No momento de execução do comando "mpiexec -n 3 -f hosts ./john" poderia executar qualquer outro processo, desde que o PATH esteja configurado adequadamente!!

Em relação ao gerenciamento de filas, transferência de jobs, não posso afirmar com certeza pois não cheguei implementar diferentes aplicações utilizando este cluster, no entanto acredito que possa implementar através de um job que seja executado pelo próprio mpiexec!

[5] Comentário enviado por fernandoborges em 10/08/2012 - 19:06h

Muito bem escrito e detalhado. Uma excelente fonte de pesquisa! Parabéns.

[6] Comentário enviado por danielsath em 11/08/2012 - 09:07h

Parabéns, uma ótima ideia para quem trabalha com uma grande quantidade de dados. Favorito.

[7] Comentário enviado por emccomputadores em 12/08/2012 - 11:24h

O aws da amazon tem sido bastante utilizado para isso, um ótimo artigo, parabéns.

[8] Comentário enviado por c4rl em 13/08/2012 - 21:58h

Cara muito bom o artigo! Bem explicado e direto ao ponto, sem 'xurumelas'.

O mpich2, como o próprio nome sugere, utiliza a biblioteca MPI (Message Passing Interface), muito conhecida e utilizada por cientistas que necessitam paralelizar a execução de algoritmos complexos e, como bem disse gambin.br, o cluster também pode ser utilizado para execução de outros algoritmos, testes de desempenho podem ser realizados com o mpptest que pode ser encontrado aqui: http://www.mcs.anl.gov/research/projects/mpi/mpptest

Abs

[9] Comentário enviado por gambin.br em 13/08/2012 - 22:19h

Obrigado pelos complementos @c4rl =]

[10] Comentário enviado por edmilsonjnior em 15/08/2012 - 18:26h

Ótimo artigo, bem detalhado e direto.
Reproduzindo o cenário e efetuando testes agora mesmo :)

[11] Comentário enviado por edmilsonjnior em 16/08/2012 - 12:10h

Olá galera :)

Reproduzi o cenário proposto, com 3 máquinas virtuais rodando Debian, os testes que fiz me deixaram curioso.
Para eles, utilizei o John para quebrar senhas de usuários e depois o Pyrit para quebrar senhas de redes sem fio, ambos utilizando wordlists.
Para fazer um comparativo eu rodei isoladamente os programas apenas no master e salvei os resultados, depois fiz o mesmo só que utilizando as 3 máquinas virtuais como um cluster, primeiro o John, depois o Pyrit.
Durante a execução eu rodei o top nas 3 e pude ver que os processos estavam rodando realmente nos 3 nós.
O resultado foi o seguinte:
Teste 1
Apenas um servidor, 10.000 possibilidades com o John, 13 minutos de teste.
Depois, utilizando todo o cluster, cheguei aos mesmos 13 minutos de teste.
Teste 2
Apenas um servidor, 100.000 possibilidades com o pyrit, 3 minutos e 21 segundos de teste.
Depois, utilizando todo o cluster, cheguei ao mesmo resultado em 5 minutos de teste.

Intencionalmente as wordlists não tinham a senha correta, assim, após testar todas as possibilidades da lista o programa fecha, dessa forma eu pude usando o comando time, obter o tempo de execução.
Me estranha o fato de o cluster ter sido mais lento que apenas uma das máquinas virtuais rodando, notei que a saída do programa ao fim da execução é repetida, no caso, com 3 máquinas, no nó master eram exibidas as saídas dos 3 processos criados, não posso garantir, mas fiquei assim com a impressão de que os 3 estavam fazendo todo o trabalho ao invés de dividi-lo.

Mais alguém fez testes? Que resultados obtiveram, foram iguais aos meus?
Ainda não pude criar o cluster um máquinas reais, caso alguém tenha feito, estou curioso para saber se o resultado foi diferente.

Gambin.br, ótimo artigo, continue publicando-os para nós ^^
Vejo que ainda tenho muito a estudar. :)

[12] Comentário enviado por stremer em 16/08/2012 - 14:53h

edmilsonjnior.
Em máquinas virtuais realmente é mais lento... além do processamento... tem todo o trabalho de gerenciar os SOs das VMs... como no final seu poder de processamento não aumenta (pois ele depende da maquina real), fazer 3 VMs consome muito mais do que uma unica...

Cluster em máquina virtual somente para testes....
Ou no caso de varias maquinas host com uma VM cada um delas participando do cluster (nesse caso para não precisar instalar o filho como SO principal)...

[13] Comentário enviado por gambin.br em 16/08/2012 - 23:13h

@edmilsonjnior

Muito obrigado pelo contato! Fico feliz que tenha se empenhado em estudar o artigo e inclusive analisar possíveis falhas! Espero que tenha ajudado em alguma coisa ;p
Pretendo novamente montar o ambiente com máquinas físicas e validar os testes que você realizou.
Obs: você não é o único que tem muito a estudar ;p


@stremer

Obrigado pela contribuição! Também acredito que o problema citado pelo @edmilsonjnior esteja relacionado diretamente com o fato de serem utilizadas máquinas virtuais. Precisava deixar mais claro esta restrição no artigo..


E obrigado a todos que estão testando também, afinal comunidade e software livre de verdade é isso aí - todos colaborando para o bem comum :D


Obs: esse artigo não escrito só por mim - teve um punhado de gente boa envolvida nisso (créditos no meu blog pessoal):

http://tarcisiogambin.net/blog/criando-um-cluster-de-alta-performance-para-quebrar-senhas/

[14] Comentário enviado por fbrabreu em 17/08/2012 - 09:15h

PARABÉNS...depois de ler o artigo deu vontade de colocar em prática.

[15] Comentário enviado por samuca32 em 22/08/2012 - 12:58h

ola gente caso queiram painel tenho plesk free ilimitado versao 9.0;9.5 em portugues,ipsomega,zpanel msn [email protected]

[16] Comentário enviado por ilopes em 15/08/2013 - 19:08h

pretendo baser meu tcc neste artigo, principalmente as configuraçaoes, claro que tudo citado, gostaria de ter algumas sugestoes de outra aplicabilidade dele principalmente para algo que exiga muito desempenho e se precisaria mexer muito na configuraçao

[17] Comentário enviado por thyago162 em 29/03/2014 - 11:51h

Ola, eu tenho uma duvida, eu segui passo a passo deste artigo e no final acontece o seguinte, em vez do processo ser distribuido para todos os nós, ele está indo apenas para um... já verifiquei a comunicação entre eles, comunicação remota e tudo mais, gostaria que se alguem tiver alguma ideia, por favor.

[18] Comentário enviado por cypersan em 04/06/2014 - 15:23h

Mas pelo que vi, tem que modificar o Makefile para ter suporte paralelo, e isso você não fez, ou só esqueceu de colocar no artigo ?

[19] Comentário enviado por Gabrielscps em 01/01/2016 - 12:56h

Parabéns pelo artigo, bem explicado!! Só um detalhe que aqui comigo deu problema foi na montagem da pasta no slave, porque faltava o pacote nfs-common nos slaves. Vlw

[20] Comentário enviado por lu_kinhas13 em 19/09/2018 - 14:26h


[19] Comentário enviado por Gabrielscps em 01/01/2016 - 12:56h

Parabéns pelo artigo, bem explicado!! Só um detalhe que aqui comigo deu problema foi na montagem da pasta no slave, porque faltava o pacote nfs-common nos slaves. Vlw


Estou usando este artigo para um trabalho da faculdade, fiz tudo certo, como você resolveu seu problema? só instalou os nfs-cammon nos slaves ?


Contribuir com comentário