Siguiendo con la estructura de entradas anteriores, hoy hablaremos de nmap. Nuevamente, a nivel básico, para que sirva de recordatorio a quienes ya lo conocían y de introducción a los más noveles. En este caso, la documentación y cantidad de opciones de uso son infinitas, así que para todo lo que no cabe en esta entrada recomiendo usar la guía de referencia de nmap.
¿Y por qué nmap?
Porque no sólo es una herramienta fundamental para los profesionales de la seguridad en sus procedimientos de data gathering sino que además puede ser de tremenda utilidad para el usuario en multitud de ocasiones. Puede servirte para ver quien está conectado a tu red wifi, securizar tu servidor, detectar los nodos de una red y mil y una cosas más. Su función más extendida, no obstante, suele ser la de comprobar qué puertos de una máquina están abiertos con la finalidad de regular su tráfico y detectar posibles vulnerabilidades asociadas a las aplicaciones trabajando a través de ellos.
¿Qué es nmap?
Nmap es una herramienta para la exploración de redes y, de forma idónea, la realización de auditorías de seguridad. Se trata de un software desarrollado para escanear redes completas, aunque funciona sin problemas contra un servidor concreto. Nmap rastrea los puertos de la máquina o máquinas en cuestión y establece si un puerto está abierto, cerrado o protegido por un cortafuegos. Así, es capaz de identificar máquinas dentro de una red, determinar qué servicios utiliza dicha máquina, definir cuál es su sistema operativo e incluso devolver cierta información sobre el hardware de la máquina.
¿Cómo funciona?
A grandes rasgos, de dos formas: enviando paquetes o realizando una llamada de conexión (connect system call). Una vez hecho esto, Nmap es capaz de distinguir entre seis estados diferentes para cada puerto:
- Abierto (open): quiere decir que hay una aplicación aceptando conexiones TCP, datagramas UDP o asociaciones SCTP en el puerto.
- Cerrado (closed): el puerto es accesible pero no existe ninguna aplicación escuchando en él.
- Filtrado (filtered): el paquete que se ha enviado ha sido filtrado por un firewall, reglas del router, etc y nmap no puede determinar si está abierto o no.
- Sin filtrar (unfiltered): quiere decir que el puerto es accesible pero nmap no es capaz de determinar si está abierto o cerrado. Este estado sólo lo devuelve el tipo de escaneo ACK (lo veremos más adelante).
- open|filtered – closed|filtered: nmap no es capaz de definir si el puerto está abierto/cerrado o filtrado. Ocurre cuando los puertos abiertos no generan una respuesta.
Una sintaxis general simplificada de la orden sería:
user@machine:~$ nmap (opciones_escaneo) (máquina_a_escanear)
Aunque en función del tipo de escaneo, es posible que se requieran privilegios de superusuario.
Tipos de escaneo
Existen 13 tipos de escaneo, veamos algunos de ellos:
Escaneo TCP SYN: es el predeterminado y probablemente el más utilizado. También el más rápido y discreto, ya que no llega a completar una conexión TCP. Su funcionamiento consiste en enviar un paquete SYN y esperar una respuesta por parte del servidor: si se recibe un SYN/ACK el puerto está abierto (si lo recibe sin el flag ACK también lo considera así), si se recibe un RST (reset) está cerrado y si no se recibe respuesta tras varios intentos se considera filtrado.
Comando:
root@machine:~#nmap -sS (máquina)
Escaneo TCP connect: el predeterminado cuando no tenemos acceso root y por tanto no podemos enviar paquetes en crudo. Nmap solicita al sistema que establezca una conexión con la máquina objetivo a través del puerto elegido mediante una llamada de tipo connect. Se trata de una opción menos eficiente que TCP SYN, ya que requiere más tiempo y paquetes para obtener la misma información.
Comando:
user@machine:~$ nmap -sT (máquina)
Escaneo UDP: dado que el escaneo de puertos UDP es más lento y dificultoso que el de TCP, muchas veces se deja de lado su auditoría. Es un error, ya que tanto DNS (puerto 53), como SNMP (puertos 161/162) y DHCP (puertos 67/68) -servidor/cliente- corren sobre éste. El escaneo UDP funciona mediante el envío de un paquete UDP a los puertos seleccionados, de tal forma que si se devuelve un error “ICMP unreachable” el puerto se considera cerrado o filtrado (en función del código de error) mientras que si hay respuesta mediante un paquete UDP se considera abierto.
Comando:
root@machine:~# nmap -sU (máquina)
Escaneo SCTP INIT: este tipo de escaneo se establece como alternativa a los TCP y UDP y sería el equivalente a un escaneo TCP SYN en el ámbito SCTP. Se trata de un tipo de escaneo rápido y que distingue bien entre los estados abierto, cerrado y filtrado. Además, es muy poco intrusivo, ya que no completa la asociación STCP sino que envía un paquete INIT como si se pretendiera abrir una conexión y espera la respuesta: si recibe un INIT-ACK, el puerto está abierto, mientras que si recibe un ABORT el puerto está cerrado. En caso de no recibir respuesta tras varios intentos, el puerto se marca como filtrado.
Comando:
root@machine:~# nmap -sY (máquina)
Escaneo TCP personalizado:esta modalidad tiene como finalidad permitir que el usuario defina su análisis a la carta, especificando las TCP flags a utilizar (URG, ACK, PSH, RST, SYN, FIN) y el tipo de escaneo TCP (-sF, -sA).
Comando:
root@machine:~# nmap -sF/sA --scanflags URG
(Por ejemplo)
Como no podía ser de otra manera, tanto nmap como Zenmap se encuentran en los repositorios Debian, así que ¡no tenéis excusa para no probarlo!
Trabajando en modo gráfico: Zenmap
Aunque no es lo habitual en los usuarios de nmap (normalmente con conocimientos avanzados y más que acostumbrados a trabajar en la terminal), cabe la posibilidad de que por una u otra razón necesiten o prefieran una interfaz gráfica para trabajar con nmap. Para esos casos existe Zenmap que recoge toda la potencia de nmap en una GUI muy intuitiva, completa y útil tanto para análisis sencillos como aquellos más complejos o personalizados.
Aquí, un par de capturas de pantalla para que os hagáis una idea de su aspecto, aunque lo más recomendable es que lo probéis vosotros mismos:
Más información
Si queréis más información sobre el uso de nmap, ejemplos prácticos, sugerencias sobre cómo afrontar casos reales mediante nmap, etc os recomiendo adquirir su libro:
7 ideas sobre “Nmap: escáner de puertos”
Muy bien explicado, y para empezar perfecto, se puede decir que es una herramienta imprescindible, y como dices con muchas opciones y ademas dispone de scripts que nos pueden ayudar a obtener mucha mas información 😉
Muy bien debish, es un gran acercamiento, lo iremos complementando 😉
Me alegro de que te gustara Israel. Por supuesto, podemos ir ampliando, las opciones son innumerables 🙂
Llevo tiempo esperando una actualización de este blog y no habeis defraudado. Estupendo artículo, debish. Mucho más ameno que leer el man.
Gracias firulillo, siempre hace ilusión a la «familia debianita» por aquí 🙂
Muy buena explicacion de nmap, es una herramienta muy util en redes, que puede usarse de forma correcta o ‘incorrecta’, pero que es bueno conocer por ejemplo para saber si el firewall que tienes instalado te funciona como crees
Y tanto que lo es. Todo conocimiento tiene la posibilidad de aplicarse bien o mal, es un riesgo que hay que correr.
Un placer leerte por aquí 😉