Cuando nos ponemos como objetivo una web, querremos saber:

  1. ¿Qué sistemas están activos?
  2. ¿Qué servicios corren en esos sistemas?

Para ello, usaremos Nmap y, en este caso, nos vamos a centrar en responder a la primera pregunta. Esta es la primera habitación de una serie de 4.

Aquí vamos a explicar cómo descubrir los sistemas que están en línea, antes de hacer un escaneo de puertos. Esta fase es crucial, porque tratar de escanear sistemas fuera de línea no sirve de nada y crea ruido innecesario.

Hay varios enfoques en Nmap para descubrir máquinas en línea, así que veremos:

  1. Escaneo ARP. Que usa peticiones ARP para descubrir máquinas conectadas.
  2. Escaneo ICMP. Usado para identificar esas máquinas.
  3. Escaneo por ping TCP/UDP.

También veremos dos escáners, arp-scan y masscan, explicando cómo se solapan con la parte de Nmap dedicada al descubrimiento de máquinas conectadas.

Nmap es la abreviatura de Network Mapper y se suele usar para los siguiente pasos en orden.

Pasos a la hora de usar Nmap

Subredes

Repasemos algunos términos antes de ir a las tareas principales.

  • Un segmento de red es un grupo de máquinas conectadas usando un medio compartido. Puede ser el switch Ethernet o el punto de acceso Wi-Fi.
  • Una subred, en una red IP, es el equivalente a uno o más segmentos de red conectados juntos y configurados para usar el mismo router.

El segmento de red se refiere a la red física, una subred se refiere a la conexión lógica.

En el siguiente diagrama de red, tenemos 4 segmentos de red o subredes. Normalmente, tu sistema estará conectado a uno de esos segmentos de red/subred. Una subred tiene su propio rango de direcciones IP y está conectada a una red más extensa vía router.

Puede haber un cortafuegos ejecutando políticas de seguridad que dependen de cada red.

Esquema de subredes

En la imagen vemos dos tipos de subredes:

  • Subredes con /16, que significa que la máscara de subred puede escribirse como 255.255.0.0. Esta subred puede tener unos 65.000 hosts.
  • Subredes con /24, que indica que la máscara de subred puede expresarse como 255.255.255.0, lo que implica que puede tener unos 250 hosts.

Como parte del reconocimiento activo, queremos descubrir más información sobre un grupo de hosts o una subred. Si estás conectado a la misma subred, puedes escanear por ARP (Address Resolution Protocol) para descubrir máquinas activas.

Una petición ARP trata de conseguir la dirección de hardware (dirección MAC), de manera que la comunicación sobre la capa-enlace sea posible. Sin embargo, podemos usar esto para inferir que la máquina está en línea.

Si estoy en la Red A, puedo usar ARP para descubrir dispositivos dentro de esa subred (10.1.100.0/24).

Supongamos que estás conectado a una subred diferente de la subred de los sistemas objetivo. En ese caso, todos los paquetes generados por tu escáner serán enrutados vía la puerta por defecto (default gateway, que es el router), pero no puede alcanzar a sistemas de otra subred.

ARP es un protocolo de capa-enlace y sus paquetes están ligados a su subred.

Pulsamos en el botón «Ver sitio» para iniciar un simulador de red y contestar a las preguntas.

En el simulador, enviamos un paquete con lo siguiente:

  • Desde la máquina 1.
  • A la máquina 1 (para indicar que es broadcast).
  • Tipo de paquete, petición ARP.
  • Datos: computer6 (porque estamos preguntando por la dirección MAC de la computer6 usando la petición ARP).

¿Cuántos dispositivos puede ver la petición ARP? (La pista dice que no contemos el switch del esquema que se ve). Son 4, se ve en el número de puntos azules, uno vuelve a la máquina propia, otros van a las máquinas 2 y 3 y otro más al router.

4

¿Recibió la máquina 6 la petición ARP? (Y/N).

N

Ahora enviamos el siguiente paquete:

  • Desde la máquina 4.
  • A la máquina 4 (para indicar que es broadcast).
  • Tipo de paquete: Petición ARP.
  • Datos: computer6 (como antes).

¿Cuántos dispositivos podemos ver?

4

¿Ha recibido la máquina 6 la petición?

Y

Enumerando objetivos

