Portrait de Philippe PradosPrados.FRProgrammation, architecture & sécurité — depuis 1998

L'authentification par mot de passes

Cet article explique les difficultés d’une authentification par mot de passe et les contres mesures à appliquer.

Par Philippe PRADOS - 2003
www.prados.fr

Quels sont les risques d’une authentification par mot de passe ?

Avant toute utilisation de l’application, l’utilisateur doit se signer. Il bénéficie alors d’un certain nombre de services. Les applications Internet proposent généralement un formulaire HTML pour permettre à l’utilisateur de s’authentifier. Si une application authentifie l’utilisateur, elle désire pouvoir contrôler son activité. L’utilisateur devient responsable des actions effectuées sous son nom.

Souvent l’application ne chiffre pas la communication. Ainsi, n’importe quel employé ou stagiaire de l’entreprise peut écouter la communication réseau et obtenir le mot de passe d’un utilisateur ou de l’administrateur. Les connexions aux messageries utilisent rarement un protocole sécurisé. Les employés utilisent régulièrement le même mot de passe pour plusieurs applications. Obtenir le mot de passe pour une application non critique peut permettre à la personne indélicate d’accéder à des applications plus sensibles. Ce risque n’est pas négligeable. Quatre-vingts pour-cent des attaques viennent de l’intérieur de l’entreprise.

Le mot de passe peut être sauvé par le navigateur sur le poste de l’utilisateur. Il existe de nombreux outils permettant de les retrouver. Si un pirate accède au poste d’un utilisateur privilégier, il peut obtenir instantanément le mot de passe de l’application.

Connaissant des informations personnelles sur une victime (son nom, le nom de ses proches) et son identifiant, il est possible d’attaquer un compte en proposant des mots de passes possibles, à raison d’un à deux essais par jours.

Il est également possible d’obtenir un déni de service en grillant volontairement tous les identifiants en envoyant des mots de passes aléatoires pour tous les identifiants.

Si les noms des utilisateurs sont prédictibles, il est possible de faire une attaque inverse en recherchant un utilisateur pour un mot de passe donnée. Par exemple, en Alsace, il est fort probable qu’un utilisateur utilise « Gewurztraminer ».

Il ne faut utiliser une adresse e-mail pour identifier un utilisateur. Il est alors facile de trouver des noms valides. De plus, un utilisateur ne peut plus modifier facilement son identifiant. Les utilisateurs risquent d’ouvrir un nouveau compte à chaque changement d’e-mail, laissant des comptes dormants.

Si un utilisateur a grillé son mot de passe, il n’est pas forcement déconnecté car il est encore présent dans les caches. Il peut avoir une session encore active. En maintenant artificiellement la connexion en vie, il peut effectuer des traitements qu’on ne pourra pas lui opposer.

Il est également possible de forcer l’utilisateur à utiliser une session créer précédemment par un pirate. Pour éviter l’exploitation par celui-ci de l’authentification de l’utilisateur, il faut systématiquement générer une nouvelle session lors de l’acceptation de l’utilisateur et ne pas utiliser la session courante.

Le protocole HTTPS permet de chiffrer la communication. Ainsi, il n’est plus possible d’écouter le réseau pour obtenir le mot de passe d’un utilisateur. Il est impératif d’utiliser ce protocole avec un cookie de session sécurisée. Un paramètre du serveur d’application permet d’indiquer cela. Sinon, le cookie de session est volable lors de l’affichage d’une page non sécurisée. Les pages de l’application ne doivent pas être accessibles sans ce protocole. Il faut paramétrer le serveur HTTP en conséquence.

Le format du mot de passe ne doit pas être présent dans l’invite de l’utilisateur ou dans un message d’erreur.

