Evade la censura: Monta tu blog utilizando los Servicios Onion de Tor

Evade la censura: Monta tu blog utilizando los Servicios Onion de Tor
March 18, 2023

En el contexto de la publicación de contenidos por parte de periodistas, activistas o blogueros - de manera creciente - la protección de la identidad de escritores y lectores, se ha convertido en una necesidad apremiante como medida para salvaguardar la vida de unos y otros.

Los servicios cebolla pueden ser accedidos únicamente mediante la red Tor agregando características que además de la seguridad propia de HTTPS añaden protección a la privacidad de quienes los sirven y quienes los acceden. Los servicios cebolla son una efectiva herramienta para la evasión de la censura y para la protección de la identidad, factores con los que periodistas, activistas o blogueros se encuentran a diario.

Este artículo describe cómo un usuario con conocimientos técnicos elementales puede disponer de un servidor de blog, el cual administrará de forma remota mediante una conexión SSH sobre Tor, que mantendrá su identidad suficientemente protegida y le permitirá evadir - tanto al autor como a sus lectores - eficazmente la censura mientras su blog esta desplegado utilizando la red Tor.

Aunque el proyecto provee lo necesario para que un usuario “no técnico” pueda seguir las instrucciones y desplegar satisfactoriamente el blog, se requiere que el usuario tenga un mínimo de conocimiento sobre cómo ejecutar comandos en la línea de comandos de GNU/Linux.

¿Cómo funciona?

El objetivo ha sido entregar al usuario una configuración fácil de ejecutar y que no exija altos conocimientos técnicos, pero que a la vez establezca al máximo posible la protección de la identidad de todos los jugadores en el contexto (autores y lectores); con esto en mente, se ha hecho la elección de las tecnologías utilizadas.

how

Jekyll

Jekyll es un generador de sitios web estáticos basado en Ruby, que utiliza archivos markdown para la generación de contenidos. Es uno de los más antiguos generadores de sitios web estáticos pero también es activamente desarrollado (la versión 4.3.2 fue publicada en Enero de 2023). Es utilizado por millones de usuarios en el mundo lo que lo hace ideal considerando que una característica deseada en proyecto orientado a la protección de la identidad es que las herramientas utilizadas sean suficientemente comunes como para no ser un elemento diferenciable que aporte identificación específica.

Docker

Docker es una plataforma de desarrollo que permite separar la infraestructura de las aplicaciones haciendo posible que la aplicación corra independiente respecto de a la infraestructura sobre la que se ejecute. La configuración de la imagen de Docker utilizada en este proyecto entrega todas las dependencias necesarias para que el blog se despliegue de forma autónoma con respecto al sistema operativo utilizado por el servidor. Por principio de compartimentalización, la configuración del servidor está completamente aislada de la instalación y configuración de las dependencias necesarias para el blog. Docker es ampliamente utilizado a nivel mundial, lo que le da esa característica de ser lo suficientemente común. Esto es bueno desde la perspectiva de seguridad.

Tor

La red Tor está diseñada para brindar una alta protección de la identidad de quienes la utilizan y también como herramienta para la evasión de la censura en Internet. Los servicios cebolla (onion services) entregan cifrado en la comunicación brindando el mismo nivel de protección que ofrece HTTPS más la protección adicional a la privacidad que otorga el Navegador Tor (Tor Browser). Además, al utilizar los servicios cebolla para publicar el blog en la red Tor, se agrega una capa de protección contra la censura tanto para quien escribe como para quien lee.

SSH

SSH es un protocolo de comunicación que agrega cifrado de transporte evitando ataques como password sniffing, permitiendo que la comunicación e interacción entre dos máquinas remotas suceda de manera segura. En este proyecto se agrega una protección adicional al configurar un servicio cebolla específico para utilizar SSH sobre Tor.

Tails

Tails es un sistema operativo diseñado para proteger por defecto contra la vigilancia y la censura. En este proyecto, el uso de Tails no es obligatorio pero sí altamente recomendado, en particular para las tareas de administración del servidor y contenidos del blog.

ANTES DE CONTINUAR: Este procedimiento se ha probado en un ambiente controlado, por lo que se recomienda continuar bajo su propia responsabilidad.

Flujo de trabajo

Etapa 1: bootstrap-script

En esta primera etapa se obtendrá un canal SSH sobre Tor para continuar con la instalación, configuración y administración del blog a través de un canal remoto, seguro y anónimo. La configuración que se ha establecido procura limitar la interacción directa con el servidor al mínimo necesario con el objetivo de reducir la probabilidad de dejar rastros que permitan la identificación de quien está interactuando con el servidor durante este proceso.

