SSL stripping : notions de base et options de protection
Le protocole de transmission SSL (Secure Sockets Layer) et son successeur TLS (Transport Layer Security) comptent parmi les composants les plus importants d’une présence Web sécurisée. En effet, ils chiffrent les données que les navigateurs et les serveurs échangent via HTTP avant qu’elles ne soient envoyées, même lors de la commutation entre un HTTPS chiffré et une page non protégée. Ce procédé permet non seulement d’empêcher le transfert de données standard en texte clair, mais aussi d’envoyer un cookie configuré sous SSL avec une connexion non sécurisée. Les certificats utiles garantissent l’authenticité du nom d’hôte du serveur au client demandeur. Le protocole TLS offre donc une sécurité à plusieurs égards, ce qui rend son utilisation indispensable lors de la transmission de données sensibles.
En général, TLS est l’un des protocoles les plus sécurisés et a jusqu’à présent bien résisté contre les tentatives d’attaque. Cependant, dans certaines circonstances, des outils spéciaux (comme Sslstrip programmé à des fins de démonstration) peuvent avoir accès au transfert de données avant le début du chiffrement. Un tel accès externe non autorisé est appelé « Stripping SSL » :
- Sécurisez vos transferts de données
- Renforcez la confiance de vos clients
- Améliorez votre positionnement sur Google
Qu’est-ce que le SSL Stripping ?
En 2002, le développeur Moxie Marlinspike a programmé Sslsniff, un outil capable d’éliminer le chiffrement SSL. Le logiciel proxy permettait d’infiltrer les flux de données SSL et d’échanger le certificat serveur avec l’un de ses propres certificats. Avec son application, Marlinspike a voulu souligner le point faible d’Internet Explorer, qui était au moment de la publication de Sslsniff particulièrement vulnérable aux attaques de l’homme du milieu. Microsoft a été en mesure de combler la faille de sécurité, et d’autres clients connus sont maintenant largement protégés contre ce type d’attaque, à condition d’avoir la version actuelle et la bonne configuration.
Le programme Sslstrip a été présenté par Marlinspike en 2009 dans le cadre de la conférence sur la sécurité Black Hat DC. Comme son précédent outil, Sslstrip est un proxy qui se positionne entre le client et le serveur et tente de contourner la certification des navigateurs. À cette fin, l’outil recherche spécifiquement sur les sites Web délivrés par les serveurs Web, des liens et des redirections intégrés, qu’il redirige vers une page d’ouverture de session protégée par SSL, comme le lien suivant :
<a href="https://exemple.com/login.php">
Si le proxy trouve un tel lien, il le modifie en un lien HTTP équivalent. L’utilisateur envoie l’enregistrement avec son navigateur au lieu des données ordinaires prétendument chiffrées, en texte clair. Grâce à Sslstrip, le hackeur potentiel se positionne en tant que station intermédiaire et peut ainsi facilement lire et accéder à des informations confidentielles. Comme le SSL Stripping ne provoque pas de connexion invalide, aucun message d’avertissement n’apparait. En règle générale, l’utilisateur ne remarque même pas que les données sont transmises sans chiffrement.
Comment implémenter un SSL strip ?
Peu importe si Sslstrip ou une autre application similaire est utilisée, la première chose nécessaire pour le hackeur est de basculer son proxy entre le navigateur et le serveur Web. Ce n’est que si le logiciel est capable d’intercepter ou de transmettre des flux de données qu’il a la possibilité d’insérer des URL modifiées par le SSL stripping. Les trois méthodes suivantes sont les plus couramment utilisées pour la mise en œuvre :
- Entrée incorrecte du proxy dans les options du navigateur : si votre système est la cible de cybercriminels, ce n’est souvent pas l’ensemble de l’ordinateur mais simplement le navigateur qui est véritablement ciblé. Les programmes malveillants s’assurent alors qu’un serveur proxy externe est automatiquement saisi dans les paramètres sans que l’utilisateur ne s’en aperçoive.
- ARP ou NDP Spoofing : au sein d’un sous-réseau, un attaquant peut utiliser l’ ARP Spoofing (IPv4) ou le NDP Spoofing (IPv6) afin de mettre son proxy en jeu. Les deux protocoles servent à résoudre les adresses IP en adresses matérielles correspondantes (également appelées adresses MAC). En utilisant les messages manipulés de ces protocoles, le hackeur peut remplacer les adresses matérielles demandées par celles de son propre système, puis intercepter les paquets de données transmises.
- Mettre en place son propre hotspot : la troisième option est que le périphérique sur lequel le serveur proxy est en cours d’exécution peut également agir comme un routeur. En tant que passerelle standard comprenant un serveur DHCP, elle peut ensuite attribuer des adresses IP aux utilisateurs, par exemple, mais elle peut aussi lire et transférer des paquets envoyés au-delà des limites du sous-réseau créé. Ceci fournit également la base parfaite pour le SSL stripping.
Dès que le proxy est positionné, l’attaquant n’a alors en principe pas besoin de faire grand-chose de plus pour le SSL strip : il doit juste exécuter l’outil, qui envoie des liens modifiés dans les situations appropriées et en cas de succès délivre des informations non chiffrées comme les données bancaires ou de connexions de l’utilisateur.
En tant qu’utilisateur, puis-je reconnaitre le SSL Stripping ?
Le serveur et le navigateur n’ont pas la capacité de détecter un SSL strip. Les deux applications supposent qu’elles communiquent avec le véritable partenaire contacté, de sorte qu’elles ne doutent pas de l’intégrité des données transmises. Pour les utilisateurs, la situation est assez similaire, car à première vue, la visite du site semble se dérouler comme souhaité. Les pages manipulées par SSL stripping ne sont reconnaissables que dans quelques cas exceptionnels sur la base de détails techniques ou de conception. À moins d’une mise en page remarquablement problématique ou de retards importants lors du chargement de la page, il y très peu de signes indiquant que le chiffrement SSL est absent.
Cependant, depuis un certain temps déjà, les lignes d’adresses des navigateurs apportent des conseils et informations de différentes manières. Par exemple, pour marquer les pages Web avec une connexion sécurisée, la barre d’adresse dans les anciennes versions d’Internet Explorer de Microsoft était entièrement verte. D’autres navigateurs ne mettaient en évidence que le nom précédent de l’entreprise, jusqu’à ce que ce type de signalisation, commun aux premiers appareils mobiles compatibles avec le Web, soit remplacé par les symboles actuels et courants que sont notamment le cadenas de sécurité. Mais même ces indices visuels ne garantissent pas toujours le fait que le page visitée n’a pas été manipulée par des outils comme Sslstrip. Puisque un hackeur contrôle l’ensemble du transfert de données, il est alors tout à fait capable de délivrer un symbole similaire faisant office de favicon pour parfaire sa tromperie.
Quels sont les options de protection ?
La difficulté à détecter les pages manipulées rend les attaques de SSL stripping dangereuses pour les utilisateurs : les certificats de chiffrement utilisés par tous les exploitants de sites Web sérieux sont synonymes de sécurité et de fiabilité et éliminent les inquiétudes des visiteurs au niveau de la divulgation de données personnelles. De plus, en principe, SSL offre aussi la protection nécessaire, car la possibilité de lire et d’intercepter des paquets de données ne résulte pas d’une faille de sécurité dans le protocole même, mais vient du fait que le chiffrement même est empêché. Afin de se protéger des Ssl strip, chaque utilisateur doit donc forcer l’établissement de connexions chiffrées HTTPS, par exemple par les moyens suivants :
- Saisir L’URL manuellement : une mesure qui est extrêmement fastidieuse mais efficace consiste à saisir manuellement l’URL HTTPS complète.
- Extension de navigateur : il existe plusieurs extensions de navigateur qui peuvent aider à accéder aux versions chiffrées si elles existent. Par exemple, l’extension HTTPS Everywhere utilise des listes de domaines et de règles pour gérer tous les appels de page via des connexions HTTPS. Les versions pour Firefox, Firefox for Android, Chrome et Opera sont disponibles sur le site Internet de la Electronic Frontier Foundation qui développe et maintient à jour l’extension avec le projet Tor.
- Sauvegarder les URL sûres comme favoris : si vous utilisez fréquemment un service Web protégé par SSL (banque en ligne, service de Cloud etc.), vous pouvez ajouter la version HTTPS à vos favoris et ainsi toujours y accéder via ce signet. Une condition préalable est d’être certain de naviguer sur un réseau sécurisé lors de la mise en signet. Sinon, le risque est d’inclure une URL déjà manipulée dans votre liste de favoris.
En tant qu’opérateur d’un projet Web, vous pouvez aussi lutter activement contre le SSL stripping. Par exemple, une étape de base consiste à activer le chiffrement pour toutes les pages du site Internet et à forcer la redirection des connexions HTTP entrantes vers des pages sécurisées. De même que pour les cookies, si vous ne souhaitez pas renoncer aux données utiles pour l’analyse Web, vous devez vous assurer qu’ils ne sont pas renvoyés via des connexions HTTP non sécurisées. Pour cela, il vous suffit d’étiqueter les cookies avec l’attribut « Secure » en vous assurant que votre serveur ne reçoit que des informations via HTTPS. Une autre mesure de sécurité est la norme IETF HSTS, décrite plus en détail dans la section suivante.
Comment HSTS contribue à lutter contre le SLL Stripping ?
Trois ans après que Marlinspike avec son logiciel sslstrip ait attiré l’attention sur la vulnérabilité des sites Web certifiés SSL, l’IETF (Internet Engineering Task Force) a spécifié dans la RFC 6797 le mécanisme de sécurité HSTS (HTTP Strict Transport Security). Ceci permet aux serveurs Web d’informer les clients qui établissent des connexions qu’ils accèdent au site Web exclusivement par le biais d’une connexion HTTPS pendant un certain temps. Pour cela, le serveur utilise le champ « Strict-Transport-Security » ainsi que la directive « max-age », qui spécifie la période de validité de l’instruction en secondes, dans l’en-tête d’une réponse HTTP classique. Par exemple, pour rendre un domaine accessible pendant un an exclusivement par connexion chiffrée, la réponse HTTP du serveur Web doit contenir la ligne suivante :
Strict-Transport-Security: max-age=31536000
A l’aide du paramètre « includeSubDomains », la commande peut être étendue à tous les sous-domaines de la présence Web, de sorte que l’utilisation de SSL/TLS est ici forcée. Si un navigateur reçoit un message avec une instruction « Strict-Transport-Security » du serveur Web contacté, toutes les requêtes non chiffrées seront automatiquement converties en requêtes chiffrées avec des connexions futures au domaine respectif. Si la sécurité de la connexion ne peut pas être garantie, alors un message d’erreur apparait et la page demandée n’est pas appelée.
HSTS est une solution permanente pour protéger un site Web et ses visiteurs contre les attaques avec SSL-Strip ou d’autres outils similaires. Cependant, comme nous l’avons déjà mentionné dans l’article, il existe toujours une toute première structure de connexion qui peut être manipulée avant que le mécanisme de sécurité ne puisse intervenir. Pour résoudre ce problème, Google a mis en place une liste de pré-chargement (Preload List) pour son navigateur Chrome, qui contient des projets Web accessibles uniquement via HTTPS. D’autres éditeurs de navigateurs ont adopté le principe et mis en œuvre des listes de pré-chargement HSTS basées sur la liste de Chrome. Pour ajouter votre site à la liste, vous pouvez soumettre une demande sur la page de projet de Google.
afin de figurer dans la « Preload » liste, certaines conditions préalables doivent être remplies : logiquement, vous devez pouvoir présenter un certificat valide et exécuter tous les sous-domaines via HTTPS. En outre, le champ HSTS dans les réponses du serveur Web au domaine principal doit être structuré comme suit:
La directive « max-age » doit être valide au minimum pendant 18 semaines (10886400 secondes).
La directive « includeSubDomains » doit être spécifiée.
La directive « preload » doit aussi être définie.
S’il existe un paramètre de transfert, il doit aussi contenir l’en-tête HSTS.