El script que has compartido utiliza nmap
y awk
para escanear una lista de servidores especificados en un archivo (servers.txt
) y determinar la versión de OpenSSH que están ejecutando. Según la versión de OpenSSH, el script clasifica los servidores en función de su vulnerabilidad a ciertos CVEs (Common Vulnerabilities and Exposures). A continuación, te explico el objetivo, el paso a paso de lo que hace y cómo se implementa:
Objetivo
El objetivo del script es identificar servidores que están ejecutando versiones específicas de OpenSSH y determinar si son vulnerables a ciertos CVEs. Esto es útil para administradores de sistemas y equipos de seguridad que desean evaluar y mitigar riesgos de seguridad en sus infraestructuras.
Paso a paso de lo que hace el script
- Ejecutar
nmap
:
nmap -sV -Pn -p22 -iL servers.txt
-sV
: Detecta versiones de servicios.-Pn
: Desactiva el descubrimiento de hosts, trata todos los hosts enservers.txt
como vivos.-p22
: Escanea el puerto 22 (el puerto predeterminado para SSH).-iL servers.txt
: Toma la lista de servidores a escanear desde el archivoservers.txt
.
- Procesar la salida con
awk
:
/Nmap scan report/{ip=$5}
: Captura la IP del servidor./OpenSSH/
: Identifica las líneas que contienen información sobre la versión de OpenSSH.if ($5 >= "8.5p1" && $5 < "9.8p1")
: Verifica si la versión está en el rango vulnerable a CVE-2024-6387.else if ($5 >= "4.4p1" && $5 < "8.5p1")
: Verifica si la versión no es vulnerable a CVE-2024-6387 pero está parcheada para CVE-2006-5051.else if ($5 < "4.4p1")
: Verifica si la versión es vulnerable a regreSSHion a menos que esté parcheada para CVE-2006-5051 y CVE-2008-4109.if (status) { print "Server: "ip"\t", "OpenSSH Version: "$5"\t", "Status: "status }
: Imprime la IP del servidor, la versión de OpenSSH y el estado de vulnerabilidad si se ha determinado un estado.
Implementación
- Crear el archivo
servers.txt
:
- Incluye las IPs de los servidores que deseas escanear, una por línea.
192.168.1.1
192.168.1.2
192.168.1.3
- Guardar el script en un archivo, por ejemplo
scan_ssh_versions.sh
:
#!/bin/bash
nmap -sV -Pn -p22 -iL servers.txt | awk '/Nmap scan report/{ip=$5} /OpenSSH/ {
if ($5 >= "8.5p1" && $5 < "9.8p1") {
status = "Vulnerable to CVE-2024-6387"
} else if ($5 >= "4.4p1" && $5 < "8.5p1") {
status = "Not vulnerable to CVE-2024-6387 (patched for CVE-2006-5051)"
} else if ($5 < "4.4p1") {
status = "Vulnerable to regreSSHion (unless patched for CVE-2006-5051 and CVE-2008-4109)"
}
if (status) {
print "Server: "ip"\t", "OpenSSH Version: "$5"\t", "Status: "status
status = ""
}
}'
- Dar permisos de ejecución al script:
chmod +x scan_ssh_versions.sh
- Ejecutar el script:
./scan_ssh_versions.sh
Resultado
El script escaneará cada servidor listado en servers.txt
, determinará la versión de OpenSSH y la comparará con los rangos de versiones especificados para identificar si el servidor es vulnerable a ciertos CVEs. La salida proporcionará la IP del servidor, la versión de OpenSSH y el estado de vulnerabilidad.
Este enfoque permite a los administradores de sistemas y equipos de seguridad tomar decisiones informadas sobre la necesidad de actualizar o parchear sus sistemas para protegerse contra vulnerabilidades conocidas.
Aquí tienes el script completo con comentarios en español que explican cómo funciona:
#!/bin/bash
# Ejecuta nmap para detectar versiones de servicios en el puerto 22 (SSH)
# -sV: Detecta versiones de servicios
# -Pn: Desactiva el descubrimiento de hosts, trata todos los hosts como vivos
# -p22: Escanea el puerto 22 (SSH)
# -iL servers.txt: Toma la lista de servidores a escanear desde el archivo servers.txt
nmap -sV -Pn -p22 -iL servers.txt | awk '
# Captura la IP del servidor desde el reporte de nmap
/Nmap scan report/ { ip = $5 }
# Identifica las líneas que contienen información sobre la versión de OpenSSH
/OpenSSH/ {
# Verifica si la versión está en el rango vulnerable a CVE-2024-6387
if ($5 >= "8.5p1" && $5 < "9.8p1") {
status = "Vulnerable a CVE-2024-6387"
}
# Verifica si la versión no es vulnerable a CVE-2024-6387 pero está parcheada para CVE-2006-5051
else if ($5 >= "4.4p1" && $5 < "8.5p1") {
status = "No vulnerable a CVE-2024-6387 (parcheada para CVE-2006-5051)"
}
# Verifica si la versión es vulnerable a regreSSHion a menos que esté parcheada para CVE-2006-5051 y CVE-2008-4109
else if ($5 < "4.4p1") {
status = "Vulnerable a regreSSHion (a menos que esté parcheada para CVE-2006-5051 y CVE-2008-4109)"
}
# Imprime la IP del servidor, la versión de OpenSSH y el estado de vulnerabilidad si se ha determinado un estado
if (status) {
print "Servidor: " ip "\t", "Versión OpenSSH: " $5 "\t", "Estado: " status
status = ""
}
}'
Explicación de las partes del script:
- Línea 1: Declara el intérprete de bash para ejecutar el script.
#!/bin/bash
- Ejecuta
nmap
:
nmap -sV -Pn -p22 -iL servers.txt | awk '
-sV
: Detecta versiones de servicios.-Pn
: Desactiva el descubrimiento de hosts, asume que todos los hosts están vivos.-p22
: Escanea el puerto 22 (SSH).-iL servers.txt
: Lee la lista de servidores desde el archivoservers.txt
.
- Captura la IP del servidor:
/Nmap scan report/ { ip = $5 }
- Identifica líneas con información sobre OpenSSH:
/OpenSSH/ {
- Verifica la versión y asigna el estado de vulnerabilidad:
if ($5 >= "8.5p1" && $5 < "9.8p1") {
status = "Vulnerable a CVE-2024-6387"
} else if ($5 >= "4.4p1" && $5 < "8.5p1") {
status = "No vulnerable a CVE-2024-6387 (parcheada para CVE-2006-5051)"
} else if ($5 < "4.4p1") {
status = "Vulnerable a regreSSHion (a menos que esté parcheada para CVE-2006-5051 y CVE-2008-4109)"
}
- Imprime los resultados si hay un estado determinado:
if (status) {
print "Servidor: " ip "\t", "Versión OpenSSH: " $5 "\t", "Estado: " status
status = ""
}
}'
Este script es útil para identificar rápidamente la exposición de los servidores a ciertas vulnerabilidades de OpenSSH y tomar medidas correctivas si es necesario.