Análisis de riesgo en puertos abiertos y guía de mitigación
Introducción
Detectar y clasificar los puertos abiertos es una medida básica y vital en ciberseguridad. No todos los puertos suponen el mismo riesgo: algunos están cifrados, otros no; algunos están limitados a localhost, y otros expuestos a internet. Esta guía te permite identificar, clasificar y mitigar riesgos relacionados con puertos abiertos en tu equipo.
Paso 1: Escanear puertos abiertos
Usamos Nmap para detectar puertos y servicios:
sudo nmap -sS -sV -T4 -p- localhost -oN puertos.txt
Este comando escanea todos los puertos TCP (1–65535), detecta servicios y versiones y guarda la salida en `puertos.txt`.
Paso 2: Clasificar nivel de riesgo
Utiliza esta tabla para asignar un nivel de riesgo a cada puerto:
| Puerto | Servicio | Riesgo | Justificación |
|---|---|---|---|
| 22 | SSH | MEDIO | Común objetivo de fuerza bruta |
| 23 | Telnet | ALTO | Sin cifrado, protocolo obsoleto |
| 80 | HTTP | MEDIO | Texto plano, sin HTTPS |
| 445 | SMB | ALTO | Explotado por ransomware |
| 3306 | MySQL | ALTO | Acceso a base de datos |
| 3389 | RDP | ALTO | Objetivo frecuente de ataques |
| 5900 | VNC | ALTO | Control remoto sin cifrado |
Paso 3: Verificar exposición de red
Usa `ss` para ver si el puerto escucha en interfaces externas:
sudo ss -tuln
Filtra líneas con `0.0.0.0` o IPs públicas. Por ejemplo:
tcp LISTEN 0 128 0.0.0.0:22 *:* tcp LISTEN 0 100 127.0.0.1:3306 *:*
Paso 4: Alertar sobre puertos peligrosos
Clasifica en función de los criterios anteriores. Puedes usar este bloque para generar alertas en un informe:
puertos_riesgo = {
22: "MEDIO",
23: "ALTO",
80: "MEDIO",
445: "ALTO",
3306: "ALTO",
3389: "ALTO",
5900: "ALTO"
}
for puerto, nivel in puertos_riesgo.items():
if nivel == "ALTO":
print(f"⚠️ Puerto {puerto} abierto — RIESGO {nivel}")
Paso 5: Mitigación recomendada
Cerrar puertos innecesarios:
sudo ufw deny 3306- Limitar a localhost en archivos de configuración:
- MySQL: `bind-address = 127.0.0.1`
- SSH: `ListenAddress 127.0.0.1` (no recomendado si usas SSH remotamente)
Usar firewall activado y en modo restrictivo:
sudo ufw default deny incoming sudo ufw allow 22/tcp sudo ufw enable
Paso 6: Exportar informe y publicar
Puedes integrar todo en un archivo `cyberreport-YYYYMMDD.html` con los niveles de riesgo resaltados con colores:
- Rojo para ALTO
- Amarillo para MEDIO
- Verde para BAJO
Usa `org-publish` o `pandoc` para exportar el archivo `.org` a HTML y subirlo a tu blog estático.
Conclusión
Este análisis rápido ayuda a detectar y clasificar los puertos abiertos en tu sistema, asignándoles una criticidad realista. Puedes automatizar este análisis al inicio del sistema, y generar alertas en un panel HTML o en Emacs directamente usando `org-alert`.