En Nmap, necesitamos especificar los objetivos que queremos escanear. Generalmente, podemos proveer una lista, un rango o una subred.

Ejemplos:

  • Lista: Dirección_IP scanme.nmap.org example.com escaneará 3 direcciones IP.
  • Rango: 10.11.12.15-20 escaneará 6 direcciones IP. Desde la que acaba en 15 a la que acaba en 20.
  • Subred: IP_Máquina/30 escaneará 4 direcciones IP.

También podemos darle una lista de objetivos en un archivo de texto:

nmap -iL lista_de_objetivos.txt

Si queremos chequear la lista de hosts que escaneará Nmap, podemos usar:

nmap -sL OBJETIVOS

Esta opción te dará una lista detallada de los hosts que escaneará, pero sin hacerlo. Nmap intentará una resolución inversa DNS en todos los objetivos para obtener sus nombres.

Esos nombres pueden revelar información variada al pentester. Si no quieres hacer Nmap al servidor DNS, puedes usar -n.

Lanzamos la máquina de ataque de la habitación, abrimos una terminal y usamos Nmap para responder a lo siguiente.

¿Cuál es la primera dirección IP que escanearía Nmap si le damos como objetivo 10.10.12.1329?

Para eso, usamos la opción de listar los objetivos del escaneo:

nmap -sL 10.10.12.13/29

10.10.12.8

¿Cuántas direcciones IP escaneará Nmap si le damos el objetivo 10.10.0-255.101-125?

Para eso, empleamos el comando de antes, pero sin DNS, es decir, con la opción -n.

nmap -sL -n 10.10.0-255.101-125

6400

Descubriendo Live Hosts

Vamos a revisitar las capas TCP/IP, que son 4 y equivalentes a las 7 del modelo OSI. Empezando de abajo hacia arriba, podemos usar.

  • ARP para la capa de enlace.
  • ICMP para la capa de red.
  • TCP para la capa de transporte.
  • UDP para la capa de transporte.

Capas del modelo TCP/IP y OSI

Antes de ver cómo los escáners pueden usar cada una en detalle, repasemos brevemente estos 4 protocolos.

  • ARP tiene un propósito, enviar una frame a la dirección broadcast en el segmento de red y preguntar a la máquina con una dirección IP específica, para responder dando su dirección MAC de hardware.
  • ICMP tiene muchos tipos. El ping ICMP usa los tipos 8 (Echo) y 0 (Echo Reply). Si quieres hacer ping a un sistema en la misma subred, una petición ARP debería preceder al eco ICMP.
  • Aunque TCP y UDP son capas de transporte, para los propósitos de escaneo de red, un escáner enviará un paquete especialmente configurado para los puertos TCO y UDP habituales, a fin de ver si el objetivo responde. Este método es eficiente, sobre todo si el Eco ICMP está bloqueado.

Volvemos al simulador de red y respondemos.

Enviamos un paquete con lo siguiente:

  • Desde máquina 1.
  • A máquina 3.
  • Tipo de paquete: Petición ping.

¿Cuál es el tipo de paquete que envía la máquina 1 antes del ping?

ARP Request

¿Cuál es el tipo de paquete que la máquina 1 recibe antes de ser capaz de enviar el ping?

ARP Response

¿Cuántas máquinas han respondido a la petición de ping?

1

Ahora enviamos este paquete:

  • Desde máquina 2.
  • A máquina 5.
  • Tipo: Petición de Ping.

¿Cual es el nombre del primer dispositivo que ha respondido a la petición ARP? Si nos fijamos en el registro de red, vemos que el router es el primero, ya que la máquina 5 no está en la red local de 2.

Router

¿Cuál es el nombre del primer dispositivo que ha respondido a la segunda petición ARP?

Computer5

Envía otra petición Ping, ¿requiere una nueva petición ARP?

N

Descubrimiento de hosts con Nmap usando ARP

Es importante no perder tiempo en escanear puertos de máquinas que no están en línea. Por eso, hay que descubrir a las que sí están.

