En entradas anteriores se ha mencionado en repetidas ocasiones que las aplicaciones que quieran enviar sus paquetes por medio de TOR deben realizar un “torify” de sus peticiones, para esto existen algunas herramientas que facilitan esta tarea, a continuación se indica el uso de dichas herramientas:

TorSocks

Se trata de una herramienta que permite enviar peticiones seguras por medio de la red de TOR utilizando un servidor proxy SOCKS (como por ejemplo privoxy o polipo, que se verá mas adelante). De forma explicita asegura que todos los comandos que se ejecuten utilizando TorSocks envíen todos los paquetes TCP sobre la red TOR, rechazando todo el trafico UDP que se genere utilizando la aplicación. TorSocks es un “fork” de otra aplicación llamada Tsocks que actualmente se encuentra sin mantenimiento y desactualizada, el enfoque de TorSocks ha sido implementar y extender las funcionalidades de Tsock, por esta razón algunas opciones de Tsocks se encuentran disponibles en TorSocks.

Para instalar esta herramienta es necesario descargarla desde: http://code.google.com/p/torsocks/ posteriormente, es necesario configurar, empaquetar e instalar.

>./configure

>make

>make install

Este es el procedimiento mas sencillo y se instala con las opciones por defecto, sin embargo, es posible establecer determinadas opciones que personalizarán la ejecución de la aplicación, para ver un listado completo de las opciones que se pueden indicar en el script “./configure” leer el documento “INSTALL” que viene incluido en el tarball de “torsocks”.

Ahora, para utilizarlo, es necesario definir las variables de entorno que le permiten encontrar el servicio de Privoxy (o polipo según sea el caso) para ello se definen las variables de entorno en el fichero ~/.bashrc (en el caso de que se utilice Bash como interprete de comandos)

http_proxy=http://127.0.0.1:8118/

HTTP_PROXY=$http_proxy

export http_proxy HTTP_PROXY

Posteriormente se pueden ejecutar comandos tales como:

>usewithtor ssh root@DIRECCION_IP

Probablemente TorSocks es uno de los principales programas utilizados para evitar fugas DNS, sin embargo, no es el único, el uso de ProxyChains cada vez tiene mayor acogida en el mundo de usuarios de TOR, especialmente cuando se trata de usar TOR desde entornos que no cuentan con un navegador web. Esto se verá con un mayor nivel de detalle más adelante.

TorResolve

En realidad se trata de una herramienta auxiliar que permite realizar consultas DNS por medio de la red TOR utilizando protocolo TCP, de esta forma, en el caso de que se desee consultar la dirección IP de un determinado dominio, se puede realizar de esta forma, sin exponer la identidad del cliente que esta utilizando TOR. Su uso es realmente sencillo:

>tor-resolve http://www.google.com

74.125.43.104

Simplemente es necesario indicar el dominio que se desea consultar y tor-resolve intentará obtener la dirección IP de dicho dominio utilizando el circuito de nodos empleado para establecer la conexión con la red de TOR.

ProxyChains

Como se ha comentado en la anterior entrada se trata de una herramienta útil a la hora de encadenar dos o varios proxies en una cadena de conexión, esta conexión es encadenada en una serie de proxies cuyo fin puede ser el servicio de TOR (que por defecto se encuentra en el puerto 9050), de esta forma es posible ejecutar comandos como NMAP o SSH por medio de ProxyChains. Una de las principales ventajas de utilizar este programa, es que absolutamente todo el trafico viaja por medio de ProxyChains y la cadena de proxies lo que permite controlar que paquetes pueden llegar al destino y cuales no, por ejemplo, desde el fichero de configuración de proxychains “/etc/proxychains.conf” se puede declarar la opción “proxy_dns” la cual no permitirá que existan fugas para datos DNS.

