martes, marzo 28, 2017

Latch’sApp: Un hack para exfiltrar datos con Latch @elevenpaths #latch #hacking #dataexfiltration

La pasada semana celebramos la IV Edición de nuestro Equinox, un evento interno en el que cualquier persona de CDO puede participar y llevar a cabo sus ideas más locas. En esta ocasión era mi segunda participación, ya que por varios motivos solo había podido participar en una de las tres ediciones anteriores.

Figura 1: "Latch'sApp" Un hack para exfiltrar datos con Latch

La primera idea que rondó deberá esperar para ver la luz, ya que no fue la elegida para participar en este hackathon, pero seguro que en el futuro se verá. La segunda idea fue la de crear un sistema de exfiltración de datos en el que ocultar información a través de los cerrojos de Latch.... y no sonaba nada mal. Este sistema permite crear un canal encubierto a través de las posiciones de los distintos cerrojos de una app de Latch.

Hands On con la exfiltración con Latch

Le comenté la idea a mi compañero Álvaro Nuñez-Romero (@toolsprods) y le gustó. Decidimos participar en las 24 horas de Equinox con esta idea y llevarla a cabo. La idea toca tres partes fundamentales para algunas pruebas de Data Exfiltration, que cada vez van cogiendo más auge en algunos proyectos de hacking ético.

Figura 2: Codificación de bytes con Latch

Este es un dato importante que fue proporcionado al jurado, ya que para comprobar si la inversión en controles internos que eviten o prevengan el filtrado de información de dentro de la organización al exterior es un hecho que cada vez se prueba más en una organización. El hack tocaba tres partes importantes:
Data Exfiltration: La colocación de los cerrojos de Latch representa un 0 o un 1, es decir, si tuviéramos 8 cerrojos podríamos representar 1 byte. Si tuviéramos 16 cerrojos podríamos representar 2 bytes, etcétera.

Canal encubierto: La posibilidad de crear un canal encubierto, como los vistos en la herramienta DET con el caso de Twitter, de Gmail, de Google Docs, son un claro ejemplo de cómo ocultar información a través de dichos canales.

Esteganografía y/o cifrado: La esteganografía permite ocultar información en imágenes, protocolos, otros archivos, y en este caso pensamos que las posiciones de los cerrojos pueden ocultar información, ya sea de un mensaje concreto o, incluso, un archivo cifrado.
El algoritmo para la transmisión de información es sencillo:
1. Se puede enviar un mensaje o un fichero. Sea cual sea el dato a enviar se lee el primer byte. 
2. Se obtiene un binary string, el cuál es la representación en unos y ceros del byte leído. 
3. Se va leyendo cada posición del binary string. Si es 1 se coloca el cerrojo correspondiente a “off”. Si es 0 se coloca el cerrojo correspondiente a “on”. 
4. Hay un noveno cerrojo que marca si la operación es escritura o lectura. Es decir, cuando emitamos o subamos datos colocando los cerrojos en sus diferentes posiciones se marcará el noveno cerrojo a “off” para que el otro extremo sepa que tiene que leer la información. 
5. Cuando el extremo lee la información colocará el noveno cerrojo a “on”. De esta forma se establece una especie de turno entre ambos extremos. 
6. La información que lee el extremo son 8 cerrojos (o N en el caso de hacerlo escalable). Si el cerrojo está a “off” se añade en un binary string el valor 1, si el cerrojo está a “on” se añade un binary string el valor 0. 
7. Una vez se tenga el binary string completo se obtiene el byte y ese byte se ha filtrado.
En la siguiente imagen se puede ver cómo se produce el traspaso de un mensaje utilizando el algoritmo anterior desde una app que utilizamos como emisor y se dedica a configurar los pestillos en la forma adecuada, y una app receptora que se dedica a leer los valores de los pestillos.

Figura 3: Emisor a la izquierda, receptor a la derecha

En el caso de los ficheros el proceso es exactamente igual. Durante el propio Equinox pensamos que sería interesante cifrar los datos que se envían en local, utilizando para ello una clave que pudieran saber los dos extremos. En primer lugar, pensamos en el OTP que el propio Latch puede proporcionar a los usuarios, pero no conseguiríamos que ambos extremos se “enterasen” del mismo OTP, ya que cada vez que hacíamos una petición a una operación con OTP, éste cambia.

Cifrando los datos con AES

Decidimos utilizar un derivado del APP ID. De esta forma, el extremo A cifra en local todos los bytes que quiere transmitir, por lo que la posición de los cerrojos de un byte cifrado a uno no cifrado no es la misma. Con este método, si alguien tiene acceso a la posición de los cerrojos en un momento dado necesitaría, además, de la clave que descifra la información. El cifrado utilizado es un AES.

Figura 4: Envío de fichero cifrado usando AES y codificado en Base64

Para poder visualizar el envío de información cifrada, los bytes se envían cifrados con AES y luego codificados en base64. En la imagen se puede ver un ejemplo de envío de archivo cifrado a través de las posiciones e interpretación de los cerrojos de Latch.

La PoC final con DET

Aparte de comer, disfrutar de actividades en el Equinox y pasar un rato estrujándonos el cerebro nos sobró tiempo para hacer un plugin de DET utilizando Latch, pero eso ya será contado en otra ocasión. Aquí os dejamos el vídeo funcionando el sistema de exfiltración de datos con Latch.

Figura 5: Exfiltrado de datos con Latch en vídeo

Enhorabuena a los premiados en el Equinox y a las grandes ideas y proyectos que allí se vieron. Ser jurado en este tipo de eventos no es fácil y mis compañeros hacen que no les sea fácil. Suerte al jurado y a los próximos participantes del Equinox de septiembre.

Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths

No hay comentarios:

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares