Dessine moi un mot de passe


Cet article fait suite à la première partie traitant des erreurs à éviter.
Voyons maintenant ce qu'il est souhaitable de mettre en place pour sécuriser sa vie numérique.

Échauffement

La compréhension de cet article sera facilitée si vous maîtrisez les notions de hash de mot de passe et de salt. Si ce n'est pas le cas, je vous invite à lire ceci.

Pourrir la vie des pirates

Ce n’est pas glorieux comme solution, mais vous pouvez échapper à nombre d’attaques de masse sur les mots de passe en utilisant des caractères non ASCII.
Pour rappel, voici les caractères ASCII:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"# $%&'()*+,-./:;<=>?@[\]^_`{|}~

La plupart des pirates itèrent sur cet ensemble de caractères. Si votre mot de passe contient des choses comme €çùå€çþýûîô¶Âøʱæ𹩮߬ (je vous laisse explorer la richesse de alt gr) croyez moi que ça va moins rigoler au pays de Barbe Noire.

Inconvénient: si vous êtes dans un autre pays et que vous devez taper votre mot de passe sur un clavier étranger, vous pouvez être bloqué.

Un mot de passe pour les gouverner tous et dans les ténèbres les lier

S’il n’y avait qu’une leçon à retenir ce serait celle qui va suivre.

Utilisez un gestionnaire de mot de passe (aussi appelé coffre-fort numérique, vault, ...).

Il s’agit d’un programme qui enregistre tous vos mots de passe dans une liste. Pour accéder à cette liste, il faut un “super” mot de passe que l’on appelle le mot de passe maître.
Vous vous retrouvez alors avec un seul sésame qui déverrouille tous les autres.

L’énorme intérêt est que vous n’avez plus qu’à vous souvenir d’un seul mot de passe. L’inconvénient c’est qu’il doit être solide de chez solide (voir le titre suivant).

Nous prendrons ici l’exemple de Bitwarden, l’un des plus perfectionnés et avec l’avantage d’être totalement open source.
Il se présente sous la forme d’une extension dans le navigateur mais aussi d’une application mobile, d’un client en ligne de commande, d’un programme à installer, ... vous avez le choix.
Vous pouvez utiliser le SaaS que propose Bitwarden ou installer votre propre instance en une commande docker de moins de 300 caractères pour être totalement maître de vos données.
Le comportement d'un gestionnaire de mot de passe est le suivant: lorsqu’il détectera que vous vous connectez à un site, il vous proposera d’enregistrer le mot de passe que vous venez de renseigner. Vous n'avez donc pas à vous en souvenir. 


La prochaine fois que vous vous rendrez sur ce site, il vous suffira de donner votre mot de passe maître et le gestionnaire remplira automatiquement pour vous les champs login et mot de passe avec ce qu’il avait enregistré.
Cela fonctionne même sur mobile:



Fini donc avec la plaie du mot de passe oublié:
Le password a changé. Je le vois dans l’obs, je le ressens dans twitter, je le sens dans l'airbnb. Beaucoup de ce qui existait jadis est perdu, car aucun de ceux qui vivent aujourd’hui ne s’en souviennent.
Étape encore plus cruciale, lorsque vous vous inscrivez sur un nouveau site, les gestionnaires vous proposent une fonction de génération de mot de passe. En effet vu que ce n’est pas à vous de les mémoriser, autant utiliser des mots de passe complètement horribles pour les pirates. Allez-y gaiement, générez des mots de passe totalement aléatoires, de 20 caractères avec des caractères spéciaux.


L’avantage est qu’avec ce degré de sécurité, vous pouvez quasiment vous affranchir de la règle qui dit de modifier vos mots de passe régulièrement.

En effet, si le site où vous êtes inscrit se fait voler sa base d’empreintes de mots de passe, les pirates peuvent lancer des attaques “offline” à plusieurs milliards d’essais par seconde au lieu de plusieurs milliers. Mais à ce niveau de force de votre mot de passe, qu'importe, ils sont à quelques univers d’arriver à leur fin. Vous avoir profilé ne leur sera d’aucune utilité puisque le gestionnaire l’a généré aléatoirement.

Imaginons un cas moins favorable où le site stockait les mots de passe en clair. Effectivement le pirate peut accéder frauduleusement à vos données sur ce site, mais comme vous ne réutilisez ce mot de passe nul part ailleurs (car le gestionnaire en génère un unique par site), le pirate ne peut pas faire le tour du propriétaire de votre vie numérique.

Il pourrait y avoir une faiblesse si l’attaquant peut connaître la date précise où vous vous êtes inscrit sur le site qu’il vise (parfois on peut lire “Membre inscrit le 21/08/2016 à 17:02”) et que votre gestionnaire de mot de passe utilise de l’aléa basé sur l’horloge (ce que ne fait pas Bitwarden heureusement de ce que j'ai vu dans le code source).

J'ai utilisé le terme "quasiment" s'affranchir de cette règle car si les pirates obtiennent l'accès à un compte, même si ça ne menace pas le reste de votre vie numérique, ils peuvent toujours vous espionner sur ce compte-là.
Donc changer les mots de passe régulièrement fera sauter leur accès frauduleux.

Des gestionnaires de mots de passe permettent de changer automatiquement les mots de passe sur les sites les plus courants (facebook, twitter, etc.) à intervalle régulier (pas Bitwarden malheureusement).
D'autres (dont Bitwarden) peuvent vous avertir lorsqu'un de vos mots de passe a fuité dans la nature suite à un piratage de site.

Utiliser des passe-phrases

Bien, maintenant que l'on a plus qu'un seul mot de passe maître, il faut s'assurer qu'il soit hors de portée des pirates.

Quelques conseils pour le créer :
  • Ne le notez nul part (il n’y en a qu’un seul à mémoriser, normalement votre cerveau en est capable)
  • Faites en sorte qu’il soit vraiment long, 15 caractères minimum, lâchez-vous
  • Évitez qu’il ne soit construit qu’à partir d’une seule racine (vous ne serez jamais assez original), mettez en au moins 3 ou 4
  • Veillez à ce qu’il n’y ait pas un rapport évident avec vous ou avec le contexte où il est utilisé
  • Évitez qu'un pirate le retrouve en 2 heures.
Pour ce dernier point, nous allons explorer le principe des passe-phrases.
Une passe-phrase est une suite de mots accolés comme JambonSurLaTable, CoursVoleEtMeVenge, SangokuHotelHypnose, etc.

Mais dans une bonne passe-phrase les mots choisis n'ont pas de rapport entre eux. Sinon l'entropie diminue drastiquement.
En effet, si vous choisissez une vraie phrase, les règles de syntaxe du français éliminent du travail pour l'attaquant:
  • Une phrase française commencera souvent par "Le, Les, Des, Ma, Je, etc.", le pirate peut donc miser statistiquement la dessus. 
  • Le mot "Je" ne sera quasiment jamais suivi de "extrêmement", de "fadaise", etc. mais plutôt d'un verbe conjugué, ce qui réduit le nombre de mots à tester
L'ANSSI proposait notamment de construire des passe-phrase d'après le premier caractère de chaque mot d'une phrase:
Je suis très content car il fait beau aujourd'hui -> jstccifbah
Ce n'est pas spécialement une bonne idée dans la mesure où, comme nous l'avons dit, l'entropie n'est pas suffisamment importante à cause de la syntaxe française. Mais, de surcroît, nous n'utiliserons probablement que des phrases "connues", du style des citations inspirantes (vous savez, ce fléau qui ravage Facebook) :


Le principe de Kerckhoffs nous dirait de postuler que le pirate sait que nous avons suivi cette méthode. Or, en testant des citations connues, le pirate aura de bonnes chances de percer de nombreuses passe-phrases.

De la même manière, évitez à tout prix d'utiliser le nom du site dans votre passe-phrase. pas de FacebookLetMeIn ou MonPasswordTwitter.

Si les mots sont suffisamment "aléatoires" entre eux, c'est très robuste aujourd'hui, c'est même de loin la meilleure solution.
Mais ce même principe de Kerckhoffs nous dit de postuler que le pirate sait que nous avons utilisé 3 ou 4 mots collés. Si dans le futur tout le monde se met à utiliser des passe-phrases, ce sera d'autant plus crédible.
Dès lors la robustesse de notre passe-phrase prend comme valeur C le nombre de mots disponibles et L devient 3 ou 4 (les mots deviennent notre alphabet et le nombre de mot devient la longueur du mot de passe).

Si nous choisissons 4 mots courants (un dictionnaire français usuel contient environ 32 000 mots), la complexité de notre mot de passe est de 32 0004
soit 1 048 576 000 000 000 000 (environ 4 mois à la vitesse de 100 milliards d'essais par seconde). Ce n'est pas satisfaisant.

Obtenir un mot de passe à l'abri de cette attaque par dictionnaire nécessite donc d'augmenter la taille du dictionnaire que doit utiliser l'adversaire (puisque augmenter le nombre de mots deviendrait difficile pour notre mémoire). Si vous utilisez des noms propres ou des mots étrangers, le dictionnaire français ne sera plus suffisant pour craquer votre passe-phrase.
Obliger l'adversaire à employer un dictionnaire d'au moins 100 000 mots lui demande déjà d'attendre 3 millions d'années (au lieu de 4 mois) pour trouver votre passe-phrase. Donc n'hésitez pas à incorporer de l'exotisme dans vos choix.
SaucissonPierreDuelFragrance est moins robuste que PlayaGuignolRugirSkywalker.

Une autre solution, peu élégante, consiste à incorporer quelques dérivés dans les mots: insérer des chiffres à la place ou en plus des lettres, rajouter un caractère de ponctuation par-ci par-là, etc.
Bref tout ce que j'avais dit qui était prédictible et donc pas bien... et bien dans ce cas-ci c'est moins pathétique. En effet, si, pour chaque mot, le pirate doit tester 10 variantes en l33t et/ou 5 variantes avec des caractères spéciaux, on fait passer un dictionnaire de 32 000 mots à facilement plus de 200 000. Ce qui est bien au delà de ses capacités.

Une protection très utile également est celle qui consiste à ce que votre compte soit verrouillé temporairement si quelqu'un effectue trop de tentatives infructueuses de connexion. Ainsi votre mot de passe maître ne peut pas facilement être attaqué à distance. Mais c'est une fonction qui dépend rarement de vous.

En conclusion, utiliser une passe-phrase composée de 3 ou 4 mots n'ayant aucun rapport entre eux est la meilleure solution, de très très loin, aujourd'hui et pour les années qui viennent (sauf révolution technologique).
Quand tout le monde utilisera des passe-phrases, il sera temps de se reposer la question.

Distinguer les usages

Vous pouvez raisonnablement utiliser deux mots de passe différents en tout pour obtenir un compromis acceptable entre sécurité et simplicité.

Une première passe-phrase pour votre gestionnaire de mot de passe et comme clé de chiffrement pour le disque de votre machine (on va dire sur Linux seulement actuellement).
En effet, cette clé de chiffrement n'est pas stockée sur la machine et la criticité est comparable car si l'intégrité de votre système n'est pas assurée, vos mots de passe sont exposés.
Enfin, cette même passe-phrase peut être utilisée pour le compte administrateur de votre machine. Là, le risque de fuite est un niveau au dessus car l'empreinte de ce mot de passe est stockée sur le disque de la machine.
Les cas imaginables d'accès à cette empreinte sont restreints si le disque est chiffré et sans une vulnérabilité permettant une escalade de privilèges. De ce fait, le risque reste mesuré.

Une seconde passe-phrase peut être dédiée au compte utilisateur non privilégié et au compte email.
L'accès à votre compte email permet généralement de compromettre 90% de votre vie numérique puisque le pirate peut utiliser la fonction d'oubli du mot de passe sur les sites où vous êtes inscrits (à l'exception des banques en ligne et quelques sites administratifs). Il est donc très sensible. On serait tenter d'utiliser la première passe-phrase.
Cependant, rien n'empêcherait votre fournisseur (partant du principe que vous n'êtes pas auto-hébergé) GMail, Yahoo, Protonmail, etc. d'enregistrer à votre insu ce mot de passe et d'accéder à toutes vos données si ce mot de passe était le même que celui du gestionnaire.
Vous n'avez pas le contrôle non plus sur leur façon de le stocker. S'ils se font pirater, le résultat pourrait aussi être catastrophique. Or ces services de courriel sont exposés à tout Internet, donc la probabilité que cela survienne n'est pas négligeable. Pour ces raisons, c'est la seconde passe-phrase qui sera associée à votre compte email.

A nos amis développeurs

Si vous vous êtes égarés sur cet article entre deux commitstrip, vous êtes peu être restés sur votre faim.
Quand on parle de mots de passe, il y a ce qu'on peut faire nous en tant qu'utilisateurs mais il y a surtout ce que peuvent faire les développeurs des sites Web sur lesquels nous n'avons pas de prise.

Ami développeur, si tu cherches des idées pour pouvoir mépriser tes collègues sur leur gestion des mots de passe, la bible est évidemment le cheat sheet de l'OWASP.
Je serai étonné que tu n'y découvres pas au moins une ou deux recommandations que tu n'appliques pas encore.

La règle la plus importante est évidemment "Design password storage assuming eventual compromise".

Cela passe notamment par l'utilisation de sels pour éviter les cas un peu scandaleux ou les mots de passe identiques sont stockés par des hash identiques :


Mais aussi de choses plus fines comme l'utilisation d'empreintes Scrypt pour rendre le calcul d'une empreinte assez coûteux pour gêner les pirates, etc.



Auteur: David Soria

Commentaires

  1. bonne idée ! je vais utiliser PlayaGuignolRugirSkywalker comme mot de passe du coup !
    ^^

    RépondreSupprimer

Enregistrer un commentaire

Posts les plus consultés de ce blog

Vie, mort et faits d'arme des mots de passe

Kit de survie en cas d'infection par un ransomware