Par besoin de sécurité, nombreux sont les internautes qui s'appuient sur des gestionnaires de mots de passe pour stocker leur collection toujours croissante d'identifiants de connexion. Et lorsque vient le temps de créer un nouveau compte utilisateur, de nombreux outils de ce type proposent un générateur de mot de passe pour aider à la création d'un mot de passe censé être ultra-sécurisé. En tout cas, c'est l'idée.
Toutefois, le cabinet de conseil en sécurité Donjon a découvert qu'entre mars 2019 et octobre 2020, Kaspersky Password Manager générait des mots de passe qui pouvaient être déchiffrés en quelques secondes. L'outil utilisait un générateur de nombres pseudo-aléatoires (PRNG) qui était singulièrement inadapté à des fins cryptographiques.
Les chercheurs de Donjon ont découvert que le générateur de mots de passe inclus dans Kaspersky Password Manager avait plusieurs problèmes. Le plus important est le fait que le PRNG a utilisé une seule source d'entropie – l'heure actuelle. Cela signifiait que « tous les mots de passe qu'il créait pouvaient être brutalement forcés en quelques secondes » :
« Il y a deux ans, nous avons examiné Kaspersky Password Manager (KPM), un gestionnaire de mots de passe développé par Kaspersky. Kaspersky Password Manager est un produit qui stocke en toute sécurité les mots de passe et les documents dans un coffre-fort crypté, protégé par un mot de passe. Ce coffre-fort est protégé par un mot de passe principal. Ainsi, comme pour les autres gestionnaires de mots de passe, les utilisateurs doivent se souvenir d'un seul mot de passe pour utiliser et gérer tous leurs mots de passe. Le produit est disponible pour différents systèmes d'exploitation (Windows, macOS, Android, iOS, Web…) Les données chiffrées peuvent alors être automatiquement synchronisées entre tous vos appareils, toujours protégées par votre mot de passe principal.
« La principale fonctionnalité de KPM est la gestion des mots de passe. Un point clé avec les gestionnaires de mots de passe est que, contrairement aux humains, ces outils sont bons pour générer des mots de passe aléatoires et forts. Pour générer des mots de passe sécurisés, Kaspersky Password Manager doit s'appuyer sur un mécanisme de génération de mots de passe sécurisés ».
Le problème s'est vu attribuer l'index CVE-2020-27020, où l'ancienne version du gestionnaire de mots de passe est décrite comme n'étant « pas complètement cryptographiquement forte et a potentiellement permis à un attaquant de prédire les mots de passe générés dans certains cas ». Bien que l'avertissement selon lequel « un attaquant aurait besoin de connaître des informations supplémentaires (par exemple, l'heure de génération du mot de passe) » soit valide, il n'en reste pas moins que les mots de passe Kaspersky étaient nettement moins sécurisés que ce que les gens étaient amenés à croire.
« Le générateur de mots de passe inclus dans Kaspersky Password Manager a rencontré plusieurs problèmes », a expliqué mardi l'équipe de recherche de Donjon dans un billet. « Le plus critique est qu'il utilisait un PRNG non adapté à des fins cryptographiques. Sa seule source d'entropie était l'heure actuelle. Tous les mots de passe qu'il créait pouvaient être brutalement forcés en quelques secondes ».
Méthode de génération de mot de passe de Kaspersky
En mars 2019, Kaspersky Lab a publié une mise à jour à KPM, promettant que l'application pourrait identifier les mots de passe faibles et générer des remplacements forts. Trois mois plus tard, une équipe du cabinet de conseil en sécurité Donjon a découvert que KPM ne gérait pas particulièrement bien l'une ou l'autre des tâches : le logiciel utilisait un générateur de nombres pseudo-aléatoires (PRNG) qui n'était pas suffisamment aléatoire pour créer des mots de passe forts. De cette époque jusqu'aux derniers mois de 2020, KPM suggérait des mots de passe qui pouvaient être facilement déchiffrés, sans signaler les mots de passe faibles pour les utilisateurs.
« Kaspersky Password Manager dispose d'un générateur de mot de passe intégré, qui crée un mot de passe à partir d'une "politique" donnée. Les paramètres de stratégie sont simples*: longueur du mot de passe, lettres majuscules, lettres minuscules, chiffres et un ensemble personnalisé de caractères spéciaux. Tous ces paramètres peuvent être configurés dans l'interface du générateur de mot de passe.
« Par défaut, KPM génère des mots de passe de 12 caractères avec un jeu de caractères étendu ».
L'une des techniques utilisées par KPM était de faire apparaître plus fréquemment des lettres qui ne sont pas souvent utilisées, ce qui, selon Bédrune, était probablement une tentative de tromper les outils de piratage de mots de passe :
« Notre hypothèse est que cette méthode a été mise en œuvre pour tromper les outils standard de craquage de mots de passe. Les pirates de mot de passe tels que Hashcat ou John the Ripper tentent de casser le premier mot de passe probable, par exemple des mots de passe générés par les humains. Leur méthode de craquage de mot de passe repose sur le fait qu'il y a probablement "e" et "a" dans un mot de passe créé par un humain que "x" ou "j", ou que les bigrammes "th" et "il" apparaîtront beaucoup plus souvent que «*qx*» ou «*zr*».
« Des techniques dédiées telles que le générateur de Markov, qui supposent qu'il existe un modèle de Markov caché dans la manière dont les mots de passe sont générés par les humains, peuvent directement casser cette méthode de génération.
« Ainsi, les mots de passe générés par KPM seront, en moyenne, loin dans la liste des mots de passe candidats testés par ces outils. Si un attaquant essaie de déchiffrer une liste de mots de passe générés par KPM, il attendra probablement assez longtemps jusqu'à ce que le premier soit trouvé. C'est assez intelligent.
« Cependant, si un attaquant sait qu'un mot de passe a été généré par KPM, il peut adapter son outil pour prendre en compte le modèle suivi par KPM. Comme ces mots de passe sont, dans un certain sens, biaisés (pour lutter contre les crackers de mots de passe), ce biais peut être utilisé pour générer les mots de passe les plus probables générés par cet outil, et les tester en premier. Un moyen simple de le faire pourrait être d'utiliser un générateur de Markov, comme celui fourni par John the Ripper (cette méthode n'a pas été testée).
« On peut conclure que l'algorithme de génération en lui-même n'est pas si mal : il résistera aux outils standards. Cependant, si un attaquant sait qu'une personne utilise KPM, il pourra casser son mot de passe beaucoup plus facilement qu'un mot de passe totalement aléatoire. Notre recommandation est cependant de générer des mots de passe aléatoires suffisamment longs pour être trop forts pour être brisés par un outil ».
La grande erreur commise par KPM a été d'utiliser l'horloge du système en secondes comme seed dans un générateur de nombres pseudo-aléatoires Mersenne Twister. « Cela signifie que chaque instance de Kaspersky Password Manager dans le monde va générer exactement le même mot de passe à une seconde donnée », indique Jean-Baptiste Bédrune. Selon lui, chaque mot de passe pourrait être visé par une attaque par force brute ». « Par exemple, il y a 315 619 200 secondes entre 2010 et 2021, donc KPM pourrait générer au maximum 315 619 200 mots de passe pour un jeu de caractères donné. Une attaque par force brute sur cette liste ne prend que quelques minutes ». Jean-Baptiste Bédrune ajoute que de nombreux sites indiquent souvent l'heure de création du compte, ce qui laisse les utilisateurs de KPM vulnérables à une attaque par force brute d'environ 100 mots de passe possibles.
Les chercheurs de Donjon ont conclu :
« Kaspersky Password Manager a utilisé une méthode complexe pour générer ses mots de passe. Cette méthode visait à créer des mots de passe difficiles à casser pour les pirates de mots de passe standard. Cependant, une telle méthode réduit la force des mots de passe générés par rapport aux outils dédiés. Nous avons montré comment générer des mots de passe sécurisés en prenant KeePass comme exemple : des méthodes simples comme les tirages au sort sont sécurisées, dès que vous vous débarrassez du "biais modulo" tout en regardant une lettre dans une plage de caractères donnée.
« Nous avons également étudié le PRNG de Kaspersky et montré qu'il était très faible. Sa structure interne, un twister Mersenne issu de la librairie Boost, n'est pas adaptée pour générer du matériel cryptographique. Mais le défaut majeur est que ce PRNG a été ensemencé avec l'heure actuelle, en secondes. Cela signifie que chaque mot de passe généré par les versions vulnérables de KPM peut être brutalement forcé en quelques minutes (ou en une seconde si vous connaissez approximativement le temps de génération).
« Enfin, nous avons fourni une preuve de concept qui détaille la méthode de génération complète utilisée par KPM. Il peut être utilisé pour vérifier que la faille est bien présente dans les versions Windows de Kaspersky Password Manager < 9.0.2 Patch F. Incidemment, l'écriture de ce PoC nous a permis de repérer une lecture hors limites lors du calcul de la fréquence d'apparition des caractères du mot de passe , ce qui rend les mots de passe un peu plus forts qu'ils auraient dû l'être ».
Chronologie :
- 15 juin 2019 : rapport et preuve de concept envoyés à Kasperky via HackerOne.
- 17 juin 2019 : Kaspersky reconnaît avoir reçu le rapport.
- 25 juin 2019 : Kaspersky confirme la vulnérabilité.
- 4 octobre 2019 : Kaspersky envoie une version privée de Windows afin que nous puissions vérifier que les bogues ont été corrigés, et nous informe qu'ils déploieront une solution pour gérer les mots de passe précédemment générés avant la fin de l'année.
- 8 octobre 2019*: nous confirmons que les vulnérabilités ont été corrigées, mais avons signalé un nouveau petit défaut dans le correctif.
- 10 octobre 2019 : Kaspersky Password Manager for Windows 9.0.2 Patch D est publié, corrigeant les vulnérabilités, mais sans le correctif pour le défaut signalé. La version Web est également mise à jour.
- 9 octobre 2019 : Kaspersky Password Manager pour Android version 9.2.14.872 avec le correctif est publié.
- 10 octobre 2019 : Kaspersky Password Manager pour iOS version 9.2.14.31 avec le correctif est publié.
- 10 décembre 2019 : Kaspersky Password Manager for Windows 9.0.2 Patch F est publié, corrigeant le défaut du patch D.
- 9 avril 2020 : Kaspersky nous informe qu'ils publieront un correctif en octobre pour gérer les mots de passe générés précédemment.
- 13 octobre 2020 : Kaspersky Password Manager 9.0.2 Patch M est publié, avec une notification aux utilisateurs pour les informer qu'un mot de passe doit être régénéré. Kaspersky nous informe que la même notification sera également présente dans les versions mobiles au cours du premier trimestre 2021. CVE-2020-27020 a également été réservé.
- 28 décembre 2020 : Kaspersky accepte qu'un rapport sur la vulnérabilité puisse être divulgué après la publication du CVE.
- 27 avril 2021 : l'avis de sécurité de Kaspersky est publié.
- 14 mai 2021 : Publication des informations pour le CVE-2020-27020.
En clair, Kaspersky a été informé de la vulnérabilité en juin 2019, et a publié la version corrective en octobre de la même année. En octobre 2020, les utilisateurs ont été informés que certains mots de passe devraient être générés à nouveau, et Kaspersky a publié son avis de sécurité le 27 avril 2021 : « Toutes les versions publiques de Kaspersky Password Manager responsables de ce problème ont maintenant une nouvelle logique de génération de mots de passe et une alerte de mise à jour des mots de passe pour les cas où un mot de passe généré n'est probablement pas assez fort », affirme l'entreprise de sécurité.
Sources : Donjon, Kaspersky
Et vous ?
Quelle lecture en faites-vous ?
Comment générez-vous vos mots de passe ?
Vous arrive-t-il d'utiliser un gestionnaire de mots de passe ou un autre outil disposant d'une telle fonctionnalité ?
À quelle fréquence y avez-vous recours ?