Posts Tagged ‘tor’

Servicios ocultos en TOR

|

La red Tor no se centra únicamente en capas de cebolla para permitir anonimato en las conexiones. Una de las características más interesantes es la que trataremos hoy: los servicios ocultos.
Un servicio oculto consiste fundamentalmente en un aplicativo en el servidor (web, bbdd, irc, etc) que está accesible únicamente desde dentro de la red TOR. La característica que hace interesante a estos servicios es que no es posible saber en qué máquina física se encuentra ejecutándose el servicio en cuestión.

Imaginemos un país en el que la libertad de expresión no esté asegurada, España por ejemplo. Resulta interesante crear una web en la que pueda asegurarse la libertad de expresión puesto que no es posible saber la máquina física en la que se ejecuta el aplicativo web. Otro enfoque interesante puede resultar crear un servicio con la intención de que nadie acceda a él, esto es posible con TOR ya que la dirección de acceso a los servicios ocultos no es publicada, ni indexada por arañas o buscadores web por el simple hecho de estar levantadas. Evidentemente si alguien publica en una web la dirección de acceso una araña conseguirá indexarlo. La principal finalidad es mantener anónima la máquina física que ejecuta el servicio.

Si te interesa el tema te estarás preguntando cómo funcionan tecnicamente los servicios ocultos. Lo explico brevemente:
Cuando un servicio oculto se crea localmente en la máquina se producen un par de claves: pública y privada. Asímismo se crea lo que se llama un descriptor de producto, que consiste en la lista de direcciones de acceso al servico junto con la clave pública del mismo. Este descriptor se publica anónimamente en los servidores de directorio de TOR, y son estos los que redireccionan al sistema en concreto (no directamente) cuando un cliente de TOR solicita acceso a la dirección del servicio oculto solicitada.

En el presente artículo crearemos un servicio web oculto. Nos basamos en la guía oficial de creación de servicios ocultos.
El primer paso es crear ese servicio de manera normal en el sistema, en nuestro caso un simple servidor web con Apache en el que colocamos una página estática, como podemos ver a continuación:


Free Image Hosting at www.ImageShack.us

Ahora nos centraremos en Torificar dicho servicio para hacerlo oculto. Partimos de la base de que tenemos un repetidor TOR instalado, para hacerlo podemos consultar el artículo al respecto que publiqué recientemente.
Una vez hecho simplemente tenemos que modificar dos variables en el fichero /etc/tor/torrc:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:80

La variable HiddenServiceDir sirve para indicar un directorio del sistema en el que TOR guardará información necesaria para trabajar con el servicio oculto. Entre dicha información se encuentran la dirección de acceso al servicio, certificados, etc. Es necesario que solo root tenga acceso a dicho directorio, por ejemplo permisos 700.
La variable HiddenServicePort sirve para indicarle a TOR dónde se enucentra dicho servicio, el formato es “puerto IP:Puerto“, de esta manera indicamos el puerto al que deben referenciar los accesos y la IP y puerto real en la que el servicio se encuentra escuchando. esto es importante porque si bien en nuestro ejemplo el servicio se pide en el mismo puerto y máquina, podríamos referenciarlo a otro sistema y/o puerto.

Una vez configurado levantamos el servicio en cuestión y el servicio TOR. Para saber mediante qué dirección URL podemos acceder al servicio simplemente consultamos el nombre del mismo en el directorio local del sistema:


Free Image Hosting at www.ImageShack.us

Para acceder a dicho servicio configuramos el navegador en la red TOR y pedimos la URL indicada:


Free Image Hosting at www.ImageShack.us

Si observamos los ficheros de log de Apache podemos apreciar que no apareceran las IP’s de acceso de los visitantes, ya que estarán referenciadas por la IP que marcamos en el fichero de configuración de TOR:


Free Image Hosting at www.ImageShack.us

Hasta aquí la creación de servicios ocultos, en próximos artículos me gustaría indagar sobre desventajas del uso de esta red y posibles defectos en ella. Pero eso será probablemente tras unas merecidas vacaciones.

TOR: Introducción y configuración de un repetidor interno

|

La red de anonimato de TOR se basa fundamentalmente en dirigir el tráfico a través de una serie de nodos o repetidores que forman parte de la red TOR y que encapsulan el paquete en sucesivas capas, de manera que “nadie” sabe el destino del mismo hasta que el paquete llega a un repetidor de salida. Para ello se utiliza el concepto de Onion Routing.

No voy a explayarme porque no creo que pueda expresarlo mejor que la página oficial, con gráficos y demás. Analizar en profundidad esto queda fuera del objeto de este post pero quisiera remitir a los interesados unas URL’s para profundizar sobre el tema:

