Aprende los conceptos básicos del escaneo de redes con Nmap

CybersecurityCybersecurityBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá los fundamentos del escaneo de redes utilizando Nmap. Nmap es una herramienta poderosa y versátil ampliamente utilizada por administradores de redes y profesionales de seguridad. Es una utilidad de código abierto para la descubrimiento de redes y auditoría de seguridad, capaz de escanear redes para encontrar hosts y servicios, identificar sistemas operativos y detectar vulnerabilidades.

A través de ejercicios prácticos, entenderá cómo realizar diferentes tipos de escaneos de puertos. También aprenderá a interpretar los resultados del escaneo y obtener información sobre las técnicas de evaluación de seguridad de redes.

Comprender los puertos y configurar el entorno

Antes de comenzar a aprender sobre el escaneo de puertos, es fundamental entender qué son los puertos en el contexto de las redes de computadoras. Los puertos actúan como puntos finales de comunicación. Permiten que diferentes procesos en una computadora compartan recursos de red. Piénsalos como puertas por las cuales los datos pueden entrar y salir de una computadora. Hay un total de 65,535 puertos disponibles, y se dividen en tres rangos:

  • Puertos bien conocidos: Estos son los puertos numerados del 0 al 1023. Están reservados para servicios específicos. Por ejemplo, el puerto 80 se utiliza para HTTP (Protocolo de Transferencia de Hipertexto), que es el protocolo utilizado para transferir páginas web. El puerto 22 se utiliza para SSH (Secure Shell), que es un protocolo para acceder de forma segura a una computadora remota.
  • Puertos registrados: Estos puertos van del 1024 al 49151. Están registrados en la Autoridad de Asignación de Números de Internet (Internet Assigned Numbers Authority, IANA). Aunque están registrados, los usuarios comunes también pueden utilizarlos para sus propias aplicaciones.
  • Puertos dinámicos/privados: Estos puertos están en el rango de 49152 a 65535. Están disponibles libremente para uso temporal. Las aplicaciones pueden utilizar estos puertos cuando necesitan establecer una conexión a corto plazo.

En este paso, vamos a configurar un servicio local en nuestro entorno de laboratorio. Escanearemos este servicio más adelante. Este enfoque práctico te ayudará a entender cómo Nmap, una poderosa herramienta de escaneo de puertos, detecta los puertos abiertos y los servicios que se ejecutan en ellos.

Primero, abre una terminal. Una terminal es una interfaz basada en texto donde puedes ingresar comandos para interactuar con tu computadora. Una vez que la terminal esté abierta, debes asegurarte de estar en el directorio del proyecto. El directorio del proyecto es donde se almacenan todos los archivos relacionados con este experimento. Puedes navegar al directorio del proyecto ejecutando el siguiente comando:

cd /home/labex/project

A continuación, crearemos un simple servidor HTTP en tu máquina. Utilizaremos el módulo de servidor HTTP incorporado de Python. Este servidor escuchará en el puerto 8080. Escuchar en un puerto significa que el servidor está esperando solicitudes entrantes en ese puerto específico. Este servidor será el objetivo de nuestros escaneos de Nmap. Para iniciar el servidor, ejecuta el siguiente comando:

python3 -m http.server 8080 &

Después de ejecutar este comando, la salida debería ser similar a:

Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...

El símbolo & al final del comando es importante. Hace que el proceso se ejecute en segundo plano. Esto significa que el servidor seguirá ejecutándose y podrás continuar utilizando la terminal para ingresar otros comandos.

Para verificar que el servidor está en funcionamiento, comprobaremos los puertos en escucha. Podemos hacer esto ejecutando el siguiente comando:

ss -tuln | grep 8080

El comando ss se utiliza para mostrar estadísticas de sockets. Las opciones -tuln le indican al comando que muestre sockets TCP, UDP, en escucha y muestre direcciones numéricas. El símbolo | es una tubería (pipe), que toma la salida del comando ss y la pasa al comando grep. El comando grep luego busca la cadena 8080 en la salida.

Si el servidor está funcionando correctamente, la salida debería mostrar que el puerto 8080 está en uso:

tcp   LISTEN  0       1            0.0.0.0:8080      0.0.0.0:*

Esta salida confirma que nuestro servidor HTTP está funcionando como se esperaba y está listo para ser escaneado por Nmap.

