La Deep Web como fondo de un gran océano

Servicios ocultos en Tor, ¿cómo consiguen pasar desapercibidos?

Seguramente hayamos oído hablar de la famosa Deep Web y de la imagen del iceberg, donde solo la punta representa la información que los buscadores logran indexar y bajo la superficie reina Tor. Si realmente buscamos anonimato, los servicios ocultos en Tor son una opción a considerar.

En el anterior artículo Anonimato en Internet, ¿es posible? se comentó el gran poder que hay detrás de la información al existir agencias de espionaje que constantemente atentan contra la privacidad y los derechos de las personas. Con el fin de poner coto a este control abusivo, nació la Deep Web gracias al desarrollo de redes anónimas como Tor (The Onion Router), I2P (Invisible Internet Project), o Freenet entre otras.

Este artículo parte de la red anónima con mayor popularidad y comunidad de desarrolladores y contribuidores, para explicar paso a paso el funcionamiento del protocolo que permite que los servicios ocultos en Tor existan.

Servicios ocultos en Tor

Durante este 2015 los servicios ocultos en Tor están cobrando especial interés, sobre todo para los atacantes que intentan romper el anonimato que Tor proporciona a sus usuarios.

De hecho, a finales de mayo tuvo lugar en Ámsterdam la conferencia de seguridad Hack In The Box, donde los investigadores Filippo Valsorda (@FiloSottile) y George Tankersley (@_gtank) presentaron la ponencia Non-Hidden Hidden Services Considered Harmful: Attacks and Detection. De forma muy resumida, en ella se demostró la facilidad de desenmascarar los usuarios que acceden a servicios ocultos en Tor mediante ataques de correlación.

¿Pero qué son los servicios ocultos?

Se trata de una de las características más interesantes que proporciona Tor para ofrecer servicios en máquinas de forma anónima. Estos pueden ser de cualquier tipo siempre y cuando se basen en TCP: SSH, HTTP, IRC, SMB, FTP, etc. Es decir, para un cliente que accede a un servicio oculto realmente no accede a la propia máquina en sí (ya que se desconoce su dirección IP real), sino que accede únicamente al servicio publicado por la máquina.

Aunque los servicios ocultos hayan ganado popularidad por la existencia de actividades ilegales como el tráfico de drogas (Silk Road), existen servicios totalmente legítimos que buscan la libertad de expresión y evitar la censura.

Lógicamente los servicios ocultos solo están disponibles a través de Tor. Sin embargo, gracias al proyecto Tor2web, también están disponibles desde Internet sin necesidad de conectarse a la red Tor. No obstante, cabe destacar que el cliente pierde su anonimato al acceder a un servicio oculto de esta manera.

Por otra parte, dado que la ubicación de la máquina queda protegida, la única forma de acceder a un servicio es a través de su dirección .onion (e.g., facebookcorewwwi.onion en el caso de Facebook). Por esta razón se llaman servicios ocultos, porque se desconoce su existencia siempre y cuando las direcciones se mantengan a buen recaudo y no se hagan públicas. Aunque pueda suponer una desventaja para un atacante a la hora de localizarlos, no por ello están exentos de ataques.

¿Cómo se forman las direcciones .onion?

En el momento que se configura un servicio oculto y se despliega en Tor, entre otras cosas, se crea una pareja de claves RSA de 1024 bits y un fichero llamado hostname que contiene la dirección pública necesaria para acceder al servicio (e.g., duskgytldkxiuqc6.onion).

Para construir esta dirección primero se calcula el SHA1 de la clave pública generada. De los 160 bits que forman el hash, se toma la primera mitad y se codifica en Base32, consiguiendo que todos los nombres de dominio tengan exactamente una longitud de 16 caracteres y solo contengan números entre 2-7 y letras entre a-z. Por último, se añade al nombre generado el sufijo .onion.

Sin embargo no todas las direcciones .onion son tan aleatorias como parecen. En el caso de Facebook, como pudo verse más arriba, existe un patrón fijo en el nombre que hace que la dirección sea más fácil de recordar. Aunque también existen otros ejemplos en los que se pretende indicar la categoría o temática del servicio oculto.

En cualquier caso, dado que el nombre de dominio se obtiene a partir de la clave pública, cuantos más caracteres se quieran fijar mayor coste computacional tendrá, ya que habrá que generar tantas claves como sean necesarias hasta dar con el patrón. Herramientas como Shallot, Scallion, o Eschalot por ejemplo, permiten personalizar estos nombres.

Despliegue de servicios ocultos en Tor

