Configuración avanzada de Tor

Tor es un software que cifra y anonimiza las comunicaciones en línea haciendo rebotar el tráfico entrante y saliente a través de distintos nodos antes de llegar a su destino. Esto dificulta conocer la fuente original del tráfico si no se tiene el control sobre varios nodos al mismo tiempo.

Los datos se ocultan tras varias capas de cifrado antes de llegar al final de la ruta, de modo que los servidores que hacen rebotar los paquetes solo disponen de la información necesaria para transmitir los datos al siguiente nodo. Cada nodo por el que se transmite la información solo puede descifrar su capa correspondiente, lo que garantiza que la información se mantenga segura incluso si uno de los nodos se ve comprometido.

Los nodos de salida son utilizados para transmitir los datos a los servicios comunes de internet, enmascarando la dirección IP de salida de una forma similar —aunque en realidad notablemente diferente— a cómo lo haría un servicio de VPN. Sin embargo, la red Tor dispone de sus propios servicios ocultos que no necesitan direcciones IP para funcionar y aseguran la autenticidad e integridad del contenido mediante técnicas de cifrado.

Tor Project explica muy bien el funcionamiento de los servicios ocultos en este artículo.

Volviendo a los nodos, las direcciones de estos son públicamente accesibles en el directorio público de Tor, lo que puede ayudar a un adversario a detectar o censurar el acceso a la red Tor. Es por eso que existe un sistema de puentes, que no son otra cosa que relays no listados públicamente. A lo largo de la historia de Tor han existido varios tipos de puentes, pero a fecha de esta redacción existen tres tipos principales: obfs4, Meek y Snowflake. Los puentes de Tor sustituyen a los nodos de entrada cuando están habilitados.

Sin entrar en cuestiones demasiado técnicas, para resumir, estas son las principales características de los sistemas de puentes:

  • obfs4 – Hace que los paquetes parezcan aleatorios y sin sentido, aunque es relativamente fácil para un adversario determinar si estás conectado a la red Tor.
  • Meek – Da la apariencia de estar conectado a un servidor de Azure mediante domain fronting, siendo más discreto y haciendo necesario bloquear una buena parte de internet para censurar el acceso a Tor. Se usa principalmente en China.
  • Snowflake – Se conecta a proxies efímeros ejecutados por voluntarios en sus navegadores mediante un intermediario que selecciona automáticamente la dirección a conectarse y la sustituye en caso de bloqueo.

Puedes conseguir puentes en bridges.torproject.org u obtenerlos directamente desde el navegador Tor.

El diseño de Tor garantiza en cierto modo el anonimato de quien encubre su navegación con este software, dificultando la tarea de un rastreador a la hora de localizar a un usuario de Tor.

Superfície de ataque

Aunque Tor es una de las mejores herramientas de privacidad y anonimato al alcance de todo el mundo, toda solución tiene potenciales vulnerabilidades que, a efectos de esta guía, deberían tenerse en cuenta.

A continuación introduciré algunos posibles escenarios de ataque:

  • Selección de entrada inducida – Un atacante local puede provocar la selección de un nodo de entrada malicioso alterando el acceso a los relays y bloqueando la conexión a otros nodos legítimos para realizar análisis de tráfico.
  • Explotación de permisos de plugins – Los plugins del navegador pueden ser usados para saltarse la configuración del proxy y desanonimizar al usuario.
  • Análisis de marcas de tiempo – Los proveedores de servidores que gestionan múltiples nodos de Tor pueden desanonimizar usuarios realizando análisis en las marcas de tiempo de las conexiones del cliente con el nodo de entrada y el nodo de salida con el destino.
  • Firmas en el tráfico – Mediante un token y un número específico de paquetes vacíos, se puede crear una firma en el tráfico. Un atacante que controla un servicio y uno o varios nodos de entrada puede deducir si su nodo ha sido elegido por el cliente, revelando así su dirección IP.
  • MITM – Un atacante con acceso a la llave privada de un servicio oculto podría realizar ataques man-in-the-middle en el servicio.

Este artículo en la wiki de Whonix extiende esta lista y ofrece referencias para más información.

Instalación (Tor Browser)

Generalmente, los clientes de Tor se conectan mediante el Tor Browser Bundle, un navegador securizado basado en Firefox que además integra el software para conectarse a la red Tor. Para obtener el navegador, dirígete a torproject.org/download y elige la versión para Linux.

Cerca del botón de descarga debería haber una referencia a la firma del archivo. Descárgala también e importa la llave pública de Tor Project a continuación:

$ gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org

Ya descargado Tor Browser junto a su firma, dentro del directorio donde se ha descargado el navegador comprimido, ejecuta el siguiente comando:

