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
- 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.
- 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.
- 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
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 🙂
pedro
quiero hacer un clouster con ubuntu 10.10 y 4 laptops q deberia hacer sin lo craking
t
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
gustavo
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?
JahirH
amigo, es un buen tuto, como puedo comunicarme directamente sobre este mismo tema
Alex
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.
Daniel
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.
cesar
excelente tuto, una pregunta forzosamente debe de ser la configuraicon de red directa? funcionaria con nat?
gracias