viernes, mayo 18, 2018

Hashtopolis: Cómo crackear contraseñas de forma distribuida

Una de las acciones más comunes durante la realización de un proyecto de Ethical Hacking, es el crackeo o descifrado de las contraseñas que el analista va encontrando en diferentes partes de los sistemas objetivo o intermedios, de los que va recabando hashes en diferentes algoritmos con una credencial válida que pueda dar paso al siguiente nivel. Y a veces es un proceso lento si la contraseña es robusta, el algoritmo de hashing es complejo o no tenemos suficiente potencia de cómputo.

Figura 1: Hashtopolis: Cómo crackear contraseñas de forma distribuida

En este artículo os traigo una herramienta muy interesante que nos permite, de una manera relativamente sencilla, utilizar hashcat para realizar tareas de descifrado distribuyendo el trabajo entre diferentes ordenadores que se encuentren en una misma red.

Instalando hashtopolis y configurando el entorno

La herramienta que vamos a utilizar para realizar esta tarea se llama Hashtopolis, y se puede acceder a ella en su repositorio de GitHub. Es un sistema cliente-servidor que permite distribuir tareas de hashcat entre diferentes ordenadores.

Figura 2: Hashtopolis en GitHub

Hashtopolis requiere la instalación de un servidor de aplicación (apache2) que albergará una aplicación web que permitirá al usuario gestionar todos los equipos que se estén utilizando para completar las tareas. En los equipos que se deseen utilizar para realizar las tareas, se debe instalar un agente, que no es más que un pequeño programa que se encargará de comunicarse con el servidor para recibir órdenes.

Instalando y configurando el servidor

Lo primero que vamos a hacer es instalar y configurar el servidor, para ello se recomienda utilizar una máquina virtual con un sistema operativo Ubuntu o Debian. Vamos a comenzar por la instalación de las dependencias principales que requerirá la aplicación, para ello ejecutamos los siguientes comandos:
$ sudo apt-get update 
$ sudo apt-get install mysql-server 
$ sudo apt-get install apache2 
$ sudo apt-get install libapache2-mod-php php-mcrypt php-mysql php * 
* (Si se utiliza php7.2 y se tiene problemas con la instalación de php-mcrypt, recomiendo que consultéis este enlace) 
$ sudo apt-get install git curl
Una vez instaladas todas estas dependencias, vamos a descargar hashtopolis desde su repositorio de GitHub para configurar la aplicación web. A continuación, se muestra el comando necesario para realizarlo.
$ git clone https://github.com/s3inlc/hashtopolis.git 
$ cd hashtopolis/src 
$ sudo mkdir /var/www/hashtopolis 
$ sudo cp -R * /var/www/hashtopolis/

$ cd /var/www 
$ sudo chown -R www-data:www-data hashtopolis
Una vez descargada la herramienta, y movida la aplicación web al directorio de servidor de aplicación, vamos a realizar algunas configuraciones en el directorio de apache2. Lo primero, abrimos el siguiente fichero e introducimos el nombre de archivo index.php a continuación de index.html.
$ sudo pico /etc/apache2/mods-available/dir.conf
También vamos a configurar el directorio (hashtopolis) que hemos creado dentro de /var/www como DocumentRoot. Para ello introducimos el comando que se muestra a continuación, y en la línea donde pone DocumentRoot /var/www/html lo modificamos por DocumentRoot /var/www/hashtopolis.
$ sudo pico /etc/apache2/sites-enabled/00*
Una vez realizadas estas configuraciones, si se han seguido todos los pasos, tras reiniciar apache2 mediante el comando sudo service apache2 restart deberíamos ver algo similar a la imagen que se muestra a continuación.

Figura 3: Inicio de la instalación de Hashtopolis