Prerequisito: Disponer de una computadora destinada a ser usada únicamente como servidor del blog en la que se haya hecho una instalación (instalación desde cero sin que conserve archivos o registros de instalaciónes anteriores) limpia de Debian GNU/Linux. Cualquier otra distribución de GNU/Linux debería ser funcional, sin embargo para mantener altas las características de seguridad del blog, se recomienda utilizar específicamente Debian GNU/Linux. La instalación del sistema operativo para el servidor no requiere de entorno de escritorio y es deseable instalar SSH-Server en el proceso de instalación del sistema operativo. No disponer de entorno de escritorio en el servidor contribuye a reducir la superficie de ataque al no agregar componentes innecesarios al sistema operativo.

1. Obtener la dirección IP local del servidor

En la configuración estándar de este proyecto, ésta debería ser la única interacción directa con el servidor. Para obtener la dirección IP que el servidor está utilizando, debe ejecutar desde una línea de comandos en el servidor: hostname -I.

2. Ejecutar el bootstrap-script

Una vez obtenida la dirección IP local del servidor, desde otra máquina (utilizando Tails) en la misma red ejecutar el comando:

$ ssh -t {server user}@{server ip} 'wget -q https://raw.githubusercontent.com/digitalautonomy/Jekyll-Onion-blog/main/DEV/bootstrap-script.sh && bash bootstrap-script.sh'

Antes de ejecutar este comando, asegúrese de cambiar {server user} con el usuario en el servidor y {server ip} con la dirección IP obtenida en el paso anterior.

La ejecución del bootstrap-script le pedirá inicialmente la contraseña del usuario en el servidor y luego, en varias ocasiones, la contraseña del root del servidor para hacer la instalación de Tor y la configuración del servicio cebolla sobre el que continuará el proceso.

Una vez terminada la ejecución del bootstrap-script, si todo ha salido bien, obtendrá un log como el siguiente:

bootstrap-script final log

Este log muestra el comando que debe ejecutar (copiar - pegar) para continuar con la instalación, configuración y despliegue. Guarde de forma segura el enlace onion (gcqualnzj7stk5naqjaba2oihneqsrq2xgrprfbvhyokedd573usgoqd.onion en la imagen de ejemplo) ya que éste será el que deba utilizar cada vez que se conecte a su servidor para administrar su blog.

El mensaje: Connection to 192.168.122.37 closed. indica que se ha cerrado la conexión SSH con el servidor. A partir de ahora, para interactuar con su servidor utilizará un canal SSH sobre Tor.

Etapa 2

Ejecutar el script second-stage

Ejecutar el comando que le indica el log final del paso anterior, iniciará la ejecución de la instalación, configuración y despliegue de su blog. Se le pedirá en varias ocasiones introducir la contraseña de usuario y root del servidor, tenga cuidado de no errar la escritura de la contraseña para no tener que reiniciar el proceso en este punto.

Una vez finalizada la ejecución del script second-stage obtendrá un log como el siguiente:

final log second stage

Éste es el log que le indica que su blog está desplegado y listo para ser accedido desde cualquier lugar del mundo mediante Tor Browser. Conserve el enlace del servicio cebolla zg5lx2jmvmjlov65bpd2k2t4k5fpx7phvemhdavuqcyikoun5oahhtid.onion a buen resguardo ya que es el que debe hacer público para que sus lectores puedan acceder a su blog. No utilice ninguna herramienta de simplificación (acortadores de URL, código QR, etc.) ya que estaría añadiendo metadatos que pueden representar información valiosa para posibles adversarios.

Personalizar su blog

Como principio fundamental para mantener alta la protección a su identidad, considere eliminar todos los metadatos de los archivos (imágenes y posts) que vaya a utilizar en su blog. Para este fin, Tails cuenta con metadata-cleaner, una aplicación destinada a eliminar los metadatos de muchos tipos de archivo.

Tenga en cuenta también, que la “personalización” de su blog es más un tipo de ajuste de algunos elementos visuales y de información general, pero dichos elementos no deben permitir asociarlos con su identidad. Utilice elementos gráficos muy genéricos (logo y hero background) y si es que quisiera añadir un correo electrónico de contacto, asegúrese de utilizar un servidor de correo que proteja su identidad y preferiblemente para el cual tenga configuradas llaves de GPG.

blog template

