Cómo Detectar Servidores Vulnerables a CVE-2024-6387 Usando Nmap

Cómo Detectar Servidores Vulnerables a CVE-2024-6387 Usando Nmap

Spread the love
Listen to this article

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

  1. Ejecutar nmap:
   nmap -sV -Pn -p22 -iL servers.txt
  • -sV: Detecta versiones de servicios.
  • -Pn: Desactiva el descubrimiento de hosts, trata todos los hosts en servers.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 archivo servers.txt.
  1. 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

  1. 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
  1. 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 = ""
       }
   }'
  1. Dar permisos de ejecución al script:
   chmod +x scan_ssh_versions.sh
  1. 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.

regreSSHion-nmap-scanner

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:

  1. Línea 1: Declara el intérprete de bash para ejecutar el script.
   #!/bin/bash
  1. 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 archivo servers.txt.
  1. Captura la IP del servidor:
   /Nmap scan report/ { ip = $5 }
  1. Identifica líneas con información sobre OpenSSH:
   /OpenSSH/ {
  1. 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)"
   }
  1. 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.

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Más antiguo
La mas nueva Más votado
Comentarios en línea
Ver todos los comentarios