Un article a été posté[1] pour inciter les éditeurs à ne pas stocker les mots de passe de leurs utilisateurs en clair, car cette pratique fait prendre des risques aux internautes.

Pour bien comprendre ces risques et sensibiliser tous les acteurs au mieux, une courte vidéo a été préparée. Elle détaille ces concepts et vous aide à détecter les sites aux pratiques douteuses.

Regarder la vidéo sur YouTube

Si vous ne pouvez pas ou ne souhaitez pas regarder un format vidéo, le script de la vidéo est disponible ci-dessous.

Script de la vidéo

Avertissement - Les explications données dans cette vidéo ont pour unique but (i) de sensibiliser les internautes à l’importance d’utiliser un mot de passe robuste et unique sur chaque site, et (ii) de sensibiliser les éditeurs de sites Internet à stocker les mots de passe de ses utilisateurs de façon sécurisée. Les explications ne doivent pas se substituer aux recommandations de l’OWASP, organisme hautement respecté pour ses travaux sur la sécurité des applications. Par ailleurs, le fait de rechercher des failles dans un système ou d’essayer d’accéder à un système ou à des informations qui ne vous appartiennent pas est répréhensible par la loi française.

Bonjour à tous - Vous avez peut-être entendu dans l’actualité que les données de telle entreprise ou de telle application avaient « fuité », ou que les données des clients avaient été « perdues ». Ou bien peut-être avec vous reçu un e-mail vous demandant de changer votre mot de passe, suite à des « incidents » qui ont conduit à la perte de données des clients. Si ce n’est pas le cas, considérez-vous comme chanceux, car cela arrive tous les jours, mêmes aux plus grands.

Il y a plein de raisons qui font que les données et mots de passe se retrouvent à un moment dans la nature. La principale est qu’il est très difficile de réaliser un système sans faille, parce qu’après tout, nous sommes humains.

Même avec tous les efforts du monde, il est très difficile de garantir que les informations restent privées éternellement. On se doit donc de prendre les mesures nécessaires pour minimiser les conséquences si l’irréparable arrivait.

Dans cette vidéo, on va voir ensemble une technique qui permet d’éviter que les hackers retrouvent les mots de passe des utilisateurs, même quand les données sont perdues ou dérobées.

La problématique du stockage des mots de passe

Dans les précédentes vidéos[2], nous avons vu que les hackers pouvaient utiliser un certain nombre de techniques pour arriver à dérober le mot de passe des utilisateurs.

La première est l’attaque par Bruteforce qui consiste à essayer tous les mots de passe possibles, les uns après les autres. Mais cette méthode n’est pas très efficace car le nombre de possibilités peut être élevé si le mot de passe est long ou s’il est composé de beaucoup de caractères différents.

La seconde est l’attaque par dictionnaire qui consiste à utiliser des mots savamment choisis, comme des noms communs, des mots de passe populaires ou des termes qui ont une signification particulière pour l’utilisateur. Cette méthode peut être plus rapide que la première mais le résultat n’est pas toujours garanti.

Ces techniques basiques de piratage ne fonctionnent pas toujours car le hacker n’a pas forcément le loisir de tester plein de possibilités. L’utilisateur a peut-être suivi nos conseils et utilisé un mot de passe long, unique et peu prédictible qui nécessiterait un grand nombre de tentatives. Ou bien, l’éditeur du site Internet pourrait avoir mis en place des protections contre ce type d’attaques. C’est d’ailleurs recommandé de ne pas permettre un nombre illimité de fausses tentatives et de restreindre le nombre de tentatives.

Pour récupérer les mots de passe des utilisateurs, il faut donc imaginer une autre stratégie. Et si le plus simple n’était pas de récupérer directement la liste des identifiants et mots de passe depuis les systèmes de l’éditeur ?

