Blog What We Do Support Community
Developers
Login Sign up

Presentamos el servicio de Onion de Cloudflare

by Mahrud Sayrafi.

  • Cuándo: una fresca tarde de verano de San Francisco
  • Dónde: Sala 305, Cloudflare
  • Quién: dos de Cloudflare y nueve del Proyecto Tor

¿Qué podría salir mal?

Un poco de contexto

Esta semana hace dos años que Cloudflare introdujo Opportunistic Encryption (el cifrado oportunista), una característica que ofrecía ventajas adicionales de seguridad y rendimiento a sitios web que todavía no se habían cambiado a HTTPS. De hecho, en los viejos tiempos, algunos sitios web solo usaban HTTP. Qué cosas, ¿verdad? "Oportunista" aquí significa que el servidor anunciaba compatibilidad con HTTP/2 a través de un encabezado de Servicio alternativo de HTTP, con la esperanza de que los navegadores que reconocieran el protocolo pudieran aprovechar esos beneficios en las solicitudes subsiguientes a ese dominio.

Por las mismas fechas, el primer ejecutivo Matthew Prince escribió sobre la importancia y los retos de la privacidad en Internet y nos encargó encontrar una solución que proporcionara comodidad, seguridad, y anonimato.

Desde neutralizar los vectores de huellas digitales y los rastreadores de navegador que detecta Privacy Badger, hasta mitigar los ataques de correlación que solo pueden realizar grandes actores, garantizar la privacidad es un reto complicado. Afortunadamente, el Proyecto Tor aborda esos tipos de adversarios tan variados en el navegador Tor.

Sin embargo, Internet está lleno de actores maliciosos, y distinguir el tráfico legítimo del malicioso, que es una de las características básicas de Cloudflare, es mucho más difícil cuando el tráfico es anónimo. En particular, muchas características que hacen que Tor sea una gran herramienta para la privacidad también lo convierten en una herramienta para ocultar fuentes de tráfico malintencionado. Por esta razón, muchos recurren al uso de preguntas CAPTCHA, para que cueste más ser un bot en la red Tor. Sin embargo, hay un daño colateral asociado a uso de preguntas CAPTCHA para parar a los bots: los ojos humanos también tienen que aguantarlas.

Una manera de reducir eso al mínimo es utilizar firmas criptográficas para preservar la privacidad, antes conocidas como tokens ciegos, como las que impulsa Privacy Pass.

La otra forma es utilizar Onion.

Aquí viene Onion

La edición actual de la Semana de la criptografía introduce una solución "oportunista" a este problema, para que en las condiciones adecuadas, cualquier persona que utilice el navegador Tor 8.0 se beneficie de la mejora de la seguridad y el rendimiento cuando visite sitios web de Cloudflare sin tener que pasar por un CAPTCHA. Al mismo tiempo, esta característica permite una limitación de velocidad más minuciosa para impedir el tráfico malicioso y, puesto que la mecánica de la idea aquí descrita no es específica de Cloudflare, cualquiera puede reutilizar el método en su propia página web.

Antes de continuar, si necesitas un repaso sobre qué es Tor o por qué hablamos de Onion, entra en la página web del Proyecto Tor o en nuestra propia publicación de junio en el blog sobre el Resolutor de DNS Onion.

Como Matthew menciona en su publicación del blog, una forma de examinar el tráfico de Tor es utilizar el protocolo del servicio de Onion. Los servicios de Onion son nodos de Tor que anuncian su clave pública, codificada como una dirección con el dominio de primer nivel .onion TLD, y que emplean "puntos de encuentro" para establecer conexiones únicamente dentro de la red de Tor:

Aunque los servicios de Onion se han diseñado para ofrecer anonimato a proveedores de contenidos, los medios de comunicación los utilizan para posibilitar que los denunciantes a se comuniquen de forma segura con ellos y Facebook los usa para distinguir a los usuarios de Tor de los bots.

La razón técnica por la que esto funciona es que, desde la perspectiva de un servicio de Onion, cada conexión individual o circuito de Tor tiene asociado un número único pero efímero, mientras que desde el punto de vista de un servidor normal, todas las solicitudes de Tor hechas mediante un nodo de salida comparten la misma dirección IP. Con este número de circuito, los servicios de Onion pueden distinguir circuitos individuales y detener los que parecen comportarse de forma maliciosa. Hay que aclarar que esto no significa que los servicios Onion puedan identificar o rastrear a los usuarios de Tor.

Mientras que los actores maliciosos todavía pueden establecer un circuito nuevo repitiendo el protocolo de encuentro, hacerlo implica un intercambio de claves criptográficas que requiere tiempo y cálculos. Piensa en esto como una secuencia criptográfica de marcado. Los spammers pueden marcar nuestro servicio de Onion una y otra vez, pero tienen que repetir cada vez el intercambio de claves.

