Este artículo presenta las técnicas de escaneo básicas utilizando nmap. Nmap (Network Mapper) es la herramienta de exploración y seguridad de redes más útil y más utilizada. Está diseñada para escanear redes, aunque su uso más interesante es para escanear un host simple, a través de paquetes IP especialmente formados. Nmap permite determinar si un host está disponible en la red, qué servicios ofrece (incluyendo nombre de la aplicación y versión), qué sistema operativo corre, qué tipo de firewall está en uso, y muchas características más. Este artículo trata de demostrar justamente estos usos más básicos.



Siempre evité escribir un artículo sobre Nmap, porque para hacerlo de manera correcta es indispensable extenderse explicando en profundidad las diferentes técnicas de escaneo de redes a nivel TCP/IP, junto con otros conceptos básicos de seguridad de redes. Sin embargo hoy me resigné. Explicar los conceptos base para entender cómo funciona (y para qué sirve) Nmap, requiere un curso de Seguridad Informática que no estoy dispuesto a elaborar. En lugar de eso, voy a dejar algunos enlaces que cubren en profundidad estos aspectos, incluyendo la propia página de manual de Nmap:

Y, a partir de este punto, voy a asumir que el lector posee conocimientos generales (tampoco hace falta ser un experto en la materia) de redes y seguridad informática.

Instalar Nmap

Para instalar Nmap en Debian/Devuan y derivados, ejecutar:

# apt-get install nmap

En FreeBSD, desde paquete:

# pkg install nmap

O compilar el port ejecutando:

# portmaster security/nmap

En cualquier plataforma, es posible compilar la última versión desde sus fuentes:

# wget https://nmap.org/dist/nmap-7.50.tgz
# tar -xzf nmap-7.50.tgz && cd nmap-7.50/ && ./configure && make && make install

Escaneo silencioso (TCP SYN scan) sin ping

# nmap -sS -PN <TARGET>

TCP SYN scan es tal vez la técnica de escaneo más básica y utilizada. Consiste en iniciar una sesión TCP, enviando el flag SYN, y examinar la respuesta del servidor (SYN-ACK) pero no continuar el protocolo (no enviar nunca el paquete TCP con el flag ACK). De esta forma la sesión nunca se establece, ya que la conexión nunca se completa. Esto tiene un par de beneficios: primero que el scan es rápido, pues se minimiza el número de paquetes enviados hacia el target; segundo que es una técnica stealth (por no completar la conexión).

Ejemplo:

root@linuxito:~# nmap -sS -PN www.mongocho.xyz