Escaneo básico de puertos con Nmap

Ahora que nuestro servidor HTTP está funcionando, estamos listos para comenzar a realizar escaneos básicos de puertos utilizando Nmap. Pero primero, entendamos qué es el escaneo de puertos. El escaneo de puertos es una técnica fundamental en la seguridad de redes. Nos ayuda a descubrir qué puertos en un host están abiertos. Los puertos son como puertas en un edificio; cada servicio que se ejecuta en una computadora utiliza un puerto específico para comunicarse. Para los administradores de redes, saber qué puertos están abiertos asegura que sus servicios estén funcionando como se espera. Para los profesionales de seguridad, es un paso crucial para identificar posibles vulnerabilidades, ya que los puertos abiertos a veces pueden ser explotados por atacantes.

Primero, debemos asegurarnos de que Nmap esté instalado en nuestro sistema. Nmap es una poderosa herramienta de escaneo de redes que utilizaremos a lo largo de este experimento. Para verificar si está instalado, podemos ejecutar el siguiente comando en la terminal:

nmap --version

Este comando le pide al sistema que muestre la versión de Nmap instalada. Si Nmap está instalado correctamente, deberías ver una salida similar a esta:

Nmap version 7.80 ( https://nmap.org )

Realizar un escaneo básico de puertos

Ahora que hemos confirmado que Nmap está instalado, realicemos un escaneo básico para verificar si el puerto 8080 está abierto en nuestro localhost. El localhost se refiere a la computadora en la que estamos trabajando actualmente, representada por la dirección IP 127.0.0.1. Para realizar el escaneo, ejecuta el siguiente comando:

nmap -p 8080 localhost

En este comando, la bandera -p se utiliza para especificar qué puerto o puertos queremos escanear. Aquí, solo estamos interesados en el puerto 8080. Cuando ejecutes este comando, Nmap enviará paquetes de red especiales al puerto 8080 en el localhost y analizará las respuestas para determinar si el puerto está abierto.

Deberías ver una salida similar a esta:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-01 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00020s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

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

Esta salida nos proporciona información importante. Nos dice que el puerto 8080 está abierto y que Nmap ha identificado el servicio que se ejecuta en este puerto como "http-proxy".

A continuación, queremos guardar la salida de este escaneo en un archivo. Guardar los resultados del escaneo es útil porque podemos consultarlos más tarde para un análisis más profundo. Para guardar la salida, ejecuta el siguiente comando:

nmap -p 8080 localhost > /home/labex/project/basic_scan.txt

En este comando, el símbolo > se utiliza para redirigir la salida del escaneo de Nmap a un archivo llamado basic_scan.txt ubicado en el directorio /home/labex/project.

Para verificar que la salida se haya guardado correctamente, podemos usar el comando cat. El comando cat se utiliza para mostrar el contenido de un archivo. Ejecuta el siguiente comando:

cat /home/labex/project/basic_scan.txt

Deberías ver la misma salida que antes, ahora guardada en el archivo.

Comprender la salida

Echemos un vistazo más detallado a la salida de nuestro escaneo de Nmap para entender qué significa cada línea:

  • Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-01 10:00 UTC: Esta línea nos dice cuándo se inició el escaneo de Nmap. Es útil para llevar un registro de cuándo se realizó el escaneo.
  • Nmap scan report for localhost (127.0.0.1): Esta línea identifica el host objetivo del escaneo. En este caso, es el localhost con la dirección IP 127.0.0.1.
  • Host is up (0.00020s latency): Esta línea confirma que el host objetivo está en línea. El valor de latencia indica cuánto tiempo tardan los paquetes de red en viajar al host y volver. Se espera una latencia muy baja para el localhost porque es la misma computadora en la que estamos trabajando.
  • PORT STATE SERVICE: Esta es la cabecera de los resultados del escaneo de puertos. Nos dice qué información se mostrará en las líneas siguientes.
  • 8080/tcp open http-proxy: Esta línea indica que el puerto 8080 está abierto. La parte /tcp especifica el tipo de protocolo de red utilizado (TCP, que es un protocolo común para la transferencia confiable de datos). Nmap ha identificado el servicio que se ejecuta en este puerto como "http-proxy".
  • Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds: Esta línea resume el escaneo. Nos dice que Nmap escaneó una dirección IP (el localhost), encontró que el host estaba en línea y completó el escaneo en 0.05 segundos.

Técnicas avanzadas de escaneo con Nmap

Ahora que hemos completado con éxito un escaneo básico de puertos, es hora de llevar nuestras habilidades al siguiente nivel y explorar algunas técnicas de escaneo más avanzadas de Nmap. Nmap es una herramienta poderosa que ofrece numerosas opciones para recopilar información detallada sobre los servicios de red. Esta información es crucial tanto para la administración de redes como para la evaluación de seguridad. Al utilizar técnicas de escaneo avanzadas, puedes descubrir más sobre los sistemas de tu red, lo que ayuda a identificar posibles riesgos de seguridad y a administrar tu red de manera más efectiva.

Detección de la versión del servicio

Una de las características más útiles de Nmap es su capacidad para determinar qué servicio y versión se están ejecutando en un puerto abierto. Saber el servicio y su versión es esencial porque te ayuda a identificar posibles vulnerabilidades asociadas con versiones específicas de servicios. Muchas vulnerabilidades de software están vinculadas a versiones particulares, por lo que al conocer la versión exacta que se ejecuta en un puerto, puedes verificar rápidamente si hay algún problema de seguridad conocido.

Para realizar un escaneo de detección de la versión del servicio en el puerto 8080, debes ejecutar el siguiente comando:

nmap -sV -p 8080 localhost

En este comando, la bandera -sV es la clave. Le dice a Nmap que explore los puertos abiertos para determinar la información del servicio. -p 8080 especifica que queremos escanear el puerto 8080, y localhost indica que estamos escaneando nuestra propia máquina.

La salida de este comando debería ser similar a la siguiente:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-01 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00022s latency).

PORT     STATE SERVICE VERSION
8080/tcp open  http    SimpleHTTPServer 0.6 (Python 3.10.12)

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

Como puedes ver, Nmap ahora proporciona información más detallada sobre el servicio que se ejecuta en el puerto 8080. Identifica el servicio como un SimpleHTTPServer de Python, junto con su versión y la versión de Python en la que se está ejecutando.

Ahora, guardemos esta valiosa información en un archivo. Puedes hacer esto ejecutando el siguiente comando:

nmap -sV -p 8080 localhost > /home/labex/project/advanced_scan.txt

El símbolo > se utiliza para redirigir la salida del comando nmap al archivo especificado.

Para ver el contenido del archivo, puedes usar el comando cat:

cat /home/labex/project/advanced_scan.txt

Comprender la diferencia entre escaneos básicos y avanzados

Comparemos el escaneo básico y el escaneo avanzado para entender por qué los escaneos avanzados son tan útiles.

  1. Escaneo básico (nmap -p 8080 localhost): Cuando ejecutas un escaneo básico, solo te dice que el puerto 8080 está abierto y que se está ejecutando un servicio. Basándose en el número de puerto, Nmap adivina que el servicio podría ser "http-proxy". Sin embargo, esto es solo una estimación aproximada y no te da información detallada sobre el servicio real.

  2. Escaneo avanzado (nmap -sV -p 8080 localhost): Por el contrario, un escaneo avanzado proporciona información mucho más detallada. Te dice el nombre exacto del servicio (SimpleHTTPServer), su versión (0.6) e incluso el lenguaje de programación y su versión (Python 3.10.12) en el que se está ejecutando el servicio.

Esta información adicional es valiosa por varias razones:

  • Identificar servicios desactualizados: Al conocer la versión exacta de un servicio, puedes verificar fácilmente si es una versión desactualizada que podría tener vulnerabilidades conocidas. Si es así, puedes tomar medidas para actualizar el servicio y proteger tu red.
  • Comprender tu red: Puedes obtener una imagen clara de exactamente qué software se está ejecutando en tu red. Esto ayuda en la gestión de la red y la asignación de recursos.
  • Planificar medidas de seguridad: Puedes planificar medidas de seguridad específicas para los servicios que se ejecutan en tus sistemas. Por ejemplo, si sabes que un servicio en particular tiene una vulnerabilidad conocida, puedes implementar controles de seguridad específicos.

Otras opciones útiles de Nmap

Nmap ofrece muchas otras opciones de escaneo que se pueden combinar para realizar diferentes tipos de escaneos. Aquí hay algunas de las opciones más comúnmente utilizadas:

  • -sS: Este es un escaneo TCP SYN, también conocido como escaneo furtivo. Es una forma rápida y discreta de escanear puertos porque no completa la conexión TCP completa, lo que lo hace más difícil de detectar.
  • -O: Esta opción habilita la detección del sistema operativo. Permite a Nmap intentar determinar el sistema operativo que se está ejecutando en la máquina objetivo.
  • -A: Un escaneo agresivo que combina varias características, incluyendo detección de sistema operativo, detección de versión, escaneo de scripts y traceroute. Proporciona una visión integral del sistema objetivo.
  • -T<0-5>: Esta opción se utiliza para establecer la plantilla de tiempo. Un número más alto significa un escaneo más rápido, pero también puede aumentar la posibilidad de ser detectado.
  • -Pn: Esta opción trata a todos los hosts como en línea, omitiendo la fase de descubrimiento de hosts. Es útil cuando sabes que el objetivo está en línea y quieres ahorrar tiempo.

Por ejemplo, si quieres realizar un escaneo rápido de todos los puertos bien conocidos en tu máquina local, puedes usar el siguiente comando:

nmap -F localhost

La opción -F (rápido) le dice a Nmap que escanee menos puertos que el escaneo predeterminado. Esto es útil cuando quieres obtener una visión general rápida de los puertos abiertos en un sistema.

Nota: En una evaluación real de seguridad de red, es importante tener la autorización adecuada antes de escanear cualquier sistema. El escaneo no autorizado puede ser ilegal en muchas jurisdicciones.

Interpretación y análisis de los resultados del escaneo

En este paso, aprenderemos cómo entender y analizar los resultados de nuestros escaneos de Nmap. Cuando se trata de seguridad de redes, ser capaz de leer la salida del escaneo es esencial. Te ayuda a tomar decisiones informadas sobre la seguridad de tu red. Por ejemplo, puedes identificar posibles vulnerabilidades o puntos de acceso no autorizados basándote en los resultados del escaneo.

Comparación de diferentes tipos de escaneos

Realicemos algunos tipos más de escaneos para ver cómo difieren sus salidas. Primero, realizaremos un escaneo completo. Este tipo de escaneo incluye todas las opciones comunes, lo que nos da una vista detallada del objetivo.

nmap -A -p 8080 localhost > /home/labex/project/comprehensive_scan.txt

En este comando, la bandera -A es muy importante. Habilita opciones de escaneo agresivo. Estas opciones incluyen detectar el sistema operativo del objetivo, averiguar la versión de los servicios en ejecución, escanear scripts disponibles y realizar un traceroute. Al usar esta bandera, podemos recopilar mucha información útil sobre el objetivo.

Ahora, echemos un vistazo a los resultados de este escaneo completo.

cat /home/labex/project/comprehensive_scan.txt

La salida será bastante detallada. Contendrá información sobre el servicio que se ejecuta en el puerto 8080, cualquier posible script que se pueda ejecutar contra el servicio y otros detalles relevantes. Esta información detallada puede ayudarnos a entender mejor la situación de seguridad del objetivo.

Comprensión de los estados de los puertos

Nmap informa varios posibles estados para los puertos. Cada estado nos dice algo diferente sobre el estado del puerto.

  • open: Esto significa que una aplicación está aceptando activamente conexiones TCP o paquetes UDP en este puerto. Es como una puerta abierta y lista para recibir visitantes.
  • closed: El puerto es accesible, pero no hay ninguna aplicación escuchando en él. Es como una puerta desbloqueada pero sin nadie dentro para responder.
  • filtered: Nmap no puede determinar si el puerto está abierto porque el filtrado de paquetes impide que sus sondas lleguen al puerto. Es como si hubiera un guardia de seguridad bloqueando la vista de Nmap a la puerta.
  • unfiltered: El puerto es accesible, pero Nmap no puede decir si está abierto o cerrado. Es como mirar una puerta y no poder decir si hay alguien dentro.
  • open|filtered: Nmap no puede determinar si el puerto está abierto o filtrado. Es un estado incierto en el que no estamos seguros si la puerta está abierta o bloqueada.
  • closed|filtered: Nmap no puede determinar si el puerto está cerrado o filtrado. Similar al estado anterior, no estamos seguros si la puerta está cerrada o bloqueada.

Veamos cómo aparecen estos estados en nuestros resultados de escaneo al escanear un rango de puertos.

nmap -p 8080-8085 localhost > /home/labex/project/port_states.txt

Después de que se complete el escaneo, podemos ver los resultados.

cat /home/labex/project/port_states.txt

Deberías ver que el puerto 8080 se informa como abierto, mientras que los otros puertos en el rango probablemente se informen como cerrados. Esto nos da una idea de qué puertos se están utilizando activamente y cuáles no.

Análisis práctico de los resultados

Ahora, creemos un informe resumido extrayendo la información clave de nuestros resultados de escaneo. Usaremos el comando grep para filtrar los puertos abiertos. Los puertos abiertos son muy importantes para la evaluación de seguridad porque son posibles puntos de entrada para los atacantes.

grep "open" /home/labex/project/comprehensive_scan.txt > /home/labex/project/open_ports.txt

Después de filtrar, podemos ver los resultados.

cat /home/labex/project/open_ports.txt

Esta salida filtrada nos permite centrar nuestra atención más fácilmente en los puertos abiertos. En lugar de mirar el informe de escaneo detallado completo, podemos ver rápidamente qué puertos están abiertos y comenzar a evaluar sus riesgos de seguridad.

Implicaciones de seguridad

Comprender las implicaciones de seguridad de los resultados de tu escaneo es crucial. Aquí hay algunos puntos clave a tener en cuenta.

  1. Puertos abiertos innecesarios: Cualquier puerto abierto es un posible punto de entrada para los atacantes. Si un servicio no es necesario, debe deshabilitarse. Por ejemplo, si tienes un puerto abierto para un servicio que ya no utilizas, un atacante podría utilizar ese puerto para acceder a tu sistema.
  2. Servicios desactualizados: Las versiones antiguas de servicios pueden tener vulnerabilidades conocidas que los atacantes pueden explotar. Es importante mantener tus servicios actualizados para evitar estos riesgos.
  3. Servicios mal configurados: Incluso los servicios actualizados pueden ser vulnerables si están mal configurados. Un pequeño error en la configuración puede exponer tu sistema a ataques.

En nuestro entorno de laboratorio, abrimos intencionalmente el puerto 8080 para el servidor HTTP. Pero en un entorno de producción del mundo real, necesitarías evaluar cuidadosamente si este servicio es necesario y si está adecuadamente protegido.

Detener el servidor HTTP

Antes de terminar este paso, limpiemos deteniendo el servidor HTTP que iniciamos anteriormente. Primero, necesitamos encontrar su ID de proceso.

ps aux | grep "python3 -m http.server"

Cuando ejecutes este comando, busca la línea que muestra nuestro proceso de servidor HTTP. La segunda columna en la salida contiene el ID de proceso (PID). Una vez que encuentres el PID, puedes usarlo para detener el servidor.

kill <PID>

Reemplaza <PID> con el ID de proceso real de la salida del comando anterior.

Como alternativa, puedes usar el siguiente comando para encontrar y matar el proceso en un solo paso.

pkill -f "python3 -m http.server"

Después de detener el servidor, necesitamos verificar que ya no esté en ejecución.

ss -tuln | grep 8080

Si no hay salida, significa que el servidor se ha detenido correctamente.

Resumen

En este laboratorio, has aprendido los fundamentos del escaneo de redes utilizando Nmap, una herramienta poderosa y ampliamente utilizada en la industria de la ciberseguridad. Primero, has comprendido el concepto de puertos y sus funciones en las redes de computadoras. Luego, has configurado un servidor HTTP local para practicar el escaneo de un servicio del mundo real.

Has realizado varios escaneos con Nmap, desde escaneos básicos de puertos hasta detección avanzada de la versión del servicio. Has aprendido a interpretar los resultados del escaneo, comprendiendo los estados de los puertos y sus implicaciones de seguridad. También has practicado el filtrado de resultados para evaluaciones de seguridad. Estas habilidades son cruciales para los administradores de redes y profesionales de seguridad para identificar puertos abiertos, detectar vulnerabilidades, tomar decisiones informadas sobre seguridad y documentar las configuraciones de red. Al dominar estas técnicas, has dado un paso significativo hacia la competencia en la evaluación y administración de la seguridad de redes. Siempre obtén la autorización adecuada antes de escanear sistemas en escenarios del mundo real, ya que el escaneo no autorizado puede ser ilegal.