Por otra parte, terminar el protocolo de encuentro puede considerarse como una pequeña prueba del trabajo necesario para utilizar el servicio de Onion de Cloudflare. Esto aumenta lo que cuesta usar nuestro servicio de Onion para realizar ataques por denegación de servicio.

Problema resuelto, ¿verdad?

No del todo. Como comentamos cuando presentamos el resolutor oculto, el problema de garantizar que una dirección .onion aparentemente aleatoria sea correcta es una barrera a la seguridad utilizable. En ese caso, nuestra solución fue comprar un certificado de validación extendida (Extended Validation o EV por sus siglas en inglés), que cuesta bastante más. Huelga decir que esto limita quién puede comprar un certificado HTTPS para su servicio de Onion a unos pocos privilegiados.

Algunas personas disienten. En particular, la nueva generación de servicios de Onion resuelve la debilidad que Matthew señaló como una posible razón por la que el CA/B Forum solo permite certificados de validación extendida para los servicios de Onion. Esto significa que conseguir certificados de validación de dominio (Domain Validation o DV por sus siglas en inglés) para servicios de Onion podría ser posible pronto. Ciertamente, esperamos que sea así.

Aún así, los certificados de validación de dominio todavía no tienen el nombre de la organización (p. ej. "Cloudflare, Inc.") que aparece en la barra de direcciones y los números criptográficamente relevantes son casi imposibles de recordar o distinguir para los seres humanos. Esto nos lleva nuevamente al problema de la seguridad utilizable, así que se nos ocurrió una idea diferente.

Plantearse las direcciones de Onion de otra manera

Olvida por un momento que estamos hablando del anonimato. Cuando escribes "cloudflare.com" en un navegador y pulsas intro, primero tu dispositivo resuelve ese nombre de dominio en una dirección IP, luego tu navegador le pide al servidor un certificado válido para "cloudflare.com" y trata de establecer una conexión cifrada con el host. Si el certificado es de confianza para una autoridad de certificación, no hay que preocuparse por la dirección IP.

En términos generales, la idea aquí es simplemente cambiar la dirección IP de la situación de arriba por una dirección .onion. Como el certificado es válido, la dirección .onion en sí no tiene que introducirse manualmente por parte de un usuario ni ser fácil de recordar. Es más, el hecho de que el certificado fuera válido indica que la dirección .onion era correcta.

En particular, de la misma manera que una única dirección IP puede servir millones de dominios, una dirección .onion debe poder servir cualquier número de dominios.

Sin embargo, el sistema de nombres de dominio (Domain Name System o DNS por sus siglas en inglés) no funciona así.

¿Cómo funciona entonces?

Igual que con el cifrado oportunista, podemos dirigir a los usuarios al servicio de Onion de Cloudflare utilizando HTTP Alternative Services, un mecanismo que permite que los servidores informen a los clientes de que el servicio al que acceden está disponible en otra ubicación de la red o mediante otro protocolo. Por ejemplo, cuando el navegador de Tor hace una petición a "cloudflare.com", Cloudflare añade un encabezado alternativo para indicar que se puede acceder al sitio mediante HTTP/2 con nuestros servicios de Onion.

Del mismo modo que Cloudflare posee las direcciones IP que sirven las páginas web de nuestros clientes, operamos diez direcciones .onion. Pueden entenderse como diez puntos de presencia de Cloudflare dentro de la red Tor. El encabezado exacto es algo parecido a esto, pero con las diez direcciones .onion incluidas, cada una precedida por el prefijo "cflare":

alt-svc: h2="cflare2nge4h4yqr3574crrd7k66lil3torzbisz6uciyuzqc2h2ykyd.onion:443"; ma=86400; persist=1


Esto simplemente indica que se puede acceder autoritariamente a "cloudflare.com" utilizando HTTP/2 ("h2") a través del servicio de Onion "cflare2n [...].onion", mediante el puerto virtual 443. El campo "ma" (max-age) indica la cantidad de tiempo en segundos que el cliente debe recordar la existencia del servicio alternativo y "persist" indica si el caché del servicio alternativo debe borrarse cuando se interrumpa la red.

Una vez que el navegador recibe este encabezado, intenta hacer un nuevo circuito de Tor al servicio de Onion anunciado en el encabezado alt-svc y confirma que el servidor que escucha al puerto virtual 443 puede presentar un certificado válido para "cloudflare.com", esto es, el nombre original del host, no la dirección .onion.

El servicio de Onion luego retransmite el paquete Hello Client a un servidor local que puede servir un certificado para "cloudflare.com". De esta manera, el demonio Tor en sí puede ser mínimo. Este es un archivo de configuración de ejemplo:

SocksPort 0
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
HiddenServiceVersion 3
HiddenServicePort 443
SafeLogging 1
Log notice stdout