Starting Nmap 7.01 ( https://nmap.org ) at 2017-06-28 08:28 EDT
Nmap scan report for www.mongocho.xyz (192.168.129.241)
Host is up (0.019s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 5.62 seconds

El escaneo lleva unos 5 segundos y se observa que el servidor target ("www.mongocho.xyz") tiene abiertos los puertos 22, 80 y 443.

Se evita determinar si el host está "vivo" utilizando ping, ya que muchos firewalls impiden el tráfico del protocolo ICMP.

Por defecto, la salida de Nmap muestra aquellos "puertos interesantes". En general se trata de aquellos puertos que están abiertos en el host target.

Escaneo "insano" (T5) sin ping

# nmap -T5 -PN <TARGET>

Nmap permite controlar el timing del escaneo. Esto es, cada cuánto se envían paquetes hacia el target, cuales son los timeouts y RTT (round-trip time), cuántos reintentos, cuántos hosts escanear en paralelo, etc. Para no tener que setear todos estos parámetros manualmente, se disponen de 6 plantillas (templates), las cuales se especifican con -T<0-5>:

  • 0: paranoid
  • 1: sneaky
  • 2: polite
  • 3: normal
  • 4: aggressive
  • 5: insane

El escaneo "insano" (-T5) es el más agresivo de todos y asume que se dispone de una red ultra rápida, o se desea sacrificar algo de precisión a cambio de velocidad. Por otro lado sería ético sólo utilizarlo contra nuestros propios servidores (para no saturar redes, interfaces ni hosts ajenos).

Ejemplo:

root@linuxito:~# nmap -T5 -PN www.mongocho.xyz  

Starting Nmap 7.01 ( https://nmap.org ) at 2017-06-28 08:28 EDT
Nmap scan report for www.mongocho.xyz (192.168.129.241)
Host is up (0.019s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 3.02 seconds

Notar que el tiempo de escaneo para el mismo host se ha reducido casi un 50%.

Detección de versiones de servicios

# nmap -sS -sV -PN <TARGET>

A través de la opción -sV, Nmap trata de determinar la aplicación o servicio escuchando en cada puerto y su versión.

Ejemplo:

root@linuxito:~# nmap -sS -sV -PN www.mongocho.xyz

Starting Nmap 7.01 ( https://nmap.org ) at 2017-06-28 08:30 EDT
Nmap scan report for www.mongocho.xyz (192.168.129.241)
Host is up (0.019s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 6.7p1 Debian 5+deb8u3 (protocol 2.0)
80/tcp  open  http     nginx
443/tcp open  ssl/http nginx 1.13.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 22.08 seconds

Teniendo acceso al target en cuestión, puedo decir que para este ejemplo la detección de servicio y versión es extremadamente precisa. En general lo es en la mayoría de los casos. No hace falta decir que esta es información muy valiosa para un atacante.

Detección de sistema operativo

A través de la opción -O se intenta detectar la versión de sistema operativo en el host:

# nmap -sS -O -PN <TARGET>

Ejemplo:

root@linuxito:~# nmap -sS -O -PN www.mongocho.xyz

Starting Nmap 7.01 ( https://nmap.org ) at 2017-06-28 08:30 EDT
Nmap scan report for www.mongocho.xyz (192.168.129.241)
Host is up (0.020s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.11 - 4.1

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.64 seconds

La detección de sistema operativo es más compleja y requiere al menos un puerto abierto y uno cerrado (no filtrado) para ser precisa. En general los resultados no son exactos.

Escaneo paranoico

El template paranoico es el más sigiloso de todos. Trata de no dejar rastro alguno del escaneo. Es el indicado al momento de escanear una víctima.

Para correr un escaneo "paranoico" utilizar la opción -T0. Por ejemplo:

root@linuxito:~# nmap -sS -T0 -PN www.mongocho.xyz

Starting Nmap 7.01 ( https://nmap.org ) at 2017-06-28 09:33 EDT
Stats: 1:00:02 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 0.55% done

La desventaja es que puede llevar horas, e incluso días. Notar que luego de exactamente una hora corriendo, estima un porcentaje de avance de apenas 0,55%.

Escanear un único puerto, rango o un conjunto de puertos

Por defecto, Nmap no intenta probar todos los puertos TCP y UDP del target desde el 0 hasta el 65536, sino que sólo intenta una lista de puertos conocidos. Esta lista se encuentra en el archivo nmap-services (/usr/local/share/nmap/nmap-services en Debian y derivados).

A través de la opción -p es posible indicar qué puertos probar:

  • Probar un único puerto. Por ejemplo el 443: -p443
  • Probar un rango de puertos. Por ejemplo desde el 20 hasta el 22 (inclusive): -p20-22
  • Probar un conjunto de puertos. Por ejemplo 80 y 443 (se separan con coma): -p80,443
root@linuxito:~# nmap -sS -p443 -PN www.mongocho.xyz

Starting Nmap 7.01 ( https://nmap.org ) at 2017-06-28 11:28 EDT
Nmap scan report for www.mongocho.xyz (192.168.129.241)
Host is up (0.020s latency).
PORT    STATE SERVICE
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds
root@linuxito:~# nmap -sS -p20-22 -PN www.mongocho.xyz

Starting Nmap 7.01 ( https://nmap.org ) at 2017-06-28 11:30 EDT
Nmap scan report for www.mongocho.xyz (192.168.129.241)
Host is up.
PORT   STATE    SERVICE
20/tcp filtered ftp-data
21/tcp filtered ftp
22/tcp open     ssh

Nmap done: 1 IP address (1 host up) scanned in 3.12 seconds
root@linuxito:~# nmap -sS -p80,443 -PN www.mongocho.xyz

Starting Nmap 7.01 ( https://nmap.org ) at 2017-06-28 11:29 EDT
Nmap scan report for www.mongocho.xyz (192.168.129.241)
Host is up (0.019s latency).
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds

Para más información:

# man nmap

Referencias


Tal vez pueda interesarte


Compartí este artículo