PCI DSS – SSL est mort vive SSL+TLS 1.2

Choisir le bon protocole de chiffrement pour PCI DSS

sslAprès une réunion au sein du groupe cartes bancaires, j’ai eu l’occasion de rencontrer Jeremy King Directeur à l’International du PCI SSC pour échanger sur l’utilisation du protocole de chiffrement à utiliser sur une plateforme PCI DSS. La réponse fut brutale : « OpenSSL is broken and using TLS 1.2 is necessary but not ideal ».

Ayant bien compris que nos chiffrements SSL ne pouvaient plus apporter la bonne solution de durcissement au niveau « Compliance PCI DSS »; je vous propose un rappel sur ces protocoles de chiffrements.

L’origine du protocole SSL/TLS était le chiffrement du protocole HTTP (Web), depuis on utilise aussi SSL/TLS sur les services de messagerie ainsi que sur les annuaires, les VPN ou encore les réseaux sans fil.

Longtemps, j’ai pensé que TLS v1.0 était légèrement plus sécurisé que SSL v3.0, son prédécesseur. Cependant, SSL v3.0 était devenu obsolète et les récentes évolutions des menaces, comme la vulnérabilité POODLE ont montré que SSL v3.0 est totalement ouvert et peu fiable pour ne pas dire merdique (en particulier pour les sites Web qui l’utilisent encore à l’insu de leurs clients). Même avant la déclaration de cette faille qui à mis le feu au niveau des CISO/RSSI/RSSO, le gouvernement américain avait déjà exigé que SSL v3 ne devait pas être utilisé pour les communications gouvernementales sensibles ou pour les communications conforme à la HIPAA.

SSL v3.0 est effectivement «mort» comme protocole de sécurité. Il ne doit plus être utilisé sur les environnements PCI DSS. Les entreprises qui utilisent encore SSL V3 sur les protocoles différents du HTTPS d’origine (SMTP, IMAP, VPN, WIRELESS, appliances….)doivent mettre à jour celui-ci avec la version de TLS 1.2 pour retrouver un semblant de sécurité dans les plus brefs délais. Les auditeurs QSA font se faire plaisir lors des audits de vos équipements réseaux 🙁

La version minimale de TLS est la v1.2 car elle est beaucoup plus sécurisé et fixe de nombreuses vulnérabilités présentes dans SSL et TLS v3.0 v1.1. Par exemple, l’attaque BEAST qui peut complètement mettre hors services les sites Web fonctionnant sur les protocoles SSLv3 et TLS v1.0. La version 1.2 de  TLS, si elle est correctement configuré, fournit un chiffrement plus robuste et les méthodes de chiffrement sont encore suffisamment robuste à l’heure ou j’écris ces quelques lignes (Janvier 2015).

Malheureusement, encore aujourd’hui la majorité des sites Web  n’utilisent pas les dernières versions de TLS en 1.2 et ils subissent un faible chiffrement. Ils s’exposent à des risques et ouvrent une surface d’attaque importante eten tant que RSSO/CISO/RSSI/Admin vous devez vérifiez que vos sites Web soient bien configurés en version TLS 1.2 !

 

Comment voir si votre site web utilise le protocole TLS ?

Il suffit de se rendre sur l’URL suivante pour faire un test: https://www.ssllabs.com/ssltest/

tls

Sinon il reste la commande nmap ma méthode préférée…

# nmap --script ssl-cert,ssl-enum-ciphers -p 443,465,993,995 www.example.com

Enjoy 🙂

root@cacti:~/nmap-6.46# ./nmap --script ssl-cert,ssl-enum-ciphers -p 443 www.sample.fr

Starting Nmap 6.46 ( http://nmap.org ) at 2015-01-04 19:40 CET
Nmap scan report for www.sample.fr (999.194.00.94)
Host is up (0.017s latency).
rDNS record for 999.194.00.94: soviet_suprem.kremlin.net
PORT    STATE SERVICE
443/tcp open  https
| ssl-cert: Subject: commonName=*.sample.com/organizationName=Kremlin Inc/stateOrProvinceName=Moscow/countryName=URSS
| Issuer: commonName=Sample Internet Didacture G4/organizationName=Sample Inc/countryName=URSS
| Public Key type: ec
| Public Key bits: 256
| Not valid before: 2014-12-10T11:33:37+00:00
| Not valid after:  2015-03-10T00:00:00+00:00
| MD5:   9919 10a0 baaf e5d8 bcfd a829 3513 ad1a
|_SHA-1: 9b85 76f3 e5ff 0ebc 046f 9125 dd17 308e fe0f 1016
| ssl-enum-ciphers: 
|   SSLv3: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|     compressors: 
|       NULL
|   TLSv1.0: 
|     ciphers: 
|       TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - strong
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|     compressors: 
| 
|   TLSv1.1: 
|     ciphers: 
|       TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - strong
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|     compressors: 
| 
|   TLSv1.2: 
|     ciphers: 
|       TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - strong
|       TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - strong
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - strong
|       TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - strong
|       TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 - strong
|       TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - strong
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - strong
|       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 - strong
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA256 - strong
|       TLS_RSA_WITH_AES_128_GCM_SHA256 - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA256 - strong
|       TLS_RSA_WITH_AES_256_GCM_SHA384 - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|     compressors: 
| 
|_  least strength: strong

Nmap done: 1 IP address (1 host up) scanned in 1.51 seconds
root@cacti:~/nmap-6.46#