Test SSL à la mano

De Vulcainreo, mar. 08 décembre 2015, dans la catégorie Hacking

Hacking

Ce post est un mémo des commandes usuelles pour vérifier la légitimité du résultat d'un test automatique. Je vais parcourir ici la plupart des faiblesses présentes sur SSL/TLS et bien sur, rien n'est exhaustif :)

Protocoles

Support de SSL Version 2

La version 2 du protocole SSL date maintenant de plus de 20 ans. Elle est vulnérable à de très nombreuses faiblesses dont : CVE-2015-0134 (score 10) ou CVE-2010-0359 (score 10) La commande suivante permet de vérifier si le serveur est vulnérable :

#openssl s_client -ssl2 -connect localhost:443

Le serveur n'est pas vulnérable si la réponse est est similaire à :

CONNECTED(00000003)
458:error:xxxx:SSL routines:SSL2_WRITE:ssl handshake failure:xxxx
Support de SSL Version 3

La version 3 est considérée comme sécurisée si elle possède une configuration béton. Néanmoins, celle-ci souffre de nombreuses vulnérabilités telles que POODLE en lien avec l'exploitation d'une faiblesse dans les blocs chiffrés de chainage (mode CBC). Il est a noter que seuls les suites cryptographiques RC4 sont vulnérables. La commande suivante permet de vérifier si le serveur est vulnérable :

#openssl s_client -ssl3 -connect localhost:443

Le serveur n'est pas vulnérable si la réponse est est similaire à :

CONNECTED(00000003)
458:error:xxxx:SSL routines:SSL3_WRITE:ssl handshake failure:xxxx

Suites cryptographiques

Enumération des suites acceptées

De nombreuses suites cryptographiques peuvent être utilisés lors de la négociation d'une session chiffrée. Il faut distinguer les suites cryptographiques proposées par défaut par le serveur et celle qui pourrait être renégociées par un attaquant afin de dégrader le niveau de sécurité des échanges. Pour évaluer les suites cryptographiques acceptées par le serveur, deux outils sont disponibles pour chaque version SSL acceptée par le serveur :

Les suites considérés comme faibles sont :

Analyse du certificat

La commande suivante permet de lister, de manière lisible, les propriétés du certificat :

#openssl s_client -connect localhost:443 | openssl x509 -noout -text

La lecture des propriétés du certificat permet de connaitre :

Des informations intéressantes peut être récupérer dans les URLS d'accès aux CRL (CRL Distribution Points) et information sur l'authorité (Authority Information Access)

Renégociation sécurisée

Le protocole SSL autorise une client a renégocier une session en cours afin d'obtenir une nouvelle clé de chiffrement. En 2009, une vulnérabilité a été identifiée permettant à un attaquant d'injecter du contenu dans les entêtes d'une session afin de compromettre son intégrité

Cette vulnérabilité n'est valable que si :

Pour vérifier cette vulnérabilité, la phrase Secure Renegociation IS NOT supported doit être présente dans la trace de la commande openssl s_client -connect localhost:443 Afin de vérifier si le client peut être à l'initiative d'une renégociation, le caractère R doit être transmis lors du prompt après lancement de la commande openssl s_client -connect localhost:443

Si le résultat est similaire à xxxx:error:140xxxx5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_xxxx:, le serveur n'est pas vulnérable.

Attaque des algorithmes de compression
CRIME

L'attaque CRIME (Compression Ration Info-leak Made Easy) exploite une faiblesse de l'algorithme de compression TLS. [a suivre]

BREACH
Attaque de l'implémentation
Heartbleed
CSS Injection
POODLE

Liens utiles