OnionCat es una herramienta que permite utilizar servicios basados en IP tales como servidores web, servidores de correo electrónico, etc. utilizando las ventajas que trae consigo el uso de una red anónima como TOR (sin embargo, OnionCat también puede ser utilizado con otras redes tales como I2P que se verá más adelante). El objetivo de OnionCat es el de crear una capa de transporte de paquetes IP transparente por encima de los hidden services registrados en TOR para permitir que otros usuarios accedan de forma remota (y anónima) a distintos tipos de servicios, sin conocer la dirección real de dichos servicios, tal como se ha visto en entradas anteriores, los hidden services en TOR tienen asociada una dirección virtual que no es resoluble por los medios convencionales (por medio de consultas a servidores DNS) estas direcciones virtuales son resueltas directamente por la red de TOR y tienen el sufijo “.onion” que los identifica como hidden services.
OnionCat permite transmitir cualquier tipo de paquete IP de forma transparente sobre las bases que provee la red de TOR y la localización de hidden services, frecuentemente se suele relacionar a OnionCat como una VPN point-to-multipoint entre hidden services existentes en la red de TOR, de hecho, desde el punto de vista técnico, OnionCat es una VPN que se apoya en los servicios de anonimato que prestan algunas redes anónimas tales como TOR e I2P.
Los elementos principales de cualquier VPN son el trafico que transportan y el circuito virtual de las máquinas que se encuentran conectadas, TOR tiene su propio circuito virtual privado, que como ya se ha indicado a lo largo de esta serie, se conforma por 3 nodos de los cuales dos de ellos corresponden al nodo de recepción de la solicitud y al nodo de salida respectivamente, en este caso OnionCat solicita a TOR la construcción de dicho circuito y posteriormente envía y recibe paquetes IP sobre dicho circuito.
Ahora bien, OnionCat se encuentra soportada por un lado por el sistema operativo en el cual se ejecuta (para funciones de red y establecimiento de la interfaz VPN) y por otro lado por la red de TOR (hidden services) estos son los “pilares” (por llamarlo de alguna forma) de OnionCat para su correcto funcionamiento, esto trae consigo algunos problemas cuya resolución es apoyada por IPv6, por esta razón se suele utilizar IPv6 para acceder a hidden services de TOR por medio de OnionCat, se indica el funcionamiento de OnionCat en detalle a continuación.
Cómo funciona OnionCat y por que utilizar IPv6 para acceder a Hidden Services
Como ya se ha indicado, los hidden services de TOR utilizan direcciones *.onion que solamente tienen un valor dentro de la red de TOR, la cual se encarga de localizar el servicio de forma correcta, la resolución de dichos servicios se realiza en TOR en la capa de transporte (capa 4, ver modelo OSI para tener clara la arquitectura de red y de servicios TCP/IP), estas direcciones tienen un espacio de dirección reservado de 80 bits. Por otro lado se encuentra la VPN que es creada por OnionCat para tratar los paquetes IP, esta es creada en la capa de enlace (capa 3) dado este escenarios el problema que se levanta es la discrepancia de capas, dado que cada una tiene su propio mecanismo de direccionamiento, mientras que los hidden services utilizan un espacio de dirección de 80 bits la capa de enlace utiliza direcciones IP. Es aquí donde entra en juego IPv6 ya que el espacio de direcciones que utiliza IPv6 es de 128 bits, espacio lo suficientemente amplio para realizar transformaciones de direcciones *.onion a IPv6 y viceversa, de esta forma si un paquete IPv6 llega desde el sistema operativo, Onioncat intentará extraer los primeros 80 bits de la dirección del destino y los traduce a una URL *.onion y solicitará a TOR abrir un nuevo circuito virtual hacia el destino indicado en el paquete, posteriormente Onioncat se encargará de redireccionar todos los paquetes que le lleguen al circuito virtual de TOR, mientras tanto, en el otro extremo del circuito virtual, OnionCat recibe los paquetes desde TOR y los redirecciona al sistema operativo, desde el punto de vista del sistema operativo no existe ninguna diferencia si los paquetes llegan desde la interfaz física o la interfaz virtual de OnionCat, va a hacer lo que siempre hace con los paquetes que le llegan.
Instalación, Configuración y Uso de OnionCat
Antes de comenzar instalar OnionCat es necesario tener instalado TOR (algo que a este punto se da por sentado) y posteriormente configurar un hidden service que será el punto de acceso de OnionCat. Como ya se ha dicho anteriormente OnionCat es en realidad una VPN de acceso publico que esta conformada por hidden services publicados en la red de TOR, por este motivo, antes de poder configurar adecuadamente OnionCat, es necesario configurar un Hidden service en TOR que apunte al puerto donde se encontrará en ejecución OnionCat (por defecto es el 8060).
|
Una vez se inicia TOR, automáticamente se creará la clave publica y la URL “onion” del servicio que se ha creado (el servicio OnionCat anónimo), esta ruta es importante ya que se tiene que definir en la ejecución de OnionCat una vez este se inicie.
Una vez iniciado TOR, se procede a instalar OnionCat, su procedimiento es simple, se puede descargar el “tarball” desde www.cypherpunk.at/ocat/download/ o se puede obtener el estado actual del proyecto descargado el código fuente desde el repositorio SVN.
|
Independiente del mecanismo empleado, el proceso de compilación, construcción e instalación es el mismo
|
Una vez se encuentra instalado en la maquina local, las opciones disponibles son las siguientes
|
Las opciones anteriores son bastante claras, permiten definir el comportamiento de la herramienta a varios niveles, muchas de ellas tienen valores por defecto que pueden ser cambiados simplemente ingresando el valor adecuado, no obstante existe una opción que permite utilizar Garlicat que permite a OnionCat utilizar como circuito virtual una red I2P, dado que OnionCat ha sido pensado para TOR, todas las opciones funcionan por defecto con TOR, sin embargo con la opción -I puede cambiarse este comportamiento. En esta entrada no se hablará de I2P y Garlicat, no obstante en próximas entradas se cubrirá este tema en profundidad.
Primero es necesario consultar cual ha sido la URL “onion” que ha asignado TOR al hidden service declarado en el fichero de configuración torrc, para ello se consulta el directorio de dicho servicio (la opción HiddenServiceDir declarada anteriormente) el contenido de dicho fichero es:
|
Esta ruta puede ser utilizada por el comando de OnionCat para retornar la dirección Ipv6
|
Posteriormente se puede ejecutar OnionCar con la opción -B con el fin de iniciar el servicio en la maquina local, recordar que como se ha mencionado anteriormente, se abrirá el puerto 8060 (valor por defecto) sin embargo puede especificarse cualquier otro utilizando la opción -s, no obstante recordar también que el puerto que se utilice aquí debe ser también referenciado en el fichero de configuración de TOR donde se indique el hidden service.
|
La ejecución del comando anterior ha dado como resultado la creación de una interfaz virtual TUN/TAP con el nombre de “tun0” esta interfaz virtual será la que se utilice para la conexión con otros hidden services en la red de TOR. Por otro lado, este comando se debe ejecutar con privilegios de ROOT, no obstante se debe especificar un usuario para asignarle el proceso que se esta creando, de esta forma, este servicio no se ejecutará con privilegios de ROOT que como siempre, se trata de una medida de seguridad muy recomendada.
Ahora para ver que todo ha quedado correctamente configurado, se consulta en primer lugar la interfaz de red
|
Y se levanta
|
Finalmente, la tabla de rutas (route) debe contener una entrada que apunte al dispositivo tun0, consultar esto con el siguiente comando
|
Todo se encuentra configurado, ahora se debe probar, para ello es necesario realizar una conexión a un hidden service en la red de TOR que utilice OnionCat, actualmente la disponibilidad de algunos de estos servicios no es demasiado constante y posiblemente al momento de realizar la prueba con algunos de estos, la conexión no pueda establecerse dado que se encontrarán inactivos, no obstante se indican algunos de estos servicios para intentar establecer la conexión con ellos y probar que OnionCat ha quedado correctamente configurado.
dot.aio (fd87:d87e:eb43:f683:64ac:73f9:61ac:9a00)
Servicio de registro que permite a sus usuarios registrar sus propios servicios con el fin de poder ser encontrados por otros usuarios, se trata de un directorio de servicios disponibles en TOR que utilizan OnionCat
irc.onion.aio (fd87:d87e:eb43:2243:5f84:5b12:7bb5:bbc2)
Servicio de IRC utilizando TOR y OnionCat
ping.onion.aio (fd87:d87e:eb43:f947:ad24:ec81:8abe:753e)
Servicio de pruebas que lo único que hace es responder a peticiones “echo” (pings)
mail.onion.aio (fd87:d87e:eb43:744:208d:5408:63a4:ac4f)
Servicio de SMTP/POP3 para envío y recepción de correos electrónicos.
Ahora bien, para probar si esta funcionando correctamente se realizan peticiones a dichas direcciones utilizando el comando PING6 por ejemplo el resultado de la ejecución del siguiente comando es la siguiente
|
Anteriormente se inicio OCAT con la opción -B por lo tanto las trazas de la ejecución se deben enseñar por consola, algo similar a lo siguiente se podrá apreciar cuando se ejecuta el comando anterior
|
Cabe resaltar que la primera vez que se ejecuta el comando PING6 (o se realiza cualquier tipo de consulta con OnionCat) esta puede tardar cerca de 2 minutos, dado que OnionCat solicita a TOR que construya un circuito para inicializar la VPN, por lo tanto se debe tener un poco de paciencia.
Finalmente, aunque OnionCat ha sido inicialmente implementado para TOR, también soporta I2P cuando se ejecuta en modo GarliCat, sin embargo esto se verá con mayor detalle en las próximas entradas de esta serie.