Creando un cluster casero para cracking en Linux

El tiempo de procesamiento de un hash depende de muchos factores, uno de estos es la potencia que evalúa el hash sobre el procesador, por este motivo se hace necesario implementar nuevas soluciones a nuevos algoritmos que hacen la tarea mas difícil pero no imposible de descifrar estos hash. Crear un cluster para el procesamiento distribuido hace esta tarea mas amena y mucho mas agradable tendiendo los tiempos a logarítmicos y aumentando la capacidad de respuesta para múltiples escalas de complejidad.

¿Qué vamos hacer?

En este proyecto utilizaremos un clúster en una distro Linux para distribuir el proceso de cracking en diferentes maquinas con el fin de lograr un rendimiento mayor que en un solo computador.

Conceptos básicos

¿Qué es un clúster?

Conjuntos o conglomerados de computadoras construidos mediante la utilización de componentes de hardware comunes y que se comportan como si fuesen una única computadora. (Wikipedia)

¿Qué es Cracking?

Es un proceso informático que consiste en descifrar la contraseña de determinadas aplicaciones elegidas por el usuario. Se busca codificar los códigos de cifrado en todos los ámbitos de la informática. Se trata del rompimiento o desciframiento de claves. (Wikipedia)

¿Qué es Mpi?

Es un estándar que define la sintaxis y la semántica de las funciones contenidas en una biblioteca de paso de mensajes diseñada para ser usada en programas que exploten la existencia de múltiples procesadores. (Wikipedia)

Manos a la obra

Para crear este proyecto necesitaremos una distribución Linux en este caso para comodidad del usuario usaremos Ubuntu 10.10, lo pueden descargar aquí, Para este ejemplo usaremos maquinas virtuales con virtual box para facilitar en entendimiento de lo que se está haciendo.

Hay que recordar que se necesitarán dos maquinas virtuales para esta prueba una que será el servidor y otro que será el nodo, las maquinas virtuales tienen que estar configuradas con esta característica:

Lo que debemos hacer es instalar las dos maquinas virtuales Ubuntu 10.10, luego que tengamos instaladas las dos procedemos con abrir una y en ella abrir una terminar y escribir los siguientes paquetes que vamos a instalar. Esta máquina donde descargaremos nuestros paquetes será nuestro servidor.

Paquetes a instalar

  1. Jhon the ripper: Es un programa para cracking que aplica fuerza bruta para descifrar contraseñas. Es capaz de romper varios algoritmos de cifrado o hash, como DES, SHA-1 y otros.
  2. Openssh-server: Es un conjunto de aplicaciones que permiten realizar comunicaciones cifradas a través de una red, usando el protocolo SSH. Fuecreado como una alternativa libre y abierta al programa Secure Shell, que es software propietario.
  3. libmpich1.0-dev: PICH es un programa de biblioteca de desarrollo de libre disposición implementación portable de MPI, una norma estándar de paso de mensaje para aplicaciones de memoria distribuida que utilizan computación paralela. MPICH es software gratuito y disponible para la mayoría de sistemas Unix (incluyendo Linux y Mac OS X) y Microsoft Windows.
    • libmpich1.0-dev
    • libmpich-mpd1.0-dev
    • libmpich-shmem1.0-dev –
    • mpich2

En resumen para instalar dichos paquetes escribimos en la consola:

sudo apt-get install libmpich1.0-dev libmpich-mpd1.0-dev
libmpich-shmem1.0-dev mpich2 john openssh-server

Con este mini script descargaremos y instalaremos todos los paquetes necesarios para crear nuestro clúster para cracking. Ahora lo siguiente es configurar la red del clúster para que cada nodo se pueda comunicar entre si, en la misma terminal escribimos

gedit /etc/hosts

En ese archivo nos aparecerán dos primeras líneas las cuales debemos cambiar la segunda, la dirección ip que aparece (127.0.0.1) por la dirección
interna que poseemos, en este caso sino tenemos dirección basta hacer un ifconfig para verla.

Ahora para crear una dirección IP con su máscara hacemos dentro de la terminal:

sudo ifconfig eth1 192.168.0.3 netmask 255.255.255.0

