Comment pouvez-vous savoir que le code que votre navigateur web télécharge en se rendant sur un site web est bien le code que le site avait l'intention de vous faire exécuter ? À la différence d'une application mobile téléchargée sur un magasin d'applications de confiance, Internet ne propose pas le même degré d'assurance permettant de certifier que le code n'a été manipulé en aucune façon. Nous nous réjouissons aujourd'hui de notre partenariat avec WhatsApp en vue de mettre au point un système qui permettra de confirmer aux utilisateurs que le code qu'ils exécutent en se rendant sur la version web de WhatsApp est bien le code que l'application avait l'intention de transmettre.

Face à la croissance de l'utilisation de son application sur navigateur et du nombre d'utilisateurs à risque (dont des journalistes, des activistes et des défenseurs des droits humains), WhatsApp a souhaité prendre des mesures pour proposer des garanties aux utilisateurs de la version web de l'application. L'entreprise s'est rapprochée de nous afin que nous puissions l'aider à relever considérablement la barre pour les tiers cherchant à compromettre ou altérer d'une quelconque manière le code responsable du chiffrement de bout en bout des messages transmis entre utilisateurs de WhatsApp.

Comment ce processus fonctionnera-t-il ? Cloudflare détient un hachage du code que les utilisateurs de WhatsApp devraient exécuter. Lorsque les utilisateurs lancent WhatsApp dans leur navigateur, l'extension WhatsApp Code Verify (vérification du code WhatsApp) compare un hachage du code exécuté dans le navigateur au hachage détenu par Cloudflare, afin de vérifier facilement que le code en cours d'exécution est bien le code qui devrait l'être.

L'idée en elle-même (comparer des hachages pour détecter la manipulation du code, voire les fichiers corrompus) n'est pas neuve, mais l'automatisation, le déploiement à grande échelle et les mécanismes permettant de s'assurer que ce système « fonctionne » pour les utilisateurs de WhatsApp le sont. Compte tenu de la portée de WhatsApp et de la confiance implicite témoignée envers Cloudflare, nous souhaitons présenter plus en détail la manière dont le système fonctionne réellement du point de vue technique.

Avant de nous lancer, voici un élément important à préciser de manière explicite : Cloudflare fournit un point de terminaison d'audit fiable pour soutenir l'extension Code Verify. Cloudflare ne reçoit jamais les messages, discussions ou tout autre trafic entre utilisateurs WhatsApp : ces éléments demeurent privés et chiffrés de bout en bout. Les messages ou médias transmis ne traversent pas le réseau Cloudflare dans le cadre de ce système. Il s'agit là d'une propriété importante du point de vue de Cloudflare concernant notre rôle en tant que tiers de confiance.

Faciliter la vérification

Revenons à l'année 2003 : Fedora, une distribution Linux populaire basée sur Red Hat, venait d'être lancée. Vous avez hâte de la télécharger, mais souhaitez vous assurer qu'il s'agit bien de la « véritable » distribution Fedora, pas d'une « fausse » version susceptible de siphonner vos mots de passe ou d'enregistrer vos frappes sur le clavier. Vous vous rendez sur la page de téléchargement, lancez ce dernier et constatez la présence d'un hachage MD5 (considéré sécurisé à l'époque) en regard du lien de téléchargement. Une fois le téléchargement terminé, vous exécutez le fichier « md5 fedora-download.iso » et comparez la sortie de hachage au hachage figurant sur la page. Ils correspondent ! Tout va bien dans le meilleur des mondes et vous procédez donc à l'installation de Fedora sur votre machine.

Mais attendez une seconde : si le téléchargement et le hachage sont fournis par le même site web, un acteur malveillant ne pourrait-il pas remplacer à la fois le fichier à télécharger et le hachage par ses propres valeurs ? La vérification « md5 » que nous avons effectuée ci-dessus aboutirait à une réussite, mais nous n'aurions aucune garantie de disposer de la « véritable » version (inaltérée) du logiciel que nous avions l'intention de télécharger.

L'hébergement du hachage sur le même serveur que le logiciel demeure une pratique courante en 2022.

D'autres approches tentent d'améliorer ce processus, comme la fourniture de signatures dont les utilisateurs peuvent vérifier le caractère « signé » à l'aide de clés publiques « connues » hébergées ailleurs. L'hébergement de ces signatures (ou « hachages ») auprès d'un tiers de confiance accroît sensiblement la difficulté des tentatives d'altération. Cette démarche exige toutefois de l'utilisateur qu'il sache à qui faire confiance et qu'il apprenne à se servir d'outils tels que GnuPG. Elle ne nous aide pas particulièrement à faire confiance aux logiciels et à les vérifier à l'échelle du réseau Internet moderne.

C'est là que l'extension Code Verify et Cloudflare entrent en jeu. Publiée par Meta Open Source, cette extension permet d'automatiser ce qui suit : le calcul local du hachage de chiffrement des bibliothèques utilisées par l'application WhatsApp Web et la comparaison de cette valeur de hachage à une source hébergée auprès d'un tiers de confiance (dans ce cas, Cloudflare).

Nous avons illustré ce processus afin d'éclaircir un peu son fonctionnement, en montrant comment chacune des trois parties (l'utilisateur, WhatsApp et Cloudflare) interagit les unes avec les autres.

Schéma des quatre étapes de vérification du code de la version web de WhatsApp.

Le processus permettant de vérifier que le code n'a fait l'objet d'aucune altération se compose de quatre étapes principales :

  1. WhatsApp publie la dernière version de ses bibliothèques JavaScript sur leurs serveurs et le hachage correspondant à cette version sur le point de terminaison d'audit de Cloudflare.
  2. Un client web WhatsApp récupère les dernières bibliothèques chez WhatsApp.
  3. L'extension de navigateur Code Verify va ensuite chercher le hachage de cette version chez Cloudflare, par l'intermédiaire d'une connexion distincte et sécurisée.
  4. L'extension Code Verify compare le hachage « connu » hébergé chez Cloudflare au hachage des bibliothèques calculé localement.

Si les valeurs de hachage correspondent, comme elles devraient le faire dans pratiquement toutes les circonstances, le code est « vérifié » du point de vue de l'extension. Si les valeurs de hachage ne correspondent pas, la divergence indique que le code en cours d'exécution sur le navigateur diffère du code que WhatsApp avait l'intention d'exécuter sur les navigateurs des utilisateurs.

La sécurité doit faire preuve de praticité

Ce processus (et le fait qu'il soit automatisé pour le compte de l'utilisateur) contribue à assurer la transparence de manière évolutive. Si les utilisateurs devaient récupérer manuellement, calculer et comparer les valeurs de hachages eux-mêmes, la détection des altérations ne concernerait qu'une petite fraction des utilisateurs versés dans la technique. Pour un service aussi répandu que WhatsApp, la démarche ne se révélerait ni particulièrement accessible, ni particulièrement conviviale.

Cette approche présente également quelques parallèles avec un certain nombre de technologies en service aujourd'hui. L'une d'entre elles concerne l'intégrité des sous-ressources des navigateurs web : lorsque vous récupérez une ressource tierce (comme un script ou une feuille de style), le navigateur valide que la ressource renvoyée correspond bien au hachage décrit. Si les deux éléments ne correspondent pas, la fonction refuse de charger la ressource, afin d'empêcher des scripts potentiellement compromis de siphonner les données de l'utilisateur. Une autre de ces technologies traite de la transparence des certificats et des projets de transparence binaire associés. Ces deux approches assurent une transparence publiquement vérifiable des ressources essentielles, notamment les certificats WebPKI et les autres blobs binaires. Le système décrit dans cet article n'évolue pas en fonction de ressources arbitraires (pour le moment), mais nous explorons actuellement les moyens qui nous permettraient d'étendre cette offre afin de proposer une solution plus générale et utilisable, comme la transparence binaire.

Notre collaboration avec l'équipe de WhatsApp ne marque que le début de nos efforts en vue d'améliorer la confidentialité et la sécurité sur Internet. Nous cherchons à aider les autres entreprises à vérifier que le code transmis aux utilisateurs est bien celui qui est censé être exécuté. La protection des internautes à grande échelle et l'établissement de mesures de protection de la vie privée constituent des principes fondamentaux des travaux de Cloudflare. Nous sommes impatients de poursuivre dans cette voie au cours de l'année 2022.