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.
|
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)
|
Posteriormente se pueden ejecutar comandos tales como:
|
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:
|
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:
|
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:
|
-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:
|
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:
|
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”
|
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:
|
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:
|
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
|
Los mensajes de Log generados por tortunnel son los siguientes:
|
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.
|
Iniciando TorTunnel (en este caso con nodo de salida que no es valido para este tipo de actividades)
|
Ejecutando proxychains con NMAP
|
La ejecución del comando anterior ha generado las siguientes trazas en el log de TorTunnel:
|
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:
|
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.
|
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:
|
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.
Excelente artículo, entonces lo que dices es que la mejor solución para evitar fugas de dns e icmp cuando realizamos un port scanning es utilizar torproxy + proxychains + un exit node «Exit Fast Running V2Dir Valid»? Es asi?
Te sigo por RSS, saludos!
Me gustaMe gusta
es una buena alternativa para mejorar el desempeño de un escaneo, pero por si solos no son suficientes para que no existán fugas DNS, depende en gran medida del comando NMAP que se ejecute, dado que como se ha indicado, por defecto NMAP intenta hacer comprobaciones sobre la máquina remota intentando determinar si se encuentra activa enviando mensajes ECHO_REPLY, lo que fastidia completamente el anonimato. Lo mejor como siempre, es saber exactamente lo que se esta haciendo, en este caso por ejemplo, conocer muy bien los diferentes tipos de escaneos que existen en NMAP y que tipo de protocolos manejan, suele ser una buena opción utilizar un TCP Connect Scanning y desactivar peticiones DNS/ICMP que se realizan por defecto en NMAP utilizando las opciones -n y -PN.
Saludos.
Me gustaMe gusta
Enhorabuena por los articulos. Oye tengo un problema estoy mi combinaicon es tortunnel+proxychains+tor, pongo torproxy con un nodo como el del articulo y intento realizar el mismo escaneo que el articulo a una web, pero siempre me da timeout y puerto cerrado. He probado varias webs y varios nodos y nada. Mi proxychains tiene agredad la linea de socks4 127.0.0.1 5060. ¿Porque puede ser esto?
Me gustaMe gusta
Intenta establecer socks4a, en el escaneo NMap y definir los puertos que quieres escanear (con la opción -p), verifica los logs de TorTunnel ya que en muchas ocasiones algunos nodos no permiten salida a internet, son demasiado lentos o simplemente están inactivos. una buena practica es mirar el mapa de nodos de TOR (que puedes ver desde Vidalia) y seleccionar un nodo que lleve mucho tiempo activo y tenga un buen numero de circuitos involucrados. Finalmente verifica que TorTunnel se encuentra correctamente levantado en tu máquina:
netstat -an | grep 5060
Siguiendo estas pautas, seguramente lograrás realizar el escaneo.
Un Saludo.
Me gustaMe gusta
buenas adastra,
xD gracias por contestar tan rapido. Consigo realizar escaneos desde tor pero desde tortunnel aun no, tengo el puerto 5060 escuchando, tengo proxychains puesto para que socks4 apunte a 5060 y socks4 igual pero (tambien he probado dejando solo uno de los dos), recojo varias ips de vidalia por si me encuentro con uno nodo malo pero aun no lo consigoo siempre timeout xD. ¿A que te refieres con establecer nmap con socks4a es alguna opcion? Miro los logs pero no me sale el error como ati de «Error opening stream: system:111» se me queda en el request. Gracias por contestar de nuevo.
Un saludo
Me gustaMe gusta
Lee la parte final del articulo donde se indica la causa del error que te esta dando, por otro lado sock4a es el tipo de servidor proxy socks que puedes indicar en el fichero de configuración de proxychains.
Me gustaMe gusta