$ gpg --output ./tor.keyring --export torbrowser@torproject.org
$ gpgv --keyring ./tor.keyring tor-browser-linux*.asc tor-browser-linux*.tar.xz

Si el proceso de verificación es correcto, descomprime el navegador:

$ tar -xvf tor-browser-linux*.tar.xz

Quedará un directorio en el que se encontrará un archivo llamado start-tor-browser.desktop. Este será el archivo que usarás para iniciar el navegador. Puedes ejecutarlo simplemente con ./start-tor-browser.desktop (estando en la misma ruta que el archivo) o creando un acceso directo, por ejemplo, en el escritorio:

$ ln -sf ~/Downloads/tor-browser/start-tor-browser.desktop ~/Desktop/

Una vez hecho esto, y habiendo ejecutado Tor Browser por primera vez, te encontrarás con dos opciones: conectarse a la red Tor o configurar el navegador.

Si eliges la opción de configuración, te encontrarás con el sistema de puentes mencionado anteriormente y otras opciones de seguridad descritas en la interfaz. Puedes configurar Tor Browser según tus necesidades o empezar a navegar directamente.

Instalación (Tor)

Aunque la principal vía de acceso a Tor es la del navegador, algunos usuarios pueden necesitar únicamente el software del cliente para configurar manualmente el proxy en las aplicaciones que sea necesario. Para ello, aunque el paquete de Tor se encuentra en la mayoría de repositorios, es recomendable usar el repositorio oficial de Tor Project para sistemas basados en Debian.

Instala apt-transport-https para descargar paquetes bajo HTTPS:

$ sudo apt-get install apt-transport-https -y

A continuación crea el archivo /etc/apt/sources.list.d/tor.list:

deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org <distro> main
deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org <distro> main

Deberás sustituir <distro> por el resultado del comando lsb_release -cs.

Añade la llave usada para firmar los paquetes:

$ sudo wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null

Por último actualiza los repositorios del sistema e instala Tor:

$ sudo apt update
$ sudo apt install tor deb.torproject.org-keyring

Por defecto, Tor se ejecutará cada vez que se encienda el sistema, pero puedes evitarlo deshabilitando el servicio:

$ sudo service tor disable

Si lo has deshabilitado, deberás ejecutarlo manualmente cada vez que quieras usar Tor:

$ sudo service tor start

torrc

torrc es el archivo que contiene la configuración de la conexión a la red Tor. Su ubicación puede variar dependiendo del sistema y del método de instalación, aunque generalmente se encuentra en [ruta-de-instalación]/Browser/TorBrowser/Data/Tor/torrc para el navegador y /etc/tor/torrc para el paquete independiente de Tor.

A continuación algunos de los elementos más relevantes a nivel de usuario:

  • Bridge – Lista de puentes a seleccionar – Valores: información del puente
  • UseBridges – Activar o desactivar el sistema de puentes – Valores: 0 o 1
  • ExitNodes – Lista de nodos de salida a usar separados por coma – Valores: Identificador de nodo, dirección IP, rango de direcciones o código internacional
  • EntryNodes – Lista de nodos de entrada a usar separados por coma – Valores: Identificador de nodo, dirección IP, rango de direcciones o código internacional
  • ExcludeNodes – Lista de nodos a excluir separados por coma – Valores: Identificador de nodo, dirección IP, rango de direcciones o código internacional
  • ExcludeExitNodes – Lista de nodos de salida a excluir separados por coma – Valores: Identificador de nodo, dirección IP, rango de direcciones o código internacional
  • StrictNodes – Habilitar o deshabilitar el cumplimiento estricto de las reglas relacionadas con los nodos – Valores: 0 o 1

Este es un ejemplo de cómo podría verse el archivo torrc de un usuario:

Bridge obfs4 195.139.201.31:443 088C1F6ECAD6DD19CB13283ACED99A753D2DBFD8 cert=7pSz84XnnWvhqXw54YQydbrY2jD1M2eNEMh8HMIO7gIzYbTuLqIXYo06fpKtl/XUCUzQBQ iat-mode=0
Bridge obfs4 85.184.134.157:4002 DACD569C6FB236D98281DFCFF667318813ABA852 cert=iEjnll5vofVNONiXYgaCMxwmJe6HDKf8yIBUFgoyncQH/eJ2qIWapR98afR4awW9HkjdOw iat-mode=0
UseBridges 1
ExitNodes {de}, {ru}, 185.220.0.0/16, 193.35.18.77, $00283b5564e3072dcddab31d6ef622dd49bf524f
EntryNodes {ru}, {ua}, {jp}, 180.224.19.0/24
ExcludeNodes {us}, {uk}, {au}
ExcludeExitNodes 107.189.30.86, 152.0.0.0/8
StrictNodes 1

