Tor

Tor

Tor (“The Onion Router”), es un proyecto cuyo objetivo principal es el desarrollo de una red de comunicaciones distribuida de baja latencia y superpuesta sobre internet, en la que el encaminamiento de los mensajes intercambiados entre los usuarios no revela su identidad, es decir, su dirección IP (anonimato a nivel de red) y que, además, mantiene la integridad y el secreto de la información que viaja por ella. Por este motivo se dice que esta tecnología pertenece a la llamada darknet o red oscura también conocida con el nombre de deep web o web profunda.

Para la consecución de estos objetivos se ha desarrollado un software libre específico. Tor propone el uso del llamado ‘onion routing’ de forma que los mensajes viajen desde el origen al destino a través de una serie de routers especiales llamados ‘onion routers’. El sistema está diseñado con la flexibilidad necesaria para que pueda implementar mejoras, se despliegue en el mundo real y pueda resistir diferentes tipos de ataques.

Funcionamiento

La red de Tor está constituida por miles de servidores (llamados nodos) opearados por voluntarios. Tor utiliza estos servidores para crear conexiones a través de varios túneles virtuales en vez de realizar las conexiones de forma directa. De esta forma se evita que la máquina a la que nos conectamos a través de Tor (Por ejemplo, un servidor web) sepa desde donde nos estamos conectando, protegiendo de forma efectiva nuestro anonimato. Además, Tor permite sortear la censura. Si nuestro ISP (Por ejemplo, Vodafone, Orange, Movistar…) está bloqueando alguna página web, podremos acceder a ella a través de Tor, ya que nuestro ISP no será capaz de saber a donde nos estamos conectando.

Para entender el funcionamiento de Tor, supongamos que Alice se quiere conectar al servidor de Bob (Un portal web, por ejemplo):

Primero, el cliente de Tor de Alice se conecta a un directorio de la red Tor para descargarse la lista de nodos de Tor. Una vez descargada, el cliente de Tor de Alice selecciona tres nodos al azar para crear un circuito. Alice enviará a y recibira los paquetes de Bob a través de este circuito, una vez se haya creado.

Para esto, el cliente de Tor construye el circuito “salto por salto”, negociando una clave criptográfica con cada nodo para proteger el contenido de los paquetes y de manaera que cada nodo acaba conociendo solamente cual es el nodo anterior y cual es el nodo siguiente: - El primer nodo, nodo de entrada o “Guard” conoce la dirección IP origen de los paquetes y la IP del segundo nodo de Tor. No puede descifrar el contenido - El segundo nodo, nodo intermedio o “Relay” conoce la direcciôn IP del primer nodo y la del tercero. No sabe de donde viene el paquete ni a donde va, tampoco puede descifar su contenido. - El tercer nodo, nodo de salida o “Exit node” conoce la direcciôn IP del segundo nodo y la destinación del paquete. Para poder entregar el paquete adecuadamente este nodo es capaz de ver el contenido del mismo si no está cifrado. Para mitigar la amenaza de los nodo de salida malicios es altamente recomendable que la comunicación entre Alice y Bob sea cifrada y autenticada punto a punto (Por ejemplo, con HTTPS) para que el nodo de salida sea incapaz de acceder o modificar el contenido de los paquetes que se envian por el circuito.

Además, para evitar que la actividad de una sesión de Tor sea relacionable, El cliente de Tor crea un nuevo circuito cada diez minutos. Aplicaciones como el Tor Browser crean un nuevo circuito para cada destinación a la que nos conectamos. ## Tor Browser El equipo de Tor ha desarrollado un navegador para acceder a los sitios web alojados dentro de la red de Tor. Facilita enormemente el uso de esta red y es el producto estrella del equipo. En esencia, es una versión estable de Firefox que sólo se comunica a través de Tor. Por lo tanto, permite por una parte acceder a servicios web ocultos dentro de Tor, y por otra, acceder a los servicios webs convencionales de una forma anónima, a través de los nodos de salida.

Además, incluye algunas extensiones para proteger la seguridad e identidad de sus usuarios. Estas son: - HTTPS Everywhere Fuerza siempre que puede conexiones cifradas entre el nodo de salida y el servicio web de la “Clearnet”. Dentro de los sitios web de la “Darknet” no tiene efecto porque las comunicaciones ya van cifradas hasta el final. - No Script Bloquea el Javascript y Flash para evitar “fingerprinting”, es decir, la recolección de información del usuario para identificarlo y rastrearlo. (Ver Panopticlick). La amenaza genérica es ejecutar código ajeno en la máquina propia

El Tor Browser está disponible para Windows, Mac y Linux, y viene como navegador por defecto en el sistema operativo Tails.

Tor daemon

