Nmap Security Scanner
Intro
Ref Guide
Install Guide
Download
Changelog
Book
Docs
Security Lists
Nmap Hackers
Nmap Dev
Bugtraq
Full Disclosure
Pen Test
Basics
More
Security Tools
Pass crackers
Sniffers
Vuln Scanners
Web scanners
Wireless
Exploitation
Packet crafters
More
Site News
Site Search:
Exploit World
Advertising
About/Contact
Credits
Sponsors:
|

Técnicas de sondeo de puertosCuando intento realizar un arreglo de mi coche, siendo novato,
puedo pasarme horas intentando utilizar mis herramientas rudimentarias
(martillo, cinta aislante, llave inglesa, etc.). Cuando fallo
miserablemente y llevo mi coche antiguo en grúa al taller a un
mecánico de verdad siempre pasa lo mismo: busca en su gran cajón de
herramientas hasta que saca una herramienta que hace que la tarea se
haga sin esfuerzo. El arte de sondear puertos es parecido. Los
expertos conocen docenas de técnicas de sondeo y eligen la más
apropiada (o una combinación de éstas) para la tarea que están
realizando. Los usuarios sin experiencia y los "script kiddies", sin
embargo, intentan resolver cada problema con el sondeo SYN por
omisión. Dado que Nmap es libre, la única barrera que existe para ser
un experto en el sondeo de puertos es el conocimiento. Esto es mucho
mejor que el mundo del automóvil, donde puedes llegar a saber que
necesitas un compresor de tuerca, pero tendrás que pagar mil dolares
por él. La mayoría de los distintos tipos de sondeo disponibles sólo los
puede llevar a cabo un usuario privilegiado. Esto es debido a que
envían y reciben paquetes en crudo, lo que hace necesario tener acceso como
administrador (root) en la mayoría de los sistemas UNIX. En los
entornos Windows es recomendable utilizar una cuenta de administrador,
aunque Nmap algunas veces funciona para usuarios no privilegiados en
aquellas plataformas donde ya se haya instalado WinPcap. La necesidad
de privilegios como usuario administrador era una limitación
importante cuando se empezó a distribuir Nmap en 1997, ya que muchos
usuarios sólo tenían acceso a cuentas compartidas en sistemas como
usuarios normales. Ahora, las cosas son muy distintas. Los ordenadores
son más baratos, hay más personas que tienen acceso permanente a
Internet, y los sistemas UNIX (incluyendo Linux y MAC OS X) son más
comunes. También se dispone de una versión para Windows de Nmap, lo
que permite que se ejecute en más escritorios. Por todas estas razones, cada vez es menos
necesario ejecutar Nmap utilizando cuentas de sistema compartidas.
Esto es bueno, porque las opciones que requieren
de más privilegios hacen que Nmap sea más potente y flexible. Aunque Nmap intenta generar resultados precisos, hay que tener
en cuenta que estos resultados se basan en los paquetes que devuelve el
sistema objetivo (o los cortafuegos que están delante de éstos). Estos
sistemas pueden no ser fiables y envíar respuestas cuyo objetivo sea
confundir a Nmap. Son aún más comunes los sistemas que no cumplen con
los estándares RFC, que no responden como deberían a las sondas de Nmap. Son
especialmente susceptibles a este problema los sondeos FIN, Null y
Xmas. Hay algunos problemas específicos a algunos tipos de sondeos que
se discuten en las entradas dedicadas a sondeos concretos. Esta sección documenta las aproximadamente doce técnicas de
sondeos de puertos que soporta Nmap. Sólo puede utilizarse un método
en un momento concreto, salvo por el sondeo UDP (-sU)
que puede combinarse con cualquiera de los sondeos TCP. Para que sea
fácil de recordar, las opciones de los sondeos de puertos son del
estilo -sC, donde
C es una letra característica del nombre
del sondeo, habitualmente la primera. La única excepción a esta regla
es la opción obsoleta de sondeo FTP rebotado
(-b). Nmap hace un sondeo SYN por omisión, aunque lo
cambia a un sondeo Connect() si el usuario no tiene los suficientes
privilegios para enviar paquetes en crudo (requiere
acceso de administrador en UNIX) o si se especificaron objetivos
IPv6. De los sondeos que se listan en esta sección los usuarios sin
privilegios sólo pueden ejecutar los sondeos Connect() o de rebote
FTP. -
-sS (sondeo TCP SYN) El sondeo SYN es el utilizado por omisión y el más popular por
buenas razones. Puede realizarse rápidamente, sondeando miles de
puertos por segundo en una red rápida en la que no existan
cortafuegos. El sondeo SYN es relativamente sigiloso y poco molesto,
ya que no llega a completar las conexiones TCP. También funciona
contra cualquier pila TCP en lugar de depender de la idiosincrasia
específica de una plataforma concreta, al contrario de lo que pasa
con los sondeos de Nmap Fin/Null/Xmas, Maimon o pasivo. También
muestra una clara y fiable diferenciación entre los estados abierto, cerrado, y filtrado. A esta técnica se la conoce habitualmente como sondeo medio
abierto, porque no se llega a abrir una conexión TCP completa. Se
envía un paquete SYN, como si se fuera a abrir una conexión real y
después se espera una respuesta. Si se recibe un paquete SYN/ACK esto
indica que el puerto está en escucha (abierto), mientras que si se
recibe un RST (reset) indica que no hay nada escuchando en el
puerto. Si no se recibe ninguna respuesta después de realizar algunas
retransmisiones entonces el puerto se marca como filtrado. También se
marca el puerto como filtrado si se recibe un error de tipo ICMP no
alcanzable (tipo 3, códigos 1,2, 3, 9, 10, ó 13). -
-sT (sondeo TCP connect()) El sondeo TCP Connect() es el sondeo TCP por omisión cuando no
se puede utilizar el sondeo SYN. Esto sucede, por ejemplo, cuando el
usuario no tiene privilegios para enviar paquetes en crudo o cuando se
están sondeando redes IPv6. Nmap le pide al sistema operativo
subyacente que establezcan una conexión con el sistema objetivo en el
puerto indicado utilizando la llamada del sistema connect(), a diferencia de otros tipos de
sondeo, que escriben los paquetes a bajo nivel. Ésta es la misma
llamada del sistema de alto nivel que la mayoría de las aplicaciones
de red, como los navegadores web o los clientes P2P, utilizan para
establecer una conexión. Esta llamada es parte del interfaz de
programación conocido como la API de conectores de Berkeley. También,
en lugar de leer las respuestas directamente de la línea, Nmap utiliza
esta API para obtener la información de estado de cada intento de
conexión. Generalmente es mejor utilizar un sondeo SYN, si éste está
disponible. Nmap tiene menos control sobre la llamada de alto nivel
Connect() que cuando utiliza
paquetes en crudo, lo que hace que sea menos eficiente. La llamada al
sistema completa las conexiones para abrir los puertos objetivo, en
lugar de realizar el reseteo de la conexión medio abierta como hace el
sondeo SYN. Esto significa que se tarda más tiempo y son necesarios
más paquetes para obtener la información, pero también significa que
los sistemas objetivos van a registrar probablemente la conexión. Un
IDS decente detectará cualquiera de los dos, pero la mayoría de los
equipos no tienen este tipo de sistemas de alarma. Sin embargo, muchos
servicios de los sistemas UNIX habituales añadirán una nota en el
syslog, y algunas veces con un mensaje de error extraño, dado que Nmap
realiza la conexión y luego la cierra sin enviar ningún dato. Los
servicios realmente patéticos morirán cuando ésto pasa, aunque esto no
es habitual. Un administrador que vea muchos intentos de conexión en
sus registros que provengan de un único sistema debería saber que ha
sido sondeado con este método. -
-sU (sondeos UDP) Aunque la mayoría de los servicios más habituales en Internet
utilizan el protocolo TCP, los servicios UDP también son
muy comunes. Tres de los más comunes son los servicios DNS, SNMP, y
DHCP (puertos registrados 53, 161/162, y 67/68 respectivamente). Dado
que el sondeo UDP es generalmente más lento y más difícil que TCP,
algunos auditores de seguridad ignoran estos puertos. Esto es un
error, porque es muy frecuente encontrarse servicios UDP vulnerables y
los atacantes no ignoran estos protocolos. Afortunadamente, Nmap puede
utilizarse para hacer un inventario de puertos UDP. El sondeo UDP se activa con la opción
-sU. Puede combinarse con un tipo de sondeo TCP como
el sondeo SYN (-sS) para comprobar ambos protocolos
al mismo tiempo. Los sondeos UDP funcionan mediante el envío (sin datos) de una
cabecera UDP para cada puerto objetivo. Si se obtiene un error ICMP
que indica que el puerto no es alcanzable (tipo 3, código 3) entonces
se marca el puerto como cerrado. Si
se recibe cualquier error ICMP no alcanzable (tipo 3, códigos 1, 2, 9,
10, o 13) se marca el puerto como filtrado. En algunas ocasiones se recibirá
una respuesta al paquete UDP, lo que prueba que el puerto está
abierto. Si no se ha recibido
ninguna respuesta después de algunas retransmisiones entonces se
clasifica el puerto como abierto|filtrado. Esto significa que el
puerto podría estar abierto o que hay un filtro de paquetes bloqueando
la comunicación. Puede utilizarse el sondeo de versión
(-sV) para diferenciar de verdad los puertos abiertos
de los filtrados. Uno de las grandes problemas con el sondeo UDP es hacerlo
rápidamente. Pocas veces llega una respuesta de un puerto abierto o
filtrado, lo que obliga a expirar a Nmap y luego a retransmitir los
paquetes en caso de que la sonda o la respuesta se perdieron. Los
puertos cerrados son aún más comunes y son un problema
mayor. Generalmente envían un error ICMP de puerto no
alcanzable. Pero, a diferencia de los paquetes RST que envían los
puertos TCP cerrados cuando responden a un sondeo SYN o Connect,
muchos sistemas imponen una tasa máxima de mensajes ICMP de puerto
inalcanzable por omisión. Linux y Solaris son muy estrictos con
esto. Por ejemplo, el núcleo de Linux versión 2.4.20 limita la tasa de
envío de mensajes de destino no alcanzable a uno por segundo (en
net/ipv4/icmp.c). Nmap detecta las limitaciones de tasa y se ralentiza para no
inundar la red con paquetes inútiles que el equipo destino acabará
descartando. Desafortunadamente, un límite como el que hace el núcleo
de Linux de un paquete por segundo hace que un sondeo de 65536 puertos
tarde más de 18 horas. Puede acelerar sus sondeos UDP incluyendo más
de un sistema para sondearlos en paralelo, haciendo un sondeo rápido
inicial de los puertos más comunes, sondeando detrás de un
cortafuegos, o utilizando la opción --host-timeout
para omitir los sistemas que respondan con lentitud. -
-sN; -sF; -sX (sondeos TCP Null, FIN, y Xmas) Estos tres tipos de sondeos (aunque puede hacer muchos más a
través de la opción --scanflags que se describe en la
próxima sección) aprovechan una indefinición en la RFC de TCP que
diferencia los puertos abiertos y
cerrados. La página 65 dice que
“si el estado del puerto [destino] es CERRADO .... un segmento
entrante que contiene un RST hace que se envíe un RST en la
respuesta.” Después la página siguiente discute los paquetes
que se envían a puertos abiertos sin fijar los bits SYN, RST, o ACK,
diciendo: “es improbable que llegue aquí, pero si lo hace, debe
descartar el segmento y volver.” Cuando se sondean sistemas que cumplen con el texto de esta RFC,
cualquier paquete que no contenga los bits SYN, RST, o ACK resultará
en el envío de un RST si el puerto está cerrado. Mientras que no se
enviará una respuesta si el puerto está cerrado. Siempre y cuando se
incluyan esos tres bits es válida la combinación de cualquiera de los
otros tres (FIN, PSH, y URG). Nmap aprovecha esto con tres tipos de
sondeo: - Sondeo Null(
-sN) No fija ningún bit (la cabecera de banderas TCP es 0) - sondeo FIN (
-sF) Solo fija el bit TCP FIN. - sondeo Xmas (
-sX) Fija los bits de FIN, PSH, y URG flags, iluminando el paquete
como si fuera un árbol de Navidad.
Estos tres tipos de sondeos son exactamente los mismos en
comportamiento salvo por las banderas TCP que se fijen en los paquetes
sonda. Si se recibe un paquete RST entonces se considera que el puerto
está cerrado. Si no se recibe
ninguna respuesta el puerto se marca como cerrado|filtrado. El puerto se marca
filtrado si se recibe un error ICMP
no alcanzable (tipo 3, código 1, 2, 3, 9, 10, o 13). La ventaja fundamental de este tipo de sondeos es que pueden
atravesar algunos cortafuegos que no hagan inspección de estados o
encaminadores que hagan filtrado de paquetes. Otra ventaja es que este
tipo de sondeos son algo más sigilosos que, incluso, un sondeo
SYN. Sin embargo, no cuente con que pase siempre esto ya que la
mayoría de los productos IDS pueden configurarse para detectarlos. El
problema es que no todos los sistemas siguen el estándar RFC 793 al
pie de la letra. Algunos sistemas envían respuestas RST a las sondas
independientemente de si el puerto está o no cerrado. Esto hace que
la mayoría de los puertos se marquen como cerrados. Algunos sistemas operativos muy
utilizados que hacen ésto son Microsoft Windows, muchos dispositivos
Cisco, BSDI, e IBM OS/400. Este sondeo no funciona contra sistemas
basados en UNIX. Otro problema de estos sondeos es que no se puede
distinguir los puertos abiertos de
algunos puertos filtrados, lo que
resulta en la respuesta abierto|filtrado. -
-sA (sondeo TCP ACK) Este sondeo es distinto de otros que se han discutido hasta
ahora en que no puede determinar puertos abiertos (o incluso abiertos|filtrados). Se utiliza para mapear
reglas de cortafuegos, y para determinar si son cortafuegos con
inspección de estados y qué puertos están filtrados. La sonda de un sondeo ACK sólo tiene fijada la bandera ACK (a
menos que utilice --scanflags). Cuando se sondean
sistemas no filtrados los puertos abiertos y cerrados devolverán un paquete RST. Nmap
marca el puerto como no filtrado,
lo que significa que son alcanzables por el paquete ACK, pero no se
puede determinar si están abiertos
o cerrados. Los puertos que no
responden o que envían mensajes de error ICMP en respuesta (tipo 3,
código 1, 2, 3, 9, 10, o 13), se marcan como filtrados. -
-sW (sondeo de ventana TCP) El sondeo de ventana («window», N. del T.) es exactamente igual
al sondeo ACK que se aprovecha de un detalle de implementación de
algunos sistemas que permite diferenciar puertos abiertos de los
cerrados, en lugar de imprimir no
filtrado cuando se devuelve un RST. Hace esto examinando el
campo de ventana TCP del paquete RST devuelto. Algunos sistemas fijan
un tamaño de ventana positivo para puertos abiertos (incluso para
paquetes RST) mientras que se utiliza una ventana de tamaño cero para
los cerrados. Así, en lugar de listar el puerto como no filtrado cuando se recibe un RST, el
sondeo de ventana permite listar el puerto como abierto o cerrado en función de si el valor de la
ventana TCP en ese paquete RST es positivo o cero,
respectivamente. Este sondeo depende de un detalle de implementación de una
minoría de sistemas q que existen en Internet, así que no es siempre
fiable. Los sistemas que no hacen ésto habitualmente harán que se
muestren los puertos como cerrados. Por supuesto, es posible que el
sistema no tenga ningún puerto abierto. Si la mayoría de los puertos
están cerrados pero alguno de los
números de puertos comunes (como pueda ser el 22, 25 ó 53) están
filtrados, entonces el sistema es
posible que sea susceptible a ésto. Algunas veces hay sistemas que
mostrarán el comportamiento justo contrario. Si su sondeo muestra 1000
puertos abiertos y 3 puertos cerrados o filtrados entonces es posible
que sean estos últimos los que están abiertos en realidad. -
-sM (sondeo TCP Maimon) El sondeo Maimon debe su nombre a la persona que lo descubrió:
Uriel Maimon. Describió la técnica en la revista Phrack número 49
(noviembre de 1996). Nmap, que incluye esta técnica, se publicó dos
números más tarde. Esta técnica es exactamente la misma a los sondeos
Null, FIN, y Xmas, pero en los que se envía una sonda
FIN/ACK. Según el RFC 793 (TCP), se debería generar un paquete RST
cuando se responde a dicha sonda independientemente de si el puerto
está cerrado o abierto. Uriel se dio cuenta, sin embargo, de que
muchos sistemas derivados de BSD simplemente descartan el paquete si
el puerto está abierto. -
--scanflags (Sondeo TCP a medida) Los usuarios realmente avanzados de Nmap no tienen por qué
limitarse a los tipos de sondeos preparados que se ofrecen. La opción
--scanflags le permite diseñar su propio sondeo
mediante la especificación de banderas TCP arbitrarias. Deje volar a
su imaginación al tiempo que evita las reglas de los sistemas de
detección de intrusos cuyos fabricantes sólo echaron un vistazo a la
página de manual de Nmap y añadieron reglas específicas para
detectarlo. La opción --scanflags puede ser un valor
numérico como el 9 (PSH y FIN), aunque es más sencillo utilizar nombres
simbólicos. Sólo tienes que juntar una combinación de URG, ACK,
PSH, RST, SYN,
y FIN. Por ejemplo, la
configuración --scanflags URGACKPSHRSTSYNFIN fija
todas las banderas, aunque no es muy útil para sondear. No importa el
orden en que se especifiquen los nombres. Además de poder especificar las banderas que desee se puede
especificar el tipo de sondeo TCP (como -sA o
-sF). Ésto le dice a Nmap cómo debe interpretar las
respuestas. Por ejemplo, un sondeo SYN considera que si no se recibe
respuesta el puerto está filtrado
mientras que si no se recibe una respuesta en un sondeo FIN se trata
como abierto|filtrado. Nmap se
comportará igual que para el sondeo tipo base, con la diferencia de
que utilizará las banderas TCP que usted especifique. Se utiliza el
sondeo SYN si no se especifica ningún tipo base. -
-sI <sistema zombi
[:puerto_sonda]> (Sondeo ocioso) Este es un método de sondeo avanzado que le permite
hacer un sondeo de puertos TCP a ciegas de verdad (lo que
significa que no se envía ningún paquete al sistema objetivo
desde su dirección IP real). En lugar de ésto se utiliza
un ataque con un canal alternativo que se aprovecha de la
generación de la secuencia de los identificadores de
fragmentación IP del sistema zombi para obtener información
de los puertos abiertos en el objetivo. Los sistemas IDS
mostrarán que el sondeo lo está realizando el sistema zombi
que especifique (que debe estar vivo y cumplir algunos
requisitos). Este tipo de sondeo tan fascinante es demasiado
complejo como para describirlo por completo en esta guía de
referencia por lo que escribí y publiqué un documento
informal que contiene todos los detalles, el documento está
disponible en http://nmap.org/book/idlescan.html. Además de ser extraordinariamente sigiloso (debido a
su funcionamiento a ciegas), este tipo de sondeo permite
determinar las relaciones basadas en IP entre distintos
sistemas. El listado de puertos muestra los puertos abiertos
desde la perspectiva del sistema zombi.
Así que puede analizar el mismo objetivo con zombis
distintos que cree que podrían ser de confianza para éste (a
través de las reglas de filtrados de los paquetes o reglas
de filtrados de encaminadores). Puede añadir un número de puerto separado por dos
puntos del sistema zombi si desea analizar un puerto
específico del zombi para consultar los cambios IPID. Si no
lo hace Nmap utilizará el puerto que utiliza para pings TCP
por omisión (el puerto 80). -
-sO (sondeo de protocolo IP) El sondeo de protocolo IP le permite determinar qué protocolos
(TCP, ICMP, IGMP, etc.) soportan los sistemas objetivo. Esto no es,
técnicamente, un sondeo de puertos, dado que cambia los números de
protocolo IP en lugar de los números de puerto TCP ó UDP. Pero también
se puede utilizar la opción -p para seleccionar los
números de protocolo a analizar, los resultados se muestran en el
formato de tabla utilizado para los puertos e incluso utiliza el mismo
motor de sondeo que los métodos de sondeo de puertos reales. Es tan
parecido a un sondeo de puertos que debe tratarse aquí. El sondeo de protocolos, además de ser útil en sí mismo,
demuestra el poder del software de fuentes abiertas («opensource», N. del T.). Aunque la idea
fundamental era bastante sencilla, no había pensado añadirla ni
tampoco había habido personas que solicitaran esta
funcionalidad. Entonces, en el verano de 2000, se le ocurrió la idea a
Gerhard Rieger y la implementó escribiendo un parche excelente,
enviándolo posteriormente a la lista de correo de
nmap-hackers. Incorporé ese parche en el árbol de código de Nmap y
publiqué una nueva versión ese mismo día. ¡Pocas piezas de programas
comerciales tienen usuarios tan entusiastas que diseñan y contribuyen
sus propias mejoras! El sondeo de protocolos utiliza mecanismos parecidos al sondeo
UDP. Envía cabeceras de paquetes IP iterando por el campo de 8 bits
que indica el protocolo IP, en lugar de iterar por el campo de número
de puerto de un paquete UDP. Las cabeceras generalmente están vacías y
no contienen datos. De hecho, ni siquiera tienen una cabecera
apropiada para el protocolo que se indica. Las tres excepciones son
TCP, UDP e ICMP. Se incluye una cabecera de protocolo válida para
éstos porque algunos sistemas no los enviarán sin ellas y porque Nmap
ya tiene funciones para crearlas. El sondeo de protocolos espera la
recepción de mensajes de ICMP protocolo no
alcanzable en lugar de mensajes ICMP puerto no alcanzable. Nmap marca
el protocolo como abierto si recibe
una respuesta en cualquier protocolo del sistema objetivo. Se marca
como cerrado si se recibe un error
ICMP de protocolo no alcanzable (tipo 3, código 2). Si se reciben otros
errores ICMP no alcanzable (tipo 3, códigos 1, 3, 9, 10, o 13) se
marca el protocolo como filtrado
(aunque al mismo tiempo indican que el protocolo ICMP está abierto). El protocolo se marca como
abierto|filtrado si no se recibe
ninguna respuesta después de las retransmisiones. -
-b <sistema de rebote ftp> (sondeo de
rebote FTP) Una funcionalidad interesante en el protocolo FTP (RFC 959) es la
posibilidad de utilizar conexiones FTP de pasarela. Esta opción puede
abusarse a muchos niveles así que muchos servidores han dejado de
soportarla. Una de las formas de abusar de ésta es utilizar el
servidor de FTP para hacer un sondeo de puertos a otro
sistema. Simplemente hace falta decirle al servidor de FTP que envíe
un fichero a cada puerto interesante del servidor objetivo cada
vez. El mensaje de error devuelto indicará si el puerto está abierto o
no. Esta es una buena manera de atravesar cortafuegos porque,
habitualmente, los servidores de FTP de una organización están
ubicados en un lugar en el que tienen más acceso a otros sistemas
internos que el acceso que tiene un equipo en Internet. Nmap puede
hacer sondeos con rebotes de FTP con la opción
-b. Esta opción toma un argumento como:
usuario:contraseña@servidor:puerto.
Servidor es el nombre de la dirección IP del
servidor FTP vulnerable. Al igual que con una URL normal, se puede
omitir
usuario:contraseña,
en caso de que se deseen utilizar 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). Si se omiten se utilizará el puerto FTP estándar (21) en
servidor. Esta vulnerabilidad era muy habitual en 1997, el año que se
publicó Nmap, pero ya ha sido arreglada en muchos sitios. Aún siguen
existiendo servidores vulnerables así que merece la pena probar este
sondeo si lo demás falla. Si su objetivo es atravesar un cortafuegos,
analice la red objetivo en busca del puerto 21 (o incluso cualquier
servicio FTP, si sondea todos los puertos y activa la detección de
versiones). Después intente un sondeo de rebote utilizando cada
uno. Nmap le indicará si el sistema es o no vulnerable. Si está
intentado ocultar sus huellas no tiene que (y de hecho no debería)
limitarse a servidores en la red objetivo. En cualquier caso, antes de
empezar a sondear Internet al azar para buscar servidores de FTP
vulnerables, tenga en cuenta que pocos administradores de sistemas
apreciarán el que abuse de sus servidores de esta forma.
|
|