https://wiki.torproject.org/noreply/TheOnionRouter
https://git.torproject.org/checkout/tor/master/doc/design-paper/tor-design.pdf
https://git.torproject.org/checkout/tor/master/doc/spec/tor-spec.txt
https://git.torproject.org/checkout/tor/master/doc/spec/control-spec.txt
https://git.torproject.org/checkout/tor/master/doc/spec/rend-spec.txt
https://git.torproject.org/checkout/tor/master/doc/spec/dir-spec.txt
https://git.torproject.org/checkout/tor/master/doc/spec/path-spec.txt

Entre las características interesantes que esta red ofrece destacan de manera especial los “servicios ocultos”, que son distintos tipos de servicios (web, irc, etc) que sólo son accesibles para y desde la red TOR, y que tienen la propiedad de que teóricamente no es posible saber el sitio físico o PC concreto en el que está alojado dicho servicio. En próximos post crearemos uno y hablaremos de ellos.

Una de las cosas importantes a tener en cuenta es que la “calidad” de la privacidad es directamente proporcional al número de repetidores que haya en la red. Este post se centrará en explicar brevemente cómo crear de manera sencilla un nodo repetidor de TOR sobre un sistema Linux, concretamente sobre un Fedora Linux 10.
Primero hay que destacar que hay dos tipos de repetidores, los internos y los de salida. Configurar un nodo de salida puede traer algunas complicaciones que explicaremos en un futuro post, y veremos cómo hacerlo. De momento nos centraremos en un repetidor interno, que basicamente sirve para marear peticiones con el objeto de conseguir una privacidad aceptable.

La página oficial de TOR tiene abundante documentación, recomiendo mirar la guía para configurar repetidores, aunque aquí explicaré brevemente como hacerlo en dos patadas.

== Instalando TOR ==

Tor está en los repositorios de Fedora por lo que instalar el software es tan sencillo como ejecutar el siguiente comando con privilegios de administración:

yum install tor

== Configurando TOR como repetidor interno ==

El fichero de configuración de TOR se encuentra en /etc/tor/torrc y para crear un sencillo repetidor interno basta con las siguientes opciones:

SocksPort 9050 # puerto para las conexiones locales
SocksListenAddress 127.0.0.1 # aceptar conexiones de localhost
Log notice file /var/log/tor/notices.log # fichero de log notice
Log debug file /var/log/tor/debug.log # fichero de log de depuracion
Log notice syslog # facility del syslog
RunAsDaemon 1 # ejecutar el servicio como demonio
DataDirectory /var/lib/tor/.tor # directorio de datos
Nickname mordor # nombre del repetidor
RelayBandwidthRate 50 KBytes # Throttle traffic to 100KB/s (800Kbps)
RelayBandwidthBurst 50 KBytes # But allow bursts up to 200KB/s (1600Kbps)
ORPort 9001 # puerto en el que se esperan conexiones
DirPort 9030 # puerto para solicitar conexiones, ideal si tienes mucho ancho de banda para compartir
Group toranon # grupo con el que se ejecutará
User toranon # usuario con el que se ejecutará

hay que destacar que si tienes una conexión ADSL normal y corriente tendrás que hacer NAT contra tu sistema para los puertos definidos en las variables ORPort y DirPort.

== Comprobar que funciona ==

Para comprobar que está en ejecución sin problemas debemos recurrir al log, que se encuentra en la ruta /etc/tor/torrc, para que funcione debería tener un aspecto similar a esto:

May 02 01:12:06.368 [notice] Tor has successfully opened a circuit. Looks like client functionality is working.
May 02 01:12:06.368 [notice] Now checking whether ORPort 83.44.185.90:9001 and DirPort 83.44.185.90:9030 are reachable… (this may take up to 20 minutes — look for log messages indicating success)
May 02 01:12:11.307 [notice] Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.
May 02 01:12:11.528 [notice] Self-testing indicates your DirPort is reachable from the outside. Excellent.
May 02 01:12:30.024 [notice] Performing bandwidth self-test…done.