En la imagen de arriba puede observar los elementos que puede personalizar fácilmente. En realidad, puede personalizar todo el diseño del blog ya que en su servidor dispone de una copia de todo el código fuente, pero hacerlo requerirá más conocimientos e interacción con el servidor. También debe mantener presente que entre más específico sea el diseño de su blog, más elementos de identificación estará agregando.

  • Logo (1): El logosímbolo de su blog, como se ve en la imagen anterior, aparece en la parte superior e inferior (header y footer) de su blog. Para reemplazar el logo por defecto debe utilizar una imagen en formato .svg y el nombre del archivo debe ser logo.svg. Una vez haya decidido qué imágen utilizará como logo, debe ejecutar el siguiente comando para actualizar el logo en su blog:

    $ torify scp logo.svg {server-user}@{ssh onion service}:/home/{server-user}/Jekyll-Onion-blog-main/assets/images/
    

    En este comando debe sustituir {server-user} por el nombre de usuario en el servidor y {ssh onion service} por el enlace onion que obtuvo al finalizar la primera etapa.

  • Hero background (4): Esta debe ser una imagen en formato .png cuyo nombre de archivo debe ser background-desktop.png. Para actualizar esta imagen en su blog, utilice el comando:

    $ torify scp background-desktop.png {server-user}@{ssh onion service}:/home/{server-user}/Jekyll-Onion-blog-main/assets/images/
    

    en el que, tal como en el caso anterior, debe sustituir {server-user} por el nombre de usuario en el servidor y {ssh onion service} por el enlace onion que obtuvo al finalizar la primera etapa.

  • Para modificar descripción (2), slogan (3), correo electrónico (5) y fingerprint (6), deben modificarse tres archivos en el servidor: /_data/locations.yml, /_i18n/en.yml y /_i18n/es.yml. Lo primero será establecer un canal SSH para modificar los archivos en el servidor, ejecutando:

    $ torify ssh {server-user}@{shh onion service}
    

    Nuevamente, tener presente modificar {server-user} por el nombre de usuario en el servidor y {ssh onion service} por el enlace onion que obtuvo al finalizar la primera etapa.

    Una vez logueado en el servidor, puede editar el archivo locations.yml para modificar la dirección de correo electrónico y el respectivo fingerprint:

    $ nano /home/{server-user}/Jekyll-Onion-blog-main/_data/locations.yml
    

    Para editar los archivos que contienen la descripción y el slogan puede utilizar:

    $ nano /home/{server-user}/Jekyll-Onion-blog-main/_i18n/en/en.yml
    

    para el archivo en inglés y

    $ nano /home/{server-user}/Jekyll-Onion-blog-main/_i18n/es/es.yml
    

    para el archivo en español.

Agregar posts al blog

Para agregar nuevos posts al blog, primero, en Tails, descargue la plantilla para un nuevo post desde aquí. Edite este archivo con el contenido de su post y guárdelo respetando esta convención para el nombre del archivo yyyy-mm-dd-{post-title}.md (sustituyendo {post-title} por el título real de su post). Aquí debe tener presente que las versiones en inglés y español de su post deben estar en dos archivos separados pero con exactamente el mismo nombre de archivo.

Una vez tenga listos los post, para subirlos al servidor utilice el comando:

$ torify scp {file-post.md} {server-user}@{ssh onion service}:/home/{server-user}/Jekyll-Onion-blog-main/_i18n/en/_posts/

para la versión en inglés del post, y

$ torify scp {archivo-del-post.md} {server-user}@{ssh onion service}:/home/{server-user}/Jekyll-Onion-blog-main/_i18n/es/_posts/

para la versión en español.

En cada caso, sustituir {archivo-del-post.md} con el nombre del archivo que contiene el post (recuerde que los nombres de los archivos en inglés y español deben ser iguales), y {server-user} y {ssh onion service} con los datos correspondientes al servidor como en los anteriores pasos.

Puede encontrar información más detallada en el repositorio oficial del proyecto, disponible en:

https://github.com/digitalautonomy/Jekyll-Onion-blog.

A modo de conclusión:

  • El combate a la censura y la protección a la privacidad requieren herramientas que lleguen a todos independientemente de su condición económica pero también de su nivel de conocimientos técnicos. Disponer de herramientas como las aquí presentadas permite que todos quienes necesitan proteger su identidad y saltar las barreras que impone la censura, puedan acceder a los recursos para satisfacer las necesidades propias de su contexto (modelo de amenaza).
  • No existe modelo de seguridad de garantice o que cubra el 100% de brechas por las que se puede ser atacado. En toda herramienta destinada a la protección de la seguridad existen riesgos, por eso - en términos de seguridad - no se pueden establecer absolutismos. Es fundamental que quien evalúe la utilización de herramientas como las que aquí se han abordado, haga también una evaluación de cuáles son los riesgos que debe cubrir y cuáles son las medidas adicionales a tener en cuenta para reducir su superficie de ataque. Aquí se han sugerido los más altos estándares de seguridad posibles, sin embargo, puede que para un contexto en particular, estos estándares sean exagerados o por el contrario no sean suficientes.