No obstante, Proxychains no es “a prueba de tontos” y herramientas como Nmap que realizan “pings” de reconocimiento contra las maquinas remotas por defecto, pueden hacer que existan peticiones realizadas por fuera de la red TOR. Por ejemplo, se puede utilizar ProxyChains con el fin de ejecutar escaneos contra maquinas remotas utilizando Nmap y este, es probablemente uno de los mejores ejemplos de como proxychains no advierte cuando una petición envía paquetes ICMP, por defecto Nmap intentará realizar un reconocimiento del objetivo para determinar si esta activo (utilizando ICMP) a menos que se especifique explícitamente lo contrario, este comportamiento lo va a tener siempre para todos los host a escanear, de este modo si por ejemplo se ejecuta un comando como el siguiente:

>proxychains nmap -sV -p 80 192.168.1.33

El comando se ejecutará muy rápido, ya que no pasa por la red de TOR, sin embargo si se indica que el método de conexión será por TCP (opción -sT) y que no se realizarán peticiones ICMP ni DNS para reconocimiento del objetivo (-P0 y -Pn) el comando se ejecutará completamente desde la red TOR y evidentemente tardará más:

>proxychains nmap -sT -PN -n -sV -p 80 192.168.1.33

ProxyChains-3.1 (http://proxychains.sf.net)

Starting Nmap 5.51 ( http://nmap.org ) at 2011-08-29 02:45 CEST

|S-chain|-<>-127.0.0.1:8118-<><>-192.168.1.33:80-<><>-OK

|S-chain|-<>-127.0.0.1:8118-<><>-192.168.1.33:80-<><>-OK

Nmap scan report for 192.168.1.33

Host is up (0.00085s latency).

PORT STATE SERVICE VERSION

80/tcp open http Apache httpd 2.2.17 ((Unix) DAV/2 mod_ssl/2.2.17 OpenSSL/1.0.0c PHP/5.3.5 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1)

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 6.24 seconds

-sT: TCP Connect para realizar el escaneo.

-PN: Asumiendo que todos los host se encuentran online.

-n: No realizar ningun tipo de resolución DNS.

-sV: Scan Version, para identificar la versión de servicios.

-p: Puertos a escanear.

Como puede apreciarse en el escaneo anterior, la conexión al host remoto se realiza por medio del proxy local que se encuentra en ejecución en el puerto 8118.

NOTA: Actualmente he encontrado algunos problemas al ejecutar Privoxy y Proxychains juntos en plataformas Debian Squeeze, dado que en algunos casos, los resultados del escaneo con Nmap son incorrectos, además de que no permite la conexión con un servidor SSH como se realiza con TorSocks, si el lector encuentra problemas similares, una solución que ha funcionado correctamente para mi ha sido crear directamente un servidor SOCKS en local utilizando SSH de la siguiente forma:

>ssh -D 8118 root@192.168.1.33

Evidentemente privoxy se debe encontrar detenido, o bien especificar un puerto distinto e incluirlo en el fichero de configuración de proxychains.

TorTunnel

TorTunnel es una herramienta que permite establecer un servidor SOCKS en la maquina local y posteriormente crear un nodo de salida de la red TOR para establecer la conexión anónima con el destino de una forma mucho mas rápida, esto debido a que las peticiones ya no pasaran por tres nodos distintos antes de llegar a su destino (como es el comportamiento de una petición por medio de TOR) sino que en lugar de esto, la petición se realizará directamente desde el nodo de salida. Esta es la forma en la que funciona TorTunnel y como permite que las peticiones sean un poco más rápidas, dado que TOR no es una red especialmente eficiente en lo que respecta a tiempos de respuesta, no obstante el hecho de que solamente se pase por un nodo de salida, puede llevar a un nivel muy bajo de anonimato, lo que desde luego no significa que existan fugas de información privada o que de algún modo la identidad del usuario quede expuesta, significa que solamente existe un nodo de TOR entre el destino y el origen, por lo tanto, es crucial elegir adecuadamente el nodo de salida de las peticiones que se vayan a llevar a cabo por medio de TOR.

La instalación y uso de esta herramienta es muy simple, en primera instancia es necesario instalar las librerías BOOST y OpenSSL ya que son dependencias requeridas del software:

>apt-get install libboost-all-dev openssl

Una vez instaladas, se realiza el procedimiento típico correspondiente a la compilación, empaquetado e instalación de programas escritos en lenguaje C utilizando “make”

>./configure

>make

NOTA: Opcionalmente se puede ejecutar el comando “make install” con el fin de crear los enlaces simbólicos en el sistema y poder ejecutar el comando desde cualquier ubicación de la consola.

Con esto se crearan los ejecutables de TorTunnel el siguiente paso en su uso, es la correcta selección de un nodo de salida de la red de TOR, para ello se cuenta con el servicio en internet que indica a cada momento los nodos que se encuentran activos y su estado en la red de TOR, seleccionar el mejor en función a la versión de TOR en ejecución y los datos de cada nodo, tal servicio se encuentra localizado en: http://128.31.0.34:9031/tor/status/all

NOTA: Se recomienda buscar un nodo de salida que sea “Exit Fast”, por ejemplo, el nodo de salida seleccionado lineas abajo tiene la siguiente resolución en el servicio:

r Gost ygHO5vY+C+4S3kDMwgdrAAfGuHQ f0CCnk1LF5uvQ7ETEwc7wd6nltw 2011-08-29 14:08:42 79.84.33.204 443 9030s Exit Fast Running V2Dir Valid

Se recomienda buscar este tipo de nodos de salida para que las peticiones se ejecuten de forma optima.

Con el nodo de salida, puede ejecutarse el comando torproxy (aplicación tortunnel) y se obtendrá una salida similar a la siguiente:

>./torproxy 84.215.91.32

torproxy 0.2 by Moxie Marlinspike.

Retrieving directory listing…

Connecting to exit node: 84.215.91.32:443

SSL Connection to node complete. Setting up circuit.

Connected to Exit Node. SOCKS proxy ready on 5060.

La salida anterior indica que el servidor SOCKS se ha iniciado correctamente y ahora es posible utilizarlo desde el navegador web o desde linea de comandos utilizando proxychains, en el caso de utilizar proxychains, simplemente es necesario editar el fichero /etc/proxychains.conf e indicar la linea

socks4a 127.0.0.1 5060

de esta forma es posible ejecutar comandos como por ejemplo “nmap” para realizar escaneos contra una maquina remota de una forma mucho más rápida

>proxychains nmap -sT -PN -n -p80,113,443,22 96.17.XX.XX

ProxyChains-3.1 (http://proxychains.sf.net)

Starting Nmap 5.51 ( http://nmap.org ) at 2011-0 96.17.XX.XX 8-30 01:05 CEST

|S-chain|-<>-127.0.0.1:5060-<><>-96.17.XX.XX:443-<><>-OK

|S-chain|-<>-127.0.0.1:5060-<><>-96.17.XX.XX:80-<><>-OK

|S-chain|-<>-127.0.0.1:5060-<><>-96.17.XX.XX:22-<–timeout

|S-chain|-<>-127.0.0.1:5060-<><>-96.17.XX.XX:113-<–timeout

Nmap scan report for a96-17-156-35.XXXX.XXXX.com (96.17.XX.XX)

Host is up (0.25s latency).

PORT STATE SERVICE

22/tcp closed ssh

80/tcp open http

113/tcp closed auth

443/tcp open https

Nmap done: 1 IP address (1 host up) scanned in 31.62 seconds

Los mensajes de Log generados por tortunnel son los siguientes:

Got SOCKS Connection…

Got SOCKS Request: 96.17.XX.XX:443

Successfully opened Tor exit Node stream…

CIRCUIT: Close called…

Got SOCKS Connection…

Got SOCKS Request: 96.17.XX.XX:80

Successfully opened Tor exit Node stream…

CIRCUIT: Close called…

Got SOCKS Connection…

Got SOCKS Request: 96.17.XX.XX:22

Got SOCKS Connection…

Got SOCKS Request: 96.17.XX.XX:113

Error opening stream: system:111

Como se puede apreciar, los puertos que se encuentran abiertos, han dado una respuesta positiva, sin embargo en el caso de que el puerto se encuentre cerrado, el mensaje es “Error opening stream: system:111 ” indicando que no se ha podido establecer la conexión con el host remoto en el puerto especificado, ahora bien, en algunos casos este error suele ser confuso, dado que algunos nodos de salida simplemente no consiguen establecer correctamente conexiones con las maquinas especificadas en los puertos indicados, suponiendo que se quiere hacer esto mismo contra www.google.com, un atacante utilizando TOR ejecutaría lo siguiente:

Determinación de la dirección IP por medio de TOR.

>tor-resolve http://www.google.com

209.85.148.147

Iniciando TorTunnel (en este caso con nodo de salida que no es valido para este tipo de actividades)

./torproxy 87.78.195.208

torproxy 0.2 by Moxie Marlinspike.

Retrieving directory listing…

Connecting to exit node: 87.78.195.208:9001

SSL Connection to node complete. Setting up circuit.

Connected to Exit Node. SOCKS proxy ready on 5060.

Ejecutando proxychains con NMAP

>proxychains nmap -PN -sT -sV -n -p80,443 209.85.148.147

ProxyChains-3.1 (http://proxychains.sf.net)

Starting Nmap 5.51 ( http://nmap.org ) at 2011-08-30 01:26 CEST

|S-chain|-<>-127.0.0.1:5060-<><>-209.85.148.147:443-<–timeout

|S-chain|-<>-127.0.0.1:5060-<><>-209.85.148.147:80-<–timeout

Nmap scan report for fra07s07-in-f147.1e100.net (209.85.148.147)

Host is up (0.23s latency).

PORT STATE SERVICE VERSION

80/tcp closed http

443/tcp closed https

La ejecución del comando anterior ha generado las siguientes trazas en el log de TorTunnel:

Got SOCKS Connection…

Got SOCKS Request: 209.85.148.147:443

Error opening stream: system:111

Got SOCKS Connection…

Got SOCKS Request: 209.85.148.147:80

Error opening stream: system:111

Los resultados han sido completamente erróneos, dado que ambos puertos se encuentran abiertos en el host remoto, ejecutando el mismo comando sin utilizar proxychains y tortunnel da como resultado:

>nmap -PN -sT -sV -n -p80,443 209.85.148.147

Starting Nmap 5.51 ( http://nmap.org ) at 2011-08-30 01:30 CEST

Nmap scan report for fra07s07-in-f147.1e100.net (209.85.148.147)

Host is up (0.077s latency).

PORT STATE SERVICE VERSION

80/tcp open http Google httpd 2.0 (GFE)

443/tcp open ssl OpenSSL (SSLv3)

Service Info: OS: Linux

Ahora bien, la pregunta que seguramente el lector se estará haciendo es: por que? Que pasa con este nodo? Tal vez aclare un poco las cosas ver la descripción de este nodo en el servicio de nodos disponibles de la red TOR indicado párrafos anteriores.

r NeoNice Aciaj8rXslSDmf/XJyG/hPCu6lM SuuYPaqt+pkuKt60T7t1UD7Iwl0 2011-08-29 21:33:56 87.78.195.208 9001 9030s

Exit Fast Named Running V2Dir Valid

La razón en este caso es sencilla, el servidor es un nodo de salida, sin embargo no “entrega” paquetes a maquinas remotas, ya que es un host en el que se ejecuta un servicio de nombres, probablemente para resolución de consultas DNS por medio de la red de TOR, por este motivo, la petición nunca llegará a su destino. Es aquí donde nuevamente se recuerda la nota que se ha indicado anteriormente, se deben buscar nodos de salida que tengan una descripción similar a la siguiente:

r Gost ygHO5vY+C+4S3kDMwgdrAAfGuHQ f0CCnk1LF5uvQ7ETEwc7wd6nltw 2011-08-29 14:08:42 79.84.33.204 443 9030

s Exit Fast Running V2Dir Valid

Este conocimiento es útil, no solamente para utilizar TorTunnel sino también para comprender un poco que todos los nodos contenidos en la red de TOR brindan “salida” de paquetes a destinos en internet y que llegado el momento, será necesario saber diferenciar entre un nodo de salida y un nodo interno de la red que solamente redirecciona las peticiones por medio de otros nodos de la red.