Pages

Subscribe:

Ads 468x60px

Labels

jueves, 16 de febrero de 2012

Computacion paralela cluster y JTR mpi

La siguiente entrada se escribió en español por el motivo que sea comprendida mejor pero si se desea en ingles se puede hacer es una contribucion para la clase y laboratorio 

La implementación de soluciones informáticas para el descifrado de contraseñas mediante técnicas de fuerza bruta o ataques por diccionario depende sensiblemente del poder de procesamiento con el que se cuente. En los últimos tiempos han surgido técnicas que aceleran el proceso, reduciendo notoriamente los tiempos de cómputo mediante utilización de tablas precomputadas llamadas tablas Rainbow [1]. Este método, a costa de sacrificar espacio de almacenamiento y tiempo para generar las tablas, permite abordar eficientemente el problema, principalmente para contraseñas de sistemas operativos MS-Windows. En cuanto a la eficiencia, debe tenerse en cuenta que una tabla rainbow es generada con varios parámetros predeterminados, como el alfabeto (letras, números y/o símbolos) y un límite en la longitud de las posibles contraseñas, por lo que la probabilidad de éxito del descifrado dependerá de esta selección. Por otra parte, la complejidad computacional se desplaza a la generación de estas tablas y han comenzado a surgir proyectos de computación distribuida para abordar esta temática.

El objetivo es de aplicar esa potencia conjunta para el descifrado de contraseñas

John the Ripper es un programa de criptografía que aplica fuerza bruta para descifrar contraseñas. Es capaz de romper varios algoritmos de cifrado o hash, como DES, SHA-1 y otros. Es una herramienta de seguridad muy popular, ya que permite a los administradores de sistemas comprobar que las de los usuarios son suficientemente buenas.contraseñas .John the Ripper es capaz de autodetectar el tipo de cifrado de entre muchos disponibles, y se puede personalizar su algoritmo de prueba de contraseñas. Eso ha hecho que sea uno de los más usados en este campo.

John El MPI Ripper es una versión actualizada del parche Ryan Lim como John the Ripper para apoyar MPI, además de un gran número de parches de terceros para apoyar sistemas de cifrado adicionales y otras características. MPI allows you to use multiple processors on a single system, or a cluster of systems for cracking passwords using John the Ripper. MPI permite el uso de múltiples procesadores en un único sistema, o un conjunto de sistemas para el craqueo de contraseñas utilizando John the Ripper .

Comenzando

Se utilizo UBUNTU 10.04 una version estable y nos ofrece soporte técnico extendido (LTS) se configuro una red con un router linksys WR54G con acceso a internet y se les asigno IP estática conectadas por cable .

Antes de comenzar hay que saber algunos conceptos:

Beowulf fue un proyecto realizado por la NASA allá por 1994 con el objetivo de crear un cluster de coste reducido. 
Hoy en día se conoce a un sistema Beowulf a una arquitecutra multi-computadora que suele ser utilizada para computación paralela. Ésta sigue un modelo master/slave, es decir, un nodo que hace de servidor y un conjunto de nodos que se conectan mediante Ethernet (normalmente).

MPI es un estándar que proporciona una API para realizar el paso de mensajes. De hecho, MPI significa Message Passing Interface, Interfaz de Paso de Mensajes. 

Dentro de MPI podemos distinguir dos tipos de entornos distintos: el entorno de desarrollo y el entorno de ejecución. No es necesario que el entorno de desarrollo esté instalado en cada nodo del cluster, pero en cambio si que es necesario que todos los nodos tengan instalado el entorno de ejecución.

Los requisitos iniciales para poder montar el cluster son los siguientes:
  • Todos los nodos (tanto el master como los slaves) deben estar interconectados entre sí. Se pueden utilizar independientemente cualquier topología de red, ya que el modelo en estrella lo estableceremos en la lógica de la aplicación.
  • Todos los nodos deben de tener instalado el entorno de ejecución de MPI.
  • Cada slave debe de tener su propio servidor SSH instalado.
No hes obligatorio, pero si lo recomiendo que todos los nodos tengan la misma versión de MPI y de ser posible, también la misma versión del sistema operativo. 

Ahora bien, ¿cómo funciona OpenMPI? Cuando nosotros ejecutamos una aplicación a través del entorno de ejecución de MPI, en función de la configuración indicada (hosts, slots, número de procesos, ...), éste realiza una conexión a través de SSH a cada uno de los nodos que vayan a ejecutar uno o varios procesos y los lanza remotamente. A partir de aquí empieza el paso de mensaje entre los distintos nodos.

Cuando realizamos una conexión a través de SSH el servidor nos pide usuario y contraseña, los cuales son desconocidos para MPI. Para evitar este problema debemos configurar cada servidor SSH para que permita al usuario actual loguearse sin contraseña.

 SSH nos permite ejecutar comandos remotos, es decir, ejecutar comandos que estén alojados en el servidor. Como es lógico, la aplicación alojada en el master no está en los slaves, así que para poder ejecutarla, primero es necesario llevarla hasta allí.
Esto lo podemos solucionar de tres formas distintas. La primera, la más simple, consiste en copiar el código fuente en cada nodo y conectarnos por SSH para compilarlo; la segunda consiste en copiar el ejecutable en cada nodo (con scp por ejemplo) y en la misma ubicación en todos los nodos; y la tercera es algo más compleja y consiste en montar un servidor NFS.
Montar un servidor NFS nos permite más versatilidad. La idea es la siguiente, lo instalamos en el master y en cada slave modificamos el fichero /etc/fstab para que que se conecte automáticamente al iniciar. Así, cada vez que compilemos en el master no será necesario volver a copiar el ejecutable en cada slave.

Paquetes Requeridos
  • libmpich1.0-dev - las bibliotecas MPICH estáticas y los archivos de desarrollo
  • libmpich-mpd1.0-dev - las bibliotecas MPICH estáticas y los archivos de desarrollo
  • shmem1.0-dev - las bibliotecas MPICH estáticas y los archivos de desarrollo
  • openssh-server - Secure Shell (SSH) del servidor, para el acceso seguro a equipos remotos
  • MPICH2 - Aplicación del mensaje MPI Pasando interfaz estándar
  • mpich2-docDocumentation for MPICH2 MPICH2-doc - Documentación para MPICH2
  • john    active password cracking tool juan - herramienta activa obtención ilegal de contraseña
  • build-essential - la lista de información para construir paquetes esenciales
 Instalación de paquetes


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


Configuración de Red

Tienes que saber tu Ip

Para ubuntu en ingles
ifconfig|grep "inet addr"
Para ubuntu en español
ifconfig|grep "Direc. inet"

Hay que agregar la ip y el nombre de usuario

sudo gedit /etc/hosts

 127.0.0.1 localhost
192.168.1.201 server // se modifico la ip

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Configuración de Usuario

sudo useradd -m -s /bin/bash cluster
 
Hay que crear un nuevo grupo llamado cluster en caso de que no lo tengas

sudo passwd cluster

Te dira que escribas una contraseña debe de ser la misma para todos

sudo su - cluster -c "mkdir ~/bin;export PATH=~/bin:$PATH"



Configuración de MPICH

touch ~/.mpd.conf 
chmod 600 ~/.mpd.conf
echo secretword=pass    >>~/.mpd.conf 
(pass) se cambia por la contraseña del grupo cluster
chmod 600 ~/.mpd.conf

/sbin/ifconfig|grep "inet addr"
Te muestra la ip

cat /proc/cpuinfo|grep processor|wc -l
Debe de mostarte el numero de procesadores virtuales.

echo 192.168.1.201  >>~/mpd.hosts
192.168.1.201 la ip del servidor :1 es el numero de procesadores


 Comandos de MPD

mpdboot : inicializa el cluster
mpdtrace : enlista todos los nodos del cluster asi como el servidor
mpdallexit: apaga el cluster




Instalando John the Ripper


mkdir source
cd source
wget http://www.bindshell.net/tools/johntheripper/john-1.7.2bp17mpi8.tar.gz



tar -zxf john-1.7.2-bp17-mpi8.tar.gz
cd john-1.7.2-bp17-mpi8/src/
make


Te muestra una lista selecciona a la que corresponda segun tu arquitectura o sistema operativo


make clean linux-x86-sse2
inux-x86-sse2 se selecciona esta por ser intel

../run/john -format=DES -test
mv ../run/* ~/bin

Verificar que tengamos la version correcta y que sea detectada

john|grep version

debe mostar :
John the Ripper password cracker, version 1.7.2_bp17_mpi



 







 









2 comentarios:

Elisa dijo...

Rafa, pon estos en el Wiki please para que se junte toda la información relevante. Van 8 en el lab por esta entrada.

oxr dijo...

Rafael,
muy buena info , estoy buscando la manera de montar un cluster. Este post es uno de los mas claros que vi hasta ahora .. mi fin es la de usar la salida de "John The Ripper" para el que los tome "Aircrack" (en Backtrack r3) esto es posible mediante la arquitectura de un cluster ? desde ya gracias , resolviste muchas de mis dudas con este aporte , Saludos!

Publicar un comentario