Ten cuidado al usar la configuración anterior, ya que habilita un ajuste no anónimo para los servicios de Onion que no requieren anonimato por sí mismos. Para aclararlo, eso no sacrifica la privacidad o el anonimato de los usuarios de Tor, solo del servidor. Además, mejora la latencia de los circuitos.

Si el certificado está firmado por una autoridad certificadora de confianza, para cualquier solicitud posterior a "cloudflare.com" el navegador se conectará usando HTTP/2 mediante el servicio Onion, evitándose la necesidad de pasar por un nodo de salida.

Aquí están los pasos resumidos una vez más:

  1. Se establece un nuevo circuito de Tor;
  2. El navegador envía un Hello Client al servicio de Onion con indicador del nombre del servidor (Server Name Indication o SNI por sus siglas en inglés) cloudflare.com;
  3. El servicio de Onion retransmite el paquete a un servidor local;
  4. El servidor responde con Server Hello para el SNI=cloudflare.com;
  5. El servicio de Onion retransmite el paquete al navegador;
  6. El navegador verifica que el certificado es válido.

Insistimos en que el certificado presentado por el servicio de Onion solo debe ser válido para el nombre de host original, lo que significa que la dirección de Onion no tiene que mencionarse en el certificado. Esa es una gran ventaja, porque te permite, por ejemplo, presentar un certificado gratuito de Let’s Encrypt para tu dominio .org en lugar de un certificado de validación extendida más caro.

Comodidad, ✓

Distinguir los circuitos

Recuerda que, aunque un nodo de salida puede servir a muchísimos clientes diferentes, desde el punto de vista de Cloudflare todo ese tráfico proviene de una dirección IP. Esta agrupación contribuye a que el tráfico malicioso se esconda entre el tráfico legítimo, pero no es esencial para la seguridad o la privacidad de Tor. De hecho, potencialmente puede dañar a los usuarios exponiendo su tráfico a nodos de salida malos.

Recuerda que los circuitos de Tor a los servicios de Onion llevan un número de circuito que podemos utilizar para limitar la velocidad del circuito. Ahora, la pregunta es cómo informar a un servidor como nginx de este número con el menor esfuerzo. Resulta que, con solamente un pequeño retoque en el binario de Tor, podemos insertar un encabezado de Protocolo Proxy al principio de cada paquete que se reenvía al servidor. Este protocolo está diseñado para ayudar a que los proxy TCP pasen parámetros que pueden perderse en el transporte, como las direcciones IP de origen y destino, y ya es compatible con nginx, Apache, Caddy, etc.

Por suerte para nosotros, el espacio IPv6 es tan vasto que podemos codificar el número de circuito de Tor como dirección IP en un rango no usado y utilizar el Protocolo Proxy para enviarla al servidor. Este es un ejemplo del encabezado que nuestro demonio de Tor insertaría en la conexión:

PROXY TCP6 2405:8100:8000:6366:1234:ABCD ::1 43981 443\r\n


En este caso, 0x1234ABCD codifica el número de circuito en los últimos 32 bits de la dirección IP origen. El servidor local de Cloudflare entonces puede usar de forma transparente esa IP para asignar reputación, mostrar preguntas CAPTCHA o bloquear solicitudes cuando sea necesario.

Ten en cuenta que, a pesar de que las solicitudes transmitidas por un servicio de Onion no llevan una dirección IP, verás una dirección IP como la de arriba con el código de país "T1" en tus registros. Esta IP especifica solamente el número del circuito visto por el servicio de Onion, no la IP real del usuario. De hecho, 2405:8100:8000::/48 es una subred sin uso asignada a Cloudflare, que no estamos enrutando a nivel mundial para este propósito.

Eso permite que los clientes continúen detectando bots usando la reputación de IP mientras que ahorra a los humanos la molestia de hacer clic en las muestras de señales de tráfico de CAPTCHA una y otra vez.

Seguridad, ✓

¿Por qué debería confiar en Cloudflare?

No tienes por qué. El servicio de Onion de Cloudflare presenta exactamente el mismo certificado que habríamos utilizado para solicitudes directas a nuestros servidores, así que podrías auditar este servicio mediante Certificate Transparency (que incluye Nimbus, nuestro registro de transparencia de certificados), para revelar cualquier trampa potencial.

Además, puesto que el navegador Tor 8.0 hace un circuito nuevo para cada nombre de host cuando se conecta a través de un servicio alternativo .onion, el número de circuito no puede utilizarse para unir conexiones a dos sitios diferentes.

Ten en cuenta que todo esto funciona sin operar nodos de entrada, retransmisión o salida. Por lo tanto, las únicas solicitudes que vemos como consecuencia de esta función son las que se dirigían a nosotros igualmente. En particular, como no se introduce tráfico nuevo, Cloudflare no obtiene más información de lo que hace la gente en Internet.

