Introducción
En el ámbito de la seguridad de redes y la administración de sistemas, saber que un puerto está abierto es solo la mitad de la batalla. Por defecto, los escáneres de puertos adivinan el servicio en ejecución basándose en números de puerto estándar (por ejemplo, asumiendo que el puerto 80 es siempre un servidor web HTTP). Sin embargo, los administradores pueden ejecutar cualquier servicio en cualquier puerto.
Es por esto que la detección de banners y versiones es fundamental. Los números de puerto son pistas, no pruebas. Los entornos reales utilizan con frecuencia puertos personalizados, proxies inversos, contenedores o nombres de servicio engañosos.
Para identificar con precisión qué se está ejecutando realmente en un sistema objetivo, es necesario interrogar a los puertos abiertos. En este laboratorio, explorarás las capacidades de detección de versiones de Nmap. Aprenderás a capturar banners de servicios e identificar con exactitud los nombres del software y sus números de versión, lo cual es un paso crítico en la evaluación de vulnerabilidades.
Habilitar la detección de versiones
En este paso, aprenderás los fundamentos de la detección de versiones de Nmap. Por defecto, Nmap solo te indica si un puerto está abierto y qué servicio se ejecuta normalmente en él basándose en una tabla de búsqueda estática. Para averiguar exactamente qué software está escuchando, necesitas interrogar activamente al servicio.
Puedes habilitar la detección de versiones añadiendo el parámetro -sV a tu comando de Nmap. Esto le indica a Nmap que envíe una serie de sondas específicas a los puertos abiertos y analice las respuestas para determinar el servicio y su versión.
En otras palabras, Nmap deja de inferir basándose únicamente en el número de puerto y comienza a interrogar directamente el comportamiento de la aplicación.
Ejecuta el siguiente comando en tu terminal para escanear tu máquina local y detectar las versiones de los servicios en ejecución:
nmap -sV -p 80,8080 localhost
Verás una salida similar a esta:
Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000010s latency).
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.18.0 (Ubuntu)
8080/tcp open http SimpleHTTPServer 0.6 (Python 3.10.12)
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 6.51 seconds
Observa la columna VERSION en la salida. En lugar de simplemente adivinar que el puerto 80 es HTTP, Nmap se comunicó activamente con el puerto y descubrió que está ejecutando Nginx versión 1.18.0. También identificó con éxito un servidor HTTP de Python ejecutándose en el puerto 8080.
Ajustar la intensidad de la detección
En este paso, aprenderás a controlar la agresividad de la detección de versiones de Nmap. Nmap utiliza una escala del 0 al 9 para determinar cuántas sondas enviar a un servicio objetivo.
La intensidad por defecto es 7. Una intensidad mayor significa que Nmap probará más sondas, lo que aumenta las probabilidades de identificar correctamente el servicio, pero requiere más tiempo. Una intensidad menor es más rápida, pero podría fallar al identificar servicios poco comunes. Puedes ajustar esto utilizando el parámetro --version-intensity seguido de un número entre 0 y 9.
Este es otro equilibrio entre velocidad y certeza. Cuanto más incierto o inusual parezca el objetivo, más valioso resulta realizar un sondeo más profundo.
Probemos un escaneo altamente agresivo estableciendo la intensidad en 9. Esto obliga a Nmap a probar cada una de las sondas de su base de datos contra los puertos abiertos. Ejecuta el siguiente comando:
nmap -sV -p 80,8080 --version-intensity 9 localhost
La salida será similar a la del paso anterior, pero internamente, Nmap fue mucho más exhaustivo en su interrogatorio:
Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000012s latency).
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.18.0 (Ubuntu)
8080/tcp open http SimpleHTTPServer 0.6 (Python 3.10.12)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
También puedes utilizar el parámetro --version-light como acceso directo para la intensidad 2, o --version-all para la intensidad 9. Estos atajos facilitan el ajuste rápido del comportamiento del escaneo sin tener que recordar los números exactos.
Identificar la versión exacta del software
En este paso, te centrarás en identificar la versión exacta del software de un servicio específico y guardar los resultados para la documentación. Al realizar evaluaciones de seguridad, mantener un registro de las versiones exactas del software es crucial para encontrar vulnerabilidades conocidas.
En lugar de escanear todos los puertos, puedes dirigirte a un puerto específico usando el parámetro -p y guardar la salida en un archivo usando el parámetro -oN. Esto es muy útil cuando deseas aislar un servicio específico y compartir los hallazgos con tu equipo.
Ejecuta el siguiente comando para escanear solo el puerto 80, detectar su versión y guardar la salida en un archivo llamado version_scan.txt en tu directorio actual:
nmap -sV -p 80 localhost -oN version_scan.txt
Una vez completado el escaneo, puedes ver el contenido del archivo guardado utilizando el comando cat:
cat version_scan.txt
Tu salida debería mostrar la versión exacta del servidor Nginx ejecutándose en el puerto 80:
## Nmap 7.80 scan initiated ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000015s latency).
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
## Nmap done at ...
Al documentar la versión exacta, como nginx 1.18.0, ahora puedes buscar en bases de datos de vulnerabilidades para ver si esta versión específica tiene algún fallo de seguridad conocido.
Resumen
En este laboratorio, exploraste las potentes capacidades de detección de versiones de Nmap. Aprendiste a utilizar el parámetro -sV para ir más allá del simple escaneo de puertos e interrogar activamente a los servicios para descubrir sus nombres de software y versiones exactas. También aprendiste a ajustar la intensidad del escaneo utilizando --version-intensity para equilibrar la velocidad y la precisión, así como a enfocarte en puertos específicos y guardar los resultados para el análisis de vulnerabilidades. Estas habilidades son esenciales para un mapeo de red preciso y una auditoría de seguridad efectiva.



