paint-brush
¿Cómo funciona Tor realmente?por@hackernoon-archives
10,211 lecturas
10,211 lecturas

¿Cómo funciona Tor realmente?

por HackerNoon Archives2019/03/01
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

El Laboratorio de Investigación Naval de los Estados Unidos desarrolló The Onion Routing Protocol (T0r) para proyectar las comunicaciones de inteligencia de los Estados Unidos en línea. Irónicamente, Tor ha visto un uso generalizado por parte de todos — incluso aquellas organizaciones contra las que lucha la Marina de los EE. UU.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - ¿Cómo funciona Tor realmente?
HackerNoon Archives HackerNoon profile picture

El Laboratorio de Investigación Naval de los Estados Unidos desarrolló The Onion Routing Protocol (T0r) para proyectar las comunicaciones de inteligencia estadounidenses en línea. Irónicamente, Tor ha visto un uso generalizado por parte de todos, incluso aquellas organizaciones contra las que lucha la Marina de los EE. UU.

Puede que conozcas a Tor como la ciudad natal de las actividades ilegales en línea, un lugar donde puedes comprar cualquier droga que quieras, un lugar para todo lo ilegal. Tor es mucho más grande de lo que los medios de comunicación pretenden. Según Kings College, gran parte de Tor es legal.

Este artículo no habla sobre lo que hay en Tor o cómo acceder a Tor. Este artículo ofrece un resumen técnico de cómo funciona la tecnología, sin especulaciones ni exageraciones sobre lo que es Tor.

El principio central de Tor es el enrutamiento cebolla , que es una técnica para la comunicación anónima y segura a través de una red pública. En el enrutamiento cebolla, los mensajes se encapsulan en varias capas de cifrado.

Las cebollas tienen varias capas, al igual que un mensaje que pasa por Tor. Cada capa en Tor es encriptación, está agregando capas de encriptación a un mensaje Tor, en lugar de solo agregar 1 capa de encriptación.

Es por eso que se llama The Onion Routing Protocol, porque agrega capas en cada etapa.

La cebolla resultante (mensaje completamente encapsulado) se transmite luego a través de una serie de computadoras en una red (llamadas enrutadores de cebolla) y cada computadora quita una capa de la 'cebolla'. Cada capa contiene el próximo destino: el próximo enrutador al que debe ir el paquete. Cuando se descifra la capa final, obtiene el texto sin formato (mensaje no cifrado).

El autor original permanece en el anonimato porque cada nodo en la red solo conoce los nodos anteriores y posteriores en la ruta (excepto el primer nodo que sabe quién es el remitente, pero no conoce el destino final).

Esto ha dado lugar a ataques en los que grandes organizaciones con grandes recursos ejecutan servidores para intentar ser los primeros y últimos nodos de la red. Si el servidor de la organización es el primer nodo, sabe quién envió el mensaje. Si el servidor de la organización es el último nodo, conoce el destino final y lo que dice el mensaje.

Ahora que tenemos una descripción general básica de Tor, comencemos a explorar cómo funciona cada parte de Tor.

Visión general

Onion Routing es una red superpuesta distribuida diseñada para anonimizar aplicaciones basadas en TCP como navegación web, shell seguro y mensajería instantánea.

Los clientes eligen una ruta a través de la red y construyen un circuito donde cada enrutador de cebolla en la ruta conoce al predecesor y al sucesor, pero ningún otro nodo en el circuito.

El autor original (el signo de interrogación en el extremo izquierdo) permanece anónimo, a menos que usted sea la primera ruta en el nodo, ya que sabe quién le envió el paquete.

Nadie sabe qué datos se envían hasta que llegan al último nodo de la ruta; que conoce los datos pero no sabe quién los envió. El penúltimo nodo de la ruta no sabe cuáles son los datos, solo lo sabe el último nodo de la ruta.

Esto ha dado lugar a ataques en los que grandes organizaciones con grandes recursos crean servidores Tor que pretenden ser los primeros y últimos enrutadores de cebolla en un camino. Si la organización puede hacer esto, llega a saber quién envió los datos y qué datos se enviaron, rompiendo efectivamente Tor.

¡Oh, no! Ahora una gran organización sabe que ves Netflix 🍿

Es increíblemente difícil hacer esto sin estar físicamente cerca de la ubicación de los servidores de la organización, exploraremos esto más adelante.

A lo largo de este artículo, usaré Netflix como un servicio normal (Bob) y Amazon Prime Video como el adversario (Eve). En el mundo real, es increíblemente improbable que este sea el caso. No estoy aquí para especular sobre qué organizaciones podrían querer atacar a Tor, así que he usado 2 ejemplos poco probables para evitar el lado político.

Cada paquete fluye por la red en celdas de tamaño fijo . Estas celdas deben tener el mismo tamaño para que ninguno de los datos que pasan por la red Tor se vea sospechosamente grande.

Estas celdas se desenvuelven mediante una clave simétrica en cada enrutador y luego la celda se retransmite más adelante en la ruta. Vayamos a Tor en sí.

Tor en sí mismo

Hay fuerza en los numeros

Tor necesita muchos usuarios para crear anonimato, si Tor fuera difícil de usar, los nuevos usuarios no lo adoptarían tan rápido. Debido a que los nuevos usuarios no lo adoptarán, Tor se vuelve menos anónimo. Con este razonamiento, es fácil ver que la usabilidad no es solo una elección de diseño de Tor, sino un requisito de seguridad para hacer que Tor sea más seguro.

Si Tor no se puede usar o no está bien diseñado, muchas personas no lo usarán. Si no es utilizado por mucha gente, es menos anónimo.

Tor ha tenido que tomar algunas decisiones de diseño que pueden no mejorar la seguridad pero sí mejorar la usabilidad con la esperanza de que una mejora en la usabilidad sea una mejora en la seguridad.

Lo que Tor no es

Tor no es un sistema peer-to-peer completamente descentralizado como mucha gente cree que es. Si fuera completamente peer to peer, no sería muy útil. Tor requiere un conjunto de servidores de directorio que gestionen y mantengan el estado de la red en un momento dado.

Tor no es seguro contra ataques de extremo a extremo. Un ataque de extremo a extremo es donde una entidad tiene control tanto del primer como del último nodo en una ruta, como se mencionó anteriormente. Este es un problema que los expertos en seguridad cibernética aún tienen que resolver, por lo que Tor no tiene una solución para este problema.

Tor no oculta la identidad del remitente.

En 2013, durante el período de exámenes finales en Harvard, un estudiante intentó retrasar el examen enviando una amenaza de bomba falsa. El estudiante usó Tor y Guerrilla Mail (un servicio que permite a las personas crear direcciones de correo electrónico desechables) para enviar la amenaza de bomba a los funcionarios escolares.

El estudiante fue atrapado, aunque tomó precauciones para asegurarse de que no lo atraparan.

El correo de Gurillar envía un encabezado de dirección IP de origen junto con el correo electrónico que se envía para que el receptor sepa de dónde proviene el correo electrónico original. Con Tor, el estudiante esperaba que la dirección IP estuviera codificada, pero las autoridades sabían que provenía de un nodo de salida de Tor (Tor mantiene una lista de todos los nodos en el servicio de directorio), por lo que las autoridades simplemente buscaron a las personas que accedían a Tor (dentro del universidad) en el momento en que se envió el correo electrónico.

Tor no es un servicio de anonimización, pero es un servicio que puede encriptar todo el tráfico de A a B (siempre y cuando no se realice un ataque de extremo a extremo). Tor también es increíblemente lento, por lo que usarlo para Netflix no es un buen caso de uso.

Ahora que tenemos un buen manejo de lo que es Tor, exploremos el enrutamiento cebolla .

Enrutamiento de cebolla

Dada la red anterior, vamos a simular lo que hace Tor. Tu computadora es la que está en el extremo izquierdo, y estás enviando una solicitud para ver Stranger Things en Netflix (porque para qué más se usa Tor 😉). Este camino de nodos se llama circuito. Más adelante, veremos cómo se hacen los circuitos y cómo funciona el cifrado. Pero por ahora estamos tratando de generalizar cómo funciona Tor.

