Aprende los Fundamentos de Nmap y las Técnicas de Escaneo

NmapBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás los fundamentos de Nmap, una poderosa herramienta de escaneo de redes comúnmente utilizada en ciberseguridad para la descubrimiento de redes y auditoría de seguridad. Explorarás cómo utilizar Nmap para escanear redes, descubrir puertos abiertos e identificar servicios en ejecución.

Al dominar estas técnicas, adquirirás habilidades esenciales para la administración de redes y la evaluación de seguridad. Esta experiencia práctica ofrecerá conocimientos prácticos aplicables en escenarios del mundo real, ayudándote a comprender la infraestructura de red y las consideraciones de seguridad.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 89%. Ha recibido una tasa de reseñas positivas del 95% por parte de los estudiantes.

Comprender los conceptos básicos de Nmap

Nmap, abreviatura de Network Mapper, es una herramienta de código abierto que desempeña un papel crucial en el descubrimiento de redes y la auditoría de seguridad. En el mundo de la ciberseguridad, es como un detective que utiliza paquetes IP sin procesar para recopilar información. Con Nmap, puedes averiguar qué hosts están presentes en una red, qué servicios están proporcionando esos hosts, el sistema operativo que están ejecutando y otras características importantes.

Comencemos nuestro viaje con los conceptos básicos de Nmap. Primero, necesitamos abrir una terminal. La terminal es como un centro de comandos donde puedes escribir comandos para interactuar con tu sistema. Puedes abrirla haciendo clic en el icono de la terminal en la barra de tareas o presionando Ctrl+Alt+T.

Una vez abierta la terminal, debemos asegurarnos de estar en el directorio del proyecto. El directorio del proyecto es una carpeta específica donde se llevarán a cabo todos nuestros archivos relacionados y operaciones para este experimento. Para navegar al directorio del proyecto, utiliza el siguiente comando:

cd /home/labex/project

Ahora que estamos en el lugar correcto, veamos la versión de Nmap instalada en nuestro sistema. Saber la versión es importante porque diferentes versiones pueden tener diferentes características y comportamientos. Para verificar la versión, ejecuta este comando:

nmap --version

Después de ejecutar el comando, deberías ver una salida similar a esta. Esta salida muestra la versión de Nmap instalada en tu sistema, junto con alguna otra información sobre las bibliotecas con las que se compiló y los motores nsock disponibles.

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Ahora, realicemos nuestro primer escaneo básico de Nmap. Escanearemos nuestro localhost, que es como un auto - chequeo de tu propio sistema. Este escaneo nos ayudará a ver qué puertos están abiertos en nuestro sistema. Los puertos son como puertas en un edificio; diferentes servicios utilizan diferentes puertos para comunicarse. Ejecuta el siguiente comando:

nmap localhost

Este comando escanea los 1000 puertos más comunes en tu localhost. Después de ejecutar el comando, deberías ver una salida similar a esta. La salida nos dice qué puertos están abiertos en nuestro sistema. Por ejemplo, el puerto 22 se utiliza típicamente para SSH (Secure Shell), que es un protocolo para acceder de forma segura a una computadora remota, y el puerto 80 se utiliza para HTTP (servicios web). Ten en cuenta que tu salida puede mostrar diferentes puertos abiertos dependiendo de los servicios que se estén ejecutando en tu sistema.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:45 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

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

Para nuestro siguiente ejercicio, necesitamos un servicio para escanear. Crearemos un servicio simple utilizando netcat, que es una utilidad de red versátil. Este servicio escuchará en el puerto 8888. Ejecuta el siguiente comando:

nc -lk 8888 &

Desglosemos este comando. La opción -l le dice a netcat que escuche conexiones entrantes. La opción -k hace que netcat siga escuchando incluso después de que un cliente se desconecte. El & al final ejecuta el comando en segundo plano, para que puedas continuar usando la terminal para otras tareas.

Para verificar que el servicio está en funcionamiento, podemos utilizar el siguiente comando:

netstat -tuln | grep 8888

Este comando lista todas las conexiones de red y filtra la salida para mostrar solo la información relacionada con el puerto 8888. Si el servicio está en funcionamiento, deberías ver una salida similar a esta:

tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN

Esta salida confirma que nuestro servicio simulado está en funcionamiento y escuchando en el puerto 8888.

Explorando técnicas de escaneo de puertos con Nmap

Nmap es una herramienta poderosa en el campo de la ciberseguridad, especialmente cuando se trata de escaneo de puertos. El escaneo de puertos es un método utilizado para descubrir qué puertos en un sistema objetivo están abiertos y qué servicios pueden estar ejecutándose en esos puertos. Existen diferentes tipos de técnicas de escaneo de puertos, cada una con sus propias ventajas únicas y casos de uso específicos. En este paso, exploraremos algunas de estas técnicas escaneando nuestro servicio simulado.

Primero, realicemos un escaneo TCP connect básico específicamente dirigido a nuestro puerto 8888. Un escaneo TCP connect es una forma sencilla de comprobar si un puerto está abierto. Funciona intentando establecer una conexión TCP completa con el puerto objetivo. Si la conexión tiene éxito, se considera que el puerto está abierto.

nmap -p 8888 localhost

En este comando, la opción -p se utiliza para especificar qué puerto(s) queremos escanear. Aquí, le estamos diciendo a Nmap que escanee el puerto 8888 en el localhost, que se refiere a la máquina actual. Después de ejecutar este comando, deberías ver una salida similar a esta:

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

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

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

Esta salida confirma que nuestro puerto 8888 está abierto. Nmap también ha identificado el nombre del servicio asociado con este puerto según su base de datos interna.

Ahora, probemos un escaneo SYN. Un escaneo SYN es un enfoque más sigiloso en comparación con el escaneo TCP connect. No completa la conexión TCP completa, lo que lo hace menos probable que sea detectado por los sistemas de detección de intrusiones.

sudo nmap -sS -p 8888 localhost

La opción -sS especifica que queremos realizar un escaneo SYN. Este tipo de escaneo requiere privilegios de root porque implica enviar paquetes de red sin procesar, que es una operación de bajo nivel. Por eso usamos el comando sudo. La salida debe ser similar al escaneo anterior:

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

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

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

A continuación, probemos un escaneo UDP. UDP (User Datagram Protocol) es un tipo diferente de protocolo de red en comparación con TCP. Mientras que TCP proporciona un servicio confiable y orientado a la conexión, UDP es un protocolo sin conexión. Usaremos un escaneo UDP para comprobar si el puerto 8888 está abierto para el tráfico UDP.

sudo nmap -sU -p 8888 localhost

La opción -sU especifica un escaneo UDP. Los escaneos UDP pueden ser más lentos que los escaneos TCP porque UDP no tiene el mismo mecanismo de reconocimiento incorporado que TCP, por lo que Nmap tiene que esperar más tiempo para determinar si un puerto está abierto o cerrado. La salida podría verse así:

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

PORT     STATE  SERVICE
8888/udp closed sun-answerbook

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

Observa que el puerto UDP se muestra como cerrado. Esto es lo esperado porque nuestro servicio netcat está escuchando conexiones TCP, no UDP.

Finalmente, realicemos un escaneo de detección de versión de servicio. Este tipo de escaneo nos ayuda a identificar qué servicio específico y su versión están ejecutándose en un puerto en particular.

nmap -sV -p 8888 localhost

La opción -sV le dice a Nmap que realice la detección de servicio/versión. Intenta enviar sondas específicas a los puertos abiertos y analizar las respuestas para determinar el servicio y su versión. La salida podría verse así:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE VERSION
8888/tcp open  http    Apache httpd
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

La detección de versión puede no identificar con precisión nuestro servicio netcat como una aplicación genuina, pero demuestra cómo Nmap intenta determinar qué está ejecutándose en los puertos abiertos.

Guardemos nuestros hallazgos en un archivo para futuras referencias. Guardar los resultados del escaneo nos permite revisarlos más tarde, compartirlos con otros o utilizarlos para un análisis más profundo.

nmap -p 8888 localhost > /home/labex/project/nmap_scan_results.txt

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

Puedes ver los resultados guardados con:

cat /home/labex/project/nmap_scan_results.txt

El comando cat se utiliza para mostrar el contenido de un archivo.

Con esto concluimos nuestra exploración de diferentes técnicas de escaneo de puertos de Nmap.

Comprender las plantillas de temporización y rendimiento

Cuando se realizan escaneos con Nmap, la temporización juega un papel crucial. Si los escaneos son demasiado agresivos, pueden ser detectados por los sistemas de detección de intrusiones (IDS, por sus siglas en inglés). Un IDS es una herramienta de seguridad que monitorea el tráfico de red en busca de actividades sospechosas. Los escaneos agresivos también pueden abrumar el sistema objetivo, lo que puede causar que funcione mal o deje de responder. Por otro lado, si los escaneos son demasiado lentos, pueden llevar un tiempo impracticable para completarse, lo cual no es eficiente, especialmente cuando se tiene una gran cantidad de objetivos para escanear.

Nmap ofrece plantillas de temporización que le permiten controlar la velocidad y la agresividad de sus escaneos. Estas plantillas van desde T0 (paranoico) hasta T5 (locura). Cuanto mayor sea el número, más rápido y agresivo será el escaneo.

A continuación, se presenta un desglose detallado de las plantillas de temporización:

  • -T0 (Paranoico): Esta es una plantilla de temporización extremadamente lenta. Se utiliza principalmente cuando se desea eludir los sistemas de detección de intrusiones. Al enviar solicitudes muy lentamente, es menos probable que se active alguna alarma en el IDS.
  • -T1 (Sigiloso): Similar a la plantilla paranoica, también es lenta y se utiliza para eludir los IDS. Envía solicitudes a un ritmo ligeramente más rápido que la plantilla paranoica, pero aún lo suficientemente lento para evitar la detección.
  • -T2 (Educado): Esta plantilla ralentiza el escaneo para utilizar menos ancho de banda y recursos en la máquina objetivo. Es una buena opción cuando no se desea causar ninguna interrupción en el sistema objetivo.
  • -T3 (Normal): Esta es la plantilla de temporización predeterminada de Nmap. Encuentra un equilibrio entre velocidad y confiabilidad, adecuada para la mayoría de los escaneos de propósito general.
  • -T4 (Agresivo): Esta plantilla acelera el escaneo, asumiendo que se está trabajando en una red razonablemente rápida y confiable. Envía solicitudes más rápidamente, lo que puede reducir el tiempo total de escaneo.
  • -T5 (Locura): Esta es una plantilla de temporización muy agresiva. Asume que se tiene una red extraordinariamente rápida. Envía solicitudes a una tasa muy alta, lo que puede reducir significativamente el tiempo de escaneo, pero también aumenta el riesgo de ser detectado.

Comencemos probando un escaneo con la plantilla de temporización predeterminada (T3). Utilizaremos el comando time para medir cuánto tiempo tarda el escaneo. El comando time es una herramienta útil que muestra cuánto tiempo real, tiempo de usuario y tiempo de sistema tarda un comando en ejecutarse.

time nmap -T3 -p 8888 localhost

Después de ejecutar este comando, debería ver una salida similar a la siguiente:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

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

real    0m0.115s
user    0m0.033s
sys     0m0.015s

Ahora, probemos una plantilla de temporización más agresiva (T4). Utilizaremos el mismo comando time para medir el tiempo de escaneo.

time nmap -T4 -p 8888 localhost

Puede notar que el escaneo se completa ligeramente más rápido. Aquí hay un ejemplo de cómo podría verse la salida:

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

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

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

real    0m0.105s
user    0m0.032s
sys     0m0.014s

Para ver una diferencia más notable en el tiempo de escaneo, probemos escanear todos los puertos con las plantillas T3 y T4.

time nmap -T3 -p- --max-retries 0 localhost | grep "open" > /dev/null

La opción -p- le dice a Nmap que escanee todos los 65535 puertos en el sistema objetivo. La opción --max - retries 0 reduce el número de reintentos para cada escaneo de puerto, lo que ayuda a acelerar el escaneo. Estamos redirigiendo la salida a grep para filtrar solo las líneas que contengan la palabra "open", y luego redirigiendo el resultado a /dev/null para que podamos centrarnos en la temporización del escaneo.

time nmap -T4 -p- --max-retries 0 localhost | grep "open" > /dev/null

Debería notar una diferencia más significativa en el tiempo de escaneo con estos escaneos exhaustivos.

Ahora, como se solicitó en el laboratorio original, guardemos un resultado de escaneo sigiloso en un archivo. Utilizaremos la plantilla de temporización T4 para equilibrar velocidad y confiabilidad.

nmap -T4 -p 8888 localhost > /home/labex/project/nmap_stealthy_scan.txt

Puede ver los resultados guardados utilizando el comando cat:

cat /home/labex/project/nmap_stealthy_scan.txt

La plantilla de temporización T4 es una buena opción para la mayoría de los escenarios, ya que equilibra velocidad y confiabilidad. Al realizar evaluaciones de seguridad, es importante ajustar la plantilla de temporización según sus requisitos y restricciones específicos, como la velocidad de la red, la sensibilidad del sistema objetivo y el riesgo de detección.

Formatos de salida y análisis de resultados de escaneo

Nmap ofrece múltiples formatos de salida, que son extremadamente útiles para diversos fines. Por ejemplo, se pueden utilizar para documentación, para registrar los resultados de sus escaneos, para un análisis más profundo o para integrarse con otras herramientas de seguridad. En este paso, echaremos un vistazo más detallado a estos formatos de salida y aprenderemos cómo analizar los resultados de los escaneos de manera efectiva.

Nmap admite los siguientes formatos de salida principales:

  1. Salida normal (predeterminada): Este es un formato de texto legible por humanos. Presenta los resultados del escaneo de una manera que es fácil de entender a simple vista, similar a un informe.
  2. Salida XML (-oX): XML es un formato estructurado. Organiza los datos de manera jerárquica y ordenada, lo que es muy conveniente para que los programas los analicen y procesen.
  3. Salida grepable (-oG): Este formato está diseñado para ser fácilmente analizado utilizando herramientas como grep y otras utilidades de procesamiento de texto. Tiene una estructura específica que facilita la extracción de información relevante.
  4. Todos los formatos (-oA): Cuando utiliza esta opción, Nmap guardará los resultados del escaneo en formatos normal, XML y grepable simultáneamente. Esto es útil cuando desea tener todos los tipos de salidas para diferentes necesidades.

Probemos cada uno de estos formatos uno por uno:

Primero, guardaremos un escaneo en el formato normal. El siguiente comando escaneará el puerto 8888 en el localhost y guardará los resultados en un archivo de texto:

nmap -p 8888 localhost -oN /home/labex/project/normal_output.txt

Ahora, guardemos un escaneo en el formato XML. Este comando realizará el mismo escaneo en el puerto 8888 del localhost y guardará los resultados en un archivo XML:

nmap -p 8888 localhost -oX /home/labex/project/xml_output.xml

A continuación, guardaremos un escaneo en el formato grepable. El siguiente comando escaneará el puerto 8888 en el localhost y guardará los resultados en un archivo que puede ser fácilmente analizado por grep:

nmap -p 8888 localhost -oG /home/labex/project/grep_output.txt

Finalmente, guardemos un escaneo en todos los formatos. El siguiente comando creará tres archivos con diferentes formatos para el mismo escaneo en el puerto 8888 del localhost:

nmap -p 8888 localhost -oA /home/labex/project/all_formats

Esto creará tres archivos: all_formats.nmap, all_formats.xml y all_formats.gnmap.

Ahora, examinemos cada uno de estos archivos para entender las diferencias en sus formatos.

Para ver la salida normal, usamos el comando cat:

cat /home/labex/project/normal_output.txt

Debería ver la salida estándar de Nmap, que es fácil de leer para los humanos. Aquí hay un ejemplo de cómo podría verse:

## Nmap 7.80 scan initiated Mon Oct 30 16:45:00 2023 as: nmap -p 8888 -oN /home/labex/project/normal_output.txt localhost
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

## Nmap done at Mon Oct 30 16:45:00 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds

Para ver la salida XML, también usamos el comando cat:

cat /home/labex/project/xml_output.xml

Este formato está estructurado para facilitar el análisis por parte de los programas. Aquí hay un ejemplo de la salida XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<nmaprun scanner="nmap" args="nmap -p 8888 -oX /home/labex/project/xml_output.xml localhost" start="1698684307" startstr="Mon Oct 30 16:45:07 2023" version="7.80" xmloutputversion="1.04">
<scaninfo type="connect" protocol="tcp" numservices="1" services="8888"/>
<verbose level="0"/>
<debugging level="0"/>
<host starttime="1698684307" endtime="1698684307"><status state="up" reason="conn-refused" reason_ttl="0"/>
<address addr="127.0.0.1" addrtype="ipv4"/>
<hostnames>
<hostname name="localhost" type="user"/>
<hostname name="localhost" type="PTR"/>
</hostnames>
<ports><port protocol="tcp" portid="8888"><state state="open" reason="syn-ack" reason_ttl="0"/><service name="sun-answerbook" method="table" conf="3"/></port>
</ports>
<times srtt="100" rttvar="5000" to="100000"/>
</host>
<runstats><finished time="1698684307" timestr="Mon Oct 30 16:45:07 2023" elapsed="0.04" summary="Nmap done at Mon Oct 30 16:45:07 2023; 1 IP address (1 host up) scanned in 0.04 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
</runstats>
</nmaprun>

Para ver la salida grepable, usamos el comando cat nuevamente:

cat /home/labex/project/grep_output.txt

Este formato está diseñado para ser fácilmente analizado con herramientas como grep. Aquí hay un ejemplo de la salida grepable:

## Nmap 7.80 scan initiated Mon Oct 30 16:45:15 2023 as: nmap -p 8888 -oG /home/labex/project/grep_output.txt localhost
Host: 127.0.0.1 (localhost) Status: Up
Host: 127.0.0.1 (localhost) Ports: 8888/open/tcp//sun-answerbook///
## Nmap done at Mon Oct 30 16:45:15 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds

Practiquemos el uso de grep para extraer información específica de la salida grepable. El siguiente comando mostrará todas las líneas con puertos abiertos:

grep "open" /home/labex/project/grep_output.txt

La salida debería ser:

Host: 127.0.0.1 (localhost) Ports: 8888/open/tcp//sun-answerbook///

También puede utilizar filtros más complejos. El siguiente comando extrae solo el número de puerto de los puertos abiertos:

grep -E "Ports:.*open" /home/labex/project/grep_output.txt | cut -d':' -f3 | cut -d'/' -f1

La salida será:

 8888

Estos diferentes formatos de salida le permiten integrar los resultados de los escaneos de Nmap con otras herramientas y flujos de trabajo, lo que lo convierte en una adición versátil a su conjunto de herramientas de seguridad.

Resumen

En este laboratorio, has aprendido los fundamentos de Nmap, una poderosa herramienta de escaneo de redes y evaluación de seguridad. Comenzaste dominando el uso básico de Nmap, como escanear hosts e identificar puertos abiertos. Posteriormente, exploraste diversas técnicas de escaneo de puertos, como los escaneos TCP connect, los escaneos SYN y los escaneos UDP, cada uno con ventajas y casos de uso únicos.

También practicaste el uso de plantillas de temporización para equilibrar la velocidad y la sigilo del escaneo. Finalmente, aprendiste a guardar los resultados de los escaneos en diferentes formatos y analizarlos con herramientas de procesamiento de texto. Estas habilidades forman la base para la descubrimiento de redes, la evaluación de seguridad y la identificación de vulnerabilidades. Nmap es crucial para administradores de redes, profesionales de seguridad y hackers éticos. Recuerda utilizar estas herramientas de manera responsable y ética, y siempre obtén la autorización adecuada antes de escanear redes o sistemas desconocidos.