El proyecto Tor está migrando a Rust
(itsfoss.com)- El código central de la red Tor está migrando del lenguaje C tradicional a Arti, basado en Rust
- El código existente en C tiene vulnerabilidades como desbordamiento de búfer, use-after-free y corrupción de memoria
- La nueva versión Arti 1.8.0 elimina patrones predecibles y reduce el riesgo de rastreo mediante un rediseño de los tiempos de espera de circuitos
- Se agregó un nuevo comando para que los operadores de servicios onion puedan migrar automáticamente sus claves desde Tor basado en C hacia Arti
- Esta transición es un avance técnico importante del proyecto Tor para mejorar la seguridad y la estabilidad
Principales cambios en Arti 1.8.0
-
El punto central de esta versión es la aplicación de una revisión del timeout de circuitos (circuit timeout rework)
- El Circuit Dirty Timeout (CDT) del Tor tradicional controlaba el momento de cerrar un circuito con un solo temporizador
- Este método era predecible, por lo que un observador del tráfico podía identificar patrones
- Arti 1.8.0 introduce timeouts basados en uso y temporizadores individuales, cambiando el comportamiento para que los circuitos terminen en momentos aleatorios cuando aceptan nuevas conexiones o quedan inactivos
- Con esto se reduce el riesgo de fingerprinting
-
Se agregó el nuevo comando experimental
arti hsc ctor-migrate- Permite que los operadores de servicios onion migren claves de descubrimiento restringido (restricted discovery keys) desde Tor basado en C hacia el keystore de Arti
- Estas claves se usan para la autenticación de clientes, y el nuevo comando permite la migración automática sin trabajo manual
-
Mejoras adicionales
- Se mejoraron varios componentes internos, incluyendo la arquitectura de enrutamiento, la implementación del protocolo, el soporte para caché de directorio y la configuración del listener del puerto OR
- Los cambios detallados pueden consultarse en el registro oficial de cambios de Arti 1.8.0
Contexto de la migración a Rust
- La red Tor ha operado desde principios de los 2000 con una base en lenguaje C
- Sin embargo, el código en C ha seguido presentando vulnerabilidades de seguridad por problemas de seguridad de memoria
- Por eso, el proyecto Tor está impulsando Arti, un proyecto de reescritura que aprovecha la seguridad de memoria de Rust
- Arti reimplementa las funciones de Tor en Rust con el objetivo de reforzar la seguridad, estabilidad y mantenibilidad
Importancia técnica
- La migración a Rust apunta a fortalecer de forma fundamental la estructura que garantiza el anonimato en Tor
- La eliminación de comportamientos predecibles en los circuitos y la automatización de la gestión de claves ayudan a mejorar el nivel de protección de la privacidad de los usuarios
- Las actualizaciones continuas de Arti se interpretan como una señal de que se está acelerando el reemplazo gradual del Tor basado en C
2 comentarios
Lanzamiento de Arti 1.0.0 - una implementación de Tor escrita en Rust
Comentarios en Hacker News
Hace poco probé Cover Your Tracks de la EFF y el resultado fue que solo el navegador Tor con JS desactivado resistía completamente el fingerprinting.
Incluso Tor con JS activado fue calificado como “parcialmente” resistente, y Firefox no dio resultado ni siquiera con JS desactivado. Da bastante miedo, así que me da curiosidad ver los experimentos de otras personas.
Por el contrario, herramientas como fingerprinting.com/demo, que solo prueban la persistencia, también tienen problemas.
La verdadera señal de alarma es fallar en ambas pruebas.
Aun así, aunque el navegador Tor sin duda destaca, solo con esta prueba es difícil concluir que sea fácil distinguir fingerprints entre usuarios de Tor.
Al subir el nivel de seguridad, los bits de identificación aumentaban, pero al desactivar JS por completo volvían a bajar.
Es decir, desactivar JS ofrece el mayor anonimato.
Ojalá Mozilla hubiera continuado más con la transición a Rust (oxidizing) en Firefox. También habría sido positivo para el ecosistema de Rust, así que da algo de pena.
Si Rust hubiera quedado como el “arma secreta” de Mozilla, quizá su expansión se habría retrasado aún más.
Si usar Rust les ayuda a resolver sus problemas, me parece una decisión razonable.
Los lenguajes son herramientas que se ajustan de forma distinta según el proyecto, el equipo y el problema.
No es una afirmación de fanboys de Rust, sino un problema de resistencia parecido al de cuando médicos o pilotos rechazaban las listas de verificación.
En UI importan la iteración rápida y el GC, y el rendimiento importa menos. Hacer UI en Rust puede volverse un infierno de mantenimiento.
Tor es un entorno multihilo donde importan tanto la seguridad como el rendimiento.
Zig también podría ser una alternativa, pero todavía no es lo bastante maduro. Enfoques como el de Tigerbeetle, que priorizan el determinismo (determinism), también resultan interesantes.
Mi mayor queja sobre el proyecto Tor es la lentitud. No creo que moverlo a Rust lo vaya a hacer más rápido.
Esta transición a Rust se realizó con apoyo de Zcash Community Grants. Incluso en el I+D de criptomonedas pueden salir buenos resultados.
Aunque se añade, en tono de broma, que las criptomonedas podrían ser peores que la orina.
Me preocupa el riesgo legal de operar un nodo exit de Tor. Me pregunto si habría alguna forma de permitir solo tráfico basado en whitelist.
Si es posible, recomiendan registrarlo a nombre de una organización, y si quieres ayudar de forma más segura, es mejor operar un relay.
O también puedes correr un guard/middle relay, que ayuda mucho a la red.
Eso sí, hay que bloquear algunos ASN de China. Hay mucho tráfico falso de descargas.
La adopción de Rust se parece a reemplazar con acero las viejas columnas de madera de una fortaleza antigua.
El código de Tor basado en C arrastra décadas de compromisos de seguridad y rastros de rendimiento, así que volverlo gradualmente más Rust es la forma más realista de mejorar la seguridad.
La clave no es una “reescritura total”, sino reducir las áreas inseguras en memoria.
Si solo se llevan a Rust las partes de mayor riesgo, como parsing, criptografía y los límites del protocolo, Tor se volverá más sólido.
También es interesante pensar en una evolución futura hacia transportes enchufables basados en Rust o un runtime híbrido.
En realidad, esta decisión no es reciente. Tor inició en 2020 el proyecto Arti basado en Rust y en 2022 anunció Arti 1.0.
Concluyeron que era difícil refactorizar gradualmente la base de código en C, y dijeron estar satisfechos con la velocidad de desarrollo, portabilidad y atracción de contribuidores de Rust.
Incluso recientemente, según el changelog de Arti, sigue en desarrollo activo.
Por ejemplo, una app de mensajería podría usar la red sin un daemon de Tor separado. Creo que ese es el cambio más grande.
Tor no es solo un concepto, sino un nombre que abarca el protocolo (onion routing), la red y también la implementación de referencia.
Hubo una propuesta medio en broma de que quizá se podría obtener seguridad de memoria gratis compilando Tor con Fil-C.