En este punto tenemos casi listo nuestro servidor, únicamente queda la configuración de la base de datos y añadir un usuario para utilizar la aplicación web, vamos a ello. Lo primero vamos a instalar phpmyadmin para que resulte más sencilla la administración.
$ sudo apt-get install phpMyAdmin
Dependiendo de la versión que estéis instalando es posible que tengáis que añadir la sentencia Include /etc/phpmyadmin/apache.conf al final del fichero /etc/apache2/apache2.conf. Una vez instalado phpmyadmin accedemos mediante el navegador introduciendo la dirección IP de nuestra máquina /phpmyadmin. Dentro de phpmyadmin vamos a añadir un nuevo usuario para que utilice hashtopolis, a continuación, se muestra la configuración del usuario.

Figura 4: Añadiendo un usuario en Hashtopolis

Una vez añadido el usuario, volvemos a la página de inicio de hashtopolis introduciendo la dirección IP de nuestra máquina en el navegador y comenzamos la instalación. Los parámetros que se requieren para la instalación se muestran en la siguiente imagen.

Figura 5: Parámetros de instalación

Si la creación de las tablas en la base de datos ha sido satisfactoria, hashtopolis nos mostrará una pantalla para crear un usuario administrador en la aplicación web.

Figura 6: Creación de usuario administrador

Tras crear el usuario administrador, nos aparecerá la pantalla de acceso en el navegador. Introduciendo los datos del usuario administrador tendremos acceso al sistema.

Figura 7: Sistema de Hastopolis

En este punto tendríamos el servidor completamente instalado y funcional. Ahora podemos pasar a la segunda parte. Añadir los agentes a nuestra red.

Instalación de los agentes

Los agentes son los programas que se encargarán de comunicarse con el servidor que hemos configurado previamente para recibir tareas que realizar, y deben instalarse en cada uno de los equipos de la red que queramos que participen en el proceso. Vamos a ver como instalar un agente en un equipo Ubuntu.

Lo primero que debemos tener instalado es hashcat, para ello, basta con ejecutar el siguiente comando:
$ sudo apt-get install hashcat
Una vez instalado hashcat, lo único que tendríamos que hacer es seguir las instrucciones que nos marca la Wiki del proyecto.

Figura 8: Wiki de hashtopolis

Tras ejecutar ese conjunto de comandos, vamos a la aplicación web que hemos configurando anteriormente y pulsamos sobre crear nuevo agente.

Figura 9: Añadir nuevo agente

Como puede observarse hay dos agentes disponibles, uno escrito en C Sharp y otro en Python. Vamos a utilizar el de C Sharp. Pulsamos el botón Create del New voucher y a continuación ejecutamos el siguiente conjunto de comandos.

Figura 10: Creación del agente de C# usando Mono

Si se han seguido todos los pasos anteriores, en este punto el agente estaría activo haciendo pulling cada ciertos segundos al servidor para recibir tareas.

Creación de una tarea para probar el agente

La características principales de la creación de tareas pueden encontrase en la Wiki del proyecto de hashtopolis, en este caso, veremos como crear una tarea sencilla para descifrar un Hash md5. En el siguiente video se muestra como crear una tarea y asignársela a un agente Python para que crackee una lista de hashes md5 haciendo fuerza bruta con un diccionario. Hay que tener en cuenta que el servidor y el agente no están en la misma máquina.


Figura 11: Demo de Hashtopolis

Como puede observarse, el uso de esta herramienta es una forma muy buena de aprovechar todos los recursos computacionales que tengamos para realizar una única acción de manera distribuida. Podemos crear listas muy amplias de contraseñas cifradas y asignarle la tarea a varios agentes que comenzaran a descifrar de manera coordinada, sin estar alojados sobre el mismo ordenador y sin disponer del mismo hardware o arquitectura.

Autor: Santiago Hernández, Security Researcher en ElevenPaths

1 comentario:

Pentester dijo...

Hola,

Estoy montando el lab hashtopolis, y el voucher me da fallo lo creo pero... alguna idea¿????

Entrada destacada

Motivación e Inspiración

A veces, cuando voy en un tren, o en un avión en un viaje, me paro a pensar en las cosas que tengo que hacer. Normalmente, las cosas que te...

Entradas populares