La emulación de puertos es cuando un puerto específico está abierto y se puede conectar a él, pero no es un servicio real y no proporciona la funcionalidad principal, solo imita un servicio con un saludo similar o idéntico al conectarse.
La emulación de puertos es utilizada frecuentemente por grandes empresas para proteger la infraestructura de red contra la búsqueda de servicios y vulnerabilidades en ellos. En términos simples, engaña a los escáneres de puertos y a menudo provoca que se cuelguen durante los intentos de escaneo.
En esta guía, instalaremos el servicio PortSpoof y configuraremos la emulación para todos los puertos, excepto aquellos que están realmente en uso por servicios (22, 80, 443).
Cuando solo hay tres puertos abiertos y el resto están cerrados, un escaneo de puertos en todo el rango toma solo unos segundos, y cualquiera puede identificar los servicios disponibles escaneando los puertos usando la dirección IP del servidor.
Sin embargo, si emulamos el estado de todos los puertos, haciéndolos parecer abiertos en todo el rango de 1 a 65535, el escaneo tomaría aproximadamente 65,535 segundos, equivalente a unas 18 horas. La información obtenida no tendría valor, lo que complica significativamente la búsqueda de vulnerabilidades.
1. Instalación de PortSpoof
apt install git cmake build-essential autoconf automake libtool nano
git clone https://github.com/drk1wi/portspoof.git
cd portspoof
chmod +x configure
./configure --sysconfdir=/etc/
make -j$(nproc)
make install
1.1 Creación de un archivo de registro
mkdir -p /var/log/portspoof
touch /var/log/portspoof/alerts.log
chmod 644 /var/log/portspoof/alerts.log
1.2 Creación de un archivo de servicio
nano /etc/systemd/system/portspoof.service
Con el siguiente contenido:
[Unit]
Description=Portspoof Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/portspoof \
-c /etc/portspoof.conf \
-p 4444 \
-s /etc/portspoof_signatures \
-d \
-l /var/log/portspoof/alerts.log
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
1.3 Verificación de la ruta al binario de PortSpoof
which portspoof
Asegúrate de que coincida con la ruta en el archivo de servicio.
1.4 Inicio del servicio
systemctl daemon-reexec
systemctl daemon-reload
systemctl enable portspoof
systemctl start portspoof
Para verificar el estado:
systemctl status portspoof
1.5 Prueba de la configuración
telnet <dirección-IP> 4444
Trying 89.xx.187.xx...
Connected to 89.xx.187.xx.
Escape character is '^]'.
Esto indica una conexión exitosa. Ahora, configura el firewall para redirigir los puertos restantes.
2. Instalación de iptables con reglas persistentes
apt install iptables iptables-persistent
Presiona "Sí" en la ventana interactiva para IPv4 e IPv6.
2.1 Configuración de reglas
Hemos creado varias reglas para excluir nuestros servicios (22, 80, 443). Ajústalas según tus servicios.
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 1:21 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 23:79 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 81:442 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 444:65535 -j REDIRECT --to-ports 4444
Añade reglas para permitir nuestros servicios:
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Guarda las reglas para que persistan tras reiniciar el servidor:
netfilter-persistent save
O:
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
¡Listo! Ahora puedes intentar conectarte a cualquier puerto en el rango y verificar su salida. Usamos una herramienta gratuita de escaneo de puertos para Windows, Advanced Port Scanner.
Como se ve, los puertos responden con saludos basados en dos archivos de configuración:
- portspoof.conf - Enumera puertos específicos y sus respuestas. Puedes añadir un puerto y una respuesta, o para una respuesta vacía, especificar el número de puerto y "".
- portspoof_signatures - Contiene información de firmas para todos los puertos no listados en el archivo de configuración.
Las respuestas (banners) se toman de estos dos archivos de configuración.
Tras editar los archivos, simplemente reinicia el servicio:
systemctl restart portspoof
Cada puerto tiene su propia respuesta. Si el escaneo no se detiene a tiempo, el programa puede colgarse debido al gran número de puertos.
Las respuestas de puertos específicos pueden ocultar el sistema operativo, haciendo que los escáneres confundan el servidor con un enrutador o incluso una impresora.
3. Pasos adicionales
Para desactivar los saludos de los puertos, reemplaza el archivo de firmas por uno vacío:
mv /etc/portspoof_signatures /etc/portspoof_signatures_orig
touch /etc/portspoof_signatures
Añade una nueva línea antes de EOF, o el servicio no iniciará:
printf "\n" > /etc/portspoof_signatures
Reinicia el servicio:
systemctl restart portspoof
Ahora, los puertos no especificados explícitamente en portspoof.conf devolverán una respuesta vacía. Para que esto ocurra con todos los puertos, comenta las líneas relevantes en portspoof.conf y reinicia el servicio.
Una respuesta vacía para un gran número de puertos es una mejor solución, ya que evita revelar qué servicio respondió.
Sin embargo, si tu objetivo es simular un dispositivo, las respuestas de los puertos son importantes, pero aplicar esto a todos los puertos es demasiado obvio.
Tras una conexión exitosa, la conexión se termina. Para escanear un rango amplio de puertos, es mejor usar la utilidad nmap.
4. Escaneo de puertos con nmap
apt install nmap
4.1 Escaneo básico
nmap -p 1-65535 <dirección-IP>
4.2 Escaneo más rápido
nmap -p 1-65535 -T4 <dirección-IP>
4.3 Con salida de información de servicios
nmap -p 1-65535 -sV <dirección-IP>
4.4 Guardando resultados en un archivo
nmap -p 1-65535 -oN result.txt <dirección-IP>