Pour éviter l’utilisation rémanente d’un utilisateur grillé ou dont ont a modifier les privilèges, il faut tuer les sessions de l’utilisateur correspondant. Toutes les sessions ouvertes pour l’utilisateur doivent être détruites. Une approche pour faire cela consiste à garder un cache global des derniers utilisateurs dont on a modifié les habilitations ou qui ont été rejeté. Ce cache garde les informations pour une durée légèrement supérieure à la durée de vie de la session HTTP. Avant tout traitement d’un utilisateur, le programme vérifie que l’utilisateur n’est pas présent dans le cache. Si c’est le cas, elle invalide la session et demande à l’utilisateur de se signer à nouveau. Attention, dans une architecture à base de grappe, le cache doit être partagé.

Pour éviter la sauvegarde du mot de passe sur le poste de l’utilisateur, il faut indiquer dans le formulaire l’attribut autocomplete à off.

<form action="login.jsp" autocomplete="off">
...
</form>

Un pirate peut utiliser un programme Brutus pour tester de nombreux mots de passes sur un compte. Plusieurs stratégies permettent de limiter les attaques en forces brutes :

L’utilisateur ne doit être informé que de l’échec ou de la réussite de son authentification. Il ne faut surtout pas émettre de messages différents pour les différentes situations, sinon un pirate peut connaître la liste des utilisateurs, même s’il ne connaît pas leurs mots de passes. Il lui suffit de demander automatiquement l’authentification d’une liste de noms (déduite généralement de la liste des employés ou des différentes communications de l’entreprises : liste de diffusions, notes de services, affiches…) Un mot de passe quelconque lui permet de déduire la liste des utilisateurs actifs. Il peut ensuite chercher à trouver les mots de passes.

Une autre attaque consiste à chercher un utilisateur pour un mot de passe donné. Un programme teste une liste de noms d’utilisateurs pour un mot de passe connu. Plus le nombre d’utilisateur est important, plus cette attaque à des chances d’aboutir. Est qu’il existe un utilisateur avec le mot de passe « toto » ?

Une attaque subtile consiste à livrer à l’application un mot de passe partiel avec un seul caractère et à chronométrer le temps nécessaire pour qu’elle réponde qu’il n’est pas bon. Lorsque le premier caractère est bon, l’algorithme mettra généralement un temps légèrement plus long. Il faut alors augmenter le mot de passe d’un nouveau caractère pour prolonger la recherche. De fil en aiguille, tous les caractères seront trouvés.

C’est le couple utilisateur/mot de passe qui doit être vérifié et non chacun des membres du couple. Aucun message ne doit informer l’utilisateur du format attendu pour le nom ou le mot de passe. En cas de connexion réussie, un message indiquant le nombre d’échecs précédant et un rappel de la date de dernière connexion et du nombre d’échec pour s’authentifier peut informer l’utilisateur d’une tentative d’attaque.

Pour éviter les attaques par calcul du temps pour analyser le mot de passe, il faut appliquer un algorithme à temps constant. Par exemple, un calcul de ou exclusif peut être pratiqué pour chaque paire de caractères, et les résultats accumulés dans une variable. Si le résultat final est zéro, les chaînes sont identiques.

Référentiel des utilisateurs

L’application utilise maintenant souvent un référentiel LDAP utilisés pour d’autres services de l’entreprise. Un pirate peut exploiter une application pour :

Il ne faut pas mutualiser les référentiels sauf en y ajoutant des critères d’habilitation associés à l’application, afin que seuls certains identifiant puissent être utilisés par l’application. Les utilisateurs candidat à utiliser l’application doivent être choisis avec précautions.

Attention, il est alors parfois nécessaire de lire un enregistrement du référentiel pour savoir s’il est candidat, avant de vérifier le mot de passe. Par exemple, une connexion authentifiée LDAP, effectués avant de vérifier les habilitations applicatives de l’utilisateur, permet de griller un compte n’ayant rien à voir avec l’application. Une réorganisation de la base de données des utilisateurs peut être une solution.

Contrainte des mots de passe

Les mots de passes n’ont généralement pas de contraintes. Un mot de passe doit avoir une taille minimum de 8 caractères, posséder des caractères non alphabétiques et ne pas se terminer par des chiffres. Sinon, des dictionnaires de mot de passe permettent de les trouver rapidement. Ils doivent également avoir une durée de vie relativement courte (1 à 2 mois) afin de réduire la fenêtre de tir permettant à un pirate de trouver ou d’exploiter un mot de passe. Un nombre d’échecs important doit griller le mot de passe ou interdire son utilisation avant une période d’attente de plus en plus longue.