Comenzamos con el mensaje (aún no lo hemos enviado). Necesitamos encriptar el mensaje N veces (donde N es cuántos nodos hay en la ruta). Lo encriptamos usando AES, un sistema criptográfico de clave simétrica. La clave se acuerda mediante Diffie-Hellman. No te preocupes, hablaremos de todo esto más adelante. Hay 4 nodos en la ruta (menos su computadora y Netflix), por lo que encriptamos el mensaje 4 veces.

Nuestro paquete (cebolla) tiene 4 capas. Azul, morado, naranja y verde azulado. Cada color representa una capa de cifrado.

Enviamos la cebolla al primer nodo de nuestro camino. Ese nodo luego elimina la primera capa de cifrado.

Cada nodo en la ruta sabe cuál es la clave para descifrar su capa (a través de Diffie-Hellman ). El nodo 1 elimina la capa azul con su clave simétrica (que ambos acordaron).

El nodo 1 sabe que envió el mensaje, pero el mensaje aún está encriptado por 3 capas de encriptación, no tiene idea de qué es el mensaje.

A medida que avanza por el camino, se eliminan más y más capas. El siguiente nodo no sabe quién envió el paquete. Todo lo que sabe es que el Nodo 1 les envió el paquete y debe ser entregado al Nodo 3.

Ahora el Nodo 3 quita una capa.

El nodo final sabe cuál es el mensaje y hacia dónde va, pero no sabe quién lo envió. Todo lo que sabe es que el Nodo 3 les envió el mensaje, pero no sabe de nadie más en el camino. Una de las propiedades clave aquí es que una vez que un nodo descifra una capa, no puede saber cuántas capas más hay para descifrar. Podría ser tan pequeño como 1 o 2 o tan grande como 200 capas de cifrado.

¡Ahora no hay forma de que Amazon pueda descubrir que ves Netflix! Netflix devuelve una parte de Stranger Things.

Veamos cómo funciona a la inversa.

El nodo 4 agrega su capa de cifrado ahora. No sabe quién hizo originalmente la solicitud, todo lo que sabe es que el Nodo 3 les envió la solicitud, por lo que envía el mensaje de respuesta al Nodo 3.

Y así sucesivamente para los próximos nodos.

Ahora el paquete de respuesta está completamente encriptado.

Ahora que el paquete está completamente encriptado, el único que todavía sabe lo que contiene el mensaje es el Nodo 4. El único que sabe quién hizo el mensaje es el Nodo 1. Ahora que tenemos la respuesta completamente encriptada, podemos usar todos los datos simétricos. claves para descifrarlo.

Podrías estar pensando “He visto caracoles 🐌 más rápidos que este” y tendrías razón. Este protocolo no está diseñado para la velocidad, pero al mismo tiempo tiene que preocuparse por la velocidad.

El algoritmo podría ser mucho más lento, pero mucho más seguro (utilizando criptografía de clave completamente pública en lugar de criptografía de clave simétrica), pero la facilidad de uso del sistema es importante. Así que sí, es lento. No, no es tan lento como podría ser. Pero todo es un acto de equilibrio aquí.

El cifrado utilizado normalmente es AES y la clave se comparte a través de Diffie-Hellman. He escrito otro artículo sobre Diffie-Hellman aquí .

Los caminos que crea Tor se llaman circuitos. Exploremos cómo Tor elige qué nodos usar en un circuito.

¿Cómo se crea un circuito?

Cada máquina, cuando quiere crear un circuito, elige primero el nodo de salida , seguido de los demás nodos del circuito. Los circuitos Tor son siempre de 3 nodos. Aumentar la longitud del circuito no crea un mejor anonimato. Si un atacante posee el primer y el último nodo de la red, puede tener 1500 nodos en el circuito y aún así no lo hará más seguro.

Cuando Tor selecciona el nodo de salida, lo selecciona siguiendo estos principios:

  1. ¿El torrc del cliente (el archivo de configuración de Tor) tiene configuraciones sobre qué nodos de salida no elegir?
  2. Tor solo elige un relé de salida que le permite salir de la red Tor. Algunos nodos de salida solo permiten el tráfico web (puerto HTTP/S 80), lo que no es útil cuando alguien quiere enviar correo electrónico (puerto SMTP 25).
  3. El nodo de salida debe tener la capacidad disponible para brindarle asistencia. Tor intenta elegir un nodo de salida que tenga suficientes recursos disponibles.

