Mots de passe
Je suis horrifié par la politique de sécurité de la plupart des sites web. Peut-être qu’il manque une solide formation aux développeurs web sur les questions de sécurité. Peut-être que les clients n’en ont rien à foutre et ne sont pas prêt à payer un poil plus cher pour avoir un site mieux sécurisé. Pire, peut-être qu’ils sont prêts à payer mais qu’on les arnaque en leur vendant de la merde.
Commençons par un principe de base : jamais personne ne doit jamais avoir accès à un mot de passe, par aucun moyen, sous quelque forme que ce soit. Jamais. JAMAIS !Pourquoi ? Parce que les utilisateurs ont tendance à toujours utiliser le même mot de passe partout. C’est mal, mais ils le font quand même. Du coup, si un mot de passe est compromis sur un site quelconque par une personne mal intentionnée, il y a toutes les chances pour qu’elle essaie de voir si par hasard, ce mot de passe ne fonctionnerait pas aussi sur d’autres sites : twitter, facebook, la boîte mail de l’utilisateur, etc. La boîte mail est bien sûr le plus sensible. Une fois qu’un tiers a accès à vos mails, il a accès à l’option « J’ai oublié mon mot de passe » de tous les sites sur lesquels vous avez des comptes.
Ne croyez pas que seul un hacker de haut niveau puisse pirater un site. Ça peut être un employé de la boîte qui gère le site web et qui a tout naturellement accès à la base de données qui se trouve derrière. Ça peut aussi être l’ordinateur qui fait tourner le site qui est saisi par un huissier sur ordre de justice, puis revendu aux enchères à un inconnu avec toutes les données qu’il y a dessus (la boîte où je travaillais en 1999 a été confrontée à ce problème). Ça peut être un bug qui fait qu’un utilisateur régulier a accès aux infos d’un autre utilisateur (le site de Navigo a eu ce problème il y a quelques années).
De ce principe de non-accessibilité des mots de passe découle quelques règles de conception technique.
- Un mot de passe ne doit jamais être stocké, ni en clair, ni crypté (si le serveur est corrompu, le cryptage peut être facilement cassé en allant examiner le code source du site). La seule solution acceptable est de stocker une version hachée du mot de passe. Un hachage est une fonction mathématique spécifiquement conçue pour être non réversible. Ainsi, même si quelqu’un a accès au serveur, il ne peut rien faire des données qui s’y trouvent.
- La plupart des clients mail communiquent avec les serveurs de courrier par des canaux non sécurisés. Un mot de passe ne doit donc jamais être envoyé par mail. Notez que s’il a été haché comme préconisé ci-dessus, c’est de toute façon impossible puisqu'il n’y a aucun moyen connu pour inverser l’effet d’un hachage et retrouver le mot de passe en clair.
- D’une façon générale, les mots de passe ne doivent pas circuler sur le réseau. (Et encore moins dans une URL, comme j’ai pu le voir parfois.) Pour cela, quand on implémente une page de login, il faut envoyer le mot de passe directement haché plutôt qu’en clair.
- Enfin, aucune procédure de support ne doit nécessiter que l’utilisateur communique son mot de passe à un opérateur humain. (Coucou le site Vélib’ !) L’élément humain constitue souvent la principale faille de sécurité. Pour l’anecdote, on a réalisé il y a deux ans un audit de sécurité dans ma boîte. À la demande de l’auditeur, mon chef a appelé l’administrateur système au téléphone, lui a sorti un baratin du genre « hey, tu peux me filer le mot de passe du site de GrosClient™ pour que je vérifie un truc ? ». Et l’admin sys lui a envoyé, comme ça, spontanément, en toute confiance. L’auditeur a sorti son formulaire et à l’item social engineering, il a tranquillement coché la case fail…
Hélas, la majorité des sites n’appliquent pas ces principes. Le niveau de sécurité qu’ils fournissent est plutôt bas et pour éviter les problèmes, je ne saurai que trop vous conseiller d’utiliser un mot de passe différent à chaque fois. Ainsi, si un mot de passe est corrompu sur un site, les conséquences seront limitées à ce site. Bien sûr, il peut être difficile de mémoriser autant de mots de passe. Pour s’aider, on peut utiliser les astuces suivantes :
- Compter sur le gestionnaire de mots de passe de votre navigateur. Il existe aussi pas mal d’applications qui fournissent une fonctionnalité équivalente. Mais c’est difficilement applicable si vous utilisez plusieurs machines au quotidien ou si vous allez souvent dans un cybercafé.
- Utiliser toujours le même mot de passe, mais en le préfixant par un mot lié au contenu du site pour le rendre unique et facilement mémorisable. Par exemple : velib-monmotdepasse, banque-monmotdepasse, mail-monmotdepasse, etc.
- Au pire, si vraiment avoir autant de mots de passe que de comptes vous semble impossible, ayez au moins deux mots de passe : un pour votre mail et un pour tout le reste.
Un autre principe, moins intuitif a priori, est que le mieux est l’ennemi du bien. En tant que développeur de site web, vous croyez augmenter la sécurité en exigeant des utilisateurs qu’ils choisissent des mots de passe complexes et qu’ils les changent régulièrement ? Erreur. Vous la diminuez, parce qu’à partir d’un certain niveau de complexité, les utilisateurs n’ont pas d’autre choix que de noter leur mot de passe sur un post-it pour réussir à s’en rappeler… Et un post-it, ça s’égare.
D’une façon générale, je pense qu’il ne faut pas trop imposer de contraintes sur le choix des mots de passe. Il faut exiger un niveau de sécurité minimal pour éviter les choix idiots (et pourtant répandus…). Mais interdire ou obliger certains caractères est plutôt de nature à emmerder l’utilisateur, et donc à baisser la sécurité. À propos de la résistance des mots de passe, ce petit strip de XKCD est éloquent.
Passons à cette abomination qu’utilisent pratiquement toutes les banques de nos jours sur leurs sites web (et même sur leurs applications iPhone ou Android) :
Voilà un parfait exemple du gadget qui rassure tout le monde alors que ça fait en réalité diminuer la sécurité, et cela pour deux raisons.
- Le mot de passe est nécessairement un code à 6 chiffres. Il n’y a donc qu’un million de possibilités, à comparer aux milliards de milliards de combinaisons possibles avec des lettres. Quelques minutes suffisent à un programme pour les essayer toutes. Bien sûr, je suppose qu’il y a une protection qui bloque le système si on entre plus d’une dizaine de mots de passe erronés successivement. Mais quand même.
- Les chiffres que vous tapez quand vous saisissez votre code sont parfaitement visibles pour quiconque observe l’écran à ce moment-là : les touches s’entourent d’un cadre lorsque vous cliquez dessus. Alors que si vous tapiez bêtement votre code sur le clavier traditionnel, personne n’y verrait rien.
Ce truc réussit donc l’exploit de faire passer la sécurité des sites bancaires de pipeau à pipeau moins moins tout en faisant chier les utilisateurs. J’espère que son créateur a déjà sa place réservée aux enfers.
À propos de sécurité pipeau, faites-moi penser à vous parler un jour de cette grosse arnaque que sont les scanners d’empreintes digitales…