Samy Kamkar (un famoso investigador de seguridad conocido por crear varios dispositivos de ataque sofisticados, como un registrador de teclas en un cargador de teléfono USB) ha introducido una nueva técnica de ataque llamada «NAT slipstreaming».

El ataque permite, al abrir una página en un navegador, establecer una conexión desde el servidor del atacante a cualquier puerto UDP o TCP en el sistema del usuario ubicado detrás del traductor de direcciones. El kit de herramientas de ataque se publica en GitHub.

El método se basa en engañar al mecanismo de seguimiento de conexiones ALG (Application Level Gateways) en traductores de direcciones o firewalls, que se utiliza para organizar el reenvío NAT de protocolos que utilizan múltiples puertos de red (uno para datos y otro para control), como SIP. H323, IRC DCC y FTP.

El ataque es aplicable a los usuarios que se conectan a la red utilizando direcciones internas del rango de la intranet (192.168.xx, 10.xxx) y permite que cualquier dato sea enviado a cualquier puerto (sin encabezados HTTP).

Para llevar a cabo un ataque, es suficiente que la víctima ejecute el código JavaScript preparado por el atacante, por ejemplo, abriendo una página en el sitio web del atacante o viendo un anuncio malicioso en un sitio web legítimo.

En una primera etapa, el atacante obtiene información sobre la dirección interna del usuario, la cual se puede determinar mediante WebRTC o, si WebRTC está deshabilitado, mediante ataques de fuerza bruta con medición del tiempo de respuesta al solicitar una imagen oculta (para los hosts existentes, un intento de solicitar una imagen es más rápido que para los inexistentes debido tiempo de espera antes de devolver una respuesta TCP RST).

En la segunda etapa, el código JavaScript ejecutado en el navegador de la víctima genera una solicitud HTTP POST grande (que no cabe en un paquete) al servidor del atacante utilizando un número de puerto de red no estándar para iniciar el ajuste de los parámetros de fragmentación de TCP y el tamaño de MTU en la pila TCP de la víctima.

En respuesta, el servidor del atacante devuelve un paquete TCP con la opción MSS (Tamaño máximo de segmento), que determina el tamaño máximo del paquete recibido. En el caso de UDP, la manipulación es similar, pero se basa en el envío de una solicitud TURN de WebRTC grande para desencadenar la fragmentación a nivel de IP.

«NAT Slipstreaming explota el navegador del usuario junto con el mecanismo de seguimiento de conexión Application Level Gateway (ALG) integrado en NAT, enrutadores y firewalls al encadenar la extracción de IP interna a través de un ataque de tiempo o WebRTC, el descubrimiento de fragmentación de IP y MTU remoto automatizado, tamaño de paquete TCP el masaje, el uso indebido de la autenticación TURN, el control preciso de los límites de los paquetes y la confusión del protocolo por abuso del navegador «, dijo Kamkar en un análisis.

La idea principal es que, conociendo los parámetros de fragmentación, puede enviar una solicitud HTTP grande, cuya cola caerá en el segundo paquete. Al mismo tiempo, la cola que entra en el segundo paquete se selecciona para que no contenga encabezados HTTP y se corte en los datos que corresponden completamente a otro protocolo para el que se admite el cruce de NAT.

En la tercera etapa, utilizando la manipulación anterior, el código JavaScript genera y envía una solicitud HTTP especialmente seleccionada (o TURN para UDP) al puerto TCP 5060 del servidor del atacante, que, después de la fragmentación, se dividirá en dos paquetes: un paquete con encabezados HTTP y parte de los datos y un paquete SIP válido con la IP interna de la víctima.

El sistema para rastrear conexiones en la pila de red considerará que este paquete es el comienzo de una sesión SIP y permitirá el reenvío de paquetes para cualquier puerto seleccionado por el atacante, asumiendo que este puerto se usa para la transmisión de datos.

El ataque se puede llevar a cabo independientemente del navegador utilizado. Para resolver el problema, los desarrolladores de Mozilla sugirieron bloquear la capacidad de enviar solicitudes HTTP a los puertos de red 5060 y 5061 asociados con el protocolo SIP.

Los desarrolladores de los motores Chromium, Blink y WebKit también pretenden implementar una medida de protección similar.

Fuente y redacción: desdelinux.net

Compartir