24 horas en la vida de un nodo de salida de Tor

¿QUE ES TOR?

Antes de nada hemos de decir, que para los que no entendáis o no conozcáis el funcionamiento de la red Tor, es de obligada visualización la conferencia de nuestro conejo Fran y amigo Manu Guerra «Cambiando el CuenTOR». ¿Por qué digo esto?, porque lo que Fran tiene de genio, también lo tiene de vidente, ya sin saber nada, manteniendolo en el anonimato, en dicha entrada Fran muestra una diapositiva que es la siguiente:

frantrol

 

Y sí amigos, nos hemos atrevido, y entre Belane y Shargon hemos creado un nodo de salida Tor (con fines estadísticos). Os comentamos un poco como ha sido la creación del mismo, desde sus inicios, hasta la aceptación en la red, y que nos hemos ido encontrando por el camino.

Decir, para los que no hayáis visto la charla, que todas las estadísticas mostradas aquí, son referentes al nodo de salida, por lo que solo tenemos información del destinatario, nunca del origen. Siempre que este, lo haga bien 🙂

 

INSTALACIÓN Y CONDICIONES QUE HEMOS PUESTO

Para la instalación se ha optado por un VPS en su opción mas económica, de hecho el coste del estudio ha sido apenas 3€, mas eso si, muchas horas de procesamiento y estudio. Los pasos principales para montar el sistema han sido los siguientes.

Sistema. Partiendo de una opción básica del sistema operativo Ubuntu hemos optado por una securización básica.

Actualizar el sistema y mantenerlo actualizado con unattended-upgrades para las actualizaciones de seguridad críticas. Instalación de rkhunter y creación una tarea programada para buscar rootkits en el sistema diariamente.

Hardening del servicio SSH (certificados, numero de intentos, timeouts…) y cambio de puerto para que los intentos de fuerza bruta de los miles de Bots en Internet no ensucien nuestras estadísticas.

Configurar iptables para bloquear todo el tráfico con excepción del tráfico de Tor, una web informativa y nuestra conexión SSH (2221). Creamos también un par de reglas para limitar el uso excesivo de los puertos Web y SSH.

 ...
 iptables -A INPUT -i ens3 -p tcp -m tcp --dport 2221 -m state --state NEW -m recent --set
 iptables -A INPUT -i ens3 -p tcp -m tcp --dport 2221 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP
 iptables -A INPUT -p tcp -m tcp --dport 2221 -j ACCEPT
 iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m limit --limit 30/min --limit-burst 100 -j ACCEPT
 ...

Y por último auditar el sistemas con Lyns y seguir en su medida los consejos ofrecidos.

TOR. Instalamos y configuramos Tor como nodo con una política de salida bastante laxa para no perdernos nada. En principio solo bloqueamos la salida de correo para evitar enviar Spam y los puertos por defecto de Bitorrent para limitar los correos de violación de copyright.

Así quedo nuestra configuración.

 ## fwr.surv01
 SOCKSPort 0
 RunAsDaemon 1
 DataDirectory /var/lib/tor
 ORPort 443
 Address 193.70.39.41
 OutboundBindAddress 193.70.39.41
 Nickname fwrSurv01
 RelayBandwidthRate 15 MB
 RelayBandwidthBurst 20 MB
 ContactInfo abuse.tor.node@gmail.com
 DirPort 80
 DirPortFrontPage /var/lib/tor/tor-info.html
 ExitPolicy reject 0.0.0.0/8:*
 ExitPolicy reject 10.0.0.0/8:*
 ExitPolicy reject 127.0.0.0/8:*
 ExitPolicy reject 192.168.0.0/16:*
 ExitPolicy reject 169.254.0.0/15:*
 ExitPolicy reject 172.16.0.0/12:*
 ExitPolicy reject 193.70.39.41:*
 ExitPolicy reject *:25
 ExitPolicy reject *:6881-6999
 ExitPolicy accept *:*

Creamos y configuramos una dirección de email para recibir notificaciones de posibles abusos. También preparamos una Web informativa indicando que esta IP era un nodo de salida e incluimos algunas respuestas habituales por si alguien se veía afectado por algún tipo de ataque desde nuestro nodo. Para esta Web nos basamos en la pagina de salida de Tor y en los mensajes de DevStaff.

24tor_webinfo

Para ver el funcionamiento y el trafico en tiempo real del nodo instalamos arm (anonymizing relay monitor).

