Le challenge

Dans un monde où les mots de passe sont toujours le moyen le plus répandu pour authentifier une personne, mettre en place un système de gestion de ces mots de passe à la fois simple et suffisamment sécurisé peut parfois s’avérer délicat.
La prise en charge des oublis de mots de passe peut être implémentée de différentes manières, plus ou moins efficaces. L’objectif est de trouver le bon scénario, assez simple pour que l’utilisateur puisse obtenir un nouveau mot de passe sans se décourager et sans devoir passer par des étapes complexes et difficiles, mais assez sécurisé pour éviter que n’importe qui ne change ce mot de passe.

Exemple de procédure de changement de mot de passe peu (pas) sécurisée

  1. Demander l’identifiant de connexion (email ou ID) ainsi que la date de naissance
  2. Vérifier que les informations correspondent
  3. Permettre à l’utilisateur de définir un nouveau mot de passe
Récupération de mot de passe non sécurisée - diagram
Récupération de mot de passe non sécurisée

Failles de sécurité :

  • il est assez facile de connaître la date de naissance d’une personne (si l’on côtoie cette personne, ou via du social engineering)
  • si une autre personne change le mot de passe (en ayant connaissance de la date de naissance), le propriétaire du compte n’est pas averti et ne peut pas réagir

Cette procédure est peu sécurisée et n’est pas du tout recommandable, surtout si l’application en question permet l’accès à des données ou transactions sensibles.

Observons une récupération de mot de passe sécurisée

  1. a. Demander des informations personnelles (telles que les derniers chiffres du numéro de sécurité sociale, date de naissance, numéro de client…).
    b. Demander les réponses à des questions de sécurité (« numéro de téléphone lorsque vous étiez enfant?”, “nom de votre premier animal de compagnie?”…)
  2. Envoyer un code secret via un autre canal de communication que l’email principal (email secondaire, ou téléphone portable). L’utilisateur pourra éventuellement choisir quel canal il préfère. Ce code secret devra avoir une validité limitée dans le temps, et être inutilisable une fois utilisé une première fois.
  3. Une fois le code secret confirmé, permettre à l’utilisateur de définir un nouveau mot de passe.
  4. Confirmer le changement de mot de passe en envoyant un email à l’utilisateur (sur l’email principal et éventuellement l’email secondaire). En cas de fraude, la victime sera ainsi prévenue.

Les étapes 1.a et 1.b peuvent être complémentaires, on pourra par exemple choisir de n’implémenter que 1.a et de ne pas utiliser de questions de sécurité. Le choix détaillé de l’implémentation dépendra des données déjà collectées et de celles pouvant être éventuellement ajoutées dans les formulaires d’inscription.

Récupération de mot de passe sécurisée
Récupération de mot de passe sécurisée

Elements techniques

D’un point de vue technique, il faudra s’assurer de protéger l’application contre les attaques CSRF (Cross Site Request Forgery), qui pourrait permettre à un site malveillant d’effectuer des changements de mots de passe sur le site victime en collectant les informations auprès de l’utilisateur.
Il faut également bloquer le compte utilisateur (pour une certaine durée) si plusieurs tentatives de changement de mot de passe sont effectuées sur le compte.
S’assurer également que les différentes étapes de la procédure ne peuvent pas être réalisées sans que les étapes précédentes l’aient été. Une faille de sécurité logique pourrait permettre à quelqu’un d’accéder à l’étape #3 sans passer par les étapes des vérification de l’identité.
Il va sans dire que toutes les fonctionnalités impliquant des données d’authentification (mot de passe, identifiant) ainsi que les pages authentifiées doivent être servies sous le protocole SSL (HTTPS).
La tendance est actuellement à l’utilisation du second canal de communication afin d’obtenir un code à renseigner sur le site une fois reçu (généralement par SMS). Les étapes de confirmation de données personnelles et de questions de sécurité sont quant à elles sur le déclin, car posant assez souvent des pertes d’ergonomie et rebutant de nombreux utilisateurs réticents à remplir des formulaires trop longs.

Comme nous pouvons le voir ici dans la gestion de mots de passe perdus, la sécurité des applications web passe aussi bien par la technique pure (code, cryptographie…) que par la mise en place de scénarios et logiques sûres.

Vérifier vos process actuels

Lorsqu’il s’agit de tests d’intrusion, il est évident que les outils automatisés de sécurité, focalisés sur les failles techniques, ne peuvent pas détecter les faiblesses de ce genre de procédure, même si le process de changement de mot de passe est l’un des plus répandus dans les applications web.

Seuls un test d’intrusion manuel et une revue des process donne de bon résultats dans ce domaine.