Desde un perfil más técnico, el servicio o demonio de Tor permite canalizar cualquier conexión TCP a través de la red de Tor. Si el navegador permite consultar tan sólo servicios web, el demonio funciona habilitando cualquier servicio de red sobre TCP, como las conexiones entre una aplicación cliente y un servidor de Twitter, de correo electrónico, de calendario, de actualizaciones del sistema, etc.

Desde otras aplicaciones se puede usar como si fuera un proxy convencional. Además, hay herramientas que permiten tunelar tráfico TCP a través de Tor sin configurar el programa que genera el tráfico. Este es el caso de torsocks:

$ torsocks ssh user@server

Finalmente, para aplicaciones que generen tráfico UDP, se puede provar con onioncat, aunque los resultados no siempre son satisfactorios.

Hidden Services

Tor permite ofrecer servicios de manera que su localización del servidor queda oculta. A estos servicios, que sólo son accesibles a través de Tor, se les llama hidden location services o simplemente hidden services.

Ventajas

Ofrecer un servicio dentro de la red Tor tiene sus ventajas:

  • La localización del Hidden Service es desconocida para sus visitantes y no puede ser encontrada a través de la red Tor.
  • La identidad y localización de los visitantes queda protegida ya que es necesario usar Tor para acceder al servicio. Esto proporciona algunas garantías:
  • La conexión entre el hidden service y el cliente está cifrada, por tanto si las conexiones de tus visitantes estan siendo monitorizadadas, no revelarán que se está accediendo a un hidden service.
  • Quien monitericé dichas conexiones sólo sabrá que se está conectando a la red Tor (esto se puede ocultar usando ‘’Pluggable Transports’’), pero no sabrá a donde se accede a través de esta red.
  • Tampoco se sabrá que información se está enviand o recibiendo.

Riesgos

Cuando gestionamos un hidden service, hay una serie de riesgos que se tienen que tener en cuenta:

  • Hay que ser cuidadoso, debemos evitar que el servidor revele información sobre nosotros, la máquina donde corre o su localización. El software que estemos utilizando puede revelar información sobre el sistema operativo que se está usando.
    • Si la máquina donde está tu hidden service no está conectada a la red, tampoco lo estará tu hidden_service. Esto puede revelar información a un adversario observador.
  • Por este motivo se desaconseja proveer servicios en el internet público (clearnet) y en Tor al mismo tiempo. Un adversario podría provocar un ataque de denegación de servicio contra tu servidor en la clearnet, y ver si el hidden_service deja de ser accesible.
    • Es una buena idea alojar los hidden services en un cliente de tor, en vez de en un relay. Los datos sobre la disponibilidad de los relays son públicos.
  • Cuanto mas tiempo está online un hidden service, más alto es el riesgo de que su localización sea descubierta:
    • Se pueden lanzar ataques para comprobar la disponibilidad del servicio, como hemos visto antes.
    • Se puede inducir un patrón de tráfico en el hidden service y comprobar si se corresponde con determinado tráfico en una red que el adversario esté monitorizando (donde se sospeche que puede estar el hidden service).

Funcionamiento

Work in progress

Tutorial (Debian)

En esta sección explicamos cómo crear un Hidden Service.

Las herramientas que vamos a utlizar a continuación son las siguientes:

  • Tor: El daemon para poder acceder a la red anonimizadora
  • Tor Browser: El navegador para poder acceder a Tor
  • Hugo: Una herramienta muy sencilla para crear y servir páginas estáticas, programada en Go.
  • Git: Un gestor de versiones. Lo usaremos para descargar temas para Hugo.
  • OpenSSH server (Opcional): Un servidor SSH para poder acceder de forma remota a la máquina donde ejecutes el Hidden Service

0. Instalar todo lo necesario

Si has optado por no utilizar nuestra máquina virtual, debes instalar todas las herramientas. Para instalarlas:

$ sudo apt-get install tor git openssh-server