Todos los caminos en el circuito obedecen estas reglas:

  • No elegimos el mismo enrutador dos veces para la misma ruta.

Si elige el mismo nodo dos veces, está garantizado que el nodo será el nodo de guardia (el nodo en el que ingresa) o el nodo de salida, ambas posiciones peligrosas. Hay una probabilidad de 2/3 de que sea tanto el nodo de guardia como el de salida, lo que es aún más peligroso. Queremos evitar los ataques de entrada/salida.

Esto no está bien. El color del nodo cambia para mostrar que es el mismo.

  • No elegimos ningún router de la misma familia que otro en la misma ruta. (Dos enrutadores pertenecen a la misma familia si cada uno incluye al otro en las entradas de "familia" de su descriptor).

Los operadores que ejecutan más de 1 nodo Tor pueden elegir designar sus nodos como 'familia'. Esto significa que los nodos tienen todos el mismo padre (el operador de su red). Esto es nuevamente una contramedida contra los ataques de entrada/salida, aunque los operadores no tienen que declarar familia si así lo desean. Si quieren convertirse en un nodo de guardia (discutido pronto) se recomienda declarar familia, aunque no es obligatorio.

No permitido

  • No elegimos más de un enrutador en una subred /16 determinada.

Las subredes definen redes. Las direcciones IP se componen de 8 octetos de bits. Como ejemplo, la dirección IP de Google en binario es:

 01000000.11101001.10101001.01101010

Los primeros 16 bits (la subred /16) son 01000000.11101001, lo que significa que Tor no elige ningún nodo que comience con los mismos 16 bits que esta dirección IP. De nuevo, una contramedida a los ataques de entrada/salida.

No permitido

Si las subredes suenan confusas, he escrito este código de Python para ayudar a explicarlas:

 # have a play around with these # ip addresses are in binary, not the usual base 10 # subnets are usually powers of 2, this is 2^4. IP = "01000000.11101001.10101001.01101010" subnet = 16 # this will store the subnet address once we find it subnet_ip = [] IP_list = list(IP) counter = 0 # for every number in the ip address for i in IP_list: # we want to end the loop when we reach the subnet number if counter >= subnet: break # the ip address segments each oclet of bits with full stops # we don't want to count a fullstop as a number # but we want to include it in the final subnet if i == ".": subnet_ip.append(".") continue else: # else it is a number so we append and increment counter subnet_ip.append(i) counter = counter + 1 print("Subnet is " + ''.join(subnet_ip))
  • No elegimos ningún enrutador que no funcione o que no sea válido a menos que hayamos sido configurados para hacerlo. De forma predeterminada, estamos configurados para permitir enrutadores no válidos en las posiciones "media" y "cita".

No en ejecución significa que el nodo actualmente no está en línea. No quieres elegir cosas que no están en línea. No válido significa que alguna configuración en los nodos torrc es incorrecta. No desea aceptar configuraciones extrañas en caso de que intenten piratear o romper algo.

  • El primer nodo debe ser un nodo Guard .

Un nodo de guardia es un nodo privilegiado porque ve la IP real del usuario. Es 'caro' convertirse en un nodo de guardia (mantener un alto tiempo de actividad durante semanas y tener un buen ancho de banda).

Esto es posible para las grandes empresas que tienen un tiempo de actividad del 99,9 % y un gran ancho de banda (como Netflix). Tor no tiene forma de evitar que un adversario poderoso registre una carga de nodos de protección. En este momento, Tor está configurado para quedarse con un solo nodo de protección durante 12 semanas a la vez, por lo que elige 4 nuevos nodos de protección al año.

Esto significa que si usa Tor una vez para ver Amazon Prime Video, es relativamente poco probable que Netflix sea su nodo de protección. Por supuesto, cuantos más nodos de guardia cree Netflix, más probable es que así sea. Aunque, si Netflix sabe que te estás conectando a la red Tor para ver Amazon Prime Video, tendrán que esperar 4 semanas para que se confirmen sus sospechas, a menos que ataquen el nodo de guardia y lo tomen.

