Detectar Certificados SSL con Nmap

NmapNmapBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá a detectar certificados SSL utilizando el script ssl-cert de Nmap. El laboratorio lo guía a través de la exploración de direcciones IP y nombres de dominio para recuperar y mostrar información de certificados SSL/TLS, incluyendo el sujeto, el emisor y el período de validez.

Ejecutará comandos como nmap --script ssl-cert 192.168.1.1 y nmap --script ssl-cert scanme.nmap.org en la terminal Xfce, explorando opciones para especificar puertos, aumentar la verbosidad y guardar los resultados en un archivo. Finalmente, revisará los detalles del certificado y los comparará con los resultados de la detección de servicios.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/scripting_basics("Scripting Engine Basics") nmap/NmapGroup -.-> nmap/script_management("Script Categories and Updating") subgraph Lab Skills nmap/output_formats -.-> lab-547096{{"Detectar Certificados SSL con Nmap"}} nmap/save_output -.-> lab-547096{{"Detectar Certificados SSL con Nmap"}} nmap/port_scanning -.-> lab-547096{{"Detectar Certificados SSL con Nmap"}} nmap/target_specification -.-> lab-547096{{"Detectar Certificados SSL con Nmap"}} nmap/verbosity -.-> lab-547096{{"Detectar Certificados SSL con Nmap"}} nmap/service_detection -.-> lab-547096{{"Detectar Certificados SSL con Nmap"}} nmap/scripting_basics -.-> lab-547096{{"Detectar Certificados SSL con Nmap"}} nmap/script_management -.-> lab-547096{{"Detectar Certificados SSL con Nmap"}} end

Ejecutar un escaneo de certificado SSL con nmap --script ssl-cert 192.168.1.1

En este paso, usaremos Nmap para realizar un escaneo de certificado SSL en una dirección IP especificada. Nmap es una herramienta de escaneo de red poderosa, y su motor de scripting nos permite extender su funcionalidad. El script ssl-cert está diseñado para recuperar y mostrar información sobre los certificados SSL/TLS de un servidor objetivo.

Primero, entendamos la estructura básica del comando:

nmap --script ssl-cert <target_ip>

Aquí, <target_ip> es la dirección IP del servidor que desea escanear. En este caso, estaremos escanendiendo la dirección IP 192.168.1.1.

Ahora, abra su terminal Xfce. Asegúrese de estar en el directorio ~/project. Si no es así, navegue hasta él usando el comando cd:

cd ~/project

Luego, ejecute el siguiente comando para ejecutar el escaneo de certificado SSL:

sudo nmap --script ssl-cert 192.168.1.1

Es posible que se le solicite su contraseña. Dado que el usuario labex tiene privilegios sudo sin contraseña, simplemente presione Enter.

Nota: 192.168.1.1 es una dirección IP privada y es posible que no sea accesible desde su configuración de red actual. Si no tiene un servidor en esa dirección, el escaneo puede no devolver ningún resultado o puede agotarse el tiempo. A fines de prueba, puede usar una dirección IP pública que sepa que tiene un certificado SSL, como scanme.nmap.org, o 8.8.8.8.

Intentemos escanear scanme.nmap.org en su lugar:

sudo nmap --script ssl-cert scanme.nmap.org

Este comando intentará conectarse a scanme.nmap.org y recuperar su información de certificado SSL. La salida mostrará detalles como el sujeto del certificado, el emisor, el período de validez y cualquier Nombre Alternativo de Sujeto (SAN).

Salida de ejemplo (la salida real variará):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.031s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

Nmap done: 1 IP address (1 host up) scanned in 2.18 seconds

Esta salida muestra los detalles del certificado SSL para scanme.nmap.org, incluyendo el sujeto, el emisor y las fechas de validez.

Escanear el puerto 443 con nmap --script ssl-cert -p 443 127.0.0.1

En este paso, nos centraremos en escanear un puerto específico, el 443, utilizando Nmap y el script ssl-cert. El puerto 443 es el puerto estándar para el tráfico HTTPS (Hypertext Transfer Protocol Secure), que se utiliza para la comunicación segura a través de Internet. Al especificar el puerto, podemos restringir el escaneo y recuperar información de certificado SSL específicamente para los servicios que se ejecutan en ese puerto.

El comando que usaremos es:

nmap --script ssl-cert -p 443 127.0.0.1

Analicemos este comando:

  • nmap: El escáner de línea de comandos de Nmap.
  • --script ssl-cert: Especifica que queremos usar el script ssl-cert para recuperar información de certificado SSL.
  • -p 443: Esta opción le indica a Nmap que solo escanee el puerto 443.
  • 127.0.0.1: Esta es la dirección de bucle hacia atrás, también conocida como localhost. Se refiere a su propia máquina.

Ahora, abra su terminal Xfce y asegúrese de estar en el directorio ~/project:

cd ~/project

Ejecute el siguiente comando para escanear el puerto 443 en localhost:

sudo nmap --script ssl-cert -p 443 127.0.0.1

Dado que 127.0.0.1 se refiere a su propia máquina, este comando intentará recuperar el certificado SSL de cualquier servicio que se ejecute en el puerto 443 en su máquina virtual LabEx. Si no hay ningún servicio escuchando en el puerto 443, Nmap informará que el puerto está cerrado.

Si tiene un servidor web u otro servicio configurado para usar HTTPS en su máquina virtual LabEx, debería ver una salida similar a la siguiente (la salida real variará según el certificado y la configuración del servidor):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).

PORT    STATE SERVICE
443/tcp closed https

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

En este ejemplo, la salida muestra que el puerto 443 está cerrado. Esto significa que no hay ningún servicio escuchando en ese puerto en el localhost. Si un servicio estuviera en ejecución, la salida incluiría los detalles del certificado SSL, similar al paso anterior.

Si desea probar este comando en un servidor que sabe que tiene HTTPS habilitado en el puerto 443, puede reemplazar 127.0.0.1 con la dirección IP o el nombre de dominio de ese servidor. Por ejemplo:

sudo nmap --script ssl-cert -p 443 scanme.nmap.org

Esto escaneará el puerto 443 en scanme.nmap.org y recuperará su información de certificado SSL.

Agregar detalle con nmap -v --script ssl-cert 192.168.1.1

En este paso, agregaremos detalle a nuestro comando de Nmap. El detalle en Nmap significa aumentar la cantidad de información mostrada durante el escaneo. Esto puede ser útil para entender lo que está haciendo Nmap y para solucionar cualquier problema. La opción -v aumenta el nivel de detalle. Usar -v múltiples veces (por ejemplo, -vv o -vvv) aumenta aún más el detalle.

El comando que usaremos es:

nmap -v --script ssl-cert 192.168.1.1

Analicemos este comando:

  • nmap: El escáner de línea de comandos de Nmap.
  • -v: Esta opción aumenta el nivel de detalle, proporcionando una salida más detallada.
  • --script ssl-cert: Especifica que queremos usar el script ssl-cert para recuperar información de certificado SSL.
  • 192.168.1.1: Esta es la dirección IP objetivo.

Ahora, abra su terminal Xfce y asegúrese de estar en el directorio ~/project:

cd ~/project

Ejecute el siguiente comando para ejecutar el escaneo de certificado SSL con detalle:

sudo nmap -v --script ssl-cert 192.168.1.1

Como se mencionó anteriormente, 192.168.1.1 es una dirección IP privada y puede no ser accesible. Si no tiene un servidor en esa dirección, el escaneo puede no devolver ningún resultado o puede agotarse el tiempo. A fines de prueba, puede usar una dirección IP pública que sepa que tiene un certificado SSL, como scanme.nmap.org.

Intentemos escanear scanme.nmap.org con detalle:

sudo nmap -v --script ssl-cert scanme.nmap.org

La salida ahora incluirá más información sobre el proceso de escaneo, como las diferentes fases que atraviesa Nmap, los puertos que está explorando y cualquier error o advertencia que ocurra.

Salida de ejemplo (la salida real variará):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
NSE: Loaded 1 script for scanning.
Initiating Ping Scan at 10:00
Scanning scanme.nmap.org (45.33.32.156) [2 ports]
Completed Ping Scan at 10:00, 0.03s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:00
Completed Parallel DNS resolution of 1 host. at 10:00, 0.01s elapsed
Initiating Connect Scan at 10:00
Scanning scanme.nmap.org (45.33.32.156) [1000 ports]
Discovered open port 22/tcp on 45.33.32.156
Completed Connect Scan at 10:00, 2.15s elapsed (1000 total ports)
NSE: Script scanning scanme.nmap.org (45.33.32.156)
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 10:00
Completed NSE at 10:00, 0.02s elapsed
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.031s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

NSE: Script Post-scanning.
Initiating NSE at 10:00
Completed NSE at 10:00, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2.34 seconds

Observe la información adicional sobre el proceso de escaneo, como "Initiating Ping Scan", "Completed Connect Scan" y "NSE: Script scanning". Este detalle adicional puede ser útil para entender cómo funciona Nmap y para diagnosticar cualquier problema.

Guardar los resultados de SSL con nmap --script ssl-cert -oN ssl.txt 127.0.0.1

En este paso, aprenderemos cómo guardar los resultados de nuestro escaneo de Nmap en un archivo. Esto es útil para un análisis posterior o para compartir los resultados con otros. Nmap ofrece varias opciones para guardar la salida en diferentes formatos. La opción -oN guarda la salida en un formato "normal" legible por humanos.

El comando que usaremos es:

nmap --script ssl-cert -oN ssl.txt 127.0.0.1

Analicemos este comando:

  • nmap: El escáner de línea de comandos de Nmap.
  • --script ssl-cert: Especifica que queremos usar el script ssl-cert para recuperar información de certificado SSL.
  • -oN ssl.txt: Esta opción le indica a Nmap que guarde la salida en formato normal en un archivo llamado ssl.txt.
  • 127.0.0.1: Esta es la dirección IP objetivo (localhost).

Ahora, abra su terminal Xfce y asegúrese de estar en el directorio ~/project:

cd ~/project

Ejecute el siguiente comando para ejecutar el escaneo de certificado SSL y guardar los resultados en ssl.txt:

sudo nmap --script ssl-cert -oN ssl.txt 127.0.0.1

Después de que se complete el escaneo, encontrará un archivo llamado ssl.txt en su directorio ~/project. Este archivo contiene la salida del escaneo de Nmap, incluyendo la información de certificado SSL (si la hay) para el objetivo.

Para verificar que el archivo se creó y contiene los resultados del escaneo, puede usar el comando cat para mostrar el contenido del archivo:

cat ssl.txt

Si un servicio con un certificado SSL está en ejecución en 127.0.0.1, verá los detalles del certificado en la salida. Si no hay ningún servicio en ejecución, el archivo contendrá información sobre el escaneo, pero no detalles del certificado.

Por ejemplo, si el puerto 443 está cerrado, el archivo ssl.txt podría contener:

## Nmap 7.80 scan initiated Tue Oct 27 10:00:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).
PORT    STATE SERVICE
443/tcp closed https
## Nmap done at Tue Oct 27 10:00:00 2023 -- 1 IP address (1 host up) scanned in 0.07 seconds

Si desea escanear un objetivo diferente y guardar los resultados, simplemente reemplace 127.0.0.1 con la dirección IP o nombre de dominio deseado. Por ejemplo:

sudo nmap --script ssl-cert -oN ssl.txt scanme.nmap.org

Esto escaneará scanme.nmap.org y guardará los resultados en ssl.txt. Recuerde revisar el contenido de ssl.txt usando cat ssl.txt para confirmar los resultados del escaneo.

Revisar los detalles del certificado en la terminal Xfce

En este paso, revisaremos los detalles del certificado SSL que guardamos en el archivo ssl.txt en el paso anterior. Usaremos el comando cat para mostrar el contenido del archivo en la terminal Xfce y luego examinaremos la información del certificado.

Primero, asegúrese de estar en el directorio ~/project:

cd ~/project

Ahora, use el comando cat para mostrar el contenido del archivo ssl.txt:

cat ssl.txt

La salida mostrará los resultados del escaneo de Nmap, incluyendo los detalles del certificado SSL si se encontró un servicio con un certificado SSL en el objetivo.

Analicemos la salida. Las partes importantes de la información del certificado SSL generalmente incluyen:

  • Sujeto: Este campo contiene el nombre de dominio o la entidad a la que se emite el certificado. Busque el atributo commonName (CN) dentro del campo Sujeto.
  • Emisor: Este campo identifica la Autoridad Certificadora (CA) que emitió el certificado. Nuevamente, busque el atributo commonName (CN).
  • Tipo de clave pública: Indica el tipo de algoritmo de clave pública utilizado (por ejemplo, RSA, DSA, ECDSA).
  • Bits de clave pública: Especifica el tamaño de la clave en bits (por ejemplo, 2048, 4096). Tamaños de clave más grandes generalmente proporcionan una seguridad más fuerte.
  • Algoritmo de firma: Indica el algoritmo utilizado para firmar el certificado (por ejemplo, sha256WithRSAEncryption).
  • No válido antes: La fecha y hora en que el certificado pasa a ser válido.
  • No válido después: La fecha y hora en que el certificado expira. Es crucial asegurarse de que los certificados no estén caducados.
  • MD5/SHA1: Estos son los valores hash del certificado. Si bien MD5 se considera débil, SHA1 también está siendo reemplazado. Se prefiere SHA256 o superior.
  • -----BEGIN CERTIFICATE-----... -----END CERTIFICATE-----: Este es el actual datos codificados del certificado en formato PEM.

Por ejemplo, si escaneó scanme.nmap.org y guardó la salida en ssl.txt, la parte relevante de la salida podría verse así:

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

En este ejemplo, puede ver que el certificado es para scanme.nmap.org, emitido por Let's Encrypt Authority X3, utiliza una clave RSA con 2048 bits y está firmado con SHA256.

Al revisar estos detalles, puede obtener información sobre la seguridad y validez del certificado SSL utilizado por el servicio objetivo.

Si escaneó 127.0.0.1 y no estaba en ejecución ningún servicio SSL, el archivo ssl.txt no contendrá la información detallada del certificado. En ese caso, es posible que desee instalar un servidor web simple con SSL habilitado (fuera del alcance de esta práctica) para generar un certificado para fines de prueba.

Comparar con la detección de servicios en la terminal Xfce

En este paso, compararemos la información del certificado SSL que obtuvimos con las capacidades de detección de servicios de Nmap. Esto nos permite verificar si el servicio detectado coincide con los detalles del certificado e identificar cualquier discrepancia potencial.

Primero, ejecutemos un escaneo estándar de detección de servicios de Nmap en el objetivo. Usaremos 127.0.0.1 como objetivo para este ejemplo. Asegúrese de estar en el directorio ~/project:

cd ~/project

Ejecute el siguiente comando:

sudo nmap -sV 127.0.0.1

La opción -sV habilita la detección de la versión del servicio. Nmap intentará determinar el servicio que se está ejecutando en cada puerto abierto.

La salida mostrará los puertos abiertos y el servicio detectado. Por ejemplo:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000058s latency).
Not shown: 999 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
443/tcp open  ssl/http  ## Ejemplo: Si está ejecutándose un servidor web con SSL

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.23 seconds

Ahora, compare los resultados de la detección de servicios con los detalles del certificado SSL que revisó en el paso anterior (del archivo ssl.txt).

Por ejemplo, si la detección de servicios de Nmap identifica el puerto 443 como ejecutando ssl/http y el commonName del sujeto del certificado SSL coincide con el nombre de dominio asociado con el servidor web, entonces la detección de servicios y los detalles del certificado coinciden.

Sin embargo, si hay una desajuste, podría indicar un problema potencial:

  • Identificación incorrecta del servicio: Nmap podría identificar incorrectamente el servicio que se está ejecutando en un puerto.
  • Certificado mal configurado: El certificado podría haber sido emitido para un nombre de dominio diferente al que se está sirviendo.
  • Atacante en el medio: Un atacante podría estar interceptando la conexión y presentando un certificado diferente.

Para investigar más detenidamente las discrepancias, puede usar scripts o herramientas más específicas de Nmap como openssl para examinar directamente el certificado.

Por ejemplo, si la detección de servicios muestra http en el puerto 443 pero el certificado SSL es para un dominio diferente, es una señal de alerta. Esto podría indicar una mala configuración o un ataque potencial.

En resumen, comparar la detección de servicios de Nmap con los detalles del certificado SSL le ayuda a verificar la integridad y seguridad de los servicios que se están ejecutando en un objetivo.

Resumen

En esta práctica, usamos Nmap con el script ssl-cert para escanear y recuperar información de certificados SSL/TLS de servidores objetivo. Aprendimos cómo ejecutar el comando básico nmap --script ssl-cert <target_ip> para escanear una dirección IP específica y abordamos posibles problemas con direcciones IP privadas usando una dirección pública como scanme.nmap.org para pruebas.

También practicamos ejecutando el escaneo usando sudo y observamos la salida, que incluye detalles como el sujeto, el emisor y el período de validez del certificado. Esto proporciona una base para una exploración más profunda de las capacidades de Nmap en el análisis de certificados SSL.