Généralement les informations des utilisateurs comme les adresses e-mails ou les mots de passe sont stockés dans une base de données. Une base de données, c’est une sorte d’application qui permet de stocker des informations de façon organisée pour pouvoir ensuite les récupérer facilement et souvent en fonction de critères bien particuliers.

La base de données contenant les informations sensibles comme les mots de passe des utilisateurs ne devrait normalement pas être accessible au grand public, mais il n’est pas rare que cela arrive parce que :

  • Soit, une faille de sécurité existe sur le serveur ou sur l’application, et une personne malintentionnée l’exploiterait,
  • Soit, une erreur a été commise en interne qui aurait pour conséquence de dévoiler l’ensemble des données,
  • Soit, une personne interne à l’entreprise déroberait les identifiants et les dévoilerait ou les vendrait ensuite.

Dans tous les cas, un hacker pourrait profiter de la situation et utiliser les identifiants et mots de passe des utilisateurs pour récupérer davantage d’informations sur eux ou sur leurs activités. Et si par malheur les internautes utilisent le même mot de passe sur d’autres sites ou d’autres applications, les dégâts peuvent être considérables.

Ce type de fuites de données n’est pas rare, bien au contraire. Il est même probablement plus sage de considérer que ce n’est qu’une question de temps avant que cela arrive et de mettre tout en place pour minimiser les conséquences.

Les empreintes numériques appliquées aux mots de passe

Pour protéger les utilisateurs et éviter des conséquences fâcheuses lorsque les mots de passe se retrouvent dans la nature, il est recommandé de ne pas stocker les mots de passe en clair dans sa base de données, mais de stocker une version chiffrée des mots de passe. Et pour vous expliquer ce mécanisme, prenons un exemple concret.

Imaginons que l’on veuille créer une application sympa qui consisterait à proposer aux internautes de leur envoyer une surprise le jour de leur anniversaire. Pour s’inscrire, on demanderait à l’utilisateur de saisir son adresse e-mail, un mot de passe, et ses coordonnées.

De notre côté, on stockerait ces informations dans une base de données pour les conserver. Et tous les jours, on demanderait à notre base de nous retourner les heureux élus pour leur envoyer leur présent.

Si notre base de données était révélée au grand public, tout le monde aurait accès aux informations de nos clients, dont leurs mots de passe. C’est un risque que l’on ne veut pas prendre. On va donc chiffrer ces mots de passe en utilisant ce qu’on appelle des fonctions de hachage.

Les fonctions de hachage sont des fonctions mathématiques savantes qui permettent de générer ce qu’on appelle des empreintes numériques. Ces empreintes sont une représentation d’un texte donné.

Les empreintes ont une taille fixe, c’est-à-dire que l’empreinte d’un mot de 3 caractères a la même taille que l’empreinte d’un roman entier.

Concrètement l’empreinte du mot « licorne » sera :

4d0b2b722ee70934df8d98a66fb600b36374ecf32bbefc9c1f4ff47729b8d382

et l’empreinte du Tome 1 de Harry Potter sera :

0cf0f8d638ec12c7864a91cc435eee96336ea1179161296ea1c12ccb1758a28c

Il existe un grand nombre de fonctions de hachage, certaines plus ou moins sécurisées. Les plus connues s’appellent MD5 ou SHA suivi d’un nombre. J’ai utilisé SHA-256, par exemple, pour générer les empreintes que je viens de vous montrer.

Ces fonctions de hachages ont deux caractéristiques importantes :

  • La première est qu’elles sont à sens unique, c’est-à-dire qu’à partir d’un texte, on peut calculer l’empreinte, mais l’inverse n’est pas mathématiquement possible.
  • La seconde est qu’il est très improbable que deux textes aient la même empreinte.

Maintenant que vous en savez plus sur ce mécanisme d’empreintes, on peut retourner à notre exemple d’application, et appliquer ce concept à nos mots de passe.

Au lieu de stocker les mots de passe directement, en clair, on va donc calculer les empreintes des mots de passe et les stocker dans notre base de données. Le mot de passe, lui, n’est pas conservé.