Aislamiento de rutas

Para evitar la relación entre distintas operaciones durante el uso de Tor, existe la posibilidad de crear varios circuitos aislados al mismo tiempo, de forma que posibles observadores sean incapaces de analizar el tráfico de las actividades en su totalidad.

Esto puede conseguirse añadiendo varias entradas de SocksPort al archivo torrc:

SocksPort 127.0.0.1:9050 IsolateDestAddr IsolateDestPort
SocksPort 127.0.0.1:9051 IsolateDestAddr IsolateDestPort
SocksPort 127.0.0.1:9052 IsolateDestAddr IsolateDestPort

De este modo será posible configurar el proxy de Tor en varios entornos usando distintos puertos, lo que llevará las conexiones por rutas paralelas logrando mayor efectividad para proteger las comunicaciones.

Proxy transparente

Dependiendo de la configuración, actividades y objetivos de cada usuario, puede que lo más seguro sea usar un proxy transparente para enrutar todo el tráfico del sistema a la red Tor. Esto puede conseguirse configurando Tor y aplicando ciertas reglas en el firewall.

En primer lugar, añade estas líneas a torrc:

SOCKSPort 9050
DNSPort 5353
TransPort 9040

A continuación asegúrate de tener cargados los módulos de iptables:

$ sudo modprobe ip_tables iptable_nat ip_conntrack iptable-filter ipt_state

En caso de no haberse cargado por defecto, añádelos a /etc/modules.

Ahora crea el archivo que contendrá las reglas en /etc/iptables/rules.v4:

*nat
:PREROUTING ACCEPT [6:2126]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [17:6239]
:POSTROUTING ACCEPT [6:408]
 
-A PREROUTING ! -i lo -p udp -m udp --dport 53 -j REDIRECT --to-ports 5353
-A PREROUTING ! -i lo -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
-A OUTPUT -o lo -j RETURN
--ipv4 -A OUTPUT -d 192.168.0.0/16 -j RETURN
-A OUTPUT -m owner --uid-owner "debian-tor" -j RETURN
-A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports 5353
-A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
COMMIT
 
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
 
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
--ipv4 -A INPUT -p tcp -j REJECT --reject-with tcp-reset
--ipv4 -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
--ipv4 -A INPUT -j REJECT --reject-with icmp-proto-unreachable
--ipv6 -A INPUT -j REJECT
--ipv4 -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
--ipv4 -A OUTPUT -d 192.168.0.0/16 -j ACCEPT
--ipv6 -A OUTPUT -d ::1/8 -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m owner --uid-owner "debian-tor" -j ACCEPT
--ipv4 -A OUTPUT -j REJECT --reject-with icmp-port-unreachable
--ipv6 -A OUTPUT -j REJECT
COMMIT

Ten en cuenta que los valores debian-tor y 192.168.0.0/16 dependerán de tu sistema y configuración de red. Debes adaptar estas reglas a tu configuración.

Si usas IPv6, vincula el archivo a /etc/iptables/rules.v6:

$ sudo ln -sf /etc/iptables/rules.v4 /etc/iptables/rules.v6

Instala iptables-persistent para cargar las reglas al inicio del sistema:

$ sudo apt-get install iptables-persistent

Finalmente reinicia el sistema y comprueba que los cambios están funcionando.

Servicios ocultos

Crear un servicio oculto en Tor es tan fácil como crear un servicio normal en una red común siempre que el protocolo esté basado en TCP dadas las limitaciones de Tor.

Tras configurar tu servicio, véase un servidor HTTP escuchando en el puerto 8080, añade lo siguiente al archivo torrc:

HiddenServiceDir /var/lib/tor/servicio_oculto/
HiddenServicePort 80 127.0.0.1:8080

Esto creará un servicio oculto en Tor y será accesible por el puerto 80, aunque internamente funcionará por el puerto 8080.

Es posible tener varios servicios ocultos al mismo tiempo, e incluso varios servicios funcionando bajo la misma dirección de Tor. Por ejemplo:

HiddenServiceDir /var/lib/tor/servicio_oculto_1/
HiddenServicePort 80 127.0.0.1:8080
HiddenServicePort 22 127.0.0.1:22
 
HiddenServiceDir /var/lib/tor/servicio_oculto_2/
HiddenServicePort 80 127.0.0.1:8081

Consulta la dirección de tu servicio en el archivo hostname que se encuentra dentro de la ruta definida en la entrada HiddenServiceDir.

Si pretendes gestionar altas cantidades de tráfico, tal vez te interese usar Onionbalance.


napalm@cryptolab.net