Uno de los primeros pasos en cualquier misión de reconocimiento de red es el de reducir un (muchas veces enorme) conjunto de rangos de direcciones IP en una lista de equipos activos o interesantes. Analizar cada puerto de cada una de las direcciones IP es lento, y usualmente innecesario. Por supuesto, lo que hace a un sistema interesante depende ampliamente del propósito del anÔlisis. Los administradores de red pueden interesarse sólo en equipos que estén ejecutando un cierto servicio, mientras que los auditores de seguridad pueden interesarse en todos y cada uno de los dispositivos que tengan una dirección IP. Un administrador puede sentirse cómodo con obtener un listado de equipos en su red interna mediante un ping ICMP, mientras que un consultor en seguridad realizando un ataque externo puede llegar a utilizar un conjunto de docenas de sondas en su intento de saltarse las restricciones de los cortafuegos.


-sP (Sondeo ping)

Esta opción le indica a Nmap que únicamente realice descubrimiento de sistemas mediante un sondeo ping, y que luego emita un listado de los equipos que respondieron al mismo. No se realizan mÔs sondeos (como un anÔlisis de puertos o detección de sistema operativo). A diferencia del sondeo de lista, el anÔlisis ping es intrusivo, ya que envía paquetes a los objetivos, pero es usualmente utilizado con el mismo propósito. Permite un reconocimiento liviano de la red objetivo sin llamar mucho la atención. El saber cuÔntos equipos se encuentran activos es de mayor valor para los atacantes que el listado de cada una de las IP y nombres proporcionado por el sondeo de lista.

De la misma forma, los administradores de sistemas suelen encontrar valiosa esta opción. Puede ser fÔcilmente utilizada para contabilizar las mÔquinas disponibles en una red, o monitorizar servidores. A esto se lo suele llamar barrido ping, y es mÔs fiable que hacer ping a la dirección de broadcast, ya que algunos equipos no responden a ese tipo de consultas.

La opción -sP envía una solicitud de eco ICMP y un paquete TCP al puerto 80 por omisión. Cuando un usuario sin privilegios ejecuta Nmap se envía un paquete SYN (utilizando la llamada connect()) al puerto 80 del objetivo. Cuando un usuario privilegiado intenta analizar objetivos en la red Ethernet local se utilizan solicitudes ARP (-PR) a no ser que se especifique la opción --send-ip.

La opción -sP puede combinarse con cualquiera de las opciones de sondas de descubrimiento (las opciones -P*, excepto -P0) para disponer de mayor flexibilidad. Si se utilizan cualquiera de las opciones de sondas de descubrimiento y número de puerto, se ignoran las sondas por omisión (ACK y solicitud de eco ICMP). Se recomienda utilizar estas técnicas si hay un cortafuegos con un filtrado estricto entre el sistema que ejecuta Nmap y la red objetivo. Si no se hace así pueden llegar a pasarse por alto ciertos equipos, ya que el cortafuegos anularía las sondas o las respuestas a las mismas.

-P0 (No realizar ping)

Con esta opción, Nmap no realiza la etapa de descubrimiento. Bajo circunstancias normales, Nmap utiliza dicha etapa para determinar quĆ© mĆ”quinas se encuentran activas para hacer un anĆ”lisis mĆ”s agresivo. Por omisión, Nmap sólo realiza ese tipo de sondeos, como anĆ”lisis de puertos, detección de versión o de sistema operativo contra los equipos que se estĆ”n «vivos». Si se deshabilita el descubrimiento de sistemas con la opción -P0 entonces Nmap utilizarĆ” las funciones de anĆ”lisis solicitadas contra todas las direcciones IP especificadas. Por lo tanto, si se especifica una red del tamaƱo de una clase B cuyo espacio de direccionamiento es de 16 bits, en la lĆ­nea de órdenes, se analizarĆ” cada una de las 65.536 direcciones IP. El segundo carĆ”cter en la opción -P0 es un cero, y no la letra O. Al igual que con el sondeo de lista, se evita el descubrimiento apropiado de sistemas, pero, en vez de detenerse y emitir un listado de objetivos, Nmap continĆŗa y realiza las funciones solicitadas como si cada IP objetivo se encontrara activa.

-PS [lista de puertos] (Ping TCP SYN)

Esta opción envía un paquete TCP vacío con la bandera SYN puesta. El puerto destino por omisión es el 80 (se puede configurar en tiempo de compilación cambiando el valor de DEFAULT_TCP_PROBE_PORT en nmap.h), pero se puede añadir un puerto alternativo como parÔmetro. También se puede especificar una lista de puertos separados por comas (p.ej. -PS22,23,25,80,113,1050,35000). Si hace esto se enviarÔn sondas en paralelo a cada uno de los puertos.

La bandera SYN indica al sistema remoto que quiere establecer una conexión. Normalmente, si el puerto destino estĆ” cerrado se recibirĆ” un paquete RST (de «reset»). Si el puerto estĆ” abierto entonces el objetivo responderĆ” con el segundo paso del saludo en tres pasos TCP respondiendo con un paquete TCP SYN/ACK. El sistema donde se ejecuta Nmap romperĆ” la conexión que se estĆ” estableciendo enviando un paquete RST en lugar de enviar el paquete ACK que completarĆ­a el saludo TCP. Nmap no envĆ­a este paquete, sino que lo envĆ­a el nĆŗcleo del sistema donde se ejecuta Nmap respondiendo al paquete SYN/ACK que no esperaba.