Convertirse en un nodo de guardia es relativamente fácil para una organización grande. Convertirse en el nodo de salida es un poco más difícil, pero aún es posible. Tenemos que asumir que la gran organización tiene un poder computacional infinito para poder hacer esto. La solución es hacer que el ataque sea muy costoso con una baja tasa de éxito.

Cuantos más usuarios regulares de Tor, más difícil es para una gran organización atacarlo. Si Netflix controla 50/100 nodos en la red:

La posibilidad de que elijas un nodo de guardia de Netflix es del 50 %.

Si de repente se unen 50 nodos de usuarios normales más, entonces eso es 50/150, lo que reduce la probabilidad de que Netflix posea un nodo de protección (y, por lo tanto, un ataque potencial) y lo hace aún más costoso.

Hay fuerza en los números dentro del servicio Tor.

Servicios ocultos de Tor

¿Alguna vez escuchó esos rumores? "Hay sitios web en la web oscura, en Tor, que cuando los visita verá personas haciendo cosas desagradables, vendiendo cosas ilegales o peor: viendo The Hangover Part 3"

Cuando la gente habla de estos sitios web, se refiere a los servicios ocultos de Tor .

Estos son un concepto salvaje y, honestamente, merecen una publicación de blog completa por sí solos. Los servicios ocultos son servidores, como cualquier servidor informático normal.

Excepto en un Servicio Oculto de Tor, es posible comunicarse sin que el usuario y el servidor sepan quiénes son.

El dispositivo (el signo de interrogación) sabe que quiere acceder a Netflix, pero no sabe nada sobre el servidor y el servidor no sabe nada sobre el dispositivo al que se le pide acceso. Esto es bastante confuso, pero no te preocupes, voy a explicarlo todo con diagramas geniales. ✨

Cuando se configura un servidor en Tor para que actúe como un servicio oculto, el servidor envía un mensaje a algunos enrutadores Onion seleccionados preguntándoles si quieren ser un punto de introducción al servidor. Depende completamente del servidor quién se elige como punto de presentación, aunque generalmente piden 3 enrutadores para que sean sus puntos de presentación.

Los puntos de introducción saben que van a presentar personas al servidor.

Luego, el servidor creará algo llamado descriptor de servicio oculto que tiene una clave pública y la dirección IP de cada punto de introducción. Luego enviará este descriptor de servicio oculto a una tabla hash distribuida, lo que significa que cada enrutador de cebolla (no solo los puntos de introducción) contendrá parte de la información del servicio oculto.

Si intenta buscar un servicio oculto, el punto de introducción responsable le dará el descriptor completo del servicio oculto, la dirección de los puntos de introducción del servicio oculto.

La clave para esta tabla hash es la dirección de cebolla y la dirección de cebolla se deriva de la clave pública del servidor.

La idea es que la dirección de la cebolla no se publique en toda la red Tor, sino que la encuentres de otra manera, como si un amigo te lo dijera o en Internet (direcciones que terminan en .onion).

La forma en que se programa la tabla hash distribuida significa que la gran mayoría de los nodos no sabrán cuál es el descriptor para una clave determinada.

Por lo tanto, casi todos los enrutadores de cebolla tendrán un conocimiento mínimo sobre el servicio oculto a menos que explícitamente quieran encontrarlo.

Digamos que alguien te dio la dirección de la cebolla. Solicita el descriptor de la tabla hash y obtiene los puntos de introducción de servicios.

Si desea acceder a una dirección de cebolla, primero solicitaría el descriptor de la tabla hash y el descriptor tiene, digamos, 4 o 5 direcciones IP de nodos introductorios. Eliges uno al azar, digamos el de arriba.

Le pedirá al punto de introducción que le presente el servidor y, en lugar de establecer una conexión directamente con el servidor, establecerá un punto de encuentro al azar en la red desde un conjunto determinado de enrutadores Onion.

