Además de las técnicas de escaneo de puertos que ya he mostrado con anterioridad, existen otras más avanzadas que también basan su funcionamiento en la definición del protocolo TCP, aunque las técnicas presentadas se pueden realizar con Nmap vamos a utilizar la herramienta Nping para estudiar el comportamiento de los sistemas escaneados.

El RFC 793 establece que cuando se reciben segmentos TCP malformados, se debe responder con segmentos TCP RST para puertos cerrados y descartarlos para los puertos abiertos (Aplica para FIN, NULL y Xmas Scan). Lo anterior no siempre se cumple debido a la gran variedad de dispositivos y sistemas operativos que no implementan al pie de la letra el protocolo como veremos más adelante, por lo anterior los reportes dados por las herramietas en las siguientes técnicas deben ser leídos de manera cautelosa para no equivocarnos en su lectura. Es así como podemos enviar varios segmentos TCP malformados para indagar el estado de los puertos de interés del obejtivo:

FIN Scan

Se envía un segmento TCP FIN y los puertos cerrados deberías responder con un segmento TCP RST como se había dicho anteriormente, el gateway de mi hogar cumple con esta teoría:

# nping --tcp --flags FIN --dest-port 80,135 --count 1 192.168.1.254
 
Starting Nping ...
SENT (0.0055s) TCP 192.168.1.14:51164 > 192.168.1.254:80 F ...
SENT (1.0059s) TCP 192.168.1.14:51164 > 192.168.1.254:135 F ...
RCVD (1.0089s) TCP 192.168.1.254:135 > 192.168.1.14:51164 RA ...

Se recibe un segmento TCP RST para el puerto 135 que se encuentra cerrado y ninguna respuesta para el puerto 80 que está abierto. No podemos decir lo mismo de Windows XP que responde con un segmento TCP RST sin importar el estado del puerto, el 80 cerrado y el 135 abierto:

# nping --tcp --flags FIN --dest-port 80,135 --count 1 192.168.1.21
 
Starting Nping ...
SENT (0.0036s) TCP 192.168.1.14:57317 > 192.168.1.21:80 F ...
RCVD (0.0044s) TCP 192.168.1.21:80 > 192.168.1.14:57317 RA ...
SENT (1.0046s) TCP 192.168.1.14:57317 > 192.168.1.21:135 F ...
RCVD (1.0055s) TCP 192.168.1.21:135 > 192.168.1.14:57317 RA ...

Para realizar un FIN Scan con Nmap se usa con la opción -sF y los reportes de puertos que obtuve en las pruebas fueron closed o open|filtered. En el caso de Windows XP recibí un resultado erróneo del estado del puerto 135, debido a lo discutido anteriormente:

# nmap -Pn -n -sF -p T:80,135 --reason --max-retries 0 192.168.1.21
 
Starting Nmap ...
Nmap scan report for 192.168.1.21
Host is up, received arp-response (0.00048s latency).
PORT    STATE  SERVICE REASON
80/tcp  closed http    reset
135/tcp closed msrpc   reset
MAC Address: ...
 
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

Null Scan

Enviamos segmentos TCP sin ningún flag activado y de nuevo el comportamiento esperado es el mismo. Ahora realizamos la prueba con el gateway (puerto 80 abierto y el 21 cerrado) y una máquina corriendo Debian GNU/Linux (puerto 21 abierto y 80 cerrado) respectivamente:

# nping --tcp --flags NONE --dest-port 80,21 --count 1 192.168.1.254
 
Starting Nping ...
SENT (0.0033s) TCP 192.168.1.14:4505 > 192.168.1.254:21  ...
RCVD (0.0889s) TCP 192.168.1.254:21 > 192.168.1.14:4505 RA ...
SENT (1.0040s) TCP 192.168.1.14:4505 > 192.168.1.254:80  ...

Ahora con Debian GNU/Linux:

# nping --tcp --flags NONE --dest-port 80,21 --count 1 192.168.1.254
 
Starting Nping ...
SENT (0.0033s) TCP 192.168.1.14:4505 > 192.168.1.254:21  ...
RCVD (0.0889s) TCP 192.168.1.254:21 > 192.168.1.14:4505 RA ...
SENT (1.0040s) TCP 192.168.1.14:4505 > 192.168.1.254:80  ...

A diferencia de Windows XP, Debian GNU/Linux sí responde como debería a este tipo de escaneos. Para hacer un Null Scan con Nmap se usa la opción -sN.

