Introducción
En este laboratorio, aprenderás sobre el escaneo SYN de Nmap, una técnica clave en la seguridad de redes para el reconocimiento sigiloso de puertos. El escaneo SYN identifica de manera eficiente los puertos abiertos en un sistema objetivo sin establecer completamente una conexión TCP, lo que lo hace menos detectable que los métodos tradicionales. Esto es crucial para que los profesionales de la seguridad evalúen las vulnerabilidades de la red y mejoren las defensas.
Al finalizar este laboratorio, comprenderás cómo realizar escaneos SYN, interpretar sus resultados y reconocer su importancia en las evaluaciones de seguridad de redes.
Creación de un servicio objetivo para el escaneo
En este paso, crearemos un entorno controlado donde podrás practicar el escaneo SYN con Nmap. Antes de comenzar a escanear cualquier red o sistema, es fundamental entender que el escaneo ético requiere la autorización adecuada. Para evitar problemas legales, configuraremos nuestro propio servicio que podamos escanear de forma segura.
Primero, debes abrir una terminal. Una terminal es una interfaz basada en texto que te permite interactuar con el sistema operativo de tu computadora escribiendo comandos. Una vez abierta la terminal, navegarás al directorio de tu proyecto. El directorio del proyecto es donde se almacenarán todos los archivos relacionados con este experimento. Usa el siguiente comando para cambiar al directorio del proyecto:
cd /home/labex/projectAhora, usaremos Python, un lenguaje de programación popular, para crear un servidor HTTP simple. Un servidor HTTP es un software que puede servir páginas web a clientes, como los navegadores web. Python tiene capacidades integradas que facilitan la configuración de dicho servidor. Usaremos este servidor como objetivo para nuestro escaneo SYN de Nmap. Ejecuta el siguiente comando en la terminal:
python -m http.server --bind 127.0.0.1 8080 &Este comando inicia un servidor web simple en el puerto 8080 y lo vincula a la dirección de bucle local (loopback) IPv4
127.0.0.1. Un puerto es un punto final de comunicación en la red de una computadora. Diferentes servicios utilizan diferentes puertos para comunicarse. El uso de una dirección IPv4 explícita mantiene el servidor y el posterior escaneo de Nmap en la misma interfaz de bucle local. El símbolo&al final del comando ejecuta el servidor en segundo plano. Esto significa que el servidor seguirá ejecutándose y podrás seguir usando la misma ventana de terminal para ejecutar otros comandos.Después de iniciar el servidor, debemos verificar que realmente esté funcionando. Podemos hacerlo comprobando las conexiones de red abiertas en nuestro sistema. El comando
sses una herramienta que puede mostrar estadísticas de sockets, lo que incluye información sobre las conexiones de red abiertas. Lo usaremos para verificar si nuestro servidor está escuchando en el puerto 8080. Ejecuta el siguiente comando:ss -tulwn | grep 8080El símbolo
|es un operador de tubería (pipe) que toma la salida del comandossy la utiliza como entrada para el comandogrep. El comandogrepbusca la cadena8080en la salida del comandoss. Si el servidor se está ejecutando, deberías ver una salida similar a esta:tcp LISTEN 0 5 127.0.0.1:8080 0.0.0.0:*Esta salida indica que el servidor está escuchando en el puerto 8080, lo que significa que se está ejecutando correctamente y está listo para ser escaneado.
Comprender y realizar un escaneo SYN con Nmap
Ahora que tenemos un servicio objetivo en funcionamiento, es hora de profundizar en los escaneos SYN. Los escaneos SYN son una parte crucial de las pruebas de seguridad de redes, ya que nos permiten descubrir puertos abiertos en un sistema objetivo. En esta sección, aprenderemos cómo funcionan los escaneos SYN y luego usaremos Nmap, una potente herramienta de escaneo de redes, para realizar un escaneo SYN contra nuestro servidor HTTP.
¿Qué es un escaneo SYN?
Antes de comenzar el escaneo real, es esencial comprender el mecanismo subyacente de un escaneo SYN. Para ello, veamos primero cómo se establece una conexión TCP normal.
Conexión TCP normal
En una conexión TCP normal, se lleva a cabo un saludo de tres vías (three-way handshake). Este es un proceso fundamental para establecer una conexión confiable entre un cliente y un servidor:
- Paso 1: Paquete SYN del cliente El cliente inicia la conexión enviando un paquete SYN (sincronizar) al servidor. Este paquete es como una solicitud para iniciar una conversación, preguntando al servidor si está listo para comunicarse.
- Paso 2: Paquete SYN-ACK del servidor Al recibir el paquete SYN, si el servidor está disponible y dispuesto a comunicarse, responde con un paquete SYN-ACK (sincronizar-reconocer). Este paquete reconoce la solicitud del cliente e indica que el servidor está listo para iniciar la conexión.
- Paso 3: Paquete ACK del cliente Finalmente, el cliente envía un paquete ACK (reconocer) para completar el saludo de tres vías. Después de este paso, la conexión TCP está completamente establecida y se pueden intercambiar datos entre el cliente y el servidor.
Proceso de escaneo SYN
Un escaneo SYN, por otro lado, tiene un enfoque diferente:
- Paso 1: Paquete SYN de Nmap Nmap, nuestra herramienta de escaneo, envía el paquete SYN inicial al puerto objetivo. Esto es similar al primer paso de una conexión TCP normal.
- Paso 2: Respuesta SYN-ACK del objetivo Si el puerto objetivo está abierto, responderá con un paquete SYN-ACK, tal como en una conexión TCP normal.
- Paso 3: Terminación de la conexión por parte de Nmap En lugar de enviar el paquete ACK final para completar el saludo, Nmap termina la conexión. Esto hace que el escaneo sea menos detectable porque nunca se establece la conexión completa. Además, es más rápido que un escaneo de conexión completa, que completa todo el saludo de tres vías para cada puerto escaneado.
Realización del escaneo SYN
Paso 1: Navegar al directorio del proyecto
Primero, debemos asegurarnos de estar en el directorio correcto del proyecto. Esto es importante porque guardaremos los resultados del escaneo en un archivo dentro de este directorio. Para navegar al directorio del proyecto, ejecuta el siguiente comando en tu terminal:
cd /home/labex/project
Paso 2: Ejecutar el escaneo SYN
Ahora, estamos listos para realizar el escaneo SYN usando Nmap. Ejecuta el siguiente comando en tu terminal:
sudo nmap -sS 127.0.0.1 -p 8080 > /home/labex/project/nmap-syn-scan-results.txt
Desglosemos este comando para entender qué hace cada parte:
sudo: Este comando se utiliza para ejecutar el comando posterior con privilegios elevados. Los escaneos SYN requieren privilegios de root porque implican el envío de paquetes de red sin procesar (raw packets), por lo que necesitamos usarsudopara ejecutar el comandonmap.nmap: Esta es la herramienta de escaneo de red que estamos utilizando. Nmap es ampliamente utilizado para la exploración de redes y auditorías de seguridad.-sS: Esta opción especifica que queremos realizar un escaneo SYN.127.0.0.1: Esta es la dirección de bucle local IPv4 de nuestra propia máquina. El uso de la dirección IPv4 explícita mantiene el escaneo alineado con el servidor HTTP que iniciamos en el Paso 1.-p 8080: Esta opción le dice a Nmap que solo escanee el puerto 8080. Estamos interesados en comprobar si este puerto específico está abierto en nuestra máquina local.> /home/labex/project/nmap-syn-scan-results.txt: Esta parte del comando redirige la salida del escaneo denmapa un archivo llamadonmap-syn-scan-results.txten el directorio del proyecto. De esta manera, podemos revisar los resultados más tarde.
Paso 3: Ver los resultados del escaneo
Una vez completado el escaneo, podemos ver los resultados. Ejecuta el siguiente comando en tu terminal:
cat /home/labex/project/nmap-syn-scan-results.txt
Deberías ver una salida similar a la siguiente:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-18 12:00 UTC
Nmap scan report for 127.0.0.1
Host is up (0.000097s latency).
PORT STATE SERVICE
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
Esta salida proporciona información valiosa. Confirma que el puerto 8080 está abierto en tu máquina local y que está ejecutando un servicio HTTP. Esta información puede utilizarse para un análisis de seguridad adicional o para la resolución de problemas de red.
Análisis de los resultados del escaneo e implicaciones de seguridad
Después de realizar un escaneo SYN, es crucial comprender cómo interpretar los resultados y sus implicaciones de seguridad. Este paso es esencial porque te ayuda a identificar riesgos potenciales en tu red. Profundicemos en los detalles.
Interpretación de los resultados del escaneo
Primero, analicemos más de cerca los resultados del escaneo. Usaremos el comando
catpara ver el contenido del archivo que almacena los resultados del escaneo SYN de Nmap. El comandocates una forma sencilla de mostrar el contenido de un archivo en la terminal.cat /home/labex/project/nmap-syn-scan-results.txtCuando ejecutes este comando, verás una salida. Esto es lo que significan las diferentes partes de la salida:
Host is up: Este mensaje indica que el host objetivo es alcanzable a través de la red. Si el host está activo, significa que tu escaneo pudo comunicarse con el objetivo.- El valor de latencia: Esto muestra qué tan rápido respondió el objetivo a tu escaneo. Una latencia más baja significa que el objetivo respondió más rápido.
8080/tcp open: Esto indica que el puerto 8080 en el host objetivo está abierto y listo para aceptar conexiones entrantes. Un puerto abierto puede ser un punto de entrada potencial para los atacantes.http-proxy: Esta es la suposición de Nmap sobre qué servicio se está ejecutando en el puerto 8080. Nmap intenta identificar el servicio basándose en las respuestas que recibe durante el escaneo.
En una evaluación de seguridad del mundo real, cada puerto abierto en un host objetivo representa varias cosas:
- Un punto de entrada potencial para los atacantes: Los atacantes pueden usar puertos abiertos para obtener acceso al sistema objetivo. Por ejemplo, si un servidor web se está ejecutando en un puerto abierto, los atacantes podrían intentar explotar vulnerabilidades en la aplicación web.
- Un servicio que puede tener vulnerabilidades: Cada servicio que se ejecuta en un puerto abierto tiene el potencial de tener fallas de seguridad. Estas vulnerabilidades pueden ser explotadas por atacantes para comprometer el sistema.
- Parte de la superficie de ataque que debe protegerse: La superficie de ataque es la suma de todos los puntos donde un atacante puede intentar ingresar a un sistema. Los puertos abiertos son parte de esta superficie de ataque y deben protegerse adecuadamente.
Mejores prácticas de seguridad
Al proteger una red, debes seguir estas mejores prácticas:
- Solo deben estar abiertos los puertos necesarios: Abrir puertos innecesarios aumenta la superficie de ataque de tu red. Al cerrar los puertos no utilizados, reduces la cantidad de puntos de entrada potenciales para los atacantes.
- Cada puerto abierto debe servir para un propósito comercial legítimo: Si un puerto está abierto, debe ser por una razón válida, como ejecutar un servidor web o un servicio de base de datos. Esto ayuda a garantizar que tu red se utilice de manera eficiente y segura.
- Todos los servicios deben mantenerse actualizados para evitar la explotación: Los proveedores de software lanzan actualizaciones periódicamente para corregir vulnerabilidades de seguridad. Al mantener tus servicios actualizados, puedes proteger tu red de amenazas conocidas.
- Las reglas del firewall deben restringir el acceso a puertos sensibles: Los firewalls se pueden usar para controlar quién puede acceder a puertos específicos en tu red. Al configurar reglas de firewall adecuadas, puedes limitar el acceso a puertos sensibles solo a usuarios o sistemas autorizados.
Limpieza de nuestro entorno
Ahora, debemos limpiar nuestro entorno deteniendo el servidor HTTP que iniciamos anteriormente. Primero, debemos identificar el ID de proceso (PID) del servidor HTTP. El PID es un número único asignado a cada proceso en ejecución en el sistema. Usaremos el comando
ps auxpara listar todos los procesos en ejecución y luego filtraremos los resultados para encontrar el proceso del servidor HTTP.ps aux | grep "http.server" | grep -v grepCuando ejecutes este comando, verás una salida similar a la siguiente:
labex 1234 0.0 0.1 31116 3164 pts/0 S 12:00 0:00 python -m http.server --bind 127.0.0.1 8080La segunda columna en la salida muestra el PID del proceso del servidor HTTP.
A continuación, usaremos el PID para detener el servidor. Usaremos el comando
kill, que envía una señal de terminación al proceso. El siguiente comando encuentra y mata automáticamente el proceso del servidor HTTP:kill $(ps aux | grep "http.server" | grep -v grep | awk '{print $2}')Este comando primero encuentra el PID del proceso del servidor HTTP utilizando el mismo método de filtrado que antes y luego pasa el PID al comando
kill.Finalmente, debemos verificar que el servidor se haya detenido. Usaremos el comando
ss, que se utiliza para mostrar estadísticas de sockets. Al filtrar la salida para mostrar solo información sobre el puerto 8080, podemos verificar si el servidor sigue ejecutándose.ss -tulwn | grep 8080Si el servidor se ha detenido correctamente, no debería haber salida de este comando, lo que indica que el servidor ya no está escuchando en el puerto 8080.
Resumen
En este laboratorio, has aprendido cómo realizar y comprender el escaneo SYN de Nmap, una técnica clave en el reconocimiento de seguridad de redes. Configuraste un entorno controlado utilizando un servidor HTTP de Python, realizaste un escaneo SYN para encontrar puertos abiertos, analizaste los resultados y limpiaste el entorno de prueba. Estas habilidades son esenciales para el escaneo de redes ético y la evaluación de vulnerabilidades.
Comprender los escaneos SYN permite a los profesionales de la seguridad detectar vulnerabilidades de red potenciales de manera eficiente mientras reducen el riesgo de detección. A medida que avances en tu viaje de ciberseguridad, asegúrate siempre de tener permiso para escanear redes antes de aplicar estas técnicas.