Nmap sigue estos enfoques para eso:

  1. Cuando un usuario privilegiado (root del grupo sudoers) intenta escanear objetivos en una red local, Nmap usa peticiones ARP.
  2. Cuando intenta escanear fuera de la red local, usa peticiones Echo ICMP, TCP ACK (Acknowledge) al puerto 80, TCP SYN (Synchronize) al puerto 443 y petición de marca de tiempo (timestamp).
  3. Cuando un usuario sin privilegios trata de escanear fuera de la red local, Nmap recurre al saludo TCP a 3 bandas, enviando paquetes SYN a los puertos 80 y 443.

Por defecto, Nmap usa un escaneo de ping para encontrar máquinas activas y luego procede a escanear estas solamente.

Si quieres descubrir objetivos sin escanear puertos, puedes usar:

nmap -sn OBJETIVOS

El escaneo ARP solo es posible si estás en la misma subred que el objetivo.

En una Ethernet (802.3) y Wi-Fi (802.11), necesitas saber la dirección MAC de cualquier sistema antes de poder comunicarte con él.

La dirección MAC es necesaria para el encabezado enlace-capa (link-layer). Este contiene la dirección MAC de la fuente y del destino, entre otros campos.

Para obtener la dirección MAC, el OS envía una petición ARP. Una máquina que responde a esta está activa. Recordemos que la petición solo funciona si estás en la misma subred (misma Ethernet o Wi-Fi).

Si quieres realizar un escaneo ARP sin puertos, entonces usamos:

nmap -PR -sn OBJETIVOS

Donde -PR indica que solo quieres el escaneo ARP.

Ejemplo para descubrir todos los sistemas online en la misma subred que nuestra máquina objetivo:

pentester@TryHackMe$ sudo nmap -PR -sn 10.10.210.6/24

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 07:12 BST
Nmap scan report for ip-10-10-210-75.eu-west-1.compute.internal (10.10.210.75)
Host is up (0.00013s latency).
MAC Address: 02:83:75:3A:F2:89 (Unknown)
Nmap scan report for ip-10-10-210-100.eu-west-1.compute.internal (10.10.210.100)
Host is up (-0.100s latency).
MAC Address: 02:63:D0:1B:2D:CD (Unknown)
Nmap scan report for ip-10-10-210-165.eu-west-1.compute.internal (10.10.210.165)
Host is up (0.00025s latency).
MAC Address: 02:59:79:4F:17:B7 (Unknown)
Nmap scan report for ip-10-10-210-6.eu-west-1.compute.internal (10.10.210.6)
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 3.12 seconds

En este caso, la máquina de ataque tiene la IP 10.10.210.6 y usa peticiones ARP para descubrir máquinas activas de la misma subred.

Escaneo ARP

Si miramos a los paquetes generados por tcpdump o Wireshark, veremos tráfico de red similar a la imagen de abajo. Wireshark muestra la dirección MAC de origen, de destino, el protocolo y la query relacionada con cada petición ARP.

El origen es nuestra máquina de ataque, mientras que la de destino es la dirección broadcast, ya que no conocemos la dirección MAC del objetivo.

En cambio, vemos la dirección IP de ese objetivo, que aparece en la columna Info. Podemos ver que estamos pidiendo las direcciones MAC de todas las IP de la subred, comenzando por 10.10.210.1. La máquina con la IP por la que preguntamos enviará una respuesta ARP con su dirección MAC, y así sabremos que está online.

Wireshark

Hablando de escaneos ARP, debemos mencionar la herramienta arp-scan.

Tiene muchas opciones para personalizar el escaneo y puedes verlas en su Wiki. La más popular suele ser:

arp-scan --localnet // o bien
arp-scan -l

Eso envía peticiones ARP a todas las IP’s válidas de tus redes locales.

Si tu sistema tiene más de un interfaz y estás interesado en uno concreto, puedes usar la opción -I.

sudo arp-scan -I eth0 -l

En el ejemplo de abajo, hemos escaneado la subred de la máquina de ataque usando:

arp-scan ATTACKBOX_IP/24

Como es equivalente a:

nmap -PR -sn ATTACKBOX_IP/24

Obtenemos las 3 mismas respuestas.

pentester@TryHackMe$ sudo arp-scan 10.10.210.6/24
Interface: eth0, datalink type: EN10MB (Ethernet)
WARNING: host part of 10.10.210.6/24 is non-zero
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.10.210.75	02:83:75:3a:f2:89	(Unknown)
10.10.210.100	02:63:d0:1b:2d:cd	(Unknown)
10.10.210.165	02:59:79:4f:17:b7	(Unknown)

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 2.726 seconds (93.91 hosts/sec). 3 responded