Luego hace un circuito a ese punto de encuentro y envía un mensaje al punto de encuentro preguntando si puede presentarlo al servidor usando el punto de introducción que acaba de usar. Luego envía al punto de encuentro una contraseña de un solo uso (en este ejemplo, usemos 'Labrador').

El punto de encuentro hace un circuito al punto de introducción y le envía la palabra 'Labrador' y su dirección IP.

El punto de introducción envía el mensaje al servidor y el servidor puede optar por aceptarlo o no hacer nada.

Si el servidor acepta el mensaje, creará un circuito hasta el punto de encuentro.

El servidor envía un mensaje al punto de encuentro. El punto de encuentro analiza tanto los mensajes de su computadora como los del servidor. Dice "bueno, he recibido un mensaje de esta computadora que dice que quiere conectarse con este servicio y también he recibido un mensaje del servicio preguntando si puede conectarse a una computadora, por lo tanto, deben querer hablar entre sí". otro".

El punto de encuentro actuará como otro salto en el circuito y los conectará.

En resumen, un servicio oculto funciona así, tomado de aquí :

  1. Un servicio oculto calcula su par de claves (clave pública y privada, cifrado asimétrico).
  2. Luego, el servicio oculto elige algunos relés como puntos de introducción .
  3. Le dice su clave pública a esos puntos de introducción sobre los circuitos Tor.
  4. Después de eso, el servicio oculto crea un descriptor de servicio oculto , que contiene su clave pública y cuáles son sus puntos de introducción .
  5. El servicio oculto firma el descriptor de servicio oculto con su clave privada.
  6. Luego carga el descriptor de servicio oculto en una tabla hash distribuida (DHT).
  7. Los clientes aprenden la dirección .onion de un servicio oculto fuera de banda. (por ejemplo, sitio web público) (Un $hash.onion es un nombre de 16 caracteres derivado de la clave pública del servicio).
  8. Después de recuperar la dirección .onion, el cliente se conecta al DHT y solicita ese $hash.
  9. Si existe, el cliente conoce la clave pública del servicio oculto y sus puntos de introducción .
  10. El cliente elige un relé al azar para construirle un circuito, para contarle un secreto de una sola vez . El relé seleccionado actúa como punto de encuentro.
  11. El cliente crea un mensaje de introducción , que contiene la dirección del punto de encuentro y el secreto único , antes de cifrar el mensaje con la clave pública del servicio oculto.
  12. El cliente envía su mensaje a través de un circuito Tor a uno de los puntos de introducción , exigiendo que se reenvíe al servicio oculto.
  13. El servicio oculto descifra el mensaje de introducción con su clave privada para conocer el punto de encuentro y el secreto único .
  14. El servicio oculto crea un mensaje de encuentro, que contiene el secreto único y lo envía por un circuito al punto de encuentro.
  15. El punto de encuentro le dice al cliente que se estableció una conexión.
  16. El cliente y el servicio oculto hablan entre sí a través de este punto de encuentro. Todo el tráfico está encriptado de extremo a extremo y el punto de encuentro simplemente lo retransmite de un lado a otro. Tenga en cuenta que cada uno de ellos, cliente y servicio oculto, construye un circuito hasta el punto de encuentro; a tres saltos por circuito, esto hace seis saltos en total.

Tor es un protocolo fascinante lleno de algoritmos que se han refinado a lo largo de los años. He llegado a apreciar a Tor, y espero que tú tengas que hacerlo. Desafortunadamente, este artículo es demasiado largo para resumirlo brevemente. Si desea obtener más información, consulte el documento sobre Tor titulado " Tor: The Second-Generation Onion Router ".

Si te gustó este artículo y quieres más, suscríbete a mi lista de correo electrónico a continuación ✨ Solo te enviaré un correo electrónico cuando tenga algo nuevo, que es cada mes / 2 meses más o menos.

Si te sientes más generoso, tengo un PayPal e incluso un Patreon . Soy un estudiante universitario que escribo estos artículos en mi tiempo libre. Este blog es mi trabajo de tiempo completo, por lo que todas y cada una de las donaciones son apreciadas.

Publicado originalmente en skerritt.blog el 1 de marzo de 2019.