Anonimato, ✓

¿Es más rápido?

Tor no es famoso por su rapidez. Una razón de ello es el coste físico de tener paquetes que rebotan en una red descentralizada. Las conexiones realizadas a través del servicio de Onion de Cloudflare no añaden nada a ese coste porque el número de saltos no es mayor de lo habitual.

Otra razón es el coste del ancho de banda de los operadores del nodo de salida. En esa cuestión esperamos que el servicio compense, ya que cambia el tráfico de los nodos de salida a nuestros propios servidores, reduciendo con ello los costes de operación de los nodos de salida.

BONUS: Rendimiento, ✓

¿Cómo lo habilito?

El enrutamiento de Onion ya está disponible para todos los clientes de Cloudflare, habilitado por defecto en los planes gratuitos y profesionales. La opción está disponible en la pestaña Criptografía del panel de control de Cloudflare.

Compatibilidad con navegadores

Se recomienda utilizar el navegador Tor 8.0, que es la primera versión estable basada en Firefox 60 ESR y soporta encabezados .onion Alt-Svc, así como HTTP/2. El nuevo navegador Tor para Android (alpha) también soporta esta característica. Puedes comprobar si tu conexión está enrutada a través de un servicio de Onion o no en la ventana Herramientas del desarrollador en la pestaña Red. Si estás usando el navegador y no ves Alt-Svc en los encabezados de respuesta, significa que ya estás usando la ruta .onion. En futuras versiones del navegador Tor podrás verlo en la interfaz de usuario.

Tenemos GRANDES NOTICIAS. Hemos revisado la experiencia de usuario del navegador Tor.
El navegador Tor 8.0 tiene una nueva experiencia de incorporación del usuario, una página de aterrizaje actualizada, soporte de idiomas adicionales y nuevas maneras de conectarse a puentes, mostrar un circuito y visitar sitios .onion. https://blog.torproject.org/new-release-tor-browser-80 ...

También han mostrado interés otros proveedores de navegadores preocupados por la privacidad. Tom Lowenthal, gerente de producto para privacidad y seguridad de Brave dijo:

Las actualizaciones automáticas a sitios ".onion" proporcionarán otra capa de seguridad a la navegación privada de Brave con Tor. Estamos encantados de implementar este estándar emergente.

¿Las últimas palabras?

Igual que el cifrado oportunista, el uso oportunista de Onion no protege completamente contra los atacantes que pueden simplemente quitar el encabezado de servicio alternativo. Por lo tanto, es importante utilizar HTTPS Everywhere para asegurar la primera solicitud. Una vez establecido un circuito de Tor, las solicitudes subsiguientes permanecerán en la red de Tor de origen a destino.

A medida que mantengamos y mejoremos este servicio, compartiremos lo que aprendamos. Mientras tanto, no dudes en probar esta idea en Caddy y contactarnos con cualquier comentario o sugerencia que tengas.

Agradecimientos

Patrick McManus de Mozilla por habilitar el soporte de servicios alternativos .onion en Firefox; Arthur Edelstein de Tor Project por revisar y habilitar servicios alternativos HTTP/2 y HTTP en el navegador Tor 8.0; Alexander Færøy y George Kadianakis del Proyecto Tor por agregar soporte para el Protocolo Proxy a los servicios de Onion; todo el equipo del Proyecto Tor por su inestimable ayuda y conversaciones; y por último, pero no menos importante, mucha gente de Cloudflare que ha contribuido a este proyecto.

Direcciones usadas por el servicio de Onion de Cloudflare

cflarexljc3rw355ysrkrzwapozws6nre6xsy3n4yrj7taye3uiby3ad.onion
cflarenuttlfuyn7imozr4atzvfbiw3ezgbdjdldmdx7srterayaozid.onion
cflares35lvdlczhy3r6qbza5jjxbcplzvdveabhf7bsp7y4nzmn67yd.onion
cflareusni3s7vwhq2f7gc4opsik7aa4t2ajedhzr42ez6uajaywh3qd.onion
cflareki4v3lh674hq55k3n7xd4ibkwx3pnw67rr3gkpsonjmxbktxyd.onion
cflarejlah424meosswvaeqzb54rtdetr4xva6mq2bm2hfcx5isaglid.onion
cflaresuje2rb7w2u3w43pn4luxdi6o7oatv6r2zrfb5xvsugj35d2qd.onion
cflareer7qekzp3zeyqvcfktxfrmncse4ilc7trbf6bp6yzdabxuload.onion
cflareub6dtu7nvs3kqmoigcjdwap2azrkx5zohb2yk7gqjkwoyotwqd.onion
cflare2nge4h4yqr3574crrd7k66lil3torzbisz6uciyuzqc2h2ykyd.onion

Suscríbete al blog para actualizaciones diarias de nuestros anuncios.

comments powered by Disqus