Muy buenas a todos!

Esta semana vuelvo con un nuevo proyecto entre manos. Se trata de una pequeña herramienta llamada Cloudtopolis, que nos permitirá romper hashes en la nube de forma rápida, automática y distribuida. Todo esto, además, sin ningún tipo de coste y usando únicamente tu navegador favorito.

Antes de comenzar, me gustaría aclarar que la idea original es de @mxrch y su herramienta Penglab, que podéis encontrar en el siguiente enlace: https://github.com/mxrch/penglab

Hace varios días, probando la herramienta Penglab, se me ocurrió que probablemente existiría la forma de multiplicar la potencia de la herramienta y hacerla más sencilla, aún si cabe la posibilidad de hacerlo.

Para aquellos que no conocéis la herramienta, no os preocupéis, ya que las dos se basan en el mismo concepto. A pesar de compartir la misma idea, la ejecución es distinta, como podréis ver a continuación. Pero antes, os pondré un poco en contexto:

Actualmente, Google ofrece todo tipo de servicios en la nube. Al igual que sus principales competidores, algunos de forma gratuita, otros de pago fijo, e incluso, de pago por uso. En este caso, nos centraremos en dos productos en concreto, Google Cloud Shell y Google Colaboratory.

Primero comenzaremos hablando de Colaboratory o Colab para los amigos. Este servicio en la nube, nos permite jugar con un entorno de máquinas virtuales basado en Jupyter Notebooks. Estos cuadernos, pueden alojar pequeños trozos de código y ejecutarse a petición. Una de las grandes ventajas que ofrece este entorno, es que dispone de aceleración a través de CPU, GPU y TPU de forma gratuita.

Como todos los servicios gratuitos de Google, necesitaremos una cuenta y se nos aplicará una restricción, en este caso concreto, basada en tiempo. Existen dos factores a tener en cuenta, el primero será la inactividad de la sesión y por último un tiempo máximo de 12 horas, que eliminará por completo el contenido de la máquina virtual.

A partir de aquí, es cuando Penglab entra en juego. Al desarrollador de la herramienta, se le ocurrió que podría utilizar este entorno para romper hashes con Hashcat y otras herramientas. Así que ideó la forma de automatizar todo el proceso. Desde la descarga de las mismas, hasta la compilación y el acceso SSH para interactuar con la máquina virtual.

De esta forma y mientras no haya inactividad, podremos romper hashes a placer sin ningún tipo de problema. Además, el entorno ofrece diferentes tarjetas gráficas de NVIDIA (que se otorgan de forma aleatoria) con una potencia bastante alta. Entre ellas, tenemos la K80, la T4, la P4 y la P100.

Hasta aquí todo fantástico, relativamente sencillo y funcional. El problema, es que nosotros somos hackers y queremos llevarlo todo al límite, así que no pude conformarme sin más😜

Llegados a este punto, sacaremos a Cloud Shell a jugar.

Este producto, también gratuito, nos permite interactuar con los servicios Cloud que ofrece Google. De esta forma, disponemos de una máquina virtual basada en Debian con 5GB de almacenamiento persitente. En este caso concreto, solo de algunas particiones, en las que se incluye la ruta /home.

En cuanto a lo que limitaciones se refiere, disponemos de 50 horas de ejecución a la semana, en la que nuestra máquina virtual desaparecerá tras 20 minutos al cerrar sesión. Además, podemos instalar paquetes a través de apt-get, ejecutar scripts o levantar containers con docker.

Ahora que ya tenemos un concepto claro de lo que nos ofrece Google de forma gratuita, veamos que podemos hacer con ello. O mejor dicho, veamos que podemos con Cloudtopolis.

Antes de entrar en materia, os dejo el link de la herramienta a continuación: https://github.com/JoelGMSec/Cloudtopolis

El uso de este pequeño script es muy sencillo. Consta de dos partes, que usaremos en dos fases. En cada una de ellas, interactuaremos con cada uno los servicios mencionados anteriormente. Antes de comenzar, será indispensable disponer de una cuenta en Google (como mínimo).

Lo primero que haremos, será acceder al siguiente enlace desde nuestro navegador: https://ssh.cloud.google.com/cloudshell/editor?hl=es&fromcloudshell=true&shellonly=true

Si nunca habéis utilizado Cloud Shell, os saldrá un aviso como el que se muestra a continuación:

Una vez aceptamos las condiciones de uso, ejecutaremos los siguientes comandos en la terminal:

wget https://raw.githubusercontent.com/JoelGMSec/Cloudtopolis/master/Cloudtopolis.sh
chmod +x Cloudtopolis.sh
./Cloudtopolis.sh

Esto descargará el primer script, que a su vez, descargará dos contenedores de docker, como podemos ver en la siguiente imagen:

Estos contenedores, instalarán una base de datos MySQL y una instancia de Hashtopolis. Para aquellos que no lo conozcan, se trata de un «framework» gestionado vía web, que nos permite utilizar Hashcat de forma centralizada y distribuida a través de agentes que se registran en este servidor.