24tor_arm

Monitorización. Principalmente usamos las siguientes herramientas para ayudarnos con la toma de estadísticas; vnstat para ver el tráfico total en tiempo real, dnstop para las peticiones DNS más solicitadas, darkstat para sacar estadísticas de las conexiones y tcpdump para capturar tráfico para su posterior análisis.

24tor_vnstat

Para la toma de muestras hemos configurado filtros en tcpdump y darkstat para capturar sólo el tráfico saliente, descartando nuestro tráfico SSH y Tor.
Capturamos solo los primeros 96 bytes del paquete porque nos interesan las cabeceras para fines estadísticos y no el data del paquete que queda mayormente descartado. Unos ejemplos serian:

tcpdump -iens3 -s96 '(tcp or udp) and src 193.70.39.41 and not (src port 2221 or 443)' -w statistics.pcap
darkstat --no-daemon -i ens3 -f  '(tcp or udp) and src 193.70.39.41 and not (src port 2221 or 443)'

24tor_darkstat

Montar un Nodo de salida es relativamente sencillo y barato, no consume muchos recursos y es capaz de mover gran cantidad de tráfico.

24tor_htop

 

LOS INICIOS

Las primeras 6 horas la red nos mantuvo sólo como Relay y obtuvimos un archivo de logs de 700 mb, recordad… sólo en cabeceras.

Pasadas esas horas, era hora de dormir, al despertarnos el día 8-12-2016, nos encontramos que los logs, se habían mantenido estables, unos 600 mb también al despertar, ligeramente menores que por la mañana, pero la red seguía sin aceptarnos como nodo de salida, nos mantenía como relay. De hecho nos desanimaba ver que atlas nos daba un 0% de posibilidad de hacernos nodo de salida, aunque realmente es el comportamiento normal.

 

Pero ya se pueden ver cosas curiosas, la red Tor, nos hace visitar algunas webs, o mejor dicho, resolver DNS de las mismas, entendemos para ver si modificamos su contenido o redirigimos a servidores diferentes a los que deberían, para detectar un posible fraude.

 

E incluso dominios inexistentes, para (entendemos) comprobar que nuestro nodo Tor no es fraudulento e ir mirándolo con mejores o peores ojitos.

 

 

LA ACEPTACIÓN

El viernes 9-12-2016 a las 5:30 de la mañana la red nos acepta finalmente como nodo de salida y 14 horas después, cuando la salida esta más aceptada, empezamos con nuestras 24h de investigación. A partir de la aceptación nuestros logs empezaron a crecer de forma exponencial.

24tor_exitaccpet

Puedes consultar las estadísticas públicas de la red en Atlas. Abajo mostramos el estado en el que se encontraba el nodo en el momento de pararlo y quemarlo.

torend

 

RESULTADOS

Cabe decir que debido a la cantidad de información recibida, y la dificultad de procesarla (poseemos de bajo presupuesto y de un vps con 10gb de disco) se fue sacando poco a poco, cómo quien limpia los pañales a un bebe, y para facilitar la creación de estadísticas se insertó en una tabla MySql con la siguiente estructura