Del mismo modo, arp-scan generará peticiones que podremos ver en tcpdump o Wireshark.

Arp-Scan en Wireshark

Volvamos al simulador de red. Enviaremos peticiones broadcast ARP con estas opciones:

  • Desde máquina 1.
  • A máquina 1 (para indicar que es broadcast).
  • Tipo de paquete: Petición ARP.
  • Datos: Probamos los 8 dispositivos que no son la máquina 1, incluyendo switches y router.

¿Cuańtos dispositivos somos capaces de descubrir con peticiones ARP? (Las otras dos máquinas de nuestra subred y el router, nada más).

3

Descubrimiento de hosts con Nmap usando ICMP

Podemos hacer ping a cada dirección IP en una red objetivo y ver quién respondería a nuestra petición ping (ICMP tipo 8/echo) con una respuesta ping (ICMP tipo 0).

Aunque este sería el enfoque más directo, no siempre es fiable.

Muchos cortafuegos bloquean el echo ICMP. Las nuevas versiones de Windows están configuradas con uno que las bloquea por defecto.

Recordemos que una petición ARP precederá a la petición ICMP si el objetivo está en la misma subred.

Para usar la petición ICMP echo en Nmap utilizaremos la opción -PE. Debemos recordar añadir -sn si no queremos seguir con un escaneo de puertos.

Como se muestra en la imagen de abajo, un escaneo ICMP echo funciona enviando una petición ICMP echo y experando que el objetivo responda con una respuesta ICMP echo si está online.

Peticiones ICMP echo

En el ejemplo de abajo, hemos escaneado la subre objetivo con:

nmap -PE -sn IP_Objetivo/24

Este escaneo enviará paquetes echo ICMP a cada IP de la subred. De nuevo, esperamos que los hosts que están vivos respondan, sin embargo, es importante recordar que la mayoría de cortafuegos bloquean ICMP.

El resultado de abajo muestra el resultado de escanear la subred clase C de la máquina virtual usando:

sudo nmap -PE -sn IP_Objetivo/24

Desde la máquina de ataque de la habitación.

pentester@TryHackMe$ sudo nmap -PE -sn 10.10.68.220/24

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 10:16 BST
Nmap scan report for ip-10-10-68-50.eu-west-1.compute.internal (10.10.68.50)
Host is up (0.00017s latency).
MAC Address: 02:95:36:71:5B:87 (Unknown)
Nmap scan report for ip-10-10-68-52.eu-west-1.compute.internal (10.10.68.52)
Host is up (0.00017s latency).
MAC Address: 02:48:E8:BF:78:E7 (Unknown)
Nmap scan report for ip-10-10-68-77.eu-west-1.compute.internal (10.10.68.77)
Host is up (-0.100s latency).
MAC Address: 02:0F:0A:1D:76:35 (Unknown)
Nmap scan report for ip-10-10-68-110.eu-west-1.compute.internal (10.10.68.110)
Host is up (-0.10s latency).
MAC Address: 02:6B:50:E9:C2:91 (Unknown)
Nmap scan report for ip-10-10-68-140.eu-west-1.compute.internal (10.10.68.140)
Host is up (0.00021s latency).
MAC Address: 02:58:59:63:0B:6B (Unknown)
Nmap scan report for ip-10-10-68-142.eu-west-1.compute.internal (10.10.68.142)
Host is up (0.00016s latency).
MAC Address: 02:C6:41:51:0A:0F (Unknown)
Nmap scan report for ip-10-10-68-220.eu-west-1.compute.internal (10.10.68.220)
Host is up (0.00026s latency).
MAC Address: 02:25:3F:DB:EE:0B (Unknown)
Nmap scan report for ip-10-10-68-222.eu-west-1.compute.internal (10.10.68.222)
Host is up (0.00025s latency).
MAC Address: 02:28:B1:2E:B0:1B (Unknown)
Nmap done: 256 IP addresses (8 hosts up) scanned in 2.11 seconds

Este resultado muestra que 8 hosts están vivos. Es más, muestra sus direcciones MAC. En general, no esperemos conocer las MAC a menos que los objetivos estén en la misma subred que nuestro sistema.