Una vez terminada la instalación, el script nos mostrará los datos de acceso y las credenciales:

A partir de aquí, podemos trabajar de dos formas diferentes. La primera, sería conectándonos a través de SSH y realizando un port forwarding. De esta forma, podríamos acceder a Hashtopolis desde la ruta http://localhost:8000

Por otra parte, si hacemos click sobre la dirección url que nos aparece en la terminal, utilizaremos el proxy interno de Google para acceder a Hashtopolis desde el navegador, sin tener que utilizar ningún tipo de cliente SSH. Esto nos permitiría, entre otras cosas, hacerlo desde un dispositivo móvil o desde un equipo sin privilegios ni posibilidad de instalar ningún tipo de cliente SSH o tener que levantar ningún túnel.

Una vez estemos dentro del panel de administración, será necesario crear un nuevo Voucher para poder registrar un nuevo agente, que será el que romperá los hashes que le hayamos indicado posteriormente.

Para ello, es tan secillo como ir a la siguiente dirección: http://localhost:8000/agents.php?new=true

Una vez dentro, pulsaremos sobre el botón «Create» y copiaremos el código alfanumérico.

Es importante que mantengamos la ventana de la terminal y la de Hashtopolis abierta en todo momento, para evitar que Google nos destruya la máquina virtual por inactividad.

Con esto damos por concluida la primera fase, que no será necesaria repetir a no ser que lo cerremos todo. Este dato es importante, ya que la segunda fase, puede repetirse tantas veces como se desee, siempre y cuando se disponga de una cuenta de Google por cada ejecución.

En esta segunda parte, accederemos al siguiente cuaderno de Colaboratory: https://colab.research.google.com/github/JoelGMSec/Cloudtopolis/blob/master/Cloudtopolis.ipynb

Una vez dentro, lo único que tendremos que hacer, es rellenar los campos de la sección «Requeriments» con los datos obtenidos en la terminal y el Voucher que ya habíamos copiado anteriormente.

Una vez tengamos todos los datos, pulsaremos sobre el icono con forma de play o desde el menú de ejecución. Esto creará una nueva instancia de máquina virtual, le asignará una GPU aleatoria y ejecutará el siguiente código:

# Checking GPU
!echo -e "\e[0m"
!echo -e "\e[32;1m [+] Checking GPU.."
!echo -e "\e[0m"
!apt-get install pciutils -y -qq > /dev/null
!lspci | grep NVIDIA

# Connecting with hashtopolis
!echo -e "\e[0m"
!echo -e "\e[32;1m [+] Connecting with hashtopolis.."
!echo -e "\e[0m"
!apt install sshpass -y -qq > /dev/null
!sshpass -p Cl0udt0p0l1s! ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -fN -L 1337:localhost:8000 $User@$IP -p 6000 > /dev/null 2>&1 & 

# Download and run agent
!echo -e "\e[0m"
!echo -e "\e[32;1m [+] Download and run agent.."
!echo -e "\e[0m"
!wget --quiet http://localhost:1337/agents.php?download=1
!mv 'agents.php?download=1' hashtopolis.zip
!python3 hashtopolis.zip --url http://localhost:1337/api/server.php --voucher $Voucher

Como podéis ver, básicamente se conectará con Hashtopolis a través de SSH. De esta forma, a diferencia de lo que ocurría en Penglab, ahorraremos mucho tiempo al desplegar los cuadernos, ya que no necesitaremos descargar ningún tipo de herramienta en la máquina virtual.

Esto, principalmente se debe, a que podemos centralizar todos los binarios, diccionaros y demás utiles a través de Hashtopolis en un único lugar. Además, contamos con la posibilidad de registrar tantos agentes como queramos, para ello, lo único que tendremos que hacer, es repetir la segunda fase con otra cuenta de Google.

Si os da problemas con el registro, cread un nuevo Voucher y volverlo a intentar, a veces pasa. Recordad que el resto de datos deben ser los mismos.

Es decir, si dispones de cuatro cuentas de Google, puedes utilizar la primera para realizar las dos fases y posteriormente, utilizar las otras tres para ejecutar la segunda parte con cada una de ellas. También existe la posiblidad de compartir tus datos con amigos o compañeros de confianza, haciendo que cada uno de ellos registre un agente diferente con su propia cuenta.

Una vez termianda la ejecución del cuaderno, esté quedará en un estado de «bucle infinito» que evitará que la máquina virtual se detenga por inactividad. Además, podremos consultar el estado de las tareas y la velocidad de proceso en cada uno de los cuadernos.

Por último, solo nos quedará confirmar que el agente se ha registrado correctamente. A partir de aquí, introduciremos los datos en Hashtopolis, seleccionaremos los agentes y automáticamente todo funcionará como por arte de magia.

Como dato adicional, por ahora Google solo bloquea las cuentas que utilizan este servicio para minar criptomonedas. Pese a ello, no descarto que un futuro no muy lejano, este proceso no cumpla con las buenas prácticas de Google. Por lo que personalmente, os recomiendo que leáis los terminos y condiciones de estos servicios regularmente.

Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.

Nos vemos en la próxima!