Anteriormente (
Ver aquí y
ver aquí) estudiamos cómo descubrir y ver el estado de los equipos que deseamos escanear dentro de una red usando diversas técnicas y órdenes desde la línea de comandos. Hoy veremos cómo poceder luego de tener identificada nuestra máquina o host al que deseamos realizarle un escaneo usando técnicas que se basan en el escaneo especifico de puertos.
· TCP SYN Scan (-sS)
Esta técnica también es conocida como SYN Stealth o Half-Open Scan. Es la técnica más popular y la utilizada por defecto, permitiendo el escaneo de miles de puertos por segundo en redes rápidas sin presencia de herramientas cortafuegos. Esta opción es relativamente sigilosa y rápida, ya que no finaliza las conexiones que abre, así como fiable al no depender, como otras técnicas avanzadas, de las particularidades de las diferentes implementaciones de la pila TCP/IP presentes en plataformas específicas. Permite por tanto una diferenciación clara entre el estado abierto, cerrado o filtrado de un puerto.
Este análisis es el utilizado por defecto, por lo que si lanzamos Nmap sin parámetros, y tenemos los permisos de administración necesarios para poder ejecutarlo, este será el análisis realizado.
Una adición muy útil es agregar la revisión de versiones para cada puerto abierto encontrado, combinándola con la opción -sV, para tratar de identificar el tipo y la versión de los servicios descubiertos.
Tras realizar un análisis con esta técnica, los puertos pueden encontrarse en tres estados: abiertos (si se ha recibido un paquete SYN/ACK como respuesta a la sonda enviada), cerrados (si se ha recibido un paquete RST como respuesta) o filtrados (si no se ha recibido nada o se recibe algún paquete de tipo ICMP Inalcanzable).
En la siguiente figura se muestra cómo esta técnica no negocia una conexión de forma completa. Por ejemplo, para el puerto abierto de ftp del objetivo, no se finaliza completamente el proceso habitual tree-way handshake (sólo SYN y SYN-ACK).
· TCP CONNECT SCAN (-sT)
Esta técnica se utiliza por defecto cuando no es posible la utilización de SYN Scan (-sS), cuando el usuario no tiene suficientes privilegios. Para su funcionamiento, usa las llamadas de alto nivel del sistema operativo para crear los paquetes (concretamente la llamada connect()) y para obtener la información de los intentos de conexión, al igual que cualquier otra aplicación.
Esta técnica es menos eficiente que SYN Scan porque Nmap no toma el control de los paquetes enviados, como hace en la mayoría de las otras técnicas, y en segundo lugar porque termina todas las conexiones, en lugar de hacer un half-open reset. Por este motivo, es menos sigilosa, siendo probable que un IDS/IPS registre los intentos de conexión.
Del mismo modo que en la técnica SYN Scan, según esta técnica los puertos pueden estar en tres estados: abierto, cerrado y filtrado. Las siguientes figuras muestran cómo esta técnica negocia una conexión de forma completa con aquellos puertos que han respondido. Por ejemplo, para el puerto abierto de SSH del objetivo, se muestra el proceso de establecimiento de conexión tree-way handshake (SYN, SYN-ACK, ACK).
· UDP SCAN (-sU)
No todos los servicios populares corren sobre TCP. Los ejemplos más comunes de servicios UDP son los protocolos DNS (puerto 53), SNMP (puertos 161 y 162) y DHCP (puertos 67 y 68). En ocasiones estos puertos son ignorados en los análisis y auditorías debido a que el escaneo UDP es en general más complejo y lento. Esto es un error, debido a que los servicios UDP pueden ser explotados por atacantes del mismo modo que los servicios TCP. Esta técnica puede ayudar al inventario de estos puertos, pudiéndose combinar al mismo tiempo con otras técnicas de escaneo TCP, como SYN scan (-sS).
Con esta técnica es posible obtener puertos en cuatro estados distintos: abierto (significa que se ha obtenido una respuesta del puerto analizado), cerrado (si se obtiene una respuesta de tipo ICMP Puerto Inalcanzable), filtrado (si se obtiene cualquier otro tipo de paquete ICMP inalcanzable) y abierto/filtrado, que indica que no se ha recibido ningún tipo de respuesta desde el puerto analizado, a pesar de haber lanzado varias retransmisiones.
Como se ha indicado anteriormente, el análisis del protocolo UDP es más complejo. El primer problema que encontramos es que es normal que los puertos UDP no respondan a paquetes que les llegan, ya que el protocolo no está orientado a conexión, y los programadores suelen utilizar en este caso estructuras personalizadas para comunicarse con los puertos UDP, que Nmap desconoce en muchos casos, no pudiendo generar paquetes que permitan obtener una respuesta.
Otro problema consiste en que hay máquinas (entre ellas algunas máquinas Linux y Solaris) que tienen definida una tasa máxima de respuestas ICMP Puerto Inalcanzable a generar (e.g. no generar más de 1 paquete de este tipo por segundo). Para evitar que el objetivo deseche paquetes que no pueda procesar, Nmap es capaz de detectar la tasa máxima de envío de este tipo de paquetes y adaptar su velocidad para que los resultados del análisis sean exactos. Esto puede hacer que sea necesario invertir demasiado tiempo en esta técnica si se realiza un análisis de todos los puertos disponibles.
Otro problema es el estado abierto/filtrado, que no asegura que un puerto esté abierto o cerrado. La única forma de identificar con relativa seguridad si está abierto o no un puerto UDP es utilizando -sUV para determinar la versión de lo que en el escucha. Al identificar un puerto con el estado abierto/filtrado, la opción -sV envía diferentes tipos de solicitudes UDP conocidas en busca de obtener una respuesta que permita identificar lo que en él escucha. Si ninguna de las solicitudes enviadas genera una respuesta se mantendrá el estado abierto/filtrado del puerto, en caso contrario, se tendrá un buen indicativo del tipo de aplicación y su versión. Cabe destacar que la utilización de este modificador en los análisis aumenta considerablemente su tiempo de ejecución, al tener que enviar a cada puerto analizado sondas adicionales para cada uno de los tipos de servicio reconocidos por Nmap.
Las siguientes figuras muestran cómo al enviar sondas a 5 puertos UDP, cuatro responden que no son alcanzables. Nmap considera que el otro que no ha respondido o bien ha sido filtrados o bien está abierto.
· IDLE SCAN (-sI)
Esta técnica avanzada explota una “vulnerabilidad” de muchas implementaciones de la pila TCP/IP, consistente en la posibilidad de predecir (simple incremento en peticiones consecutivas) el identificador de fragmento de los paquetes IP (IP ID). Con ello se permite extraer información mediante el análisis de las secuencias predecibles del identificador (IPID) de los paquetes IP. Ni su fundamento ni su funcionamiento son triviales, por lo que una descripción completa escapa al propósito de esta sección.
Básicamente esta técnica permite escanear un objetivo sin enviarle un solo paquete utilizando la propia dirección IP origen, por lo que se considera la técnica más avanzada y sigilosa de todas las presentes en Nmap. Para ello es necesario utilizar un tercer equipo, denominado zombie, cuya IP tomaremos para que aparezca como fuente de las sondas desde el punto de vista de la máquina objetivo.
En este caso, se pueden obtener dos estados de puertos distintos: abierto (si se detecta a través del zombie que ha existido respuesta), o cerrado/filtrado (si no se detecta respuesta a través del zombie, bien porque el objetivo no responde al zombie, o bien porque el objetivo responde con un paquete RST, que es ignorado por el zombie).
El uso de esta técnica es altamente controvertido, desde el momento en que ésta usa sin autorización los recursos de una máquina (zombie), que además se registraría falsamente por herramientas IDS/IPS como el origen de un proceso de escaneo de puertos. Para su correcto funcionamiento es necesario que la máquina zombie sea alcanzable y su implementación TCP/IP genere una secuencia de identificadores IP predecible. Debido a que esta técnica escanea un objetivo desde el punto de vista de una tercera máquina, es posible determinar de este modo las relaciones de confianza entre distintas máquinas. Para ello es posible indicar una lista de equipos zombie que pudieran ser de confianza del objetivo.
Para tratar de encontrar un zombie que cumpla con los requisitos, se puede escanear una subred utilizando los parámetros siguientes:
nmap -P0 -sN -n -v -p 80 --scanflags SYN,ACK <subred_objetivo>
Esta comando envía los mismos paquetes (TCP con SYN+ACK) que usa Idle Scan al inicio del proceso. Cualquier objetivo válido debería responder con un paquete RST y por tanto deberá aparecer el puerto 80 como no filtrado.
El flujo de mensajes de la siguiente figura se presenta la traza de mensajes observable desde el origen (172.16.28.65). Inicialmente el origen recoge información del IPID de la máquina zombie (172.16.28.124). Inmediatamente después inicia la fase de descubrimiento del objetivo, enviando paquetes al zombie con la dirección origen falsificada (la del objetivo: 172.16.28.51). Seguidamente con una sonda al zombie determina si el objetivo es o no alcanzable (analiza el IPID). Ahora comprueba nuevamente el IPID del zombie e inicia el escaneo del puerto TCP445 del objetivo enviando un paquete SYN con la dirección origen falsificada. Finalmente busca si se ha incrementado el IPID para determinar el estado del puerto 445, en este caso abierto.
El siguiente flujo de mensajes muestra la traza de mensajes observable desde el objetivo (172.16.28.51). Como se puede ver, todos los mensajes que recibe el objetivo aparentemente vienen de la máquina zombie (172.16.28.124). Para el objetivo es como si el zombie tratara de establecer una conexión por dos veces al puerto TCP445. A la vista de esta traza es imposible averiguar que es otra máquina la que está causando este flujo de mensajes.