Test de penetración de pasarelas que realizan NAT basado en “Connection Tracking”.
|
Connection Tracking, es un método para que las pasarelas realicen automáticamente el reenvío de puertos basado en la inspección de paquetes. Como algunos protocolos (IRC, FTP, SIP, …) requieren que se establezca un canal de comunicación secundario, los dispositivos que realizan NATting requieren un mecanismo que detecte las instrucciones de este protocolo y reenvíe los puertos requeridos en consecuencia. Por ejemplo, en el protocolo FTP, la comunicación principal, mediante la cual un cliente se conecta a un servidor en el puerto TCP 21, sólo se utiliza para enviar comandos (canal de comandos). Al pasar archivos, se establece un canal secundario entre el cliente y el servidor (canal datos). Esta comunicación de datos se configura en un puerto aleatorio, por lo que el cliente necesita instruir al servidor en qué puerto acepta esta nueva conexión. Esto se hace a través la orden PORT. Tal como se describe en las especificaciones del protocolo FTP, este comando le indica al
servidor en qué IP y puerto, el servidor puede conectarse de nuevo al cliente. Como el cliente está usando una IP privada, dando al servidor FTP un comando PORT con esta IP sería inútil para su uso. Por lo tanto, las pasarelas modernas inspeccionarán el tráfico de FTP y cuando ven un comando PORT procedente de su lado NATted hacia Internet, realizarán dos tareas:
- Abre un puerto en su lado WAN enfrentado y lo envian al puerto y la ip del servidor FTP.
- Cambian el comando FTP estableciendo su propia IP y puerto.
La herramienta NATpinning, esta basado en la idea original de NATingning de Samy Kamkar ( http://samy.pl/natpin/ ), esta herramienta permite a los pentester identificar posibles problemas de seguridad con los rastreadores de conexión en los dispositivos de puerta de enlace. Esto se logra mediante el uso de una secuencia de comandos Flash personalizada, que imita el comportamiento de los protocolos que normalmente desencadenan el seguimiento de conexión que se produce en estos dispositivos. Como el cliente puede ser controlado desde el servidor se puede indicar qué protocolos imitar, en qué orden se deben realizar y qué puerto o IP deben utilizar en sus comunicaciones. Esto le da al pentester la capacidad de probar la exposición del puerto asignado (1-1024) o la exposición de otros dispositivos basados en LAN.
La técnica de explotación consiste en el uso de un cliente HTTP (navegador) para imitar el tráfico que haría cumplir el seguimiento de la conexión, exponiendo así los puertos en la red NATted que de otro modo no serían accesibles al mundo exterior. Flash se eligió como componente cliente, ya que es capaz de realizar comunicaciones de socket sin procesar. Esto elimina la sobrecarga de los encabezados HTTP adicionales cuando se utilizan las solicitudes javascript y HTTP POST, tal como se evidenció en la prueba de concepto original. Para mitigar la sobrecarga de HTTP como se evidenció en la prueba original de concepto, los desarrolladores crearon una alternativa que permitiera crear sockets sobre los cuales se podría enviar los datos y nada más. La única solución que permitiría comunicaciones bidireccionales que se adhieran a las especificaciones de protocolo requeridas era la implementación de socket de Flash.
La aplicación consta de un componente de servidor (python) y un componente de cliente (html + flash). El componente servidor, además de ofrecer un sistema de gestión y la interacción del usuario, imitará los diferentes servidores para los protocolos implementados, mientras que el Flash se utiliza para imitar a los clientes. Cuando se inicia la aplicación cliente, el componente servidor le indica que se conecte a los diferentes servidores (IRC, FTP, SIP, H225) e imite las comunicaciones de un cliente habitual. Para cada protocolo admitido intentará imitar las comunicaciones necesarias para activar el seguimiento de conexión en la puerta de enlace del cliente.
Más información y descarga de Natpinning:
https://github.com/allodoxaphobia/natpinning