CREATE TABLE `tor_exitlog` (
 `HOUR` tinyint(4) NOT NULL,
 `FROM_PORT` smallint(5) unsigned NOT NULL,
 `TO_IP` varchar(50) NOT NULL,
 `TO_PORT` smallint(5) unsigned NOT NULL,
 `TO_COUNTRY` varchar(50) NOT NULL,
 `PROTOCOL` enum('TCP','UDP') NOT NULL,
 `HITS` int(10) unsigned NOT NULL DEFAULT '1',
 `LENGTH` bigint(20) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`HOUR`,`FROM_PORT`,`TO_IP`,`TO_PORT`,`PROTOCOL`),
 KEY `IX_TO_IP` (`TO_IP`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY LIST (HOUR)
(PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB,
 PARTITION part4 VALUES IN (4) ENGINE = InnoDB,
 PARTITION part5 VALUES IN (5) ENGINE = InnoDB,
 PARTITION part6 VALUES IN (6) ENGINE = InnoDB,
 PARTITION part7 VALUES IN (7) ENGINE = InnoDB,
 PARTITION part8 VALUES IN (8) ENGINE = InnoDB,
 PARTITION part9 VALUES IN (9) ENGINE = InnoDB,
 PARTITION part10 VALUES IN (10) ENGINE = InnoDB,
 PARTITION part11 VALUES IN (11) ENGINE = InnoDB,
 PARTITION part12 VALUES IN (12) ENGINE = InnoDB,
 PARTITION part13 VALUES IN (13) ENGINE = InnoDB,
 PARTITION part14 VALUES IN (14) ENGINE = InnoDB,
 PARTITION part15 VALUES IN (15) ENGINE = InnoDB,
 PARTITION part16 VALUES IN (16) ENGINE = InnoDB,
 PARTITION part17 VALUES IN (17) ENGINE = InnoDB,
 PARTITION part18 VALUES IN (18) ENGINE = InnoDB,
 PARTITION part19 VALUES IN (19) ENGINE = InnoDB,
 PARTITION part20 VALUES IN (20) ENGINE = InnoDB,
 PARTITION part21 VALUES IN (21) ENGINE = InnoDB,
 PARTITION part22 VALUES IN (22) ENGINE = InnoDB,
 PARTITION part23 VALUES IN (23) ENGINE = InnoDB) */;

Por lo que si entendéis un poco de MySql, básicamente de 180millones de paquetes, lo dejamos en 5 millones de registros. Hemos creado el concepto de EPH para que un mismo destino (EndPoint o Ip&Puerto) no pudiera repetirse a lo largo de una hora en el mismo protocolo. De esta forma, navegar hacia el puerto 443 de facebook, no supondría tener 1000 registros, por conexión, sino que solo tendríamos 1 por hora, siempre que el puerto de origen sea el mismo. Todos los paquetes coincidentes se acumularía en el campo HITS, de forma que sabremos cuantos paquetes hacen referencia a ese EPH (Ip-Puerto).

Dicho esto, tras todo un día capturando cabeceras, la tabla resumida (de una forma drástica), acabó teniendo la friolera de:

  • Registros: 5.886.329
  • Total de paquetes recopilados:  183.974.171
  • Tamaño de logs procesados: 29,38 Gb (SOLO CABECERAS)
  • Puertos distintos de salida: 62676 (CASI TODO EL RANGO)
  • Ip únicas: 776.768
  • Países distintos: 221 (1782 ip únicas sin poder clasificar)

También destacar dos puntos algo sorprendentes:

  • Ningún correo fue recibido a la dirección de abuse facilitada.
  • No obtuvimos ningún toque por el uso excesivo de la red de nuestro proveedor (1.6 Tb diarios aprox), lo cual es de agradecer.

 

DNS CONSULTADAS

Os hemos dejado el archivo de log resultante en la siguiente dirección https://raw.githubusercontent.com/shargon/Fwhibbit/master/TorStats/dns_log.txt , debido a que consideramos que no vulnera la privacidad, pues solo se trata de registros DNS. Os hacemos un pequeño resumen de lo que hemos encontrado en ese gran bosque de información.

Los dominios mas veces consultados .es son:

  • www.qtravel.es
  • www.amazon.es
  • translate.google.es
  • www.google.es
  • www.ciclohobby.es
  • www.trivago.es

En el caso general cambian a:

  • onionoo.torproject.org
  • subscribe.wordpress.com
  • clients1.google.com
  • www.google.com
  • www.google-analytics.com
  • fonts.googleapis.com
  • ocsp.digicert.com
  • ajax.googleapis.com
  • tpc.googlesyndication.com
  • www.facebook.com

Desconocemos el anonimato que busca alguien que va a comprar un producto en Amazon o un hotel..

Algunas cosas curiosas

  • Se realizaron un total de 629.859 peticiones DNS a dominios diferentes.
  • Peticiones a «api.rtve.es» posiblemente para nada bueno …
  • Dominios inexistentes, seguramente pruebas de la red Tor para determinar si modificamos tráfico.
  • Muchas webs porno.
  • Ningún dominio .gob fue consultado por nuestro nodo de salida, en cambio 11 dominios .mil si.
  • Algunas «chicas» han entrado a secretosdechicas.es de la forma correcta, por Tor para que sea un secreto.. (o no…)
  • El alumno 06 y 08 de formación idea hicieron una consulta, de lo que deducimos que eran ellos 🙂 (alumno06.formacionidea.es / alumno08.formacionidea.es).

Nos ha sorprendido la cantidad de tráfico regular y ordinario que se mueve por la red Tor, lo que refleja que su principal uso es para navegación normal y no se usa sólo con fines delictivos.

POR PAÍSES

En el caso de las gráficas por países se distribuyen de manera prácticamente igual, independientemente de si miramos por conexiones, paquetes o tamaño enviado. Dónde predominan por excelencia los siguientes países (top 5).

Nota: si no ves el mapa, haz click en el país. Misterios sin resolver de los canvas html5… jajaj

Por conexiones únicas/hora

Por Paquetes

Por tamaño recibido

 

Conclusiones: la mayor parte del tráfico se distribuye, lo mires como lo mires, de forma parecida a lo largo de los países de mas carga (top 5)

POR PROTOCOLO (TCP/UDP)

La gráfica, expresada en Gb quedaría así, recordar que solo capturamos el principio del paquete.

Por número de paquetes recibidos.

Por EPH (EndPoint por hora), debido a la escasez del tráfico udp enviado, la gráfica es casi puramente TCP, por lo que la omitimos.

Nota: La red Tor no funciona con UDP por lo que todo el trafico UDP generado ha sido hacia las direcciones ip: ‘213.186.33.99’ y ‘91.189.91.157’. Tratándose uno de nuestro servidor DNS y el otro de nuestro servidor NTP.

POR HORA

Resultados del número de EPH recibidos por hora.

Resultados del número de paquetes recibidos por hora.

Resultado de la distribución del tráfico capturado (solo las caberas) por hora.

POR PUERTO (TOP 10)

En el top 10 de los puertos hacia los cuales hemos generado tráfico Tor, ordenados por EPH es el siguiente:

Ordenados por número de paquetes

y ordenados por Tráfico generado en Gb.

TRAFICO MOVIDO

Al final nuestro nodo Tor ha terminado moviendo mas de un 1.5 Terabyte de tráfico diario .

24tor_trafic

 

CONCLUSIONES

Nos gusta Tor, de hecho ¡nos encanta Tor!, pero tenemos que tener en cuenta, de que no deja de ser un MITM por una red que no controlamos, que cualquier persona o gobierno puede estar esnifando. Si nosotros hemos capturado esto con un presupuesto de 3 euros, que no harán los gobiernos. Pensar que actualmente hay unos 1000 (y pocos) nodos de salida, uno solo era nuestro, ¿qué dinero es para un gobierno gastarse 3000 euros al mes en tener 1000 nodos de salida tor?. Siempre que lo hagas con cuidado, en la red no vas a levantar sospechas. Y si contratas además nodos de entrada, podrías realizar una correlación de tráfico y desanonimizarte.

De lo que hemos sacado una magnifica idea, que extenderemos en la siguiente entrada (proyecto buitre), sólo puedo deciros lo siguiente… Un protocolo inseguro, es inseguro por definición, independientemente de que vaya por 2 VPN’s y después por Tor, debemos de ser conscientes de lo que hacemos y dónde nos conectamos, podríamos perder el anonimato, o exponer nuestro sitio web. Para ir abriendo boca, ¡ahí va un expoiler!

tor24_imgprev2

Hasta la siguiente entrada 🙂

21 comentarios en «24 horas en la vida de un nodo de salida de Tor»

  1. Muy buen post. Alguna vez pensé en levantar algo parecido pero la verdad no le puse ganas. Muchas gracias por esta investigación la verdad que me sorprenden algunos resultados. De nuevo muchas gracias por compartir la investigación.

    1. Sin animo de hacer publicidad, te digo que es el VPS en su gama mas baja de ovh.

      VPS SSD 1

      KVM OpenStack
      1 vCore
      2,4 GHz
      2 GB RAM
      SSD 10 GB
      RAID 10 local
      2,99 €/mes + IVA
      (3,62 € IVA incl.)

  2. Excelente Blog y analisis. Muchísimas gracias por compartir toda esta información de manera tan prolija y detallada.

    Saludos!,

  3. Hola!

    Muy buen articulo. La verdad que sorprenden mucho los resultados de las paginas que se visitan…
    Me he animado a probar a hacerlo por mi mismo y ya lo tengo todo montado.

    ¿sería mucho pedir saber como generar las gráficas con los datos?

  4. Si pone en venta la lista de páginas porno, puede financiar muuuchas investigaciones… ja, ja ja.
    Gracias por compartir tus resultados, me agrada que quite el tabú de tor entonces darknet.

Los comentarios están cerrados.