Donde 192.168.0.3 es la IP de tu maquina. Con esto ya tenemos habilitada nuestra tarjeta de red dentro de la red interna con su respectiva dirección IP. Ahora si cambiamos y guardamos nuestros datos dentro del archivo hosts:

127.0.0.1 localhost
192.168.0.3 virus-laptop servidor

Ahora lo que haremos sera crear el ususario cluster con el cual nos comunicaremos con los demas nodos , en la misma consola escribimos:

sudo useradd -m -s /bin/bash cluster //creamos el usuario cluster
sudo passwd cluster // creamos la contraseña para el usuario cluster
Enter new UNIX password: //
Retype new UNIX password:
passwd: password updated successfully
sudo su - cluster -c "mkdir ~/bin;export PATH=~/bin:$PATH" // Creamos la carpeta en la cual podremos dejar público hacia los demás nodos la información que se necesite procesar.

Configurando MPICH

Creamos un archivo que va hacer nuestro menú de configuración del clúster este debe ir en el directorio ~

touch ~/.mpd.conf

Lo abrimos y ponemos dentro:

Gedit ~/.mpd.conf
secretword=ricteam

Guardamos y listo. Esta configuración la tenemos que hacer en todos los nodos.

Ahora crearemos el archivo donde estará la información de los procesadores de cada nodo , esto servirá para que el programa MPICH sepa cuantos procesadores puede utilizar:

touch ~/mpd.hosts
gedit ~/ mpd.hosts

Lo abrimos y escribimos el numero de procesadores que queremos que utilice. Para saber el número de procesadores que tiene nuestra PC escribimos en la terminal

sudo cat /proc/cpuinfo

De esta forma podemos poner el numero de procesadores deseado para el procesamiento de MPICH. Luego que sepamos cuantos procesadores vamos a poner en la configuración de mpd.hosts escribimos dentro de este archivo 192.168.0.3:1 en este caso es 1 procesador el que deseamos poner con MPICH. Ahora probaremos si el servidor clúster funciona correctamente para eso haremos uso de tres comandos:

  • Mpdboot: Poner en marcha el «entorno» MPICH2Mpdtrace : devuelve las máquinas que se encuentran dentro del cluster.
  • mpd –help : información del comando
  • mpdallexit : Apaga el «entorno» MPICH2

Si todo sale bien podemos continuar con la siguiente etapa sino es porque posiblemente no le hemos dado permiso al archivo ~/mpd.hosts

Configurando a Jhonsito (Jhon The Ripper)

Vamos a descargar el paquete que permite utilizar a nuestros programas de craking para varios procesadores:

cluster@virus-laptop:~$ mkdir source
cluster@ virus-laptop:~$ cd source
cluster@ virus-laptop:~/source$
wget http://www.bindshell.net/tools/johntheripper/john-1.7.2-bp17-mpi8.tar.gz mpi8.tar.g

Desempaquetamos el jtr

tar zxvf john-1.7.2-bp17-mpi8.tar.gz

Nos cambiamos de directorio

cd john-1.7.2-bp17-mpi8/src

Lo instalamos

make generic

Para comprobar que el Jhon The Ripper quede bien configurado ejecutamos la siguiente instrucción ubicándonos en la carpeta john-1.7.2-bp17-mpi8/run:

john -format=DES –test

Movemos todo a la carpeta bin para manejar el jhon de forma más cómoda

mv * ~/bin

Como podemos ver la ejecución fue satisfactoria y procedemos a continuar configurando los nodos del clúster. Ahora debemos configurar los nodos los cuales deberán tener la misma contraseña y el mismo usuario que anteriormente llamamos clúster.

Primero: repetimos la segunda etapa y agregamos esto

sudo ifconfig eth1 192.168.0.2 netmask 255.255.255.0

Con esto ya tenemos habilitada nuestra tarjeta de red dentro de la red interna con su respectiva dirección ip.

Segundo: pasamos a configurar el MPICH. Todo esto lo haremos desde el usuario clúster del servidor

cluster@radical es el mismo cluster@virus-laptop

Lo que hicimos allí arriba fue crear una llave de identificación pública la cual nos servirá para que todos los nodos nos reconozcan , ahora el siguiente paso es mandar nuestra llave publica a los demás nodos para que nos reconozcan:

