Introducción
En este laboratorio, aprenderás sobre el escaneo SYN de Nmap, una técnica clave en seguridad de redes para la exploración sigilosa 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 los profesionales de seguridad para evaluar las vulnerabilidades de la red y mejorar las defensas.
Al final de este laboratorio, entenderás cómo realizar escaneos SYN, interpretar sus resultados y reconocer su importancia en las evaluaciones de seguridad de redes.
Crear un servicio de destino para el escaneo
En este paso, vamos a crear un entorno controlado donde puedas practicar el escaneo SYN de Nmap. Antes de comenzar a escanear cualquier red o sistema, es crucial entender que el escaneo ético requiere una autorización adecuada. Para evitar cualquier problema legal, configuraremos nuestro propio servicio que podamos escanear de forma segura.
Primero, necesitas 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 que hayas abierto la terminal, navegarás hasta el directorio de tu proyecto. El directorio de proyecto es donde se almacenarán todos los archivos relacionados con este experimento. Utiliza el siguiente comando para cambiar el directorio actual al directorio de proyecto:
cd /home/labex/projectAhora, utilizaremos 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 navegadores web. Python tiene capacidades integradas que facilitan la configuración de dicho servidor. Utilizaremos este servidor como objetivo para nuestro escaneo SYN de Nmap. Ejecuta el siguiente comando en la terminal:
python -m http.server --bind localhost 8080 &Este comando inicia un servidor web simple en el puerto 8080. Un puerto es un punto final de comunicación en la red de una computadora. Diferentes servicios utilizan diferentes puertos para comunicarse. El
&al final del comando ejecuta el servidor en segundo plano. Esto significa que el servidor seguirá funcionando y podrás continuar utilizando la misma ventana de terminal para ejecutar otros comandos.Después de iniciar el servidor, necesitamos verificar que realmente esté en funcionamiento. Podemos hacer esto 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 utilizaremos para comprobar si nuestro servidor está escuchando en el puerto 8080. Ejecuta el siguiente comando:ss -tulwn | grep 8080El
|es un operador de tubería que toma la salida del comandossy la utiliza como entrada para el comandogrep. El comandogrepbusca la cadena8080en la salida del comandoss. Si el servidor está en funcionamiento, deberías ver una salida similar a esta:tcp LISTEN 0 1 0.0.0.0:8080 0.0.0.0:*Esta salida indica que el servidor está escuchando en el puerto 8080, lo que significa que está funcionando correctamente y listo para ser escaneado.
Comprender y realizar un escaneo SYN de Nmap
Ahora que tenemos un servicio objetivo funcionando, es hora de profundizar en los escaneos SYN. Los escaneos SYN son una parte crucial de las pruebas de seguridad de red, ya que nos permiten descubrir los puertos abiertos en un sistema objetivo. En esta sección, aprenderemos cómo funcionan los escaneos SYN y luego utilizaremos Nmap, una poderosa herramienta de escaneo de red, para realizar un escaneo SYN contra nuestro servidor HTTP.
¿Qué es un escaneo SYN?
Antes de comenzar el escaneo real, es esencial entender el mecanismo subyacente de un escaneo SYN. Para ello, primero veamos cómo se establece una conexión TCP normal.
Conexión TCP normal
En una conexión TCP normal, se lleva a cabo un handshake de tres vías. Este es un proceso fundamental para establecer una conexión confiable entre un cliente y un servidor:
- Paso 1: Paquete SYN desde el 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 desde el 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 y también indica que el servidor está listo para iniciar la conexión.
- Paso 3: Paquete ACK desde el cliente Finalmente, el cliente envía un paquete ACK (reconocer) para completar el handshake de tres vías. Después de este paso, la conexión TCP está completamente establecida y se puede 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 desde Nmap Nmap, nuestra herramienta de escaneo, envía el paquete SYN inicial al puerto objetivo. Esto es similar al primer paso en una conexión TCP normal.
- Paso 2: Respuesta SYN - ACK desde el objetivo Si el puerto objetivo está abierto, responderá con un paquete SYN - ACK, igual que en una conexión TCP normal.
- Paso 3: Terminación de la conexión por Nmap En lugar de enviar el último paquete ACK para completar el handshake, 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 completo, que completa todo el handshake de tres vías para cada puerto que se está escaneando.
Realización del escaneo SYN
Paso 1: Navegar al directorio del proyecto
Primero, debemos asegurarnos de que estamos 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 utilizando Nmap. Ejecuta el siguiente comando en tu terminal:
sudo nmap -sS localhost -p 8080 > /home/labex/project/nmap-syn-scan-results.txt
Desglosemos este comando para entender lo que hace cada parte:
sudo: Este comando se utiliza para ejecutar el comando siguiente con privilegios elevados. Los escaneos SYN requieren privilegios de root porque implican enviar paquetes de red sin procesar, por lo que necesitamos usarsudopara ejecutar el comandonmap.nmap: Esta es la herramienta de escaneo de red que estamos utilizando. Nmap se utiliza ampliamente para la exploración de redes y la auditoría de seguridad.-sS: Esta opción especifica que queremos realizar un escaneo SYN.localhost: Este es el objetivo de nuestro escaneo. En este caso, estamos escaneando nuestra propia máquina.-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
Después de que el escaneo se complete, 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 localhost (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 se puede utilizar para un análisis de seguridad adicional o para solucionar problemas de red.
Analizar los resultados del escaneo y las implicaciones de seguridad
Después de realizar un escaneo SYN, es crucial entender cómo interpretar los resultados y sus implicaciones de seguridad. Este paso es esencial porque te ayuda a identificar los riesgos potenciales en tu red. Profundicemos en los detalles.
Interpretar los resultados del escaneo
Primero, echemos un vistazo más detallado a los resultados del escaneo. Utilizaremos 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 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 el objetivo respondió 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 en función de 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 acceder 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 los atacantes para comprometer el sistema.
- Parte de la superficie de ataque que debe ser protegida: La superficie de ataque es la suma de todos los puntos donde un atacante puede intentar entrar en un sistema. Los puertos abiertos son parte de esta superficie de ataque y deben ser adecuadamente protegidos.
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 el número de puntos de entrada potenciales para los atacantes.
- Cada puerto abierto debe servir 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 estar actualizados para prevenir la explotación: Los proveedores de software lanzan regularmente actualizaciones 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 utilizar 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.
Limpiar nuestro entorno
Ahora, necesitamos limpiar nuestro entorno deteniendo el servidor HTTP que iniciamos anteriormente. Primero, necesitamos 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. Utilizaremos el comando
ps auxpara listar todos los procesos en ejecución y luego filtrar 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 8080La segunda columna en la salida muestra el PID del proceso del servidor HTTP.
A continuación, utilizaremos el PID para detener el servidor. Utilizaremos el comando
kill, que envía una señal de terminación al proceso. El siguiente comando encuentra automáticamente y detiene 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, necesitamos verificar que el servidor se haya detenido. Utilizaremos 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 comprobar si el servidor sigue en ejecución.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 red. Has configurado un entorno controlado utilizando un servidor HTTP de Python, realizado un escaneo SYN para encontrar puertos abiertos, analizado los resultados y limpiado el entorno de prueba. Estas habilidades son esenciales para el escaneo ético de redes y la evaluación de vulnerabilidades.
Comprender los escaneos SYN permite a los profesionales de la seguridad detectar eficientemente las posibles vulnerabilidades de red mientras se reduce el riesgo de ser detectados. A medida que avances en tu viaje de ciberseguridad, siempre asegúrate de tener permiso para escanear redes antes de aplicar estas técnicas.



