Nmap escaneo con conexión TCP (-sT)
El escaneo con conexión TCP de Nmap es un tipo de escaneo en el que se realiza una conexión TCP completa. Esto significa que Nmap enviará una serie de paquetes a los puertos de un sistema para intentar realizar el establecimiento de comunicación de tres pasos (three way handshake).
¿Cómo funciona?
Para comprender cómo funciona el escaneo TCP es preciso recordar que la estructura básica de una conexión TCP implica el envío de una serie de paquetes entre cliente y servidor:
PASOS | CLIENTE | SERVIDOR |
1 | SYN | |
2 | SYN/ACK | |
3 | ACK |
Esta estructura de paquetes es conocida como la sincronización de tres pasos (Three way handshake).
Por medio de los paquetes de respuesta al intento de sincronización, Nmap puede determinar si un puerto se encuentra abierto o cerrado. Observemos los tipos de paquetes que se producen según la condición del puerto:
a)Cuando un puerto está abierto:
PASOS | CLIENTE (Nmap) | SERVIDOR (Objetivo |
1 | SYN | |
2 | SYN/ACK | |
3 | ACK | |
4 | RST/ACK |
Cuando un puerto está abierto se realizan los tres pasos de la conexión TCP. Aquí, además, se muestra el paquete de finalización que envía Nmap inmediatamente después de conectar, pues ya no es necesario mantener la comunicación una vez ha registrado el puerto abierto.
b) Cuando un puerto está cerrado:
PASOS | CLIENTE (Nmap) | SERVIDOR (Objetivo) |
1 | SYN | |
2 | RST |
Cuando un puerto se encuentra cerrado Nmap recibirá como respuesta un paquete RST de parte del Servidor con el que el sistema objetivo termina el intento de conexión.
Así que, con esta información, Nmap puede saber si un puerto está abierto o cerrado, pues se basa en el tipo de paquetes recibidos como respuesta en el intento de conexión.
NOTA: En caso de no recibir respuesta esto podría indicar que hay un sistema Firewall en el camino por lo que Nmap registrará el puerto como FILTERED.
¿Por qué es importante saber esto?
Conocer cómo funciona el escaneo con conexión TCP nos permitirá comprender el tipo de paquetes que envía el programa y saber cómo es que Nmap determina si los puertos se encuentran abiertos o no. Además, es relevante porque es el tipo de escaneo predeterminado de Nmap.
En este punto, resulta necesario aclarar lo siguiente:
Al utilizar el comando:
nmap [ip_objetivo]
Se obtendrán los mismos resultados que al utilizar el comando:
nmap –sT [ip_objetivo]
La opción -sT sirve para señalar explícitamente que se desea realizar un escaneo con conexión TCP. Pero es importante recordar que es el comportamiento predeterminado del programa, así que ambas opciones tienen el mismo funcionamiento.
Nota: Es muy importante señalar que el comando predeterminado para Nmap es utilizar la conexión completa (-sT), sin embargo, cuando se utiliza con privilegios (sudo nmap) Nmap se comportará como si se utilizará el escaneo SYN (-sS) que es una opción menos intrusiva.
Consideraciones al utilizar este tipo de escaneo
Cuando se realiza una conexión completa nos arriesgamos a que el dispositivo objetivo registre este tipo de conexión. Es decir, nuestra IP aparecerá en el log de la aplicación con la que se estableció la sincronización.
EJEMPLO
Vamos a exponer el siguiente ejemplo para ilustrar el funcionamiento del comando y sus posibles implicaciones. En una máquina UBUNTU he configurado un servidor simple HTTP en el puerto 8000 utilizando el comando:
python3 –m http.server 8000
Nota: Será necesario configurar el firewall del equipo para que abra el puerto correspondiente.
Con este comando, cualquier directorio desde el que se ejecute se puede convertir en un servidor http simple. En esta ocasión, nos servirá para comprobar cómo es que las aplicaciones pueden realizar el registro de la conexión TCP que se realiza con este tipo de escaneo en Nmap.
A continuación, se utiliza el comando que será utilizado desde Kali:
sudo nmap –sT [ip_objetivo]
Nota: Recuerda que también se pudo haber utilizado el comando sudo nmap [ip_objetivo]
Como se ha señalado, ambos comandos se comportan de la misma manera pues el escaneo con conexión TCP es el escaneo predeterminado.
Bien, una vez lanzado el comando se obtienen los siguientes resultados:
Como se puede observar aparecen los puertos abiertos del sistema. Utilizando Wireshark se pueden observar los paquetes lanzados:
Al observar los paquetes enviados al puerto se comprueba que cumple con lo mencionado y que se ha realizado la sincronización de tres pasos y que, inmediatamente después, Nmap envía un paquete con RST, ACK para finalizar la conexión. De esta manera, Nmap pudo registrar que el puerto se encontraba abierto. Sin embargo, esta conexión puede llegar a dejar registros en el lado del servidor, vamos a realizar esta comprobación.
Si nos dirigimos a la aplicación de Ubuntu, desde el lado del servidor, podemos observar que ha quedado registrada la huella de esta conexión:
Se puede observar la IP y el puerto desde la que Nmap envío los paquetes. Además, se muestra el envío de un paquete con RST para finalizar la conexión.
¿Por qué es importante saber de este registro?
Porque, en diferentes escenarios, es posible que no se desee que las aplicaciones a las que Nmap hace conexión mantengan un registro de su actividad. Además, diferentes sistemas de seguridad pudieran alertar de la presencia de este tipo de escaneos.
Conclusiones
Conocer los paquetes que se envían en un escaneo con conexión TCP nos ayudará a comprender el funcionamiento general del programa. De igual manera, nos permitirá considerar si en un escenario determinado puede resultar apropiado para nuestras actividades pues es posible que se desee realizar un escaneo más silencioso.