A Nmap no le importa si el puerto estÔ abierto o cerrado. Si, tal y como se acaba de describir, llega una respuesta RST ó SYN/ACK entonces Nmap sabrÔ que el sistema estÔ disponible y responde.

En sistemas UNIX, generalmente sólo el usuario privilegiado root puede enviar paquetes TCP crudos. Los usuarios no privilegiados tienen una forma de evitar esta restricción utilizando la llamada al sistema «connect()» contra el puerto destino. Esto hace que se envĆ­e el paquete SYN al sistema, para establecer la conexión. Si la llamada «connect()» devuelve un resultado de Ć©xito rĆ”pidamente o un fallo ECONNREFUSED entonces se puede deducir que la pila TCP que tiene bajo Ć©sta ha recibido un SYN/ACK o un RST y que puede marcar el sistema como disponible. El sistema se puede marcar como no disponible si el intento de conexión se mantiene parado hasta que vence un temporizador. Esta es tambiĆ©n la forma en la que se gestiona esto en conexiones IPv6 ya que Nmap aĆŗn no puede crear paquetes IPv6 crudos.

-PA [lista de puertos] (Ping TCP ACK)

El ping TCP ACK es muy parecido al ping SYN que se acaba de tratar. La diferencia es que en este caso se envía un paquete con la bandera ACK en lugar de la SYN. Este paquete indica que se han recibido datos en una conexión TCP establecida, pero se envían sabiendo que la conexión no existe. En este caso los sistemas deberían responder con un paquete RST, lo que sirve para determinar que estÔn vivos.

La opción -PA utiliza el mismo puerto por omisión que la sonda SYN (el puerto 80) y tambiĆ©n puede tomar una lista de puertos destino en el mismo formato. Si un usuario sin privilegios intenta hacer esto, o se especifica un objetivo IPv6, se utiliza el procedimiento descrito anteriormente. Aunque en este caso el procedimiento no es perfecto porque la llamada «connect()» enviarĆ” un paquete SYN en lugar de un ACK.

Se ofrecen tanto mecanismos de sondeo con ping SYN y ACK para maximizar las posibilidades de atravesar cortafuegos. Muchos administradores configuran los enrutadores y algunos cortafuegos sencillos para que se bloqueen los paquetes SYN salvo para aquellos destinados a los servicios públicos, como pudieran ser el servidor web o el servidor de correo de la organización. Esto evita que se realicen otras conexiones entrantes al mismo tiempo que permite a los usuarios realizar conexiones salientes a Internet. Este acercamiento de filtrado sin estados toma pocos recursos de los cortafuegos/enrutadores y estÔ ampliamente soportado por filtros hardware y software. El programa de cortafuegos Netfilter/iptables de Linux ofrece la opción --syn para implementar este acercamiento sin estados. Cuando se han implementado reglas de filtrado como éstas es posible que se bloqueen las sondas ping SYN (-PS) cuando éstas se envíen a un puerto cerrado. Sin embargo, en estos casos, las sondas ACK podrían saltarse las reglas y llegar a su destino.

Otros tipos de cortafuegos comunes utilizan reglas con estados que descartan paquetes no esperados. Esta funcionalidad se encontraba antes fundamentalmente en los cortafuegos de gama alta pero se ha hecho cada vez mÔs común. El sistema Netfilter/iptables de Linux soporta esta posibilidad a través de la opción --state, que hace categorías de paquetes en base a su estado de conexión. En estos sistemas es mÔs probable que funcione una sonda SYN, dado que los paquetes ACK no esperados se reconocen como falsos y se descartan. Una solución a este dilema es enviar sondas SYN y ACK especificando tanto la opción -PS como -PA.

-PU [lista de puertos] (Ping UDP)

El ping UDP es otra opción para descubrir sistemas. Esta opción envía un paquete UDP vacío (salvo que se especifique --data-length) a los puertos indicados. La lista de puertos se debe dar en el mismo formato que se ha indicado anteriormente para las opciones -PS y -PA . Si no se especifica ningún puerto se utiliza el puerto 31338 por omisión. Se puede configurar este puerto por omisión en el momento de compilar cambiando DEFAULT_UDP_PROBE_PORT en nmap.h. Se utiliza un puerto alto y poco común por omisión porque no es deseable enviar este sondeo a otro tipo de puertos.

La sonda UDP deberĆ­a generar un paquete ICMP de puerto no alcanzable si da contra un puerto cerrado en el equipo objetivo. Si llega Ć©ste entonces Nmap puede identificar ese sistema como vivo y alcanzable. Otros errores ICMP, como el de sistema o red inalcanzables o TTL excedido indican un sistema que estĆ” muerto o que no es alcanzable. Si no llega ninguna respuesta tambiĆ©n se entiende que el sistema no estĆ” disponible. Si se alcanza un puerto abierto la mayorĆ­a de los servicios simplemente descartarĆ”n el paquete vacĆ­o y no devolverĆ”n ninguna respuesta. Ɖsta es la razón por la que se utiliza el puerto por omisión 31338 ya que es poco probable que estĆ© utilizĆ”ndose. Algunos servicios, como chargen, responderĆ”n con un paquete UDP vacĆ­o lo que ayuda a Nmap a determinar que el sistema estĆ” disponible.

La principal ventaja de este tipo de sondeos es que atraviesan cortafuegos y filtros que sólo analizan TCP. Yo, por ejemplo, una vez fui propietario de un encaminador de banda ancha inalÔmbrico BEFW11S4. El interfaz externo de este dispositivo filtraba por omisión todos los puertos TCP, pero las sondas UDP podían generar mensajes de puerto no alcanzable y permitían detectar al dispositivo.


Video