A continuación vamos a ver una serie de técnicas que funcionan con la misma lógica usada en la etapa de Host Discovery, pero a diferencia de dicha funcionalidad, en Port Scanning se usa para verificar el estado de los puertos, que como vamos a ver Nmap divide los puertos es seis estados posibles:

  • Open: Cuando se detecta que alguna aplicación esta aceptando conexiones TCP, o recibiendo datagramas UDP se dice que el puerto está abierto.
  • Closed: El puerto está cerrado cuando se recibe un paquete TCP RST si escaneamos un puerto TCP o un paquete ICMP Destination Unreachable (Port unreachable) cuando escaneamos un puerto UDP. Hay que resaltar que a pesar de que en el destino no hay ninguna aplicación escuchando por dicho puerto, éste no se encuentra filtrado por ningún dispositivo de red siendo posible llegar al destino y segundo que gracias a este comportamiento (y a otros similares) se puede hacer ping con Nmap sin necesidad de hacer uso de peticiones ICMP Echo Request, como se hace de manera clásica, debido a esta última característica es común que un puerto que se encuetra cerrado NO se pueda alcanzar debido a que los paquetes dirigidos a dicho puerto son dropeados por algún dispositivo de red.
  • Filtered: Se clasifica un puerto de esta manera cuando Nmap no logra determinar si el puerto se encuentra abierto o cerrado ya que no se recibe ninguna respuesta por parte del objetivo, y puede suceder debido a configuraciones de algún dispositivo de red (o el mismo objetivo) que se encuentra a mitad de camino haciendo drop a los paquetes que envía Nmap.
  • Unfiltered: Aunque se puede llegar al destino, Nmap no puede determinar si el puerto está abierto o cerrado, solamente el Scan ACK reporta un puerto de esta manera
  • Open | Filtered: Aquí no se puede determinar si el puerto está abierto o filtrado, esto se puede dar entre otras posibilidades por la naturaleza del protocolo UDP.
  • Closed | Filtered: No se sabe si el puerto está cerrado o filtrado, solamente un IP ID idle scan clasifica un puerto de esta manera.

Tenemos que tener claro que el reporte de un Port Scanning quiere decir la manera en la cual Nmap ve el puerto y puede no representar el verdadero estado de éste, es decir, un Port Scanning se ve afectado por configuraciones de diferentes dispositivos de red como los son firewalls, routers, etc, pero depende de nuestra experiencia analizar correctamente los reportes de Nmap.

TCP SYN scan (-sS)

Es la opción por defecto si ejecutamos Nmap como el usuario root, intenta realizar media conexión TCP para determinar el estado del puerto TCP en cuestión, funciona de la siguiente manera: Se envía un paquete TCP SYN para iniciar una conexión al puerto indicado, si se recibe un paquete TCP SYN/ACK por parte del objetivo el puerto está abierto, si se recibe un TCP RST quiere decir que el puerto está cerrado, si no recibimos ningún tipo de respuesta durante un tiempo determinado y después de varios intentos el puerto se reporta como filtrado. TCP SYN Scan nunca termina la conexión TCP en caso que el puerto se encuentre abierto al recibir un paquete TCP SYN/ACK Nmap responderá con un paquete TCP RST terminando la conexión. Ejemplo:

# nmap -Pn -n -sS -p T:21,80 --reason 192.168.1.254

Paso por paso: - -Pn Le indicamos a Nmap que no utilice ninguna técnica de Host Discovery; por defecto (en un análisis en el cual se realice Host Discovery/Port Scanning simultáneamente) Nmap intenta verificar primero que el host se encuentre activo para luego realizar sobre el objetivo alguna técnica de Port Scanning, esto lo hace Nmap para agilizar todo el proceso ya que si se pasa como objetivo una red muy grande Nmap se ahorraría el envío de todos los paquetes en el Port Scanning a los host que no hayan respondido en la etapa de Host Discovery. En este caso como ya sabemos que el host se encuentra activo evitamos que se realice el Host Discovery para agilizar el escaneo. Como nos estamos moviendo en la red local, Nmap igual realizará el Ping ARP a menos que usemos el parámetro –send-ip.

  • -n Para no realizar resoluciones DNS inversas
  • -sS Aunque en este caso se indicó, no sería necesario porque es la técnica Port Scanning por defecto para el usuario root.
  • -p Con esto Nmap entenderá que vamos a indicar de manera específica los puertos a escanear
  • -T:21,80 Junto con la opción anterior indicamos que queremos escanear los puertos TCP 21 y 80. Si no se usaran estas opciones se intentaría escanear los 1000 puertos TCP más comunes.
  • –reason Esta opción nos brinda información adicional sobre el criterio que usó Nmap para generar los reportes.
Starting Nmap 6.01 ( http://nmap.org ) ...
Nmap scan report for 192.168.1.254
Host is up, received arp-response (0.0031s latency).
PORT   STATE  SERVICE REASON
21/tcp closed ftp     reset
80/tcp open   http    syn-ack
MAC Address: ...
 
Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

Observando la linea 3 del reporte de Nmap, indica que el host está activo porque ha recibido una respuesta ARP (esta información es por el parámetro –reason). Lo relevante aquí son las lineas 5 y 6 que tiene el reporte concretamente sobre el Port Scanning, nos dice que el puerto TCP 21 se encuentra cerrado porque recibió un paquete TCP RST y el puerto TCP 80 se encuentra abierto porque recibió un paquete TCP SYN/ACK.

En la documentación de Nmap se indica además que se puede obtener dos reportes adicionales: El primero de un puerto clasificado como filtered si se recibe un paquete ICMP unreachable error (type 3, code 1, 2, 3, 9, 10, o 13). La segunda es un puerto clasificado como abierto si se recibe un paquete TCP SYN (sin el flag ACK activado) debido a una muy poco probable situación conocida como Split Handshale, de la cual no tenía conocimiento alguno. Por lo anterior es bueno tener el criterio que ha usado Nmap para clasificar los puertos (–reason), en las pruebas que he realizado no se ha presentado dichos reportes adicionales.