-sS
(escaneo TCP SYN)
El escaneo SYN es la opción de escaneo por defecto y más popular por buenas razones. Se puede realizar rápidamente, escaneando miles de puertos por segundo en una red rápida no obstaculizada por cortafuegos restrictivos. También es discreto y sigiloso, ya que nunca completa las conexiones TCP. El escaneo SYN funciona contra cualquier pila TCP compatible en lugar de depender de la idiosincrasia de plataformas específicas, como lo hacen los escaneos FIN/NULL/Xmas, Maimon y ociosos de Nmap. También permite una diferenciación clara y fiable entre los estados open
, closed
y filtered
.
Esta técnica se conoce a menudo como escaneo medio abierto, porque no se abre una conexión TCP completa. Se envía un paquete SYN, como si se fuera a abrir una conexión real y luego se espera una respuesta. Un SYN/ACK indica que el puerto está escuchando (abierto), mientras que un RST (reinicio) es indicativo de que no está escuchando. Si no se recibe ninguna respuesta después de varias retransmisiones, el puerto se marca como filtrado. El puerto también se marca como filtrado si se recibe un error ICMP inalcanzable (tipo 3, código 0, 1, 2, 3, 9, 10 o 13). El puerto también se considera abierto si se recibe un paquete SYN (sin la bandera ACK) como respuesta. Esto puede ser debido a una característica TCP extremadamente rara conocida como una conexión abierta simultánea o split handshake (ver https://nmap.org/misc/split-handshake.pdf).
-sT
(TCP connect scan)
TCP connect scan es el tipo de escaneo TCP por defecto cuando SYN scan no es una opción. Este es el caso cuando un usuario no tiene privilegios de paquetes crudos. En lugar de escribir paquetes crudos como hacen la mayoría de los otros tipos de sondeo, Nmap pide al sistema operativo subyacente que establezca una conexión con la máquina y el puerto de destino emitiendo la llamada al sistema connect
. Esta es la misma llamada de sistema de alto nivel que los navegadores web, los clientes P2P y la mayoría de las aplicaciones de red utilizan para establecer una conexión, y forma parte de una interfaz de programación conocida como Berkeley SocketsAPI. En lugar de leer las respuestas de los paquetes sin procesar, Nmap utiliza esta API para obtener información sobre el estado de cada intento de conexión.
Cuando el escaneo SYN está disponible, suele ser la mejor opción. Nmaph tiene menos control sobre la llamada de alto nivel connect
que con los paquetes crudos, haciéndolo menos eficiente. La llamada del sistema completa las conexiones a los puertos de destino abiertos en lugar de realizar el restablecimiento de la mitad abierta que hace el escaneo SYN. Esto no sólo lleva más tiempo y requiere más paquetes para obtener la misma información, sino que es más probable que las máquinas objetivo registren la conexión. Un IDS decente detectará cualquiera de las dos cosas, pero la mayoría de las máquinas no tienen ese sistema de alarma. Muchos servicios en un sistema Unix medio añadirán una nota a syslog, y a veces un mensaje de error críptico, cuando Nmap se conecta y luego cierra la conexión sin enviar datos. Los servicios verdaderamente patéticos se bloquean cuando esto sucede, aunque esto es poco común. Un administrador que ve un montón de intentos de conexión en sus registros desde un solo sistema debería saber que ha sido escaneado por conexión.
-sU
(escaneos UDP)
Aunque la mayoría de los servicios populares en Internet se ejecutan sobre el protocolo TCP, los servicios UDP están ampliamente desplegados. DNS, SNMP y DHCP (puertos registrados 53, 161/162 y 67/68) son tres de los más comunes. Debido a que el escaneo UDP es generalmente más lento y más difícil que el TCP, algunos auditores de seguridad ignoran estos puertos. Esto es un error, ya que los servicios UDP explotables son bastante comunes y los atacantes ciertamente no ignoran todo el protocolo. Afortunadamente, Nmap puede ayudar a inventariar los puertos UDP.
El escaneo UDP se activa con la opción -sU
. Se puede combinar con un tipo de escaneo TCP como el escaneo SYN (-sS
) para comprobar ambos protocolos durante la misma ejecución.
El escaneo UDP funciona enviando un paquete UDP a cada puerto objetivo. Para algunos puertos comunes como el 53 y el 161, se envía una carga útil específica del protocolo para aumentar la tasa de respuesta, pero para la mayoría de los puertos el paquete está vacío a menos que se especifiquen las opciones --data
, --data-string
o --data-length
.Si se devuelve un error de puerto inalcanzable ICMP (tipo 3, código 3), el puerto es closed
. Otros errores ICMP inalcanzables (tipo 3, códigos 0, 1, 2, 9, 10 o 13) marcan el puerto como filtered
. Ocasionalmente, el servicio responderá con un paquete UDP, demostrando que es open
. Si no se recibe ninguna respuesta después de las retransmisiones, el puerto se clasifica como open|filtered
. Esto significa que el puerto podría estar abierto, o quizás los filtros de paquetes están bloqueando la comunicación. La detección de la versión (-sV
) se puede utilizar para ayudar a diferenciar los puertos realmente abiertos de los filtrados.
Un gran desafío con el escaneo UDP es hacerlo rápidamente.Los puertos abiertos y filtrados rara vez envían alguna respuesta, dejando a Nmap para el tiempo de espera y luego realizar retransmisiones sólo en caso de que la sonda o la respuesta se perdieran. Los puertos cerrados suelen ser un problema aún mayor, ya que suelen devolver un error ICMP de puerto inalcanzable. Pero a diferencia de los paquetesRST enviados por los puertos TCP cerrados en respuesta a un SYN o connectscan, muchos hosts limitan por defecto los mensajes de puerto inalcanzableICMP.Linux y Solaris son especialmente estrictos en este sentido. Por ejemplo, el kernel de Linux 2.4.20 limita los mensajes de destino inalcanzable a uno por segundo (en net/ipv4/icmp.c
).
Nmap detecta la limitación de velocidad y reduce la velocidad en consecuencia para evitar inundar la red con paquetes inútiles que la máquina objetivo dejará caer. Desafortunadamente, un límite al estilo de Linux de un paquete por segundo hace que un escaneo de 65,536 puertos tome más de 18 horas. Algunas ideas para acelerar los escaneos UDP incluyen escanear más hosts en paralelo, hacer un escaneo rápido de los puertos más populares primero, escanear desde detrás del firewall y usar --host-timeout
para omitir los hosts lentos.
-sY
(SCTP INIT scan)
SCTP es una alternativa relativamente nueva a los protocolos TCP y UDP, combinando la mayoría de las características de TCP y UDP, y también añadiendo nuevas características como multi-homing y multi-streaming. Se utiliza sobre todo para los servicios relacionados con SS7/SIGTRAN, pero tiene el potencial de ser utilizado también para otras aplicaciones.El escaneo INIT de SCTP es el equivalente de SCTP a un escaneo SYN de TCP.Se puede realizar rápidamente, escaneando miles de puertos por segundo en una red rápida no obstaculizada por cortafuegos restrictivos.Al igual que el escaneo SYN, el escaneo INIT es relativamente discreto y sigiloso, ya que nunca completa las asociaciones SCTP. También permite una diferenciación clara y fiable entre los estados open
, closed
y filtered
.
Esta técnica se conoce a menudo como escaneo medio abierto, porque no se abre una asociación SCTP completa. Se envía un INITchunk, como si se fuera a abrir una asociación real y luego se espera una respuesta. Un chunk INIT-ACK indica que el puerto está escuchando (abierto), mientras que un chunk ABORT es indicativo de que no está escuchando. Si no se recibe ninguna respuesta después de varias retransmisiones, el puerto se marca como filtrado. El puerto también se marca como filtrado si se recibe un error ICMP inalcanzable (tipo 3, código 0, 1, 2, 3, 9, 10 o 13).
-sN
;-sF
;-sX
(escaneos TCP NULL, FIN y Xmas)
Estos tres tipos de escaneos (incluso más son posibles con la opción--scanflags
descrita en la siguiente sección) explotan una sutil laguna en el RFC TCP para diferenciar entre los puertos open
yclosed
. La página 65 del RFC 793 dice que «si el estado del puerto es CLOSED …. un segmento entrante que no contenga un RST hace que se envíe un RST como respuesta». A continuación, la siguiente página habla de los paquetes enviados a puertos abiertos sin los bits SYN, RST o ACK establecidos, afirmando que «es poco probable que llegue aquí, pero si lo hace, deje caer este segmento y regrese»
Cuando se escanean sistemas que cumplen con este texto RFC, cualquier paquete que no contenga bits SYN, RST o ACK resultará en un RST devuelto si el puerto está cerrado y ninguna respuesta si el puerto está abierto. Mientras no se incluya ninguno de esos tres bits, cualquier combinación de los otros tres (FIN, PSH y URG) está bien. Nmap explota esto con tres tipos de escaneo:
-sN
)
No establece ningún bit (la cabecera de la bandera TCP es 0)
Escaneo FIN (-sF
)
Sólo establece el bit TCP FIN.
Xmas scan (-sX
)
Ajusta las banderas FIN, PSH y URG, iluminando el paquete como un árbol de Navidad.
Estos tres tipos de escaneo tienen exactamente el mismo comportamiento excepto por las banderas TCP ajustadas en los paquetes de sondeo. Si se recibe un paquete RST, el puerto se considera closed
, mientras que si no hay respuesta significa que es open|filtered
. El puerto se marca como filtered
si se recibe un error ICMP inalcanzable (tipo 3, código0, 1, 2, 3, 9, 10, o 13).
La principal ventaja de estos tipos de escaneo es que pueden colarse a través de ciertos cortafuegos y filtros de paquetes que no son de tipo «fatídico». Otra ventaja es que estos tipos de escaneo son un poco más sigilosos que incluso un escaneo SYN. Sin embargo, no hay que contar con esto: la mayoría de los productos IDS modernos pueden configurarse para detectarlos. El gran inconveniente es que no todos los sistemas siguen el RFC 793 al pie de la letra. Algunos sistemas envían respuestas RST a las sondas independientemente de si el puerto está abierto o no. Esto hace que todos los puertos sean etiquetados como closed
. Los principales sistemas operativos que hacen esto son Microsoft Windows, muchos dispositivos Cisco, BSDI e IBM OS/400. Sin embargo, este escaneo funciona contra la mayoría de los sistemas basados en Unix. Otra desventaja de estos escaneos es que no pueden distinguir los puertos open
de ciertos filtered
, dejándole con la respuestaopen|filtered
.
-sA
(escaneo TCP ACK)
Este escaneo es diferente a los otros discutidos hasta ahora en que nunca determina los puertos open
(o inclusoopen|filtered
). Se utiliza para mapear conjuntos de reglas de cortafuegos, determinando si son de estado o no y qué puertos están filtrados.
El paquete de sondeo ACK tiene sólo la bandera ACK establecida (a menos que utilice --scanflags
). Cuando se exploran sistemas no filtrados, los puertos open
y closed
devolverán un paquete RST. Nmap los etiqueta como unfiltered
, lo que significa que son alcanzables por el paqueteACK, pero no se determina si son open
o closed
. Los puertos que no responden, o envían ciertos mensajes de error ICMP de vuelta (tipo 3, código 0, 1, 2, 3, 9, 10 o 13), se etiquetan como filtered
.
-sW
(TCP Window scan)
Window scan es exactamente lo mismo que ACK scan excepto que explota un detalle de implementación de ciertos sistemas para diferenciar los puertos abiertos de los cerrados, en lugar de imprimir siempreunfiltered
cuando se devuelve un RST. Lo hace examinando el campo TCP Window de los paquetes RST devueltos. En algunos sistemas, los puertos abiertos utilizan un tamaño de ventana positivo (incluso para los paquetes RST) mientras que los cerrados tienen una ventana cero. Así que en lugar de listar siempre un puerto como unfiltered
cuando recibe un RST de vuelta, el escáner Window lista el puerto como open
o closed
si el valor de la ventana TCP en ese reinicio es positivo o cero, respectivamente.
Este escáner se basa en un detalle de implementación de una minoría de sistemas en Internet, por lo que no siempre se puede confiar en él. Los sistemas que no lo soportan suelen devolver todos los puertosclosed
. Por supuesto, es posible que la máquina realmente no tenga puertos abiertos. Si la mayoría de los puertos escaneados sonclosed
pero algunos números de puerto comunes (como 22,25, 53) son filtered
, lo más probable es que el sistema sea susceptible. Ocasionalmente, los sistemas mostrarán incluso el comportamiento opuesto. Si el escaneo muestra 1.000 puertos abiertos y tres cerrados o filtrados, entonces esos tres pueden ser los verdaderamente abiertos.
-sM
(escaneo TCP Maimon)
El escaneo Maimon lleva el nombre de su descubridor, Uriel Maimon.Describió la técnica en el número 49 de la revistaPhrack (noviembre de 1996).Nmap, que incluía esta técnica, se publicó dos números más tarde.Esta técnica es exactamente la misma que los escaneos NULL, FIN y Xmas, excepto que la sonda es FIN/ACK. De acuerdo con el RFC 793 (TCP), se debería generar un paquete RST en respuesta a dicha sonda tanto si el puerto está abierto como cerrado. Sin embargo, Uriel notó que muchos sistemas derivados de BSD simplemente dejan caer el paquete si el puerto está abierto.
--scanflags
(Escaneo TCP personalizado)
Los usuarios realmente avanzados de Nmap no necesitan limitarse a los tipos de escaneo ofrecidos. La opción --scanflags
le permite diseñar su propio escaneo especificando banderas TCP arbitrarias. Deje que su creatividad fluya, mientras evade los sistemas de detección de intrusos cuyos vendedores simplemente buscan en la página man de Nmap añadiendo reglas específicas. Basta con mezclar cualquier combinación de URG
,ACK
, PSH
,RST
, SYN
yFIN
. Por ejemplo, --scanflagsURGACKPSHRSTSYNFIN
establece todo, aunque no es muy útil para la exploración. El orden en que se especifican es irrelevante.
Además de especificar las banderas deseadas, puede especificar un tipo de escaneo TCP (como -sA
o -sF
). Por ejemplo, un sondeo SYN considera que la ausencia de respuesta indica un puertofiltered
, mientras que un sondeo FIN lo trata comoopen|filtered
. Nmap se comportará de la misma manera que lo hace para el tipo de sondeo base, excepto que utilizará los indicadores TCP que usted especifique. Si no especifica un tipo base, se utiliza el sondeo SYN.
-sZ
(sondeo SCTP COOKIE ECHO)
El sondeo SCTP COOKIE ECHO es un sondeo SCTP más avanzado. Aprovecha el hecho de que las implementaciones de SCTP deberían dejar caer silenciosamente los paquetes que contienen trozos de COOKIE ECHO en los puertos abiertos, pero envían un ABORT si el puerto está cerrado.La ventaja de este tipo de escaneo es que no es tan obvio que un escaneo INIT. Además, puede haber conjuntos de reglas de cortafuegos que no bloqueen los chunks INIT, pero no los COOKIE ECHOchunks. No se engañe pensando que esto hará que el escaneo de puerto sea invisible; un buen IDS será capaz de detectar escaneos SCTPCOOKIE ECHO también.El inconveniente es que los escaneos SCTP COOKIE ECHO no pueden diferenciar entre los puertos open
y filtered
, dejándole con el estado open|filtered
en ambos casos.
-sI
(escaneo inactivo)<zombie host>
Este método de escaneo avanzado permite un escaneo de puerto TCP verdaderamente ciego del objetivo (lo que significa que no se envían paquetes al objetivo desde su dirección IP real). En su lugar, un ataque de canal lateral único explota la generación de secuencias de ID de fragmentación IP predecibles en el host zombi para obtener información sobre los puertos abiertos en el objetivo. Los sistemas IDS mostrarán el escaneo como procedente de la máquina zombi que usted especifique (que debe estar activa y cumplir ciertos criterios). Los detalles completos de este fascinante tipo de escaneo se encuentran en la sección llamada «Escaneo TCP Idle (-sI
)».
Además de ser extraordinariamente sigiloso (debido a su naturaleza ciega), este tipo de escaneo permite mapear relaciones de confianza basadas en IP entre máquinas. El listado de puertos muestra los puertos abiertos desde la perspectiva del host zombi. Así que puedes intentar escanear un objetivo utilizando varios zombis que creas que pueden ser de confianza (a través de reglas de router/filtro de paquetes).
Puede añadir dos puntos seguidos de un número de puerto al host zombi si desea sondear un puerto concreto en el zombi en busca de cambios de IP ID. De lo contrario, Nmap utilizará el puerto que usa por defecto para los pings TCP (80).
-sO
(escaneo de protocolo IP)
El escaneo de protocolo IP le permite determinar qué protocolos IP (TCP, ICMP, IGMP, etc.) son soportados por las máquinas objetivo. Esto no es técnicamente un escaneo de puertos, ya que recorre los números de protocolo IP en lugar de los números de puerto TCP o UDP. Sin embargo, sigue utilizando la opción-p
para seleccionar los números de protocolo escaneados, informa de sus resultados dentro del formato normal de la tabla de puertos, e incluso utiliza el mismo motor de escaneo subyacente que los verdaderos métodos de escaneo de puertos. Así que es lo suficientemente cerca de un escaneo de puertos que pertenece aquí.
Además de ser útil por derecho propio, el escaneo de protocolos demuestra el poder del software de código abierto. Aunque la idea fundamental es bastante sencilla, no se me había ocurrido añadirla ni había recibido ninguna solicitud de dicha funcionalidad. Entonces, en el verano de 2000, Gerhard Riegeconcibió la idea, escribió un excelente parche para implementarla y lo envió a la lista de correoannounce(entonces llamada nmap-hackers).Incorporé ese parche al árbol de Nmap y publiqué una nueva versión al día siguiente. Pocas piezas de software comercial tienen usuarios lo suficientemente entusiastas como para diseñar y contribuir con sus propias mejoras.
El escaneo de protocolo funciona de manera similar al escaneo UDP. En lugar de iterar por el campo del número de puerto de un paquete UDP, envía las cabeceras de los paquetes IP e itera por el campo del protocolo IP de ocho bits. Las excepciones son TCP, UDP, ICMP, SCTP e IGMP. Se incluye una cabecera de protocolo apropiada para estos porque algunos sistemas no los envían de otra manera y porque Nmap ya tiene funciones para crearlos. En lugar de buscar mensajes ICMP portunreachable, el sondeo de protocolo busca mensajes ICMPprotocolo inalcanzable. Si Nmap recibe cualquier respuesta en cualquier protocolo del host objetivo, Nmap marca ese protocolo como open
. Un error ICMP de protocolo inalcanzable (tipo 3, código 2) hace que el protocolo se marque como closed
mientras que el puerto inalcanzable (tipo 3, código 3)marca el protocolo open
. Otros errores ICMP inalcanzables (tipo 3, código0, 1, 9, 10 o 13) hacen que el protocolo se marque comofiltered
(aunque prueban que ICMP esopen
al mismo tiempo). Si no se recibe respuesta tras las retransmisiones, el protocolo se marcaopen|filtered
-b
(FTP bounce scan)<FTP relay host>
Una característica interesante del protocolo FTP (RFC 959) es el soporte para las llamadas conexiones FTP proxy. Esto permite a un usuario conectarse a un servidor FTP, y luego pedir que los archivos sean enviados a un servidor de terceros. Esta característica es propicia para el abuso en muchos niveles, por lo que la mayoría de los servidores han dejado de soportarla. Uno de los abusos que permite esta función es hacer que el servidor FTP escanee los puertos de otros hosts. El mensaje de error describirá si el puerto está abierto o no. Esta es una buena manera de evitar los cortafuegos porque los servidores FTP de las organizaciones a menudo se colocan donde tienen más acceso a otros hosts internos que cualquier otro host de Internet. Nmap soporta el escaneo FTPbounce con la opción -b
. Toma un argumento de la forma<username>
:<password>
@<server>
:<port>
.<Server>
es el nombre o la dirección IP de un servidor FTP vulnerable. Al igual que con una URL normal, puede omitir<username>
:<password>
, en cuyo caso se utilizan las credenciales de acceso anónimo (usuario:anonymous
contraseña:-wwwuser@
). También se puede omitir el número de puerto (y los dos puntos que lo preceden), en cuyo caso se utiliza el puerto FTP por defecto (21) en<server>
.
Esta vulnerabilidad estaba muy extendida en 1997, cuando se lanzó Nmap, pero se ha solucionado en gran medida. Los servidores vulnerables siguen existiendo, así que vale la pena intentarlo cuando todo lo demás falla. Si su objetivo es eludir un cortafuegos, escanee la red de destino para el puerto 21 (o incluso para cualquier servicio FTP si escanea todos los puertos con detección de versiones) y utilice el scriptftp-bounce
NSE. Nmap le dirá si el host es vulnerable o no. Si sólo está tratando de cubrir sus huellas, no necesita (y, de hecho, no debería) limitarse a los hosts de la red objetivo. Antes de ir a escanear direcciones de Internet al azar en busca de servidores FTP vulnerables, considera que los administradores de sistemas pueden no apreciar que abuses de sus servidores de esta manera.