Dans le chapitre précédent, vous avez vu un aspect essentiel de la sécurisation d'une application : le canal de communication. Maintenant, je vous propose de voir un aspect souvent sous-estimé : l’authentification.
Découvrez l'authentification et les risques associés
La difficulté du processus réside dans l’adaptation du niveau d’authentification au niveau de risque de l’entreprise. Par exemple, prouver son identité aux services des impôts exige beaucoup plus de rigueur, alors que pour sa connexion à un réseau social comme Facebook, l’enjeu est moindre.
Aujourd’hui, la plupart des applications utilisent encore le mot de passe comme moyen d'assurer l’authentification. Or, cette méthode doit être considérée comme peu sûre. En effet, il assez simple de s’attaquer à ses vulnérabilités :
Attaque facilitée par le caractère prédictif du mot de passe : certains de vos utilisateurs utilisent leur date de naissance, ou le nom de leur femme ou encore 123456 ;
Attaque par force brute : par dictionnaire par exemple ;
Attaque sur des bases de données contenant des mots de passe mal sécurisés ;
Attaque par phishing.
Une bonne illustration de cette situation est le cas de Spotify en 2016. Ce leader mondial de la musique en ligne demanda à l’ensemble de ses utilisateurs de changer leur mot de passe suite à une fuite de 60 millions de comptes chez DropBox, le leader du stockage de fichiers en ligne.
Sécurisez le stockage des mots de passe
Un des points les plus sensibles du mécanisme d’authentification est la manière dont les applications enregistrent les mots de passe de leurs utilisateurs. 3 manières de stocker les mots de passe sont majoritairement employées. Elles comportent toutes une vulnérabilité au moins !
Voyons-les en détail !
Stockez les mots de passe en clair
Vous serez peut-être surpris d’apprendre que de nombreuses entreprises stockent encore les mots de passe en clair : en 2016, un hacker a publié les mots de passe en clair de 27 millions d’utilisateurs de la société Mate1.com.
Stockez une signature du mot de passe
Un autre mécanisme de sécurisation est souvent utilisé. C’est le stockage d’une signature du mot de passe calculée grâce à une fonction de hachage comme MD5, afin d’éviter qu’un utilisateur malveillant ne puisse deviner le mot de passe s’il obtient la signature. Vous l’avez deviné, cette méthode est déjà plus adaptée que la précédente, mais elle comporte tout de même un certain nombre de failles :
Elle demeure exposée aux attaques par force brute de type dictionnaire qui contiendrait des signatures précalculées de millions de mots de passe. Accéder à ce genre de liste est même très simple : par exemple, le site RainbowCrack propose une liste de tables accessible à tous. Ce type d’attaque est appelé l’attaque table arc-en-ciel.
Stockez les mots de passe avec un sel
Un sel (salt en anglais) de mot de passe est une longue chaîne de caractères spécifique à un utilisateur. La méthode consiste à stocker la signature du mot de passe avec le sel associé.
Cette méthode rend les attaques par précalcul des signatures impossible à réaliser, car il est impossible de créer des tables arc-en-ciel pour une signature et sel en particulier !
Bien que beaucoup plus sécurisée que les méthodes précédentes, elle est néanmoins sujette aux attaques par force brute, car les attaquants peuvent mettre en place des stratégies d’attaques basées sur des fréquences bien plus élevées, que les algorithmes de chiffrement utilisés ne peuvent pas atteindre.
Mettez en place les bonnes pratiques
Si les méthodes précédentes sont encore entachées de risques, comment fait-on concrètement ?
Il faut utiliser une fonction de hachage spécifique qui utilise plusieurs itérations de calcul pour produire le résultat, comme bcrypt.
À titre d’exemple, voici une signature réalisée avec bcrypt :
$2y$10$0IexiTnFtZ6BeARkfVvidemnnAuPydkcH2tEpVbnE60o97K3UZn26
Vous pouvez distinguer trois champs, délimités par des $
:
2y
identifie la version de l'algorithme bcrypt qui a été utilisée ;10
est le facteur coût utilisé – plus ce nombre est élevé, plus le nombre d’itérations pour calculer sera élevé ;Le reste correspond au sel et au résultat du calcul du hachage du mot de passe.
Bcrypt est disponible dans de nombreux langages. Par exemple en PHP, on peut l'utiliser comme ceci :
<?php
$options=array(
'salt'=>random_bytes(22,MCRYPT_DEV_URANDOM),
'cost'=>12,
);
$password_hash=password_hash($password_string,PASSWORD_BCRYPT,$options);
?>
Allez au-delà des mots de passe
Nous l’avons vu dans les sections précédentes, l’authentification par mot de passe n’est pas sûre à 100 %. Il existe d’autres moyens d'authentification. Voyons-les en détail !
Mettre en place une authentification par élément physique, comme des cartes à puces ou clés USB ;
Utiliser la biométrie de l’utilisateur comme les empreintes digitales ou rétiniennes : cette solution paraît futuriste, mais de plus en plus d’entreprises y recourent pour accéder à des applications sensibles ;
Mettre en place une authentification multifactorielle : il s’agit de mixer plusieurs de ces techniques avec l’utilisation d’un mot de passe. Les plus répandues sont l’authentification par SMS (certaines banques l'utilisent déjà) ou l'utilisation d’une clé de sécurité de type second facteur universel, comme une YubiKey.
Au-delà de ces pratiques pour augmenter la sécurité des méthodes classiques à base de mots de passe, il est primordial de les coupler avec des mécanismes de contrôle d’accès ou d’authentification robuste. Je vous propose de les voir dans le prochain chapitre.