Des chercheurs ont trouvé des failles dans le système de protection de mots de passe d'Ashley Madison,
qui fait appel à la fonction de hash bcrypt

Il y a quelques jours, Ashley Madison, le site canadien de rencontre en ligne pour les hommes mariés, a fait l’objet d’un piratage qui s’est soldé par la publication de la base de données des utilisateurs de la plateforme.

Les réguliers du service avaient été assurés que leurs mots de passe n’étaient pas conservés en texte clair mais étaient protégés par la fonction de hash bcrypt. Cette fonction est connue comme étant adaptative (c'est-à-dire que l'on peut augmenter le nombre d'itérations pour rendre le sel de l’algorithme plus lent) et donc très résistante aux attaques par recherche exhaustive malgré l’augmentation de la puissance de calcul. Dans ce cas particulier, les développeurs s’étaient servis d’un paramètre « cost » (coût souhaité de l’algorithme, il s’agit de la puissance de deux du nombre d’itération choisi) d’un facteur de 12.

Aussi, au lieu d’utiliser une attaque exhaustive dans son analyse des données rendue publique par les pirates, CynoSure Prime, un groupe qui a fait de sa spécialité le déchiffrement des mots de passe, a décidé de s’y prendre autrement. « Nous avons identifié deux fonctions qui ont suscité notre intérêt et, après une analyse plus approfondie, nous avons réalisé que nous pourrions exploiter ces fonctions comme catalyseurs dans l’accélération du déchiffrement des hashs de bcrypt. Par les deux méthodes non sécurisées de la génération de la variable $logkinkey dans deux fonctions différentes, nous avons été en mesure de gagner une énorme augmentation dans la vitesse de déchiffrement des mots de passe hashés par bcrypt », ont-ils assuré.

« Au lieu de nous attaquer directement aux hashs bcrypt, qui font la une en ce moment, nous avons pris une approche plus efficace en attaquant plutôt les tokens md5(lc($username).”::”.lc($pass)) et md5(lc($username).”::”.lc($pass).”:”.lc($email).”:73@^bhhs&#@&^@8@*$”). Ayant déchiffrés les tokens, nous n’avions plus qu’à les faire correspondre à leur équivalent en bcrypt », ont-ils avancé. Résultat ? En une dizaine de jours, ce sont plus de 10 millions de mots de passe qui ont pu être déchiffrés.

Cette décision par donc de deux observations. La première porte sur amlib_member_create.function.php et plus précisément sur la fonction amlib_member_create() aux lignes 69 et 70. La ligne 70 suggère que la variable $loginkey a été générée en convertissant en caractères minuscules les variables username et password dans md5 ( $loginkey = md5(strtolower($username).'::'.strtolower($password)) ).

La seconde observation porte sur AccountProvider.php et plus précisément sur la fonction generateLoginKey() aux lignes 78 et 79. « Cette fonction utilise une routine légèrement différente pour générer la variable $loginkey puisqu’elle incorpore l’utilisation des variables $username, $password et $email avec une constante salt de type string appelée $hash. Ensemble, ces variables ont été hachées dans l’algorithme MD5. Il apparaît que la fonction generateLoginKey() est invoquée lorsqu’un utilisateur modifie les attributs de son compte (username, password et email). La résultante est qu’un nouveau loginkey est généré pour ce compte. De ce que nous avons compris, il apparaît que bcrypt n’a pas toujours été utilisé pour hasher le mot de passe avant qu’il ne soit introduit dans la fonction generateLoginKey(). Ce qui signifie que cette méthode pourrait être utilisée pour récupérer les mots de passe de comptes qui avaient été modifiés avant cette modification du code », ont-ils expliqué.

Le groupe a fait savoir qu’il ne publierait pas les mots de passe qu’il a réussi à déchiffrer afin de protéger les utilisateurs. Cynosure Prime a émis l’hypothèse selon laquelle ce hashage insécurisé pourrait avoir été mis sur pied afin de s’assurer que les utilisateurs puissent se connecter au site rapidement.

Source : blog Cynosure Prime

Et vous ?

Qu'en pensez-vous ?

Forum Sécurité