Il est également envisageable de garder un historique crypté des 5 derniers mots de passes pour éviter leur réutilisation. Une limite du nombre d’authentifications valides pour une journée ou la limitation à certaines tranches horaires, permet également de limiter quelques utilisations malveillantes.

Un mot de passe, délivré par défaut, peut ne jamais être utilisé par l’utilisateur. Cela arrive généralement lorsque l’on donne un accès à un manageur qui n’a pas le temps de consulter l’application. Le mot de passe doit avoir une durée de vie pour la première utilisation limitée dans le temps. Au-delà, l’utilisateur doit demander un reset du mot de passe en suivant un protocole sécurisé. Il obtient alors un nouveau mot de passe d’initialisation.

Des statistiques sur les mots de passes craqués montrent que trente cinq pourcent font six caractères, vingt cinq pourcent font cinq ou sept caractères, et vingt pourcent, huit caractères. Quarante six pourcent sont constitué d’un mot en minuscule, vingt pourcent d’un mot suivit du chiffre un, dix pourcent d’un autre chiffre. Les autres sont plus complexes. Seulement trois règles suffisent à décrire plus des trois quarts des mots de passe cassés.

De plus, une bonne partie est directement déductible de l’identifiant ou avec en plus les informations associées à l’utilisateur.

Les mots de passes à usage personnels sont généralement les mêmes que les mots de passes à usage professionnel. Lorsqu’un utilisateur quitte une entreprise, il est probable qu’il utilisera le même mot de passe dans la nouvelle. Cela peut ouvrir la porte à des informations concurrentielles.

Le tableau 1 indique pour une taille de mot de passe et le jeu de caractère utilisé, les différentes combinaisons possibles.

Nombre de caractère du mot de passeCombinaisons possibles Lettres A à Z uniquementCombinaisons possibles Lettres A à Z et les chiffres
12636
26761 296
317 57646 656
4456 9761 679 616
511 881 37660 466 176
6308 915 7762 176 782 336
78 031 810 17678 364 164 096
8208 827 064 5762 821 109 907 456
95 429 503 678 976101 559 956 668 416
10141 167 095 653 3763 656 158 440 062 980

Nombre de caractère du mot de passe

Combinaisons possibles Lettres A à Z uniquement

Combinaisons possibles Lettres A à Z et les chiffres

1

26

36

2

676

1 296

3

17 576

46 656

4

456 976

1 679 616

5

11 881 376

60 466 176

6

308 915 776

2 176 782 336

7

8 031 810 176

78 364 164 096

8

208 827 064 576

2 821 109 907 456

9

5 429 503 678 976

101 559 956 668 416

10

141 167 095 653 376

3 656 158 440 062 980

Celles-ci peuvent être fortement réduites si l’utilisateur utilise des astuces mnémotechniques pour se transformer un mot de son vocabulaire en mot de passe. Les pirates savent exploiter ces faiblesses pour réduire considérablement le spectre des possibles.

Les outils de recherche de mot de passes savent exploiter des dérivés de mots d’un dictionnaire. Les générateurs utilisent habituellement les règles suivantes :

Les dates, par exemple, sont généralement caractéristiques d’un évènement. Avec un peu de manipulation sociale, ou la consultation de base de données, il est possible d’extraire plusieurs dates remarquable associé à un utilisateur. Les dates sont généralement passées, et proportionnel à l’age de la victime. Les dates entre 1900 et 2004 sont les plus crédibles. Pour chercher une date de mariage, il faut généralement limiter la recherche aux samedis passée. Cela limite la recherche à cinquante deux possibilités par an.

Suivant les contraintes imposées par l’application, les artifices utilisés par les utilisateurs sont différents. Par exemple, s’il doit utiliser des lettres, des chiffres mais pas à la fin et des symboles, il est fort probable qu’il applique la méthode suivante :