Adicionalmente una vez que el servidor es accesible a la red sus datos serán subidos a los llamados “descriptores de servidor” y en ellos podremos comprobar que nuestro nodo forma parte de la red TOR, en mi caso he usado un descriptor (http://moria.seul.org:9032/tor/status/authority) para comprobar que mi nodo “mordor” forma parte de la red:


Free Image Hosting at www.ImageShack.us

== Funcionando ==

Una vez que funcione hay varias recomendaciones que pueden leerse en la guía oficial. Por mi parte simplemente he querido ver un poco qué es lo que se mueve en esta red y para ello he levantado un sniffer (tcpdump) y he inspeccionado el tráfico que pasa por mi nodo.
Tenemos por tanto un fichero .cap con el tráfico interceptado. Para analizarlo utilizaremos Wireshark. Vamos a distinguir dos tipos de comunicaciones:

1. Tráfico de solicitud de conexiones.
Este tipo de tráfico se transmite entre los nodos internos y los servidores de directorio y es necesario para poder calcular las rutas por las que viajarán los paquetes. Este tráfico utilza el puerto que hayamos definido en la variable DirPort, en nuestro caso el 9030, asique aplicaremos el siguiente filtro al Wireshark:

tcp.port == 9030 || udp.port == 9030

Si ensamblamos la comunicación TCP tenemos dos tipos de comunicaciones, en el primer tipo tenemos una comunicación parcialmente cifrada


Free Image Hosting at www.ImageShack.us

La IP de nuestro repetidor es la 192.168.1.33 y por lo que podemos ver una IP perteneciente a otro repetidor (podemos contrastarlo consultando en el descriptor de servidor comentado anteriormente) realiza una petición http GET a la que nuestro repetidor contesta con un 200 OK.
El contenido de dicha respuesta está cifrado.

En el segundo tipo de petición tenemos algo similar a la anterior, pero con una respuesta negativa (400 NOT FOUND):


Free Image Hosting at www.ImageShack.us

2. Tráfico entre repetidores.
Este es el tráfico más abundante y se realiza mediante el puerto definido en la variable ORPort, en nuestro caso el 9001, asique aplicaremos el siguiente filtro al Wireshark:

tcp.port == 9001 || udp.port == 9001

Como podemos comprobar en las siguientes capturas el tráfico va cifrado y se produce únicamente entre IP’s que pertenecen a repetidores (podemos contrastarlo consultando en el descriptor de servidor comentado anteriormente):


Free Image Hosting at www.ImageShack.us

Free Image Hosting at www.ImageShack.us

Free Image Hosting at www.ImageShack.us

En las próximas entradas configuraremos un nodo de salida y comprobaremos cómo en este caso sí pueden inspeccionarse los datos de salida.

Privacidad en la red

|

La privacidad en internet no es un tema nuevo. Hace ya más de 15 años que Phil Zimmermann se las vió y se las deseó por sacar PGP a la red. Debian Linprivacidadux ofrecía distintas versiones del CD1 en función del país debido a la exportación de algoritmos criptográficos. Slackware Linux se estableció en Canadá por temas similares. Y es que a la NSA no le gusta que utilzemos algoritmos que no puedan romper facilmente. Telnet forever, ¿para qué SSH?

Simplemente leer un poco de la actualidad nos basta para intuir que se están produciendo movimientos en favor de controlar la red. Y aunque los que desean el control del la red siempre tendrán lacayos que disfracen la verdad lo cierto es que caminamos hacia una red en la que nuestra privacidad está en peligro. Y es que recientes estudios indican que pasamos más tiempo en la red que en los medios tradicionales: TV, radio, etc ¿Tendrá esto algo que ver?

La falsa sensación de anonimato que proporciona la red juega en su favor. También el pasotismo que hay tras las simples reflexiones de: “que me registren, yo no tengo nada que esconder“. No me imagino a nadie en un probador de un centro comercial al descubierto, sin cortina, para dificultar el trabajo a los ladrones, ya que no tenemos nada que esconder y así pillaran a los malos más facilmente.
Es el viejo truco de siempre, esparce un poco de miedo y la gente olvidará sus derechos y libertades en favor del salvador que los proteja.

Las opciones que tenemos pasan por dos vías fundamentalmente, integrar la criptografía en el mayor número de transacciones que llevemos a cabo a través de la red y en las redes anónimas. En las siguientes entradas trataré de hacer un repaso a la red de anonimato más conocida en la actualidad: la red TOR. Repasaremos sus virtudes y sus miserias y trataré de que al menos algunos de los que me leéis centréis vuestra atención en lo que es un problema importante, de actualidad y que nos afecta a todos.

Navegación anónima con Tor + Privoxy + Firefox

|

Tor es un sistema que permite una navegación pseudoanómina a través del envio y recepción de paquetes por parte de una red aleatoria. Para más información acudid a la web oficial:
http://tor.eff.org/index.html.es

Sus ventajas son evidentes: nos proporciona intimidad en la red, nos protege del analisis del trafico, confidencialidad en los negocios. El precio a pagar es la ralentización de la navegación, ya que los servidores por los que pasa consumen tiempo, no disponen de un gran ancho de banda y son donados.
En la web oficial de Tor dejan claro que “se trata de código en desarrollo por lo que, si realmente necesitas un anonimato fuerte, no es una buena idea basarse en la actual red Tor.”

Aún así desde el punto de vista de un usuario doméstico que para ciertas conexines quiera anonimato es muy interesante, y en este artículo explicare de manera sencilla como lograrlo. Esta miniguia está probada sobre un sistema operativo Slackware Linux, pero los cambios respecto a otras distribuciones deberían ser mínimos, apenas la instalación de los paquetes.

Instalando Tor

Podemos descargar el binario desde la web oficial( http://tor.eff.org/download.html.es ), en el caso de Slackware no proporcionan binarios, pero tenemos uno construido que podemos descargar desde:
http://ftp.scarlet.be/pub/linuxpackages/Slackware-11.0/Daemon/tor/tor-0.1.1.26-i486-1McD.tgz

La instalación es sencilla, la realizamos con el comando “installpkg”.
Para ejecutar Tor usamos el script de inicio “/etc/rc.d/rc.tor start” que nos debe dar como salida algo parecido a esto:

Starting the Tor daemon: /usr/bin/tor
Jan 30 14:21:17.068 [notice] Tor v0.1.1.26. This is experimental software. Do not rely on it for strong anonymity.
Jan 30 14:21:17.069 [notice] Initialized libevent version 1.2 using method poll. Good.
Jan 30 14:21:17.069 [notice] connection_create_listener(): Opening Socks listener on 127.0.0.1:9050

Tor abre un sock en el puerto 9050, por ello es necesario tener dicho puerto abierto, si hay fallos posteriores de conexión podría ser que tenemos dicho puerto cerrado. Abrirlo es sencillo, apenas un comando de iptables:
“iptables -A INPUT -p tcp –dport 9050 -j ACCEPT”

Instalando Privoxy

Privoxy( http://www.privoxy.org ) filtra todo tipo de datos que se utilizan en la navegación web: cookies, encabezados y demás. Es muy importante usarlo junto con Tor ya que a veces el navegador ejecuta por sí mismo las resoluciones dns y las agrega a las cabeceras de la petición http, con lo cual perdemos el anonimato.

Podemos descargar los binarios desde la web oficial: http://sourceforge.net/project/showfiles.php?group_id=11118
En esta ocasión tampoco disponen de binarios construidos para Slackware, pero eso no es problema, he creado el tgz y está disponible en mi ftp personal:
ftp://meleagro.homeunix.org/slackware/privoxy-3.0.6-i686-1dmg.tgz

La instalación es sencilla, la realizamos con el comando “installpkg”.
La configuración requiere que editemos el fichero /usr/local/etc/privoxy/config y hagamos algunas modificaciones( los números de linea son aproximados ):

linea 428 -> comentar la linea “logfile logfile”
linea 458 -> comentar la linea “jarfile jarfile”
linea 578 -> comentar la linea “debug 1 # show each GET/POST/CONNECT request”
linea 1072 -> añadir la frase “forward-socks4a / 127.0.0.1:9050 .” (sin comillas dobles)

Después de esto ejecutar Privoxy es tan sencillo como usar su script de inicio “/etc/rc.d/rc.privoxy start”.
Privoxy utiliza el puerto 8118, si no lo tenemos abierto usamos iptables para ello:
“iptables -A INPUT -p tcp –dport 8118 -j ACCEPT”

Preparando Firefox para la navegación anónima

En realidad ya podemos navegar anónimamente, cambiando la configuración del Firefox para que use Tor como proxy, pero es mucho más sencillo instalar un plugin que nos permitirá activar y desactivar Tor con un solo click, además de modificar las preferencias del mismo, se trata de Torbutton:
https://addons.mozilla.org/firefox/2275
Es interesante también que este plugin funciona en Mozilla Thunderbird, podemos descargarlo e instalarlo para el gestor de correo desde el menu “Herramientas->Extensiones”

Comprobando que nuestra navegación es anónima

Si activamos el boton de Tor en el Firefox ya deberíamos navegar anonimamente, deberíamos notar una reducción sustancial de la velocidad de navegación, pero hay métodos más exactos para comprobar que todo funciona, por ejemplo visitar la web:
https://nighteffect.us/tns/

que no solo nos dirá la IP de salida que estamos usando sino el nodo final de la red Tor, y si algo falla nos dirá que no estamos dentro de la red Tor.

Conclusiones

Para mi el uso de Tor ha sido más bien por hacer la prueba de concepto que por fines prácticos, si bien para cierto tipo de navegación nos puede venir bien, si os interesa mucho el proyecto considerad la idea de donar servidores a la red Tor, o donar ancho de banda, que también se puede.