HackDef Finals 2019 - Robando $1 millon de dolares del Banco

By Daniel Regalado aka DanuX
@danuxx

En este blog se describiran todos los retos preparados para la gran final del HackDef 2019 celebrado en la Torre Telmex de Plaza Inbursa el pasado 28 y 29 de Septiembre de 2019.

La Mision: Robar $1, 000 000 de dolares de la cuenta del millonario Ulises Fortress, y transferirlos a la cuenta de los atacantes. Para esto, sera necesario hackear el banco CaptureBank donde dicha cuenta se encuentra administrada, entrando desde la pagina Web de la institucion bancaria, pasando por el ruteador que controla el acceso a la red interna, llegando a un gateway que es el unico camino para llegar al preciado Bunker, el lugar mas protegido del Banco donde se encuentran las tarjetas bancarias resguardadas.

A continuacion se presenta un diagrama de flujo donde se puede ver el camino que deberan recorrer los partcipantes:



Los vectores de ataque se dividen en 4 zonas como se describe a continuacion:
  1. DMZ Perimeter: Involucra la pagina Web del Banco y una Aplicacion Movil
  2. Netgear Router: Filtra el acceso a la red interna
  3. Internal Gateway: Es el unico Servidor que se comunica con el Bunker
  4. Inside Bunker: Lugar restringido donde se resguardan las tarjetas de Credito

A continuacion un diagrama de bloques de los retos existentes en cada una de las zonas antes mencionadas asi como su interconexion hasta llegar al Bunker:


ZONA - DMZ Perimeter

Al inicio de la competencia se abren 4 retos automaticamente de la zona DMZ Perimeter: Loki, Tokenizer, MovilApp y CLABEFinder, y 2 mas dependen de ellos: Goofy y Str0ke. Veamos los detalles.

Loki

Existe un bug en la pagina web del Banco que permite obtener el password de un tarjetahabiente. Aqui mostramos dicha pagina vulnerable:



La vulnerabilidad es de tipo Blind SQL Injection, y los detalles de la resolucion pueden ser leidos aqui.
Sin embargo, esto no es suficiente para obtener el acceso no autorizado, ya que el sistema requiere de un token unico como segundo factor de autenticacion, el cual se puede obtener resolviendo el reto Tokenizer como se describe a continuacion.

Tokenizer

El algoritmo generador de tokens ha sido proporcionado por nuestro informante y la tarea es hacerle ingenieria inversa para poder generar nuestros propios tokens y  conseguir el acceso.

Una vez resuelto este reto, ya es posible obtener el acceso no autorizado y entonces entrar al perfil del tarjetahabiente como se muestra a continuacion. Solucion del reto aqui



Goofy

Una vez logeado en el perfil del tarjetahabiente, se abre un nuevo reto Web llamado Goofy, el cual gracias a un ataque de tipo Server Side Request Forgery (SSRF) y con el protocolo Gopher es posible extraer archivos sensibles, que en este caso permitiria encontar una Base de Datos de clientes encriptada. Solucion del reto aqui.

Str0ke

Dicha Base de Datos encontrada en el reto anterior tiene que ser desencriptada, y por ende, este reto criptografico proporciona el codigo para su analisis, resulta que hay un error en la implementacion de AES CBC (usando el mismo valor para la llave de encriptacion y vector de inicializacion).
En la figura siguiente se puede ver el archivo desencriptado, y mucha atencion, el ID 87 el cual pertenece a nuestra victima, el millonario Ulises Fortress! Dicha informacion sera utilizada mas adelante. Solucion del reto aqui.



MovilApp

Por otro lado, se encontro una aplicacion movil que se sabe se utilizaba para conectarse con la Banca en Linea y que implementa de forma erronea el algoritmo de RSA siendo vulnerable a un ataque conocido como Low Public Exponent Attack. Esto permitiria obtener credenciales utlizadas por los desarrolladores en produccion, habilitando la descarga del firmware que corre en el router Netgear. Solucion del reto aqui.

CLABEFinder

