Détecter les certificats SSL avec Nmap

NmapNmapBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous allez apprendre à détecter les certificats SSL à l'aide du script ssl-cert de Nmap. Le laboratoire vous guide dans le processus de balayage d'adresses IP et de noms de domaine pour récupérer et afficher des informations sur les certificats SSL/TLS, y compris le sujet, l'émetteur et la période de validité.

Vous exécuterez des commandes telles que nmap --script ssl-cert 192.168.1.1 et nmap --script ssl-cert scanme.nmap.org dans le terminal Xfce, en explorant les options pour spécifier les ports, augmenter la verbosité et enregistrer les résultats dans un fichier. Enfin, vous examinerez les détails du certificat et les comparerez avec les résultats de détection de services.


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{{"Détecter les certificats SSL avec Nmap"}} nmap/save_output -.-> lab-547096{{"Détecter les certificats SSL avec Nmap"}} nmap/port_scanning -.-> lab-547096{{"Détecter les certificats SSL avec Nmap"}} nmap/target_specification -.-> lab-547096{{"Détecter les certificats SSL avec Nmap"}} nmap/verbosity -.-> lab-547096{{"Détecter les certificats SSL avec Nmap"}} nmap/service_detection -.-> lab-547096{{"Détecter les certificats SSL avec Nmap"}} nmap/scripting_basics -.-> lab-547096{{"Détecter les certificats SSL avec Nmap"}} nmap/script_management -.-> lab-547096{{"Détecter les certificats SSL avec Nmap"}} end

Exécuter un scan de certificat SSL avec nmap --script ssl-cert 192.168.1.1

Dans cette étape, nous allons utiliser Nmap pour effectuer un scan de certificat SSL sur une adresse IP spécifiée. Nmap est un puissant outil de balayage de réseau, et son moteur de scripts nous permet d'étendre ses fonctionnalités. Le script ssl-cert est conçu pour récupérer et afficher des informations sur les certificats SSL/TLS à partir d'un serveur cible.

Commençons par comprendre la structure de base de la commande :

nmap --script ssl-cert <target_ip>

Ici, <target_ip> est l'adresse IP du serveur que vous voulez scanner. Dans ce cas, nous allons scanner l'adresse IP 192.168.1.1.

Maintenant, ouvrez votre terminal Xfce. Assurez-vous d'être dans le répertoire ~/project. Si ce n'est pas le cas, accédez-y en utilisant la commande cd :

cd ~/project

Ensuite, exécutez la commande suivante pour exécuter le scan de certificat SSL :

sudo nmap --script ssl-cert 192.168.1.1

Vous pouvez être invité à saisir votre mot de passe. Étant donné que l'utilisateur labex a des privilèges sudo sans mot de passe, appuyez simplement sur Entrée.

Note : 192.168.1.1 est une adresse IP privée et peut ne pas être accessible à partir de votre configuration de réseau actuelle. Si vous n'avez pas de serveur à cette adresse, le scan peut ne pas retourner de résultats ou peut prendre du temps avant de se terminer. Pour les tests, vous pouvez utiliser une adresse IP publique que vous savez avoir un certificat SSL, telle que scanme.nmap.org, ou 8.8.8.8.

Essayons de scanner scanme.nmap.org à la place :

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

Cette commande tentera de se connecter à scanme.nmap.org et de récupérer ses informations de certificat SSL. La sortie affichera des détails tels que le sujet du certificat, l'émetteur, la période de validité et tout Nom Alternatif de Sujet (SAN).

Exemple de sortie (la sortie réelle variera) :

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

Cette sortie montre les détails du certificat SSL pour scanme.nmap.org, y compris le sujet, l'émetteur et les dates de validité.

Scanner le port 443 avec nmap --script ssl-cert -p 443 127.0.0.1

Dans cette étape, nous allons nous concentrer sur le balayage d'un port spécifique, le port 443, en utilisant Nmap et le script ssl-cert. Le port 443 est le port standard pour le trafic HTTPS (Hypertext Transfer Protocol Secure), qui est utilisé pour la communication sécurisée sur Internet. En spécifiant le port, nous pouvons resserrer le balayage et récupérer des informations de certificat SSL spécifiquement pour les services exécutés sur ce port.

La commande que nous allons utiliser est :

nmap --script ssl-cert -p 443 127.0.0.1

Analysons cette commande :

  • nmap : Le scanner de ligne de commande Nmap.
  • --script ssl-cert : Spécifie que nous voulons utiliser le script ssl-cert pour récupérer des informations de certificat SSL.
  • -p 443 : Cette option indique à Nmap de ne scanner que le port 443.
  • 127.0.0.1 : C'est l'adresse de bouclage, également connue sous le nom de localhost. Elle fait référence à votre propre machine.

