Clause de non-responsabilité : J'ai créé PfP: Pain-free Passwords comme passe-temps, cela pourrait être considéré comme un concurrent LastPass.
J'ai été examiner les problèmes de sécurité de plusieurs gestionnaires de mots de passe à plusieurs reprises. En particulier, j'ai signalé jusqu'à présent douze problèmes de sécurité à LastPass et analysé les décisions de conception qui y ont conduit. Alors que paj28 a donné une très bonne réponse générale sur les gestionnaires de mots de passe, je peux fournir quelques détails.
Quand les gens parlent de la sécurité des gestionnaires de mots de passe en ligne, ils se concentrent généralement sur la sécurité des serveurs. L'accent est mis sur la facilité avec laquelle il est possible de compromettre le serveur et ce qui va se passer ensuite. Cependant, il ne s'agit que d'un seul vecteur d'attaque, car attaquer votre instance de gestionnaire de mots de passe local peut conduire aux mêmes résultats. En fait, attaquer l'extension du navigateur pourrait être un plan d'action plus prometteur, car les données y sont déjà décryptées et vous ne laisserez aucune trace dans aucun journal.
Permettez-moi d'examiner ces deux aspects séparément.
Attaquer l'extension de navigateur
Il existe de nombreuses données historiques sur les vulnérabilités dans l'extension de navigateur LastPass. Toutes ces vulnérabilités pourraient être exploitées par des pages Web arbitraires. À tout le moins, ce sont:
Avez-vous remarqué un motif ici? LastPass lutte depuis des années pour sécuriser sa fonctionnalité de remplissage automatique et pour restreindre l'accès à son API interne. Chaque fois qu'un nouveau rapport prouvait que leur correctif précédent était incomplet.
Maintenant, il n'est pas inhabituel que les gestionnaires de mots de passe n'implémentent pas la saisie automatique en toute sécurité, la plupart d'entre eux ont eu des problèmes dans ce domaine lorsque j'ai vérifié. Bien que totalement évitables, ces problèmes sont suffisamment courants pour que j’ai même compilé une liste avec des recommandations pour éviter les pièges.
Mais les problèmes d'API internes sont assez remarquables. LastPass expose cette API aux sites Web de différentes manières. Il est censé être limité à lastpass.com, mais la logique est si complexe que les restrictions ont été contournées à plusieurs reprises dans le passé. Et tandis que LastPass faisait de son mieux pour minimiser la gravité de ses annonces officielles, chacun de ces problèmes permettait aux sites Web de lire tous les mots de passe à la fois. Pire encore, le dernier rapport de Tavis Ormandy a prouvé que l'API interne pouvait être utilisée pour que le composant binaire LastPass exécute du code arbitraire sur la machine de l'utilisateur. La même chose pourrait probablement être faite avec toutes les failles précédentes qui exposaient l'API interne.
On pourrait bien sûr se demander pourquoi LastPass n'a pas réussi à restreindre correctement l'accès à l'API interne. Mais la meilleure question est de savoir pourquoi cette API est exposée aux sites Web. En effet, une partie importante de la fonctionnalité LastPass n'est pas contenue dans l'extension, mais repose plutôt sur le site Web LastPass pour fonctionner. C'est une décision de conception très problématique, mais jusqu'à présent, LastPass ne semblait pas intéressé à le réparer.
Attaque des données côté serveur
Disons ceci très clairement: nous ne faisons pas confiance au serveur. Ce n'est pas que nous nous méfions particulièrement de LogMeIn, Inc. - du moins pas plus que toute autre entreprise. Mais nos mots de passe sont des données très sensibles, et même l'entreprise la plus éthique peut avoir un employé voyou. Ajoutez à cela la possibilité que les autorités américaines leur demandent de produire vos données, ce qui n'est même pas nécessairement associé à une enquête criminelle. Peu importe la possibilité que leurs serveurs soient piratés, comme cela s'est déjà produit une fois.
Il est donc très important que vos données sur le serveur soient cryptées et inutiles à quiconque peut obtenir saisissez-le. Mais qu'est-ce qui peut éventuellement empêcher les attaquants de le déchiffrer? Exactement une chose: ils ne connaissent pas votre mot de passe principal qui est utilisé pour dériver la clé de chiffrement. La question essentielle est donc la suivante: LastPass protège-t-il suffisamment votre mot de passe principal et votre clé de chiffrement?
Dans ce domaine, je ne suis au courant d'aucune recherche publiée à part la mienne, la plupart étant écrite dans ceci article de blog. Ma conclusion ici: LastPass souffre d'un certain nombre de défauts de conception ici, certains étant résolus maintenant tandis que d'autres sont toujours actifs.
Renforcement du mot de passe principal
Si les attaquants ont mis la main sur un tas de données chiffrées, l'approche de déchiffrement la plus simple est: devinez le mot de passe principal utilisé pour dériver la clé de chiffrement. Vous pouvez essayer un nombre illimité de suppositions localement, sur n'importe quel matériel que vous pouvez vous permettre, donc ce processus sera relativement rapide.
LastPass utilise l'algorithme PBKDF2 pour dériver la clé de cryptage du mot de passe principal. Tout en étant inférieur aux algorithmes plus récents comme bcrypt, scrypt ou Argon2, cet algorithme a la propriété importante de ralentir la dérivation de clé, de sorte que les attaquants faisant des devinettes localement seront ralentis. Le temps nécessaire est proportionnel au nombre d'itérations, c'est-à-dire: plus le nombre d'itérations est élevé, plus il sera difficile de deviner un mot de passe principal.
Pendant longtemps, la valeur par défaut de LastPass était de 5 000 itérations. Il s'agit d'une valeur extrêmement faible qui offre très peu de protection. J'ai calculé qu'une seule carte graphique GeForce GTX 1080 Ti pouvait être utilisée pour tester 346 000 suppositions par seconde. C'est suffisant pour parcourir la base de données contenant plus d'un milliard de mots de passe connus de diverses fuites de sites Web en à peine plus d'une heure.
Suite à mes rapports, LastPass a augmenté la valeur par défaut à 100 000 itérations à mi-parcours -2018 ce qui est bien plus adéquat. Bien sûr, si vous êtes une cible importante qui pourrait s'attendre à ce que des ressources au niveau de l'état soient lancées pour deviner votre mot de passe principal, vous devez toujours choisir un mot de passe principal extrêmement fort.
Obtenir des données pour bruteforce
L'une de mes découvertes au début de 2018 était que le script https://lastpass.com/newvault/websiteBackgroundScript.php
pouvait être chargé par n'importe quel site Web. Ce script contenait à la fois votre nom d'utilisateur LastPass et un morceau de données chiffrées (clé RSA privée). Votre nom d'utilisateur LastPass étant également le sel de dérivation du mot de passe, c'est tout ce dont quelqu'un a besoin pour forcer brutalement votre mot de passe principal localement.
Ce problème a bien sûr été résolu rapidement. Cependant, la faille était suffisamment évidente pour que je me demande si j'étais le premier à la découvrir. Bien que j'aie exhorté LastPass à vérifier dans ses journaux des signes d'exploitation de cette vulnérabilité dans la nature, à ma connaissance, cette enquête n'a jamais eu lieu.
Les «rondes côté serveur» comme protection inutile
Suite à un incident de sécurité en 2011, LastPass a implémenté un mécanisme de sécurité supplémentaire: en plus de vos itérations PBKDF2 côté client, ils ajouteraient 100 000 itérations supplémentaires sur le serveur. Donc, en théorie, si quelqu'un pouvait extraire des données du serveur, cela augmenterait l'effort requis pour deviner votre mot de passe principal.
En pratique, je pourrais prouver de manière concluante que ces 100 000 itérations supplémentaires ne sont appliquées qu'au hachage du mot de passe. Toutes les autres données utilisateur (mots de passe, clés RSA, OTP et plus) sont uniquement cryptées à l'aide de la clé de cryptage dérivée localement de votre mot de passe principal, pas de protection supplémentaire ici. Conclusion: cette "protection" supplémentaire est un gaspillage complet des ressources du serveur et n'apporte aucune valeur.
Entrer par la porte dérobée
Quelle que soit la faiblesse de la protection, les attaques par force brute seront toujours inefficaces contre les mots de passe principaux les plus puissants. Cependant, la conception de LastPass contient de nombreuses portes dérobées qui permettraient de déchiffrer les données sans dépenser aucun effort.
L'interface Web
LastPass vous fournit commodément une interface Web pour accéder à vos mots de passe sans l'aide d'une extension de navigateur. Cette fonctionnalité est cependant un piège: chaque fois que vous entrez votre mot de passe principal dans un formulaire de connexion sur le Web, il n'y a aucun moyen de savoir s'il hachera votre mot de passe principal avec PBKDF2 avant de l'envoyer au serveur ou s'il le transmettra aussi clairement text.
Vous vous souvenez que nous ne faisons pas confiance au serveur? Pourtant, une modification triviale du code JavaScript servi par le serveur suffit à compromettre tous vos mots de passe. Même si vous inspectez ce code JavaScript, il y en a trop pour que vous remarquiez quoi que ce soit. Et il serait possible de fournir le code modifié uniquement à des utilisateurs spécifiques.
Paramètres du compte
Même si vous utilisez l'extension de navigateur de manière cohérente, chaque fois que vous accédez aux paramètres du compte, cela chargez le site Web lastpass.com. Là encore, il n'y a aucun moyen pour vous de savoir que ce site Web n'est pas compromis et ne volera pas vos données en arrière-plan.
Plusieurs autres éléments de la fonctionnalité d'extension sont également mis en œuvre en revenant à le site Web lastpass.com, et LastPass ne voit pas le problème ici.
OTP de récupération
LastPass a le concept de mots de passe à usage unique (OTP) que vous pouvez utiliser pour récupérer les données de votre compte si jamais vous oubliez le mot de passe principal. Ces OTP permettent de déchiffrer vos données mais ne sont normalement pas connus du serveur.
Pour rendre la récupération encore plus fiable, LastPass créera automatiquement un OTP de récupération par défaut et le stockera dans les données d'extension. Le problème ici: le processus de récupération a été conçu de telle manière que l'extension donnerait immédiatement à lastpass.com cette récupération OTP à la demande, sans même vous en informer. Ainsi, un serveur LastPass compromis pourrait demander à l'extension votre OTP de récupération et l'utiliser pour décrypter vos données.
Selon LastPass, ce problème a été résolu en août 2018. Je ne sais pas comment ils l'ont résolu cependant, au moins, je ne pouvais voir aucune des solutions évidentes dans leur code.
Exposition de la clé de chiffrement
Il y a aussi un certain nombre d'occasions où l'extension exposera directement votre clé de chiffrement locale aux serveurs LastPass. Cela vise à aider la fonctionnalité Web LastPass à mieux s'intégrer à l'extension de navigateur, mais annule les effets du chiffrement des données localement. Les actions suivantes sont toutes problématiques:
- Ouverture des paramètres de compte, défi de sécurité, historique, signets, surveillance du crédit
- Association à un compte personnel
- Ajout une identité
- Importer des données si le composant binaire n'est pas installé
- Imprimer tous les sites
- Cliquer sur une notification de violation
Le dernier est particulièrement sérieux car le serveur LastPass peut vous envoyer des notifications de violation à volonté. Cela permet donc à LastPass d'accéder à vos données à tout moment, plutôt que d'attendre que vous utilisiez vous-même des fonctionnalités problématiques.
Plus de défauts de conception
- Comme vous pouvez le constater par vous-même en ouvrant https://lastpass.com/getaccts.php lorsque vous êtes connecté, le coffre-fort LastPass n'est en aucun cas une masse de données chiffrées. Il contient plutôt des données cryptées ici et là, tandis que d'autres champs comme l'URL correspondant au compte utilisent simplement le codage hexadécimal. Ce problème a été signalé dans cette présentation de 2015 et de plus en plus de champs ont été chiffrés depuis, mais pas encore tous. En particulier, un rapport que j'ai déposé a souligné que les domaines équivalents non chiffrés permettaient au serveur LastPass de modifier cette liste et d'extraire vos mots de passe de cette manière. Ce problème particulier a été résolu en août 2018 selon LastPass.
- La même présentation gronde LastPass pour son utilisation de AES-ECB pour le chiffrement. Entre autres choses, il indique lesquels de vos mots de passe sont identiques. LastPass a fait la transition vers AES-CBC depuis, mais quand j'ai regardé mon "coffre-fort", j'ai vu un tas d'informations d'identification cryptées AES-ECB là-bas (vous pouvez le dire car AES-ECB est simplement un blob encodé en base64 alors que le LastPass (variante d'AES-CBC commence par un point d'exclamation).
- L'OTP de récupération étant créé automatiquement et stocké dans les données d'extension, toute personne ayant accès à votre appareil et à votre adresse e-mail peut accéder à votre compte LastPass. Ceci est en fait documenté et considéré comme un risque faible. Peut-être qu'un de vos collègues vous a fait une blague en vous envoyant un e-mail à votre nom parce que vous avez oublié de verrouiller votre ordinateur - la prochaine fois, il pourrait reprendre votre compte LastPass même si vous êtes déconnecté de LastPass.
- En parlant d'être déconnecté, le délai d'expiration de session par défaut est de deux semaines. Bien que ce soit certainement pratique, il y a une raison pour laquelle la plupart des produits traitant des données sensibles ont des intervalles d'expiration de session beaucoup plus courts, généralement bien en dessous d'un jour.
- Pour combiner une valeur avec un secret (par exemple en tant que signature), on utilisera généralement SHA256-HMAC. LastPass utilise plutôt une approche personnalisée, appliquant deux fois le hachage SHA256. Bien que les attaques que HMAC est censé traiter ne semblent pas jouer un rôle ici, je ne parierais pas sur quelqu'un avec une meilleure connaissance de la cryptographie que moi ne trouvant pas de vulnérabilité ici après tout. De plus, le côté serveur produira parfois également des jetons SHA256 - je me demande quel genre de bogue se passe là où je ne peux pas le voir et s'il est vraiment sécurisé.