Finalmente y como ultimo reto de esta zona, es un servicio que permite buscar CLABES de los tarjetahabientes, el cual es vulnerable a un clasico Stack Overflow, que una vez explotado, permite la descarga de un programa que se conecta a la red interna del Banco!!! Solucion del reto aqui.

Hallazgos
  1. Al finalizar esta zona, el atacante tiene acceso no autorizado a la banca en linea de un tarjeta habiente
  2. Ha encontrado los usernames, IDs y sus respectivos nombres completos de los clientes del Banco. 
  3. Ha obtenido credenciales que le permitiran descargar el firmware del router Netgear para entonces tratar de comprometerlo
  4. Ha descargado un cliente que se sabe se conecta a la red interna del Banco. 

Con toda esta informacion, los atacantes avanzan a la siguiente zona: Netgear Router!

ZONA - Netgear Router



Los atacantes han burlado la zona perimetral y han llegado hasta la zona del router Netgear el cual monitorea el acceso a la red interna. En esta zona aparecen 2 nuevos retos: N3tG34r y Cargad0r mismos que se describen a continuacion.

N3tG34r

Una vez resuelto el reto MovilApp, esto permitio acceder a una seccion restringida donde se pudo descargar el firmware del router Netgear WNAP320 el cual se sabe es vulnerable a shell command injection, sin embargo, dicha vulnerabilidad ha sido "arreglada" por el Banco como se muestra a continuacion:
Y entonces se debe hacer un ataque tipo Blind time-based command injection para poder leer archivos de forma remota! Ver solucion aqui.
Una vez comprometido el router, se revelan detalles de conexion a un servicio que corre al interior del Gateway de la red interna del Banco!

Cargad0r

Aqui se presenta un programa que fue descargado una vez resuelto el reto CLABEFinder, el cual una vez que se le hace ingenieria inversa se descubre que es un Downloader, y se descifra el algoritmo que genera un User-Agent especifico para entonces poder descargar software del Gateway interno!
Ver solucion aqui.

Hallazgos
  1. Se ha obtenido acceso a un servicio que corre en la red interna y entonces se intentara comprometerlo
  2. Es posible descargar software del Gateway Interno lo cual permitira encontrar un cliente que se comunica con el Bunker!

ZONA - Internal Gateway


En este momento, el atacante ya esta en la red interna, y estara tratando de comprometer el Gateway Interno mismo que es el unico que permite la comunicacion con el super protegido Bunker. En esta zona se habilitan 3 retos: Cegat0n, Abonero y DrunkTillDawn. Veamos los detalles a continuacion.

Cegat0n

Este es un servicio que corre en el Gateway Interno y que fue descubierto una vez comprometido el router Netgear. Es vulnerable a stack overflow a pesar de que cuenta con proteccion ante este ataque. La solucion aqui.
Una vez comprometido, se puede descargar un programa importantisimo, el cual procesa las tarjetas de Credito resguardadas en el Bunker!

Abonero

Este cliente fue descargado desde la red interna una vez resuelto el reto Cargad0r. Este cliente se comunica con el Bunker a traves de una tecnica fantastica conocida como "Port Knocking", la cual permite habilitar el acceso a ciertos puertos o servicios una vez que se detecta una sequencia unica de puertos. Los 2 servicios abiertos temporalmente dentro del Bunker son:
  1. MySQL: Acceso temporal a este puerto para poder hacer consultas a la Base de Datos de las tarjetas de Credito de los clientes.
  2. ELITE: Acceso temporal a un servicio que corre dentro del Bunker
Debido a esto, este reto consiste en hacerle ingenieria inversa a dicho programa para encontrar la secuenca de puertos que necesita enviar para habilitar el acceso. Solucion aqui.
La siguiente figura, muestra la combinacion de puertos esperada:



Una vez que este reto se resuelve, se habilitan 2 nuevos retos: DrunkTillDawn y Guardian, ya que los 2 dependen del servicio MySQL que corre en el Bunker, y una vez resueltos se permitira obtener el password de la Base de Datos con las tarjetas de Credito! Es importante mencionar que ambos retos ofrecen el mismo resultado, por lo que no es necesario resolver los 2.