Par exemple, avec le mot « password », cela peut donner p4$$w0rd!. Le mot de passe respecte les contraintes imposées par l’application, et de plus, il est facile à retenir. Cette combinaison sera rapidement testée par les pirates.

Il faut augmentez les contraintes sur les mots de passe :

La taille d’un mot de passe n’est pas suffisante pour garantir la sécurité. Un mot de passe long peut être le fruit de la concaténation de deux mots simples, avec éventuellement une petite transformation automatique. Les programmes d’attaques en force brute connaissent ces transformations et peuvent alors trouver rapidement le mot de passe. Ils exploitent pour cela directement l’application ou un fichier récupéré sur le serveur. Cela leurs permet d’effectuer l’attaque hors connexion, et de revenir sur le site lorsque les comptes ont été ouverts.

Mot de passeAnalyse
AnticonstitutionnelLe mot "Anticonstitutionnel" est présent dans le dictionnaire.
PommepommeLe mot "pommepomme" contient deux fois le mot "pomme".
XuaetagLe mot "xuaetag" est l'inverse du mot gateaux.
FghijkLe mot "fghijk" est trop simpliste ou systématique.
CarineeniracLe mot "carineenirac" est un palindrome.
AbbaccaLe mot "abbacca" ne contient pas assez de caractères différents.
100fromagesLe mot "100fromages" contient le mot "fromage" avec un préfix ou un suffixe standard.
FromagetteLe mot "fromagette" contient le mot "fromage" avec un préfix ou un suffixe standard.
[(PhIlIpPe)]Le mot "[(PhIlIpPe)]" contient le mot philippe.
PommmmeLe mot "pommmme" contient trop d'occurrence du caractère 'm'.
RinecaLe mot "rineca" est une rotation du mot "carine".
ParapluLe mot "paraplu" contient le début du mot "parapluie".
TitutionLe mot "titution" contient la fin du mot "constitution".
FalengLe mot "faleng" contient une version phonétique du mot "phalange".
*l*ph*ntLe mot "*l*ph*nt" contient le mot "elephant" dont toutes les voyelles sont remplacées par le même caractère.
*a*a*i*eLe mot "*a*a*i*e" contient le mot "banalise" dont toutes les consonnes sont remplacées par le même caractère.
p4$$w0rdLe mot "p4$$w0rd" contient une version cow-boy du mot password.
|v|a|v|a|\|Le mot "|v|a|v|a|\|" contient une version cow-boy du mot maman.
^ztzfodLe mot "^ztzfod" est un déplacement du clavier du mot "paradis".
à(à-&ç--Le mot "à(à-&ç--" est une date, entrée au clavier sans le shift.
PrfusonLe mot "prfuson" est à 77% du mot "perfusion".
monsieuremadamc4r1b0vLe mot "monsieuremadamc4r1b0v" contient le mot monsieur, l'inverse du mot madame (emadam) et une version cow-boy du mot caribou (c4r1b0v).

Mot de passe

Analyse

Anticonstitutionnel

Le mot "Anticonstitutionnel" est présent dans le dictionnaire.

Pommepomme

Le mot "pommepomme" contient deux fois le mot "pomme".

Xuaetag

Le mot "xuaetag" est l'inverse du mot gateaux.

Fghijk

Le mot "fghijk" est trop simpliste ou systématique.

Carineenirac

Le mot "carineenirac" est un palindrome.

Abbacca

Le mot "abbacca" ne contient pas assez de caractères différents.

100fromages

Le mot "100fromages" contient le mot "fromage" avec un préfix ou un suffixe standard.

Fromagette

Le mot "fromagette" contient le mot "fromage" avec un préfix ou un suffixe standard.

[(PhIlIpPe)]

Le mot "[(PhIlIpPe)]" contient le mot philippe.

Pommmme

Le mot "pommmme" contient trop d'occurrence du caractère 'm'.

Rineca

Le mot "rineca" est une rotation du mot "carine".

Paraplu

Le mot "paraplu" contient le début du mot "parapluie".

Titution

Le mot "titution" contient la fin du mot "constitution".

Faleng

Le mot "faleng" contient une version phonétique du mot "phalange".

*l*ph*nt

Le mot "*l*ph*nt" contient le mot "elephant" dont toutes les voyelles sont remplacées par le même caractère.

*a*a*i*e

Le mot "*a*a*i*e" contient le mot "banalise" dont toutes les consonnes sont remplacées par le même caractère.

p4$$w0rd

Le mot "p4$$w0rd" contient une version cow-boy du mot password.

|v|a|v|a|\|

Le mot "|v|a|v|a|\|" contient une version cow-boy du mot maman.

^ztzfod

Le mot "^ztzfod" est un déplacement du clavier du mot "paradis".

à(à-&ç--

Le mot "à(à-&ç--" est une date, entrée au clavier sans le shift.

Prfuson

Le mot "prfuson" est à 77% du mot "perfusion".

monsieuremadamc4r1b0v

Le mot "monsieuremadamc4r1b0v" contient le mot monsieur, l'inverse du mot madame (emadam) et une version cow-boy du mot caribou (c4r1b0v).

Reset des mots de passes

30% des appels au support concernent le reset de mot de passe. Si l’utilisateur perd son mot de passe, il est possible d’en obtenir automatiquement un nouveau. En usurpant son identité, un pirate peut appliquer la procédure, à l’insu de l’utilisateur.

Avant de reseter un mot de passe, il peut être judicieux d’effectuer quelques vérifications sur l’utilisateur. En lui posant une des questions qu’il a indiquées lors de son enregistrement, on peut renforcer le processus.

Il ne faut jamais redonner le mot de passe courant. En changeant systématiquement le mot de passe, si le processus est perverti par un pirate, l’utilisateur officiel ne pourra plus s’authentifier. Cela permettra de détecter la supercherie.

Pour éviter qu’un pirate applique la procédure de reset, à l’insu de l’utilisateur, il faut informer les administrateurs qu’ils doivent suivre un processus rigide pour reseter un mot de passe. Par exemple, ils doivent avoir l’utilisateur physiquement devant eux. Une autre approche consiste à utiliser une procédure de rappel. L’annuaire d’entreprise est utilisé pour contacter l’utilisateur sur son téléphone. Le mot de passe créé à cette occasion doit avoir une durée de vie de première utilisation limitée à quelques heures, et doit être immédiatement changé par l’utilisateur. Sinon, tout le processus doit être repris.

Pour éviter un risque d’usurpation d’identité par un administrateur souhaitant prendre la place d’un utilisateur, un mot de passe aléatoire doit être généré, et envoyé à l’utilisateur par un canal sécurisé. L’administrateur n’a pas à le connaître. La messagerie électronique est une approche possible, mais elle est risquée s’il est possible d’écouter le mot de passe de messagerie de l’utilisateur sur le réseau. Si l’utilisateur possède une messagerie et un couple clef publique/clef privée, ce canal peut être utilisé. Une autre approche consiste à envoyer un SMS sur le téléphone portable du destinataire.

L’utilisateur peut également prouver qui il est en répondant à une question choisie par lui, dont il est le seul à connaître la réponse. Attention, les personnes de sa famille ont souvent les réponses aux questions personnelles.

Il est judicieux de confirmer le changement de mot de passe par un e-mail, sans en indiquer la valeur. Ainsi, si un pirate arrive à modifier le mot de passe, l’utilisateur est prévenu.

Afin d’éviter l’administration des comptes bloqués, il ne faut pas les invalider après plusieurs échecs, mais mettre en place une contre mesure contre les attaques en forces brutes. Après trois échecs lors d’une connexion, l’utilisateur ne peut plus se connecter pendant une heure. Aucun message ne l’informe de cela. Il reçoit toujours le même message lui indiquant qu’il n’est pas reconnu. Après une heure de silence, une nouvelle connexion est possible.

La Figure suivante décrit une proposition de vérification d’authentification de l’utilisateur.