Script NMap pour tester les versions SSL et les suites de chiffrement

Cet outil est très utile si vous effectuez une analyse de vulnérabilité et que vous devez apporter des modifications à un serveur et que vous voulez tester ces modifications. Cela vous permettra d'effectuer une analyse rapide sans avoir besoin de faire une analyse complète des vulnérabilités.

> sudo nmap -sV --script ssl-enum-ciphers -p 443 metropole.rennes.fr 
 
Starting Nmap 7.60 ( https://nmap.org ) at 2019-12-31 11:10 CET
Nmap scan report for metropole.rennes.fr (185.150.252.12)
Host is up (0.025s latency).
 
PORT    STATE SERVICE  VERSION
443/tcp open  ssl/http nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
| ssl-enum-ciphers: 
|   TLSv1.0: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: server
|   TLSv1.1: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: server
|   TLSv1.2: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CCM_8 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CCM (rsa 2048) - A
|       TLS_RSA_WITH_ARIA_256_GCM_SHA384 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CCM_8 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CCM (rsa 2048) - A
|       TLS_RSA_WITH_ARIA_128_GCM_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: server
|_  least strength: A
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
 
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 36.44 seconds

Ce script lance des connexions SSLv3/TLS de manière répétée, chaque fois qu'il essaie un nouveau chiffrement ou un nouveau compresseur tout en enregistrant si un hôte l'accepte ou le rejette. Le résultat final est une liste de tous les algorithmes de chiffrement et compresseurs qu'un serveur accepte.

https://nmap.org/nsedoc/scripts/ssl-enum-ciphers.html

Chaque suite de chiffrement est indiquée par une lettre (de A à F) indiquant la force de la connexion. La note est basée sur la force cryptographique de l'échange de clés et du chiffrement du flux. Le choix de l'algorithme d'intégrité du message (hash) n'est pas un facteur. La ligne de sortie commençant par “ Least strength ” indique la force du chiffrement le plus faible offert. La notation est basée sur le guide de notation des serveurs SSL de Qualys SSL Labs, mais ne prend pas en compte le support du protocole (version TLS), qui représente 30% de la notation des SSL Labs.

SSLv3/TLSv1 nécessite plus d'efforts pour déterminer quels chiffrement et méthodes de compression un serveur prend en charge que SSLv2. Un client liste les chiffrement et compresseurs qu'il est capable de prendre en charge, et le serveur répondra avec un seul chiffrement et compresseur choisi, ou un avis de rejet.

Certains serveurs utilisent la commande de la suite de chiffrement du client : ils choisissent la première des suites proposées par le client qu'ils prennent également en charge. D'autres serveurs préfèrent leur propre commande : ils choisissent leur suite préférée parmi celles proposées par le client. Dans le cas de la commande du serveur, le script fait des recherches supplémentaires pour découvrir la liste des préférences triées du serveur. Sinon, la liste est triée par ordre alphabétique.

Le script avertira de certaines erreurs de configuration de SSL comme les certificats signés en MD5, les paramètres DH éphémères de mauvaise qualité, et la vulnérabilité POODLE.

Ce script est intrusif car il doit initier de nombreuses connexions à un serveur, et est donc assez bruyant.

Il est recommandé d'utiliser ce script en conjonction avec la détection de version (-sV) afin de découvrir les services SSL/TLS s'exécutant sur des ports inattendus. Pour les ports SSL les plus courants comme 443, 25 (avec STARTTLS), 3389, etc. le script est assez intelligent pour s'exécuter tout seul.

Références :