Maintenant, ouvrez votre terminal Xfce et assurez-vous d'être dans le répertoire ~/project :

cd ~/project

Exécutez la commande suivante pour scanner le port 443 sur localhost :

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

Puisque 127.0.0.1 fait référence à votre propre machine, cette commande tentera de récupérer le certificat SSL de tout service exécuté sur le port 443 de votre machine virtuelle LabEx. Si aucun service n'écoute sur le port 443, Nmap signalera que le port est fermé.

Si vous avez un serveur web ou un autre service configuré pour utiliser HTTPS sur votre machine virtuelle LabEx, vous devriez voir une sortie similaire à la suivante (la sortie réelle variera selon le certificat et la configuration du serveur) :

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

Dans cet exemple, la sortie montre que le port 443 est fermé. Cela signifie qu'aucun service n'écoute sur ce port sur le localhost. Si un service était en cours d'exécution, la sortie inclurait les détails du certificat SSL, similairement à l'étape précédente.

Si vous voulez tester cette commande contre un serveur que vous savez avoir HTTPS activé sur le port 443, vous pouvez remplacer 127.0.0.1 par l'adresse IP ou le nom de domaine de ce serveur. Par exemple :

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

Cela balayera le port 443 sur scanme.nmap.org et récupérera ses informations de certificat SSL.

Ajouter la verbeux avec nmap -v --script ssl-cert 192.168.1.1

Dans cette étape, nous allons ajouter de la verbeux à notre commande Nmap. La verbeux dans Nmap signifie augmenter la quantité d'informations affichées pendant le scan. Cela peut être utile pour comprendre ce que Nmap fait et pour résoudre tout problème. L'option -v augmente le niveau de verbeux. Utiliser -v plusieurs fois (par exemple, -vv ou -vvv) augmente encore la verbeux.

La commande que nous allons utiliser est :

nmap -v --script ssl-cert 192.168.1.1

Analysons cette commande :

  • nmap : Le scanner de ligne de commande Nmap.
  • -v : Cette option augmente le niveau de verbeux, fournissant une sortie plus détaillée.
  • --script ssl-cert : Spécifie que nous voulons utiliser le script ssl-cert pour récupérer des informations de certificat SSL.
  • 192.168.1.1 : C'est l'adresse IP cible.

Maintenant, ouvrez votre terminal Xfce et assurez-vous d'être dans le répertoire ~/project :

cd ~/project

Exécutez la commande suivante pour exécuter le scan de certificat SSL avec verbeux :

sudo nmap -v --script ssl-cert 192.168.1.1

Comme mentionné précédemment, 192.168.1.1 est une adresse IP privée et peut ne pas être accessible. Si vous n'avez pas de serveur à cette adresse, le scan peut ne pas retourner de résultats ou peut prendre du temps avant de se terminer. Pour les tests, vous pouvez utiliser une adresse IP publique que vous savez avoir un certificat SSL, telle que scanme.nmap.org.

Essayons de scanner scanme.nmap.org avec verbeux :

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

La sortie inclura désormais plus d'informations sur le processus de scan, telles que les différentes phases que Nmap traverse, les ports qu'il explore et tout message d'erreur ou d'avertissement qui se produit.

Exemple de sortie (la sortie réelle variera) :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
NSE: Chargé 1 script pour le balayage.
Lancement d'un scan Ping à 10:00
Balayage de scanme.nmap.org (45.33.32.156) [2 ports]
Scan Ping terminé à 10:00, 0.03s écoulé (1 hôte au total)
Lancement de la résolution DNS parallèle de 1 hôte. à 10:00
Résolution DNS parallèle de 1 hôte terminée à 10:00, 0.01s écoulé
Lancement d'un scan de connexion à 10:00
Balayage de scanme.nmap.org (45.33.32.156) [1000 ports]
Port 22/tcp découvert ouvert sur 45.33.32.156
Scan de connexion terminé à 10:00, 2.15s écoulé (1000 ports au total)
NSE: Balayage du script scanme.nmap.org (45.33.32.156)
NSE: Démarrage du niveau 1 (sur 1) du scan.
Lancement de l'NSE à 10:00
NSE terminé à 10:00, 0.02s écoulé
Rapport de scan Nmap pour scanme.nmap.org (45.33.32.156)
L'hôte est actif (0.031s de latence).
Autres adresses pour scanme.nmap.org (non balayées) : 2600:3c01::f03c:91ff:fe18:bb2f

PORT   ÉTAT SERVICE
22/tcp ouvert  ssh
| ssl-cert: Objet : commonName=scanme.nmap.org
| Émetteur : commonName=Let's Encrypt Authority X3
| Type de clé publique : rsa
| Bits de la clé publique : 2048
| Algorithme de signature : sha256WithRSAEncryption
| Non valide avant : 2020-03-18T14:23:03+00:00
| Non valide après :  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

NSE: Post-scan du script.
Lancement de l'NSE à 10:00
NSE terminé à 10:00, 0.00s écoulé
Lecture des fichiers de données à partir de : /usr/bin/../share/nmap
Nmap terminé : 1 adresse IP (1 hôte actif) balayé en 2.34 secondes

Remarquez les informations supplémentaires sur le processus de scan, telles que "Lancement d'un scan Ping", "Scan de connexion terminé" et "NSE: Balayage du script". Ce détail supplémentaire peut être utile pour comprendre comment Nmap fonctionne et pour diagnostiquer tout problème.

Sauvegarder les résultats SSL avec nmap --script ssl-cert -oN ssl.txt 127.0.0.1

Dans cette étape, nous allons apprendre à sauvegarder les résultats de notre scan Nmap dans un fichier. Cela est utile pour une analyse ultérieure ou pour partager les résultats avec d'autres. Nmap propose plusieurs options pour enregistrer la sortie dans différents formats. L'option -oN enregistre la sortie dans un format "normal" lisible par l'homme.

La commande que nous allons utiliser est :

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

Analysons cette commande :

  • nmap : Le scanner de ligne de commande Nmap.
  • --script ssl-cert : Spécifie que nous voulons utiliser le script ssl-cert pour récupérer des informations de certificat SSL.
  • -oN ssl.txt : Cette option indique à Nmap d'enregistrer la sortie au format normal dans un fichier nommé ssl.txt.
  • 127.0.0.1 : C'est l'adresse IP cible (localhost).

Maintenant, ouvrez votre terminal Xfce et assurez-vous d'être dans le répertoire ~/project :

cd ~/project

Exécutez la commande suivante pour exécuter le scan de certificat SSL et enregistrer les résultats dans ssl.txt :

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

Une fois le scan terminé, vous trouverez un fichier nommé ssl.txt dans votre répertoire ~/project. Ce fichier contient la sortie du scan Nmap, y compris les informations de certificat SSL (le cas échéant) pour la cible.

Pour vérifier que le fichier a été créé et contient les résultats du scan, vous pouvez utiliser la commande cat pour afficher le contenu du fichier :

cat ssl.txt

Si un service avec un certificat SSL est en cours d'exécution sur 127.0.0.1, vous verrez les détails du certificat dans la sortie. Si aucun service n'est en cours d'exécution, le fichier contiendra des informations sur le scan, mais pas de détails de certificat.

Par exemple, si le port 443 est fermé, le fichier ssl.txt pourrait contenir :

## 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 vous voulez scanner une autre cible et enregistrer les résultats, remplacez simplement 127.0.0.1 par l'adresse IP ou le nom de domaine souhaité. Par exemple :

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

Cela scannera scanme.nmap.org et enregistrera les résultats dans ssl.txt. N'oubliez pas de vérifier le contenu de ssl.txt en utilisant cat ssl.txt pour confirmer les résultats du scan.

Vérifier les détails du certificat dans le terminal Xfce

Dans cette étape, nous allons vérifier les détails du certificat SSL que nous avons enregistrés dans le fichier ssl.txt dans l'étape précédente. Nous allons utiliser la commande cat pour afficher le contenu du fichier dans le terminal Xfce et puis examiner les informations du certificat.

Tout d'abord, assurez-vous d'être dans le répertoire ~/project :

cd ~/project

Maintenant, utilisez la commande cat pour afficher le contenu du fichier ssl.txt :

cat ssl.txt

La sortie montrera les résultats du scan Nmap, y compris les détails du certificat SSL si un service avec un certificat SSL a été trouvé sur la cible.

Analysons la sortie. Les parties importantes des informations du certificat SSL incluent généralement :

  • Sujet : Ce champ contient le nom de domaine ou l'entité auquel le certificat est émis. Recherchez l'attribut commonName (CN) dans le champ Sujet.
  • Émetteur : Ce champ identifie l'Autorité de certification (CA) qui a émis le certificat. Recherchez à nouveau l'attribut commonName (CN).
  • Type de clé publique : Indique le type d'algorithme de clé publique utilisé (par exemple, RSA, DSA, ECDSA).
  • Bits de la clé publique : Spécifie la taille de la clé en bits (par exemple, 2048, 4096). Des tailles de clé plus grandes offrent généralement une sécurité plus forte.
  • Algorithme de signature : Indique l'algorithme utilisé pour signer le certificat (par exemple, sha256WithRSAEncryption).
  • Non valide avant : La date et l'heure à partir de laquelle le certificat devient valide.
  • Non valide après : La date et l'heure à laquelle le certificat expire. Il est crucial de s'assurer que les certificats ne sont pas périmés.
  • MD5/SHA1 : Ce sont les valeurs de hachage du certificat. Bien que MD5 soit considéré comme faible, SHA1 est également en phase d'élimination. SHA256 ou supérieur est préférable.
  • -----BEGIN CERTIFICATE-----... -----END CERTIFICATE----- : Ceci est les données du certificat encodées réellement au format PEM.

Par exemple, si vous avez scanné scanme.nmap.org et enregistré la sortie dans ssl.txt, la partie pertinente de la sortie pourrait ressembler à ceci :

PORT   ÉTAT SERVICE
22/tcp ouvert  ssh
| ssl-cert: Objet : commonName=scanme.nmap.org
| Émetteur : commonName=Let's Encrypt Authority X3
| Type de clé publique : rsa
| Bits de la clé publique : 2048
| Algorithme de signature : sha256WithRSAEncryption
| Non valide avant : 2020-03-18T14:23:03+00:00
| Non valide après :  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

Dans cet exemple, vous pouvez voir que le certificat est pour scanme.nmap.org, émis par Let's Encrypt Authority X3, utilise une clé RSA avec 2048 bits et est signé avec SHA256.

En vérifiant ces détails, vous pouvez obtenir des informations sur la sécurité et la validité du certificat SSL utilisé par le service cible.

Si vous avez scanné 127.0.0.1 et qu'aucun service SSL n'était en cours d'exécution, le fichier ssl.txt ne contiendra pas les informations détaillées du certificat. Dans ce cas, vous pouvez vouloir installer un serveur web simple avec SSL activé (en dehors des limites de ce laboratoire) pour générer un certificat pour les tests.

Comparaison avec la détection de services dans le terminal Xfce

Dans cette étape, nous allons comparer les informations de certificat SSL que nous avons obtenues avec les capacités de détection de services de Nmap. Cela nous permet de vérifier si le service détecté correspond aux détails du certificat et d'identifier tout écart potentiel.

Tout d'abord, exécutons un scan de détection de services Nmap standard sur la cible. Nous utiliserons 127.0.0.1 comme cible pour cet exemple. Assurez-vous d'être dans le répertoire ~/project :

cd ~/project

Exécutez la commande suivante :

sudo nmap -sV 127.0.0.1

L'option -sV active la détection de la version du service. Nmap tentera de déterminer le service en cours d'exécution sur chaque port ouvert.

La sortie montrera les ports ouverts et le service détecté. Par exemple :

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  ouvert  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocole 2.0)
443/tcp ouvert  ssl/http  ## Exemple : Si un serveur web avec SSL est en cours d'exécution

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

Maintenant, comparez les résultats de détection de services avec les détails du certificat SSL que vous avez vérifiés dans l'étape précédente (à partir du fichier ssl.txt).

Par exemple, si la détection de services de Nmap identifie le port 443 comme étant utilisé pour ssl/http et que le commonName du sujet du certificat SSL correspond au nom de domaine associé au serveur web, alors les résultats de détection de services et les détails du certificat sont cohérents.

Cependant, s'il y a une discordance, cela pourrait indiquer un problème potentiel :

  • Identification incorrecte du service : Nmap pourrait mal identifier le service en cours d'exécution sur un port.
  • Certificat mal configuré : Le certificat pourrait être émis pour un nom de domaine différent de celui qui est servi.
  • Attaque par l'homme du milieu : Un attaquant pourrait intercepter la connexion et présenter un certificat différent.

Pour examiner plus en détail les écarts, vous pouvez utiliser des scripts Nmap plus spécifiques ou des outils comme openssl pour examiner directement le certificat.

Par exemple, si la détection de services indique http sur le port 443 mais que le certificat SSL est pour un autre domaine, c'est un signe d'alerte. Cela pourrait indiquer une mauvaise configuration ou une attaque potentielle.

En résumé, comparer la détection de services de Nmap avec les détails du certificat SSL vous aide à vérifier l'intégrité et la sécurité des services en cours d'exécution sur une cible.

Sommaire

Dans ce laboratoire, nous avons utilisé Nmap avec le script ssl-cert pour scanner et récupérer des informations sur les certificats SSL/TLS à partir de serveurs cibles. Nous avons appris à exécuter la commande de base nmap --script ssl-cert <target_ip> pour scanner une adresse IP spécifique et avons résolu les problèmes potentiels liés aux adresses IP privées en utilisant une adresse publique comme scanme.nmap.org pour les tests.

Nous avons également pratiqué l'exécution du scan en utilisant sudo et avons observé la sortie, qui inclut des détails tels que le sujet, l'émetteur et la période de validité du certificat. Cela constitue une base pour une exploration plus approfondie des capacités de Nmap dans l'analyse des certificats SSL.