La question que vous devriez probablement vous poser à ce stade est sûrement : comment vais-je faire pour vérifier le mot de passe de l’utilisateur lorsqu’il se connecte si les mots de passe sont chiffrés dans notre base de données ? Et c’est là toute l’ingéniosité de ce système. Lorsqu’un utilisateur se connecte, il fournit à nouveau son mot de passe. On peut alors générer une empreinte de son mot de passe, de la même façon que l’on a fait initialement, et comparer cette empreinte avec celle qui est stockée dans notre base. Si les deux empreintes sont similaires, le mot de passe est considéré comme valide.

Protéger les mots de passe, c’est protéger ses clients

Si on se donne toute cette peine, c’est pour protéger les internautes. En s’inscrivant à notre application, les utilisateurs nous font confiance en nous communiquant leurs informations personnelles. Nous avons la responsabilité d’en prendre le plus grand soin, et devons tout mettre en œuvre pour minimiser les risques de perte.

Dans l’éventualité où la base de données qui contient les informations des clients est dérobée ou perdue, un hacker récupérerait non pas les mots de passe en clair des utilisateurs, mais uniquement l’empreinte de ces mots de passe ce qui fait toute la différence, car, rappelez-vous, il n’existe pas de fonction mathématique pour retrouver le mot de passe à partir d’une empreinte. Les empreintes sont donc théoriquement inutiles.

Le second avantage est que l’éditeur de l’application, ou son personnel, n’a pas non plus la capacité de connaître les mots de passe de ses utilisateurs, et potentiellement leur nuire. C’est donc aussi une façon de se protéger soi-même et ses équipes.

Et ce point est un très bon indicateur pour juger du sérieux d’un éditeur. Si vous utilisez un site ou une application qui a la capacité de vous redonner votre mot de passe, c’est qu’il n’applique pas ces pratiques de sécurité. Vous devriez probablement arrêter de l’utiliser et demander à ce qu’il supprime toutes les données qui vous concernent.

Avertissement et conclusion

En appliquant ce concept d’empreintes, on minimise ainsi les conséquences d’une perte de données. Et j’ai bien dit minimise, car ce n’est pas la solution à tout. Il existe des techniques pour essayer de retrouver le texte original d’une empreinte. Nous les verrons probablement dans une autre vidéo, mais gardez pour le moment à l’esprit que ce n’est pas infaillible et que d’autres concepts sont utilisés en complément des empreintes pour sécuriser davantage le système.

Aussi, tout ce qui touche à la cryptographie est relativement complexe et évolue sans cesse. La puissance de calcul des machines permet aujourd’hui d’effectuer des opérations qui étaient avant considérées comme impossibles car bien trop longues. Cette puissance augmente chaque année ce qui oblige à faire continuellement évoluer les usages.

Si vous êtes un éditeur d’applications, il peut être difficile de savoir quoi faire car on peut lire tout et son contraire sur Internet. Pour en savoir plus sur le sujet, consultez les recommandations de l’OWASP, organisme spécialisé dans la sécurité des applications et hautement respecté.

Si vous êtes utilisateur d’un service et que vous souhaitez savoir si une entreprise respecte ces bonnes pratiques de sécurité, vous n’avez malheureusement aucun moyen de le savoir mais rien ne vous empêche de leur demander. Après tout, ce n’est pas une information confidentielle. Au contraire, c’est un gage de sérieux et de confiance.

Alors restez vigilants, et à la prochaine.

Notes et références

  1. Les mots de passe des internautes devraient être conservés avec des mesures particulières pour des raisons déjà expliqués dans un article dédié. Voir « Ne stockez pas les mots de passe de vos utilisateurs en clair ».
  2. Les précédentes vidéos publiées sont : « Les techniques pour trouver les mots de passe et les façons de s’en protéger » et « Comment espionner ou pirater les internautes qui visitent des sites Internet non sécurisés ».