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: 62.049 ]

Por: Tarcisio Gambin em 10/08/2012


Introdução



O que é um cluster de alta performance?

Os clusters de alta performance são utilizados para tarefas que exigem grande capacidade de processamento de dados, tais como cálculos matemáticos complexos, renderização de imagens 3D, previsões meteorológicas, entre muitas outras.

Uma das principais vantagens da utilização de clusters de alta performance é o Custo X Benefício, proporcionado pela capacidade do processamento distribuído.

Para entendermos o funcionamento de um cluster, faz-se necessário entendermos o conceito de Message Passing.

Message Passing é o método de envio e recebimento de mensagens em uma rede através de protocolos de comunicação.

Neste caso, as informações são enviadas do processo local para os processos remotos, fazendo com que as tarefas sejam gerenciadas, distribuídas e executadas simultaneamente em todos os servidores do cluster.

Os padrões mais conhecidos de Message Passing são o MPI e o PVM.

Para fins de estudo e aplicação, iremos demonstrar a utilização de um cluster de alta disponibilidade através do MPICH – Implementação Multiplataforma do Padrão MPI – que será responsável pelo processamento paralelo do "John the Ripper", utilizando três máquinas virtuais com o sistema Debian Squeeze, separadamente conectadas para quebra de senha e hashes.

Entendido o conceito de cluster e com um conhecimento razoável em GNU/Linux, mãos à obra!

Cenário e recomendações

No ambiente proposto, foram utilizadas 3 máquinas virtuais através do VirtualBox.

Segue abaixo, a configuração mínima recomendada:
  • Hardware compatível com sistema operacional Debian Squeeze;
  • 01 Interface de Rede (modo NAT);
  • 01 Interface de Rede (modo Internal);
  • 256 MB de memória;
  • 02 GB de espaço disponível em disco rígido;
  • Conexão com a Internet.

Em caso de máquinas físicas, a rede local pode utilizar apenas uma placa de rede, desde que possua o acesso externo necessário para download dos pacotes e comunicação com os demais nós (servidores) do cluster.

Utilizaremos neste artigo, a seguinte nomenclatura:
  • deb01 -> servidor master
  • deb02 -> servidor slave
  • deb03 -> servidor slave


    Próxima página

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

Instalando o PFSense em uma máquina virtual

Instalação do Freeradius com suporte a EAP-TLS e PEAP-TTLS MSCHAPv2 no Ubuntu

Deface: A arte de desconfigurar sites

Gerenciando certificados A1 fornecidos pelo ICB-Brasil no navegador Chrome sobre Linux

Segurança com Iptables

  
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 olhar4@msn.com

[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts