Escanear puertos en Masscan

NmapNmapBeginner
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ás cómo utilizar Masscan, un escáner de puertos TCP de alto rendimiento, para una eficiente recopilación de información de red en ciberseguridad. Practicarás la instalación de Masscan desde el código fuente, la configuración de parámetros de escaneo y el análisis de resultados en rangos de redes privadas.

Los ejercicios te guiarán a través de la definición de objetivos, la ejecución del escaneo y la interpretación de los resultados. Al completar este laboratorio, adquirirás experiencia práctica con las capacidades de escaneo rápido de Masscan mientras mantienes prácticas éticas de escaneo.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/common_ports("Common Ports Scanning") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/common_ports -.-> lab-549946{{"Escanear puertos en Masscan"}} nmap/save_output -.-> lab-549946{{"Escanear puertos en Masscan"}} nmap/port_scanning -.-> lab-549946{{"Escanear puertos en Masscan"}} nmap/target_specification -.-> lab-549946{{"Escanear puertos en Masscan"}} nmap/service_detection -.-> lab-549946{{"Escanear puertos en Masscan"}} end

Instalar Masscan

En este paso, instalarás Masscan, un escáner de puertos TCP de alto rendimiento, en tu entorno de máquina virtual (VM) de LabEx. Masscan es conocido por su capacidad para escanear toda la internet en minutos gracias a la utilización de transmisión asíncrona y su propia pila TCP/IP personalizada. A diferencia de los escáneres tradicionales, Masscan no depende de la pila de red del sistema operativo, lo que le permite alcanzar velocidades de escaneo sorprendentes.

Antes de continuar, asegúrate de estar en el directorio de trabajo correcto. El directorio ~/project es donde organizaremos todos los archivos relacionados con el escaneo:

cd ~/project

Masscan requiere que se instalen varias dependencias previamente. Estas incluyen herramientas de desarrollo y bibliotecas necesarias para compilar el código fuente. El siguiente comando actualizará la lista de paquetes e instalará los componentes necesarios:

sudo apt-get update && sudo apt-get install -y git make gcc libpcap-dev

Ahora descargaremos el código fuente de Masscan desde su repositorio oficial de GitHub. Clonar el repositorio nos da la última versión del código:

git clone https://github.com/robertdavidgraham/masscan

Después de la descarga, necesitamos compilar el código fuente para crear el programa ejecutable. El comando make lee el archivo Makefile en el directorio y construye el software:

cd masscan && make

Una vez que la compilación se complete con éxito, podemos verificar que todo funcione comprobando la versión instalada. Esta es una buena práctica para confirmar que la instalación fue exitosa:

./bin/masscan --version

Deberías ver una salida similar a:

Masscan version 1.3.2

Finalmente, para que Masscan sea fácilmente accesible desde cualquier directorio, lo copiaremos en /usr/local/bin/, que normalmente está incluido en la variable de entorno PATH del sistema:

sudo cp bin/masscan /usr/local/bin/

Con esto se completa el proceso de instalación. Ahora tienes Masscan listo para usar en el escaneo de puertos de alta velocidad en los siguientes pasos de este laboratorio.

Definir un rango de objetivos

En este paso, definirás un rango de direcciones IP objetivo para tu operación de escaneo de puertos. Comprender los rangos de objetivos es fundamental en el escaneo de redes, ya que le indica al escáner qué direcciones de red debe examinar. Masscan requiere rangos de objetivos específicos para escanear de manera eficiente, ya que está diseñado para operaciones de alta velocidad en redes extensas.

Con fines de aprendizaje, utilizaremos rangos de direcciones IP privadas definidos en el RFC 1918. Estas son direcciones seguras y no enrutables que se utilizan comúnmente en redes locales, por lo que evitamos escanear accidentalmente hosts reales de Internet. Los tres principales rangos privados que utilizaremos son:

  1. 10.0.0.0/8 - El bloque privado más grande, a menudo utilizado por corporaciones.
  2. 172.16.0.0/12 - Rango de tamaño medio que se ve con frecuencia en redes empresariales.
  3. 192.168.0.0/16 - El rango más común para redes domésticas y de pequeñas oficinas.

Primero, naveguemos hasta nuestro directorio de trabajo donde almacenaremos nuestra lista de objetivos:

cd ~/project

Ahora crearemos un archivo de texto para almacenar nuestros rangos de objetivos. Estamos utilizando nano como editor de texto porque es sencillo y está disponible en la mayoría de los entornos Linux:

nano targets.txt

En el editor, agrega estos tres rangos privados estándar (presiona Ctrl+O para guardar los cambios y luego Ctrl+X para salir de nano):

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

La notación CIDR (/8, /12, /16) especifica cuántas direcciones IP hay en cada rango:

  • /8 significa que los primeros 8 bits están fijos (10.x.x.x).
  • /12 fija los primeros 12 bits (de 172.16.x.x a 172.31.x.x).
  • /16 fija los primeros 16 bits (192.168.x.x).

Verifiquemos que nuestro archivo de objetivos se haya creado correctamente mostrando su contenido:

cat targets.txt

Deberías ver los tres rangos CIDR listados exactamente como los ingresaste. Este archivo servirá como entrada para Masscan en los siguientes pasos, indicándole qué redes escanear.

Realizar un escaneo de puertos de alta velocidad

En este paso, ejecutarás un escaneo de puertos de alta velocidad utilizando Masscan en los rangos de objetivos definidos en el paso anterior. El escaneo de puertos es una técnica fundamental de reconocimiento de redes que ayuda a identificar los servicios accesibles en los sistemas objetivos. La arquitectura única de Masscan le permite escanear miles de puertos por segundo mientras mantiene la precisión, lo que lo hace ideal para escanear rápidamente redes extensas.

Primero, asegúrate de estar en el directorio de trabajo correcto donde se encuentra tu archivo de objetivos. Esto garantiza que Masscan pueda acceder a tu lista de objetivos predefinida:

cd ~/project

Ahora ejecutemos el escaneo real. El siguiente comando de Masscan escaneará los puertos más comunes (del 1 al 1000) en tus rangos de objetivos. Estos puertos suelen incluir servicios bien conocidos como servidores web (80, 443), correo electrónico (25, 110) y otros protocolos de uso frecuente:

sudo masscan -p1-1000 -iL targets.txt --rate 1000 -oG scan_results.gnmap

Desglosemos cada parte de este comando para entender lo que hace:

  • -p1-1000: Especifica el rango de puertos a escanear (puertos del 1 al 1000).
  • -iL targets.txt: Lee las direcciones IP de destino de tu archivo de lista predefinido.
  • --rate 1000: Controla la velocidad de escaneo (1000 paquetes por segundo es seguro para entornos de aprendizaje).
  • -oG scan_results.gnmap: Guarda los resultados en un formato grepable para facilitar el análisis.

Durante el escaneo, verás una salida en tiempo real que muestra el progreso. Esto te ayuda a monitorear el estado del escaneo y el tiempo estimado de finalización:

Starting masscan 1.3.2 (http://bit.ly/14GZzcT) at 2023-01-01 00:00:00 GMT
Initiating SYN Stealth Scan
Scanning 3 hosts [1000 ports/host]

Después de la finalización (generalmente en menos de 1 minuto para redes pequeñas), puedes ver los resultados de tu escaneo. El formato grepable facilita la identificación de los puertos y servicios abiertos:

cat scan_results.gnmap

La salida mostrará los puertos abiertos descubiertos en este formato claro, donde cada línea representa un host y sus puertos abiertos:

Host: 10.0.0.1 ()   Ports: 80/open/tcp//http///, 443/open/tcp//https///

Revisar puertos abiertos

En este paso, analizarás los resultados del escaneo de puertos realizado en el paso anterior para identificar los puertos abiertos y sus servicios asociados. Los puertos abiertos son como puertas en una red: cuando están abiertos, permiten la comunicación entre dispositivos. Comprender qué puertos están abiertos es esencial para la seguridad de la red, ya que cada puerto abierto podría ser potencialmente un punto de entrada tanto para tráfico legítimo como para amenazas de seguridad.

Primero, naveguemos al directorio donde se almacenan los resultados de tu escaneo. Esto garantiza que estemos trabajando con los archivos de datos correctos:

cd ~/project

Para ver los resultados completos del escaneo en su formato original, utilizaremos el comando cat. Esto muestra todo lo que registró Masscan, incluyendo puertos cerrados y metadatos del escaneo:

cat scan_results.gnmap

Dado que estamos principalmente interesados en los puertos abiertos, podemos filtrar los resultados utilizando grep. Este comando mostrará solo las líneas que contengan la palabra "open", lo que facilita detectar los servicios activos:

grep "open" scan_results.gnmap

Para una mejor organización, podemos mostrar los resultados con las direcciones IP claramente asociadas a sus puertos abiertos. El comando awk ayuda a reorganizar la salida para mostrar qué puertos están abiertos en qué hosts específicos:

awk '/Host:/ {ip=$2} /open/ {print ip,$0}' scan_results.gnmap

Si deseas comprobar cuántos hosts tienen un puerto en particular abierto (por ejemplo, el puerto web común 80), este comando grep con la bandera -c te dará un recuento:

grep -c "80/open" scan_results.gnmap

Finalmente, para obtener una visión general completa de todos los puertos abiertos en el rango de red escaneado, esta tubería contará las ocurrencias de cada puerto abierto. El comando ordena los puertos y muestra cuántas veces aparece cada uno:

grep -oP '\d+/open' scan_results.gnmap | sort | uniq -c

Un ejemplo de salida podría ser el siguiente, mostrando tres hosts con SSH (puerto 22) abierto, cinco con HTTP (puerto 80) y dos con HTTPS (puerto 443):

   3 22/open
   5 80/open
   2 443/open

Exportar resultados del escaneo

En este paso, aprenderás cómo exportar los resultados de tu escaneo de Masscan a diferentes formatos de archivo. Exportar correctamente los datos del escaneo es crucial, ya que te permite analizar los hallazgos, compartir informes con los miembros del equipo o introducir los datos en otras herramientas de seguridad. Crearemos tres formatos comunes: CSV para análisis en hojas de cálculo, texto plano para una revisión rápida y JSON para procesamiento automatizado.

Primero, navega a tu directorio de proyecto donde se almacenan los resultados del escaneo. Esto garantiza que todos los archivos exportados se guardarán en la ubicación correcta:

cd ~/project

La primera conversión crea un archivo CSV (Valores Separados por Comas). CSV es ideal para importar en software de hojas de cálculo como Excel. El comando awk extrae la dirección IP, el número de puerto y el nombre del servicio del archivo en formato grepable:

awk -F'[ /]' '/Host:/ {ip=$2} /open/ {print ip","$4","$7}' scan_results.gnmap > scan_results.csv

A continuación, generaremos un informe de texto simple que es fácil de leer en la terminal o en editores de texto. Este formato es útil cuando necesitas comprobar rápidamente qué hosts tienen puertos abiertos sin abrir una hoja de cálculo:

grep "open" scan_results.gnmap | awk '{print "Host:", $2, "Port:", $4}' > scan_report.txt

Para la integración con otras herramientas o scripts, crearemos un archivo JSON. JSON es un formato estructurado que la mayoría de los lenguajes de programación pueden analizar fácilmente. Los comandos siguientes crean una matriz JSON adecuada con todos los resultados del escaneo:

echo '[' > scan_results.json
grep "open" scan_results.gnmap | awk '{print "{\"host\":\""$2"\",\"port\":\""$4"\",\"service\":\""$7"\"},"}' >> scan_results.json
sed -i '$ s/,$//' scan_results.json
echo ']' >> scan_results.json

Finalmente, verifica que todos los archivos exportados se hayan creado correctamente. Este comando lista los archivos con sus tamaños para que puedas confirmar que las exportaciones se hayan realizado como se esperaba:

ls -l scan_results.* scan_report.txt

Debes ver una salida similar a la siguiente:

-rw-r--r-- 1 labex labex 1234 scan_results.csv
-rw-r--r-- 1 labex labex 5678 scan_results.json
-rw-r--r-- 1 labex labex 9012 scan_report.txt

Resumen

En este laboratorio, has aprendido cómo realizar un escaneo de puertos de alta velocidad utilizando Masscan, desde la instalación hasta la preparación del objetivo. El proceso incluyó la configuración de dependencias, la compilación del código fuente y la configuración de rangos de IP privadas para una práctica segura.

Has adquirido conocimientos prácticos sobre las capacidades de escaneo asíncrono de Masscan y el uso de la notación CIDR. El laboratorio enfatizó las prácticas éticas de escaneo al centrarse en direcciones no enrutables, preparándote para escenarios de análisis de redes del mundo real.