Xmas Scan

Al igual que los anteriores se espera un segmento TCP RST al enviar activadas las flags FIN,PSH y URG. Cada uno de los objetivos escaneados tiene un puerto abierto que los otros sistemas tienen cerrado: Windows XP (135), Debian GNU/Linux (21) y el Gateway (80):

Windows XP:

nping --tcp --flags FIN,PSH,URG --dest-port 80,21,135 --count 1 192.168.1.21
 
Starting Nping ...
SENT (0.0156s) TCP 192.168.1.14:1044 > 192.168.1.21:21 FPU ...
RCVD (0.0161s) TCP 192.168.1.21:21 > 192.168.1.14:1044 RA ...
SENT (1.0162s) TCP 192.168.1.14:1044 > 192.168.1.21:80 FPU ...
RCVD (1.0171s) TCP 192.168.1.21:80 > 192.168.1.14:1044 RA ...
SENT (2.0183s) TCP 192.168.1.14:1044 > 192.168.1.21:135 FPU ...
RCVD (2.0191s) TCP 192.168.1.21:135 > 192.168.1.14:1044 RA ...

Debian GNU/Linux

# nping --tcp --flags FIN,PSH,URG --dest-port 80,21,135 --count 1 192.168.1.10
 
Starting Nping ...
SENT (0.0055s) TCP 192.168.1.14:46781 > 192.168.1.10:21 FPU ...
SENT (1.0059s) TCP 192.168.1.14:46781 > 192.168.1.10:80 FPU ...
RCVD (1.0066s) TCP 192.168.1.10:80 > 192.168.1.14:46781 RA ...
SENT (2.0071s) TCP 192.168.1.14:46781 > 192.168.1.10:135 FPU ...
RCVD (2.0077s) TCP 192.168.1.10:135 > 192.168.1.14:46781 RA ...

Gateway

nping --tcp --flags FIN,PSH,URG --dest-port 80,21,135 --count 1 192.168.1.254
 
Starting Nping 0.6.41SVN ( http://nmap.org/nping ) at 2013-08-11 04:22 COT
SENT (0.0113s) TCP 192.168.1.14:64456 > 192.168.1.254:21 FPU ...
RCVD (0.0139s) TCP 192.168.1.254:21 > 192.168.1.14:64456 RA ...
SENT (1.0121s) TCP 192.168.1.14:64456 > 192.168.1.254:80 FPU ...
SENT (2.0126s) TCP 192.168.1.14:64456 > 192.168.1.254:135 FPU ...
RCVD (2.0152s) TCP 192.168.1.254:135 > 192.168.1.14:64456 RA ...

En Nmap se realiza con la opción -sX. Como siempre, Windows XP no cumple con las teoría dando reportes inválidos.

Window Scan

En Nmap el Window Scan es igual al TCP ACK Scan pero analiza el campo Window Size de los segmentos TCP recibidos para llegar a la conclusión si el puerto está abierto o cerrado, los cuales son los únicos reportes de este tipo de escaneo. Algunos sistemas responden con un valor positivo para puertos abiertos y con un valor negativo o cero para puertos cerrados.

nmap -Pn -n -sW -p T:21,80,135 --reason --max-retries 0 192.168.1.21,10,254
 
Starting ...
Nmap scan report for 192.168.1.21
Host is up, received arp-response (0.00045s latency).
PORT    STATE  SERVICE REASON
21/tcp  closed ftp     reset
80/tcp  closed http    reset
135/tcp closed msrpc   reset
MAC Address: ...
 
Nmap scan report for 192.168.1.10
Host is up, received arp-response (0.00040s latency).
PORT    STATE  SERVICE REASON
21/tcp  closed ftp     reset
80/tcp  closed http    reset
135/tcp closed msrpc   reset
MAC Address: ...
 
Nmap scan report for 192.168.1.254
Host is up, received arp-response (0.0054s latency).
PORT    STATE  SERVICE REASON
21/tcp  closed ftp     reset
80/tcp  closed http    reset
135/tcp closed msrpc   reset
MAC Address: ...

En este caso todos los puertos son reportados como closed pero sabemos que esto no es cierto. Es debido que los segmentos TCP RST recibidos no tienen un valor positivo para ser reportados como open, en mis pruebas y mediante una captura con Wireshark todos las respuestas de los tres sistemas sistemas fueron de tamaño 0.