Aparte de la generación de claves y la construcción de la dirección de acceso vista en el apartado anterior, de forma transparente para el usuario, también se llevan a cabo las siguientes acciones durante el despliegue:

  1. De forma aleatoria, se elige un conjunto reducido de nodos en Tor que actuarán de puntos de introducción (introduction points) para el servicio oculto configurado.
  2. Por cada punto de introducción elegido, se establece un circuito (i.e., un túnel formado por 3 nodos en Tor) con la máquina que ofrece el servicio. Para ello es necesario enviar (entre otros datos) la clave pública del servicio a cada uno de los puntos, evitando que conozcan la ubicación real de la máquina. Destacar que los puntos de introducción NO intervienen en la comunicación final entre el cliente y el servicio oculto.
  3. Para que los clientes puedan acceder al servicio oculto, además de conocer previamente su dirección, tiene que estar registrado en una base de datos distribuida (distributed hash table). Por tanto se crea un descriptor para el servicio oculto (hidden service descriptor) formado por su clave pública, un listado con información de cada punto de introducción elegido, etc. Se firma con la clave privada del servicio y se sube a la base de datos.

    Despliegue de servicios ocultos en Tor

    Despliegue de servicios ocultos en Tor

Una vez finalizado este proceso, el servicio oculto ya está preparado para aceptar conexiones de clientes a través de Tor.

Conexión a servicios ocultos

De igual forma se detalla a continuación los pasos que se dan internamente cuando un cliente se conecta a un servicio oculto por medio de Tor:

  1. Tal y como se ha comentado con anterioridad, para que un cliente pueda establecer una conexión, antes que nada necesita conocer la dirección .onion asociada al servicio.
  2. El cliente calcula el identificador del descriptor (descriptor ID) para poder descargar de la base de datos distribuida el descriptor del servicio oculto que se registró en el apartado anterior (punto 3). Una vez recuperado el descriptor, el cliente ya conoce los puntos de introducción para el servicio y su clave pública, pudiendo ser esta última de gran utilidad para calcular la dirección .onion y ver que efectivamente se va acceder al servicio oculto deseado.
  3. De forma aleatoria, el cliente elige un nodo en Tor que actúe como punto de encuentro (rendezvous point) y establece un circuito con él, enviándole un secreto (rendezvous cookie) aleatorio de un solo uso. Al contrario que en los puntos de introducción, este circuito sí que formará parte (como primer tramo) de la comunicación final entre el cliente y el servicio oculto.
  4. Por una parte el cliente crea un mensaje de introducción (introduce message) formado principalmente por el punto de encuentro y el secreto escogido en el punto anterior; y por otra parte, cifra este mensaje con la clave pública del servicio oculto. A continuación el cliente establece otro circuito con un punto de introducción y le solicita que, haciendo uso del circuito establecido en el apartado anterior (punto 2) entre el punto de introducción y la máquina que ofrece el servicio, envíe el mensaje cifrado a dicho servicio.

    Envío del punto de encuentro al servicio oculto a través de un punto de introducción

    Envío del punto de encuentro al servicio oculto a través de un punto de introducción

  5. El servicio oculto descifra el mensaje recibido por el punto de introducción y obtiene, entre otros datos, la dirección del punto de encuentro y el secreto de un solo uso. Con esta información la máquina del servicio establece otro circuito, pero esta vez con el punto de encuentro, enviándole el secreto recibido. A través de este segundo tramo, finalmente se completa el circuito final entre el cliente y el servicio oculto, formado por 6 nodos en Tor: 3 elegidos por el cliente (siendo el punto de encuentro el tercero) y otros 3 elegidos por la máquina del servicio.

    Envío del secreto al punto de encuentro

    Envío del secreto al punto de encuentro

  6. Una vez que el punto de encuentro verifica que el secreto es correcto, envía un mensaje al cliente notificándole que la conexión se ha llevado a cabo con éxito. A partir de este momento tanto el cliente como el servicio oculto pueden comunicarse de forma totalmente anónima, ya que ninguna de las dos partes conoce la identidad del otro. Y el punto de encuentro simplemente se encarga de reenviar los mensajes cifrados en ambas direcciones.

Para más información sobre servicios ocultos en Tor, puede consultarse el documento Tor Rendezvous Specification disponible en el repositorio oficial de Tor.

Conclusiones

Como se ha podido ver a lo largo del artículo, Tor proporciona una característica muy interesante que permite publicar servicios de forma anónima. Tanto el cliente como el equipo que ofrece el servicio oculto quedan protegidos durante la comunicación, de tal forma que ninguno de los dos conoce la ubicación real del otro. Además, la única forma de acceder a un servicio oculto es mediante su dirección .onion, que tendrá que conocer el cliente previamente.

Sin embargo, gracias a la popularidad que mantiene Tor y a la gran comunidad que hay detrás, últimamente se han publicado varios estudios con posibles vectores de ataque que ponen en entredicho el anonimato que garantiza Tor. Por lo que respecta a los servicios ocultos, ya se encuentran trabajando en el documento Next-Generation Hidden Services in Tor para tratar de corregir o mejorar aspectos que podrían poner en peligro el anonimato de la red.

Aunque quizás sea el momento de apostar por una red descentralizada como I2P que proporcione mayores niveles de privacidad y anonimato. Ya que al estar formada por túneles unidireccionales (al contrario que Tor) de un número configurable de nodos, tanto los ataques de correlación como los de análisis de tráfico son más difíciles de llevar a cabo. Además, los servicios ocultos no solo existen en I2P, sino que además son más rápidos y eficientes en el acceso (al descentralizar la red), y ofrecen mayor funcionalidad.

Pedro Castillo
3 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *