Le TLS Pinning rempart contre l’espionnage des états

Salut les Dyrknautes !

Voici un sujet sécu technico technique comme on les aimes !
J'espère ne pas trop vous larguer, tout en vous apprenant des choses sur ce qu'on appelle le
TLS Pinning ou pour notre grande communauté Francophone : l'épinglage de certificat !

Il ne s'agit pas vraiment d'un hasard de calendrier, ou d'une actus qui m'a été inspiré par un songe, mais 
plutôt d'un incident professionnel qui est survenu récemment sur ce sujet et qui m'a donné l'envie de vous partager un peu d'information sur cette mesure de sécurité qui vise à garantir pour certaines applications sensibles l'origine et la sécurités des flux.

https barré ou pas barré ?

Tout d'abord comprenons nous bien :
Lorsque vous naviguez sur internet, vous avez plusieurs options possibles en observant
la barre d'adresse de votre navigateur.

Soit : 
- Pas de https :  http://.....
- Un https barré et rouge
- Un https incolore ou vert

Mais alors ... comment le navigateur décide qu'un https est bon et un autre non ?

Lorsque vous naviguez sur un site internet, votre navigateur se met en relation avec le serveur où est hébergé le site en question.
Il y a un échange préliminaire d'informations entre ces 2 parties pour pouvoir communiquer d'une façon chiffrée.
Parmi ces informations il y a un "certificat":
Il joue un rôle à la fois dans le chiffrement des données, mais fait aussi office de "carte d'identité".
Pour garantir l'authenticité de ce "certificat", celui-ci est distribué par des "autorités de confiance".
(Pour reprendre l'exemple des cartes d'identité, on peut imaginer que ce sont les organismes reconnues et autorisés à délivrer ces "cartes d'identités")

Notre ordinateur ou le support que nous utilisons (ex: smartphone) a la capacité de savoir si un "certificat" est valide car il dispose d'un mécanisme interne lui permettant
de vérifier si ce certificat a été généré par une de ces fameuses "autorités de confiance".
Ainsi si un certificat n'a pas été généré par l'une de ces autorités de confiance, votre pc, votre smartphone ou bien votre tablette va vous afficher un message : "Attention votre connexion n'est pas sécurisée".

Connexion chiffrée

Lorsque vous naviguez sans https toutes vos requêtes sont en "clairs", cela signifie que si une personne sur le même réseau que vous, ou qu'une application installée sur votre "appareil", alors celle-ci à techniquement la capacité d' "observer" votre activité : 

  • Voir les messages que vous envoyez
  • les mots de passes
  • les informations bancaires
  • etc ....

Bref, savoir ce que vous faites ...

Une connexion "chiffrée" avec le https empêchera cette personne ou l'application malveillante de connaitre votre activité, car elle "chiffrera" (rendra illisible) ce qui est échangé entre vous et le(s) serveur(s) au(x)quel(s) vous êtes connecté SAUF si elle "contrôle" le certificat https utilisé pour "chiffrer les données".

Comme précisé en préambule, il y a le "bon" https : celui qui présente un certificat "reconnu" par une autorité de confiance ...
Et puis il y a l'autre : celui-qui peut être produit par n'importe qui et qui n'est pas "reconnu" par ces même autorités de confiance.

Si vous vous connectez sur un site internet via un réseau sécurité et depuis un appareil non compromis (pc, tablette, smartphone), alors vous devriez n'avoir aucun avertissement sur ce site.
Mais, si le réseau est compromis ... alors vous devriez avoir un "https" barré et un message vous informant que "la connexion n'est pas sécurisée" (mais vous laissant tout de même la possibilité de "poursuivre")

Sur votre navigateur vous pouvez consulter les informations d'un certificat de la façon suivante : 

Ainsi vous pourrez voir le certificat et surtout "l'autorité de confiance" qui l'a délivré.

Et surtout en ce qui concerne la suite de l'article, je vous invite à observer le dernier "bloc", celui-ci contient les "empreintes".
Ces ce bloc de données qui va être essentiel pour comprendre le rôle du TLS Pinning (dans la suite de l'article).

Les certificats racines de confiance

Pour bien comprendre comment votre ordinateur, votre tablette, votre montre connectée, ou votre smartphone  détermine si le "certificat https" qui vous ait fourni par un site, est valide, il faut s'intéresser aux "certificats racines de confiance".

Il s'agit d'un grand répertoire / dossier, présent sur votre appareil  qui recense régulièrement des fichiers "certificats racines de confiance".

Ce sont des petits fichiers qui permettent de vérifier à l'aide d'un mécanisme technique, que lorsque vous faites une requêtes "https" que le certificat communiqué par le serveur soit "compatible" avec l'un de ces "certificats racines de confiance". S'il n'y a pas de correspondance avec l'un d'entre eux, c'est que le "certificat https" n'est pas "reconnu" ... et vous aurez alors le fameux message "Votre connexion n'est pas sécurisée".

Attention, pas d'amalgame, si vous avez ce message cela ne signifie pas forcément que le site que vous consultez n'est pas sécurisé.
Cela signifie simplement que son certificat n'a pas été fourni par une autorité de confiance, dans certains cas cela peut-être parfaitement normal.
Néanmoins si cela survient sur un site que vous avez l'habitude de consulter, et sur lequel ce problème ne s'est jamais manifesté, il se peut que votre appareil ou votre connexion soit compromis(e).

Compromission des certificat racine de confiance d'un appareil

Vous l'aurez compris, les certificats racines de confiance sont essentiels pour permettre de détecter si lorsque vous vous connectez à un site en "https", ce dernier présente un "certificat" reconnu ou non.
En principe le répertoire contenant ces certificats racines de confiance est "sécurisés", mais si votre appareil est "compromis", un acteur malveillant peut altérer ce répertoire pour ajouter ou supprimer des 
certificats racines de confiance.
La conséquence directe c'est que votre appareil, pourrait accepter et reconnaitre des "certificats" qui seraient en temps normal non reconnus.
J'en reviens à mon exemple de "carte d'identité", compromettre le répertoire des certificats racines de confiance, revient à "créer" un nouvel organisme de validation des cartes d'identité, sur lequel l'acteur malveillant à le contrôle, ce qui est drôlement pratique pour faire des faux papiers.

En faisant cela, l'application / l'acteur malveillant s'assure que non seulement vous n'aurez pas l'avertissement "votre connexion n'est pas sécurisée", mais en plus cela lui confère la capacité de voir tous vos échanges.

TLS Pinning ou épinglage de certificat.

Dans le paragraphe précédent, je vous explique qu'il est possible de compromettre les certificats racines de confiance afin que votre système accepte des flux https qui ne serait pas approuvés en temps normal.

Pour faire face à cela, il existe un mécanisme appelé TLS Pinning qui consiste à faire un "double contrôle" :

  1. Le système va valider ou invalider le certificat transmis par le serveur en s'appuyant sur les certificats racines de confiance.
  2. L'application utilisant le TLS Pinning va faire un contrôle supplémentaire sur la signature du certificat pour n'accepter que certains certificat en s'appuyant sur des "empreintes" (Une signature unique).

Ainsi l'application qui a recourt au TLS Pinning à la certitude de communiquer de façon chiffrée avec les sites présentant un certificat identifié précisément par celle-ci.

En principe il n'est pas possible pour monsieur "tout le monde" de créer ou se procurer des faux certificats qui serait reconnu par une autorité de confiance ...
Cependant lorsqu'il s'agit non pas d'un particulier, ni d'une entreprise mais bien d'un "pays" ... cela devient d'un coup plus facile.
Les services de renseignements de certains pays ont ce type de capacité.

Mettre en place du TLS Pinning, permet donc dans certains pays, d'échapper à la vigilance / l'ingérence des autorités, notamment en matière d'échange via des applications de "messageries chiffrées". 

Sans TLS Pinning

Avec TLS Pinning (double contrôle)

Bénéfice  / Risque

Le TLS Pinning nécessite pour le développeur ou l'entreprise qui le met en place une maintenance régulière.
Les certificats disposent d'une date d'expiration, et doivent donc être renouvelés à intervalle régulier.
Ce qui  contraint de mettre régulièrement à jour l'application utilisant le TLS Pinning avec la liste actualisée des "empreintes"  de ces nouveaux certificats.

Le TLS Pinning ne garantie pas une sécurité absolue.
Cela  permet d'être sécurisé sur  :

Sur le cas (2), la sécurité n'est pas "optimale". Si le device est compromis, il devient alors possible de modifier également l'application pour en désactiver les sécurités.
(Décompilation de l'application, suppression de la sécurité, recompilation de l'application).

En conclusion

Le TLS Pinning ne doit pas devenir LA NORME, d'autant qu'il se destine vraiment à identifier des serveurs précis.
Le coût de sa mise en place peut s'avérer élevé à la fois en temps, en technicité et financièrement :
Il s'agit pour moi de vous indiquer que ce type de sécurité existe, mais c'est à vous d'évaluer si votre projet d'application à un réel intérêt à le mettre en place.

Concrètement il s'agit d'un sujet assez simple à appréhender lorsque l'on dispose d'une bonne compréhension générale d'un système d'information et que l'on a quelques connaissances techniques de base.
Néanmoins dans un contexte de vulgarisation, j'ai dû utiliser de nombreux raccourcis et adapter le vocabulaire (le simplifier) pour permettre à tout un chacun de comprendre le fonctionnement et les enjeux.

J'espère ne pas avoir froissées trop les techniciens : qu'ils n'hésitent pas à approfondir / rectifier certaines de mes explications en commentaire.

Pour les autres, vous l'aurez compris, la sécurité absolue n'existe pas, tout est une histoire de moyen.

Le TLS Pinning se destine donc plutôt à se protéger contre des attaques d'envergures avec de gros moyens (des "Etats"), mais pas forcément à lutter contre des petits pirates indépendants.

Je tiens à remercier certaines personnes de mon service qui ont fait office de cobayes à la lecture de cet article, et m'ont permis de l'améliorer par leurs conseils.
Merci à vous @JerB @TedM @ElC

Laisser une réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site est protégé par reCAPTCHA et Google Politique de confidentialité et Conditions d'utilisation appliquer.