DrunkTillDawn

Este reto Web consiste en explotar una vulnerabilidad de tipo Blind XXE con DTD Local. Detalles de la solucion aqui. Y como se menciono anteriormente, una vez resuelto permitia encontar el password de la Base de Datos de las tarjetas de Credito resguardads en el Bunker.


Hallazgos
  1. Se ha encontrado un programa que permite el procesamiento de las tarjetas de Credito
  2. Se ha descubierto la combinacion de puertos a enviar para que el Bunker active acceso a servicios criticos
  3. Se ha obtenido (Si se resolvio el reto DrunkTillDawn) el password de la Base de Datos de las tarjetas de Credito

ZONA - Inside Bunker


Hemos llegado, la gloria esta cerca! Finalmente estamos en la zona mas critica de toda la entidad financiera, un servidor que corre en arquitectura AArch64, el cual resguarda lo mas preciado del Banco, las tarjetas de Credito!

Felicidades al equipo {l4_p4nd1ll4_m4nt3q1ll4} por haber llegado hasta este punto e incluso obtener una Shell dentro del Bunker! Solo que desafortunadamente se acabo el tiempo.

En esta zona, se presentan los ultimos 3 retos: Guardian, CardReader y Jackp0t. Estos retos permitiran acceder a la Base de Datos con las tarjetas de Credito, desencriptarlas y realizar una transferencia sin el token fisico del tarjetahabiente! Veamos los detalles.

Guardian

Este es un servicio que puede ser accedido dentro del Bunker gracias a la combinacion de puertos descubierta en el reto Abonero. Se trata de un servicio que corre en AArch64 y que es vulnerable a Heap Overflow. Una vez comprometido (Y al igual que el reto DrunkTillDawn) permitira obtener el password de la Base de Datos de las tarjetas de Credito. La solucion aqui.

CardReader

Ya con el password de la Base de Datos de la tarjetas de Credito obtenido gracias a los retos Guardian o DrunkTillDawn, resulta que el usuario utilizado en dicha conexion es el que se obtuvo al resolver el reto de str0ke (perteneciente a la victima Ulises Fortress). Entonces ya tenemos todo listo para obtener dicha informacion sensible de la Base de Datos y al hacer la consulta se obtiene lo siguiente:


Parece que festejamos muy rapido, los datos estan encriptados y entonces hay que hacerle ingenieria inversa a dicho programa LeeTarjeta para obtener el texto claro. La solucion del reto aqui.
Una vez entendido el algoritmo de encriptacion, se obtienen todas las tarjetas desencriptadas y en especifico la del ID 87 de nuestra victima Ulises Fortress, como se muestra en la siguiente figura:



Jackp0t

Una vez robado los datos de la tarjeta de nuestra victima Ulises Fortress, estamos listos para transferirnos un millon de dolares desde su cuenta, pero hay un problema, este tipo de transaccion necesita del token fisico del tarjetahabiente el cual no tenemos. Entonces el reto consiste en identificar el token esperado y con esto realizar dicha transaccion. Aqui la solucion de dicho reto final.

Una vez que el token esperado es identificado, se procede a realizar la transferencia de $1, 000, 000 USD a la cuenta del atacante y ...


We got a winner!!! MISION CUMPLIDA!!!

Agradezco el apoyo de las siguientes personas que voluntariamente apoyaron en la realizacion de los retos con la pasion de compartir conocimiento a nuestros estudiantes, sin ellos no hubiera sido posible:

@dark1t
@drummer7212
@_Evil_Machine
@f99942
@hextupid
@nogagmx
@xbytemx

Tambien agradezco el apoyo de @Scitum_MX por todo el patrocinio de transporte aereo y terrestre de los equipos foraneos, hospedaje, comidas, infraestructura y desde luego los premios!

Nos vemos en el HackDef 2020!

Viva Mexico!

Comments