Dicho resultado indica que Nmap no necesita enviar paquetes ICMP, ya que se ha confirmado que los hosts están online basándonos en las respuestas ARP que ha recibido.

Repetimos el escaneo pero, esta vez, desde un sistema que pertenezca a una subred diferente. El resultado es similar, pero sin las direcciones MAC.

pentester@TryHackMe$ sudo nmap -PE -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:16 EEST
Nmap scan report for 10.10.68.50
Host is up (0.12s latency).
Nmap scan report for 10.10.68.52
Host is up (0.12s latency).
Nmap scan report for 10.10.68.77
Host is up (0.11s latency).
Nmap scan report for 10.10.68.110
Host is up (0.11s latency).
Nmap scan report for 10.10.68.140
Host is up (0.11s latency).
Nmap scan report for 10.10.68.142
Host is up (0.11s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap scan report for 10.10.68.222
Host is up (0.11s latency).
Nmap done: 256 IP addresses (8 hosts up) scanned in 8.26 seconds

Si miramos los paquetes de la red con Wireshark, veremos algo como la imagen de abajo. Podemos ver que tenemos una dirección IP de una subred diferente a la subred de destino, enviando peticiones echo ICMP a todas las direcciones IP de la subred para ver cuál responde.

Resultado de escaneo ICMP echo, visto desde Wireshark

Como las peticiones echo ICMP tienden a ser bloqueadas, puedes considerar también peticiones ICMP Time Stamp o ICMP Address Mask para detectar si un sistema está online. Añadiendo la opción -PP le decimos a Nmap que queremos peticiones ICMP de marca de tiempo.

Como se muestra debajo, esperamos que los hosts que están vivos respondan.

Esquema petición ICMP Time Stamp

En el siguiente ejemplo, ejecutamos:

nmap -PP -sn IP_Objetivo/24

Para descubrir máquinas conectadas en la subred objetivo.

pentester@TryHackMe$ sudo nmap -PP -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:06 EEST
Nmap scan report for 10.10.68.50
Host is up (0.13s latency).
Nmap scan report for 10.10.68.52
Host is up (0.25s latency).
Nmap scan report for 10.10.68.77
Host is up (0.14s latency).
Nmap scan report for 10.10.68.110
Host is up (0.14s latency).
Nmap scan report for 10.10.68.140
Host is up (0.15s latency).
Nmap scan report for 10.10.68.209
Host is up (0.14s latency).
Nmap scan report for 10.10.68.220
Host is up (0.14s latency).
Nmap scan report for 10.10.68.222
Host is up (0.14s latency).
Nmap done: 256 IP addresses (8 hosts up) scanned in 10.93 seconds

Parecido al anterior escaneo ICMP, este envía peticiones ICMP de marca de tiempo a cada IP válida en la subred objetivo. En la pantalla de Wireshark que vemos debajo, podemos ver una IP enviando paquetes ICMP a cada dirección posible para descubrir máquinas activas.

Wireshark ante peticiones ICMP marca de tiempo

Del mismo modo, Nmap usa peticiones de máscara de dirección (ICMP tipo 17) y chequea si obtiene respuesta (ICMP tipo 18). Este escaneo se puede hacer con la opción -PM.

Esquema escaneo ICMP máscar de dirección

En un intento de descubrir máquinas con peticiones ICMP de máscara de dirección, ejecutamos:

nmap -PM -sn IP_Objetivo/24

Aunque, basándonos en anteriores escaneos, sabemos que al menos 8 máquinas están vivas, este escaneo devuelve 1.

La razón es que el cortafuegos está bloqueando este tipo de paquete ICMP. Por tanto, es esencial aprender múltiples aproximaciones para conseguir el mismo resultado. Si un tipo de paquete está siendo bloqueado, siempre podemos elegir otro para descubrir la red y los servicios objetivo.

pentester@TryHackMe$ sudo nmap -PM -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:13 EEST
Nmap done: 256 IP addresses (0 hosts up) scanned in 52.17 seconds

Aunque no obtuvimos respuesta, enviamos una petición y esperamos contestación. Cada petición ICMP fue enviada dos veces, como podemos ver en el pantallazo siguiente.

Wireshark ante petición ICMP dirección de máscara

Respondemos a las preguntas:

¿Qué opción le dice a Nmap que use peticiones ICMP de marca de tiempo para descubrir máquinas conectadas?

-PP

¿Cuál para decirle que use paquetes ICMP de máscara de dirección?

-PM

¿Cuál es la opción requerida para decirle a Nmap que use ICMP echo para descubrir máquinas conectadas?

-PE

Descubrimiento de hosts con Nmap usando TCP y UDP

Ping TCP SYN

Podemos enviar un paquete con la opción SYN a un puerto TCP 80 por defecto y esperar una respuesta.

  • Un puerto abierto respondería con un SYN/ACK (Acknowledge).
  • Un puerto cerrado con RST (Reset)

En este caso, chequeamos solamente si obtendremos respuesta para inferir que la máquina está activa. El estado específico del puerto no es importante ahora.

Esta imagen explica cómo funciona el saludo a 3 bandas.

Saludo a 3 bandas o 3 way handshake

Si quieres que Nmap use el ping TCP SYN, puedes hacerlo mediante la opción -PS seguida del número de puerto, rango, lista o combinación.

Por ejemplo -PS21 tendrá como objetivo el puerto 21 y -PS21-25 tendrá como objetivo el rango de 21 a 25.

Finalmente -PS80,443,8080 tendrá como objetivo esos tres puertos.

Usuarios con privilegio pueden enviar paquetes TCP SYN y no necesitan completar el saludo a 3 bandas incluso si el puerto está abierto. Como se muestra en la figura de abajo. Los usuarios sin privilegio no tienen más opción que completarlo.

Escaneo TCP SYN sin completar saludo a 3 bandas

Ejecutaremos:

nmap -PS -sn MACHINE_IP/24

Como vemos en el resultado, descubrimos 5 máquinas.

pentester@TryHackMe$ sudo nmap -PS -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
Nmap scan report for 10.10.68.121
Host is up (0.16s latency).
Nmap scan report for 10.10.68.125
Host is up (0.089s latency).
Nmap scan report for 10.10.68.134
Host is up (0.13s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 17.38 seconds

Veamos qué ha pasado entre bambalinas. Mirando el tráfico de red con Wireshark, técnicamente, no hemos especificado puertos TCP que usar en el escaneo ping TCP, así que Nmap usó los puertos más comunes. En este caso, TCP puerto 80. Se espera que responda cualquier servicio escuchando en ese puerto 80, indicando indirectamente que la máquina está online.

Wireshark en un ping TCP SYN

Ping TCP ACK

Esto envía un paquete con la bandera ACK. Debemos ser usuario con privilegios para esto, si no, intentará un saludo completo a 3 bandas.

Por defecto, se usa el puerto 80 y la sintaxis es similar al ping TCP SYN. -PA es la opción y debe ser seguida de un número de puerto, rango, lista o combinación. Por ejemplo, -PA21, -PA21-25 y -PA80,443,8080.

Cualquier paquete TCP con la bandera ACP debe recibir un paquete de respuesta TCP con la bandera RST. Responde así porque el paquete TCP ACK no forma parte de ninguna conexión en marcha. La respuesta esperada se usa para detectar si una máquina está activa.

Esquema de un paquete TCP ACK en un escaneo NMAP

En este ejemplo, ejecutamos:

sudo nmap -PA -sn IP_Objetivo/24

Para descubrir máquinas activas en la subred objetivo. Podemos ver que el paquete TCP ACK ha descubierto cinco máquinas.

pentester@TryHackMe$ sudo nmap -PA -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:46 EEST
Nmap scan report for 10.10.68.52
Host is up (0.11s latency).
Nmap scan report for 10.10.68.121
Host is up (0.12s latency).
Nmap scan report for 10.10.68.125
Host is up (0.10s latency).
Nmap scan report for 10.10.68.134
Host is up (0.10s latency).
Nmap scan report for 10.10.68.220
Host is up (0.10s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 29.89 seconds

Si miramos en Wireshark, Nmap envía cada paquete dos veces. Los sistemas que no responden están desconectados o inaccesibles.

Wireshark ante un escaneo TCP ACK

Ping UDP

Por último, podemos usar el ping UDP para descubrir si hay máquinas online. Al contrario que con un ping TCP SYN, al enviar un paquete UDP no se espera respuesta. Pero si enviamos un paquete UDP a un puerto UDP cerrado, esperamos obtener un paquete de puerto ICMP inalcanzable. Esto indica que el sistema está conectado y disponible.

En la siguiente imagen, vemos un paquete UDP enviado a un puerto UDP abierto, lo que no dispara ninguna respuesta. En cuando, enviar un paquete UDP a cualquier puerto UDP cerrado, puede disparar una respuesta indirecta que indique que la máquina está online.

Esquema de envío de paquete UDP

La sintaxis para especificar los puertos es similar a la de los pings TCP SYN y TCP ACK. Nmap usa -PU para el ping UDP. En el siguiente ejemplo, descubrimos 5 máquinas.

pentester@TryHackMe$ sudo nmap -PU -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
Nmap scan report for 10.10.68.121
Host is up (0.10s latency).
Nmap scan report for 10.10.68.125
Host is up (0.14s latency).
Nmap scan report for 10.10.68.134
Host is up (0.096s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 9.20 seconds

Vamos a inspeccionar los paquetes UDP generados. En Wireshark vemos que Nmap envía paquetes UDP a puertos que, normalmente, están cerrados para disparar el error de destino ICMP inalcanzable.

Wireshark ante envíos de ping UDP

Masscan

Masscan usa un enfoque similar para descubrir sistemas activos. Sin embargo, para finalizar el escaneo con rapidez, Masscan es muy agresivo con la tasa de paquetes que generar. La sintaxis es bastante similar -p puede seguirse de un número de puerto, lista o rango.

Por ejemplo:

masscan MACHINE_IP/24 -p443
masscan MACHINE_IP/24 -p80,443
masscan MACHINE_IP/24 -p22-25
masscan MACHINE_IP/24 ‐‐top-ports 100

Masscan no está en la máquina de ataque, pero se puede instalar con:

sudo apt install masscan

Respondemos a las preguntas.

¿Qué escaneo de ping TCP no requiere ser usuario con privilegios?

TCP SYN ping

¿Cuál requiere ser usuario con privilegios?

TCP ACK ping

¿Qué opción necesitas añadir a Nmap para ejecutar un escaneo de ping TCP SYN en el puerto telnet?

-PS23

Usando búsqueda inversa de DNS (Reverse-DNS lookup)

La conducta habitual de Nmap es usar reverse-DNS online hosts, porque los hostnames pueden revelar un montón de cosas. Sin embargo, si no queremos enviar esas peticiones DNS, podemos usar -n para saltarnos este paso.

Por defecto, Nmap buscará máquinas online, sin embargo, puedes usar la opción -R para hacer peticiones al servidor DNS hasta para máquinas desconectadas. Si quieres usar un servidor DNS específico, puedes añadir la opción:

--dns-server DNS_SERVER

Queremos que Nmap haga una búsqueda inversa de DNS para todos los hosts posibles de una subred, esperando obtener algunas pistas gracias a los nombres. ¿Qué opción deberíamos usar?

-R

Resumiendo

Hemos aprendido cómo ARP, ICMP, TCP y UDP pueden detectar máquinas activas. Cualquier respuesta de una máquina es indicativa de que está conectada.

He aquí un resumen rápido de las opciones de Nmap que hemos visto.

Tipo de escaneo Comando de ejemplo
Escaneo ARP sudo nmap -PR -sn MACHINE_IP/24
Escaneo ICMP Echo sudo nmap -PE -sn MACHINE_IP/24
Escaneo ICMP Timestamp sudo nmap -PP -sn MACHINE_IP/24
Escaneo ICMP Address Mask sudo nmap -PM -sn MACHINE_IP/24
Escaneo Ping TCP SYN sudo nmap -PS22,80,443 -sn MACHINE_IP/30
Escaneo Ping TCP ACK sudo nmap -PA22,80,443 -sn MACHINE_IP/30
Escaneo Ping UDP sudo nmap -PU53,161,162 -sn MACHINE_IP/30

Recordemos añadir -sn si estamos interesados en descubrimiento de máquinas sin escaneo de puertos. Omitir -sn hará que Nmap escanee los puertos por defecto de dichas máquinas.

Opción Propósito
-n sin búsqueda DNS
-R Búsqueda inversa de DNS para todas las máquinas
-sn solo descubrimiento de máquinas