Para instalar hugo, comprueba cual es la [[https://github.com/spf13/hugo/releases|última versión]] y descarga el paquete terminado en .deb que corresponde a la arquitectura de tu procesador (amd64 = 64 bits, i384 = 32 bits, etc.). Descarga ese paquete. Después, puedes instalar el paquete con:

$ dpkg -i /ruta/al/deb/hugo_x.xx_yyyy.deb

Recuerda que debes cambiar /ruta/al/deb/ por la ruta donde se encuentra el paquete que has descargado. Fijate también en que x.xx es la versión de hugo que has descargado y yyyy la arquitectura.

Por último, descarga Tor Browser desde la página del proyecto de Tor

1. Crear una web de contenido estático

Ahora que ya hemos instalado todo, es hora de crear la web que vamos a ofrecer dentro de la red Tor. Ten en cuenta que el usuario que usamos para este tutorial es vagrant. Tendrás que utilizar el usuario de tu máquina.

En este tutorial hemos optado por utilizar contenido estático, porque así se mitigan los riesgos de ejecutar código para generar contenido dinámico. Si tienes en cuenta esos riesgos, puedes utilizar otras herramientas (apache + MySQL, Wordpress…) pero por simplicidad nos limitaremos a explicar cómo crear una página con Hugo. La gran ventaja de usar contenido estático es que no tienes por qué preocuparte de las actualizaciones de seguridad.

Para crear una página y algo de contenido:

$ hugo new site /home/vagrant/myblog
$ cd /home/vagrant/myblog
$ hugo new post/helloworld.md
$ nano content/post/helloworld.md

Veremos lo siguiente:

+++
date = "2015-01-08T08:36:54-07:00"
draft = true
title = "helloworld"

+++

Vamos a modificar el valor de draft, title y añadir algo de contenido a nuestro primer post:

+++
date = "2015-01-08T08:36:54-07:00"
draft = false
title = "Hello World!"

+++

Este es mi primer post dentro de un Hidden Service, bienvenidos!

Para guardar y salir pulsamos “Ctrl+x” y luego “y”. Podemos repetir el proceso para crear nuevos posts:

$ hugo new post/nuevopost.md

Sólo recuerda ejecutar los comandos desde el directorio donde tienes guardado el blog (/home/vagrant/myblog en este caso).

Vamos a descargar un tema para nuestra página, usando git. Desde el directorio de nuestro blog, ejecutamos:

$ git clone https://github.com/SenjinDarashiva/hugo-uno themes/hugo-uno

Ahora podemos servir nuestra página localmente para ver el resultado:

hugo server --theme="hugo-uno" 

Para ver la página en el navegador, visita 127.0.0.1:1313

Puedes explorar más posibilidades de Hugo en su página oficial

2. Crear el Hidden Service

Ahora que ya tenemos el servidor web y el contenido que queremos servir preparados, es hora de crear el hidden service. Lo primero que debemos hacer es crear un directorio y asignárselo al usuario de tor:

$ mkdir ~/hidden_service
$ sudo chown debian-tor:debian-tor ~/hidden_service
$ ls -l

Podemos comprobar que el usuario ha sido asignado correctamente, y que el directorio tiene los permisos típicos.

A continuación, debemos editar el archivo torrc que se encuentra en /etc/tor

$ sudo nano /etc/tor/torrc

Debemos buscar dos lineas en particular, para modificarlas:

#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:80

Vamos a descomentar las líneas y las vamos a modificar para que queden así:

HiddenServiceDir /home/vagrant/hidden_service
HiddenServicePort 80 127.0.0.1:1313

Ahora reiniciamos tor y comprobamos que se ha creado el hidden service correctamente:

$ sudo /etc/init.d/tor restart
$ sudo ls -l ~
$ sudo ls ~/hidden_service

Si todo ha salido bien, deberíamos ver que los permisos del directorio hidden_service han sido modificados (700) y que el hidden_service contiene dos archivos: private_key y hostname

En el archivo hostname encontraremos la dirección de nuestro hidden service. La copiamos al portapapeles (Ctrl+Shift+C) para poder utilizarla luego (Normalmente son difíciles de recordar).

$ sudo nano ~/hidden_service/hostname

3. Probar el Hidden Service

Para servir nuestro contenido, ejecutamos:

$ cd ~/myblog
$ hugo server --appendPort=False --theme="hugo-uno" --baseUrl="http://TUDIRECCIONDEHIDDENSERVICE.onion/"

Obviamente, susituye TUDIRECCIONDEHIDDENSERVICE.onion por la direción que encontraste en hostname. Puedes pegarla en la terminal con “Ctrl+Shift+V”.

A continuación, puedes comprobar que tu hidden service se está sirviendo, introduciendo la dirección en tu Tor Browser. Si estás utilizando nuestra máquina virtual, puedes encontrar Tor Browser en un directorio de tu directorio home.

4. (Opcional) Acceso remoto por SSH

Opcionalmente, si queremos tener acceso remoto a través de tor a la máquina donde está corriendo el hidden service, debemos hacer los siguiente:

Abrimos de nuevo el /etc/tor/torrc y añadimos la siguiente línea justo debajo de las dos que hemos editado anteriormente:

HiddenServicePort 22 127.0.0.1:22

Reiniciamos Tor:

$ sudo service tor restart

Ya podemos acceder a la máquina a través de tor

Para acceder, necesitarás hacerlo desde una máquina con Tor instalado. Puedes hacer la prueba desde la misma máquina donde tienes el hidden service para comprobar que todo funciona correctamente. Para “torificar” la conexión de tu cliente ssh, ejecuta el siguiente comando:

$ torsocks ssh vagrant@TUDIRECCIONDEHIDDENSERVICE.onion