Con esto lo que hicimos fue crear una carpeta para alojar nuestras llaves

Mandamos nuestra llave al nodo

Le decimos cuantos procesadores tenemos para utilizar

Donde dice passphrase colocamos ricteam. Por último abrimos nuestro menú de configuración de clúster y ingresamos el nuevo nodo.

gedit ~/mpd.hosts

Escribimos dentro :192.168.0.2:0

Scp: es un programa que reemplaza al FTP, y a diferencia de éste, es seguro. Es decir la información de usuario y claves, así como el contenido de los archivos transferidos son encriptados antes de ser transferidos para evitar que puedan ser espiados en su paso por la red. Ahora ejecutamos este script:

for i in `cut –delimiter=: -f1 ~/mpd.hosts`; // desde i vamos a delimiter los campos para que cada maquina copie del servidor el archive mpd.hosts
do scp ~/.mpd.conf cluster@$i:~;// para cada uno de las maquinas que posean este usuario haga una copia
scp ~/mpd.hosts cluster@$i:~;done // copiamos el archivo mpd.hosts en cada máquina con el usuario cluster

Crackeando diferentes cifrados

Mpiexec: Asume una estructura de directorios homogénea en el clúster, buscando el ejecutable por defecto en el directorio actual de trabajo. Sobre la terminal del usuario clúster del servidor escribimos:

echo 497b0bd7178e735eef67720b00c9fc96> dato.txt
mpdboot
for i in `cut --delimiter=: -f1 ~/mpd.hosts`;do scp ~/dato.txt cluster@$i:~;done //repartimos el archivo para su ejecucion conjunta

Por ultimo ejecutamos:

mpiexec -np 3 john --format:raw-MD5 dato.txt // manda señal a cada nodo para que haga el trabajo uno por parte del archivo pero todos al mismo tiempo.

Hasta aquí ya deberías tener tu propio cluster para cracking distribuido 🙂

Radical es ingeniero de sistemas, le gusta estar en constante aprendizaje y crear aplicaciones que automaticen procesos. Es un apasionado por los patrones en ingeniería social, procesamiento del lenguaje natural y la interacción hombre máquina. Portavoz de RIC.

7 Comentarios

  1. Responder

    quiero hacer un clouster con ubuntu 10.10 y 4 laptops q deberia hacer sin lo craking

  2. Responder

    hola, en la parte que dice Creamos un archivo que va hacer nuestro menú de configuración del clúster este debe ir en el directorio ~
    1 touch ~/.mpd.conf

    Lo abrimos y ponemos dentro:
    1 Gedit ~/.mpd.conf
    2 secretword=ricteam

    Guardamos y listo. Esta configuración la tenemos que hacer en todos los nodos.

    —solo voy a guardar secretword=ricteam? o también gedit? y a todos los nodos te refieres a las maquinas que conectare? quiero usar aparte del servidor otras dos laptop mas

  3. Responder

    Hola, y para hacer ese procedimiento con maquinas reales que necesito para unir las maquinas?, algún cable que las una?, si es así como se llama el cable?

  4. Responder

    amigo, es un buen tuto, como puedo comunicarme directamente sobre este mismo tema

  5. Responder

    Hola Radical, esta interesante tu post, la verdad ando buscando info de clusters en Linux, aunque un poco más avanzado que el ejercicio que hiciste aquí, pero me ha dado buenas ideas ver esto. Mira tengo una pagina de FB que trata de compartir experiencias para usuarios de código libre, no solo Linux. Te invito si quieres darte una vuelta y escribir algún artículo de lo que quieras, eres bienvenido.

  6. Responder

    Hola. Muy bueno el tuto. Ya lo había leído antes y por fin lo encontré de nuevo. ¿Quisiera preguntar si la misma configuración sirve para descubrir claves de archivos rar, zip y cualquier otro de archivos mas comunes y cuales herramientas me recomendarían? tengo bastantes clientes que pierden sus claves de archivos rar, zip, pdf y similares. Gracias por todo.

  7. Responder

    excelente tuto, una pregunta forzosamente debe de ser la configuraicon de red directa? funcionaria con nat?

    gracias

Deja un comentario

Your email address will not be published. Required fields are marked *

You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>