Analyse du piratage des 6,5 millions de comptes de LinkedIn
Il y a quelques jours, le réseau social professionnel LinkedIn a été victime d'un piratage de grande ampleur. Un hacker russe a réussi à mettre la main sur 6,5 millions de comptes (le service totalise en tout 161 millions de membres). Voici une analyse rapide, des quelques explications qui sont disponibles aujourd'hui.
À la suite de ce piratage, un fichier de plusieurs méga-octets a été mis en ligne. On va donc le télécharger et l'analyser pour obtenir plus d'informations :
$ wget www.tux-planet.fr/public/hack/showoff/linkedin/combo_not.zip
$ unzip combo_not.zip
$ ls -lh combo_not.txt
259M combo_not.txt
$ wc -l combo_not.txt
6 458 020 combo_not.txt
Nous sommes en présence d'un fichier texte de 260 Mo, qui contient environ 6,5 millions de lignes. On regarde le contenu :
$ head -n 5 combo_not.txt
000000a94d47b9ca82c58a3b092a50263b40f66e
000000a9876203148923f97c6f1a0635472e1e38
000000a9bf60e7f17fcac444a54791af780743a3
000000a97e734e7ed9766d1ce08ebc68d3e93ab2
000000a9b4b1b3497aac51e212ac9efdb00e7f4e$ tail -n 5 combo_not.txt
000000a9e3c4a47ef783d462ef21317ce01b9264
000000a98f954c31b650dda48b6b3a4d5dc98b5e
000000a9d898684732caa690f8869e4f525f17a2
000000a91fa0b607e0dbdc34452a1215ac27d760
000000a906f329bbd9d545b25556ed44aebe81e6
La longueur du hash (40 caractères) ainsi que sa forme ne font aucun doute : il s'agit d'un hash SHA-1. Si l'on observe de plus près, on remarque rapidement que les 6 premiers caractères sont des zéros. Cette séquence n'est pas normale.
On fait un test de hachage sur le mot de passe "linkedin", en partant du principe que sur 6,5 millions de comptes, il y a bien au moins une personne qui a utilisé le nom du service comme password :
$ echo -n "linkedin" | openssl sha1 | awk '{print $2}'
7728240c80b6bfd450849405e8500d6d207783b6
On enlève les 5 premiers caractères et on cherche la sous-chaîne dans le fichier :
$ grep 40c80b6bfd450849405e8500d6d207783b6 combo_not.txt
0000040c80b6bfd450849405e8500d6d207783b6
Bingo, on trouve un résultat. Ce petit test permet de confirmer la théorie suivante : les 5 premiers caractères des hashs ont bel et bien été remplacés par des zéros volontairement, sûrement par le hacker. À mon avis, ce dernier a voulu prouver qu'il avait bien réussi à pirater le site, sans pour autant mettre en ligne la totalité des informations.
À partir de là, on ne peut pas vraiment aller plus loin dans l'investigation. Si vous avez un compte chez LinkedIn, vous pouvez toujours vérifier si votre mot de passe fait partie de la liste, avec cette commande (remplacez la chaîne password par votre mot de passe) :
$ grep `echo -n "password" | openssl sha1 | awk '{print $2}' | cut -c6-40` combo_not.txt
0000040c80b6bfd450849405e8500d6d207783b6
Même si vous ne le trouvez pas, je vous recommande de le changer.
Pour conclure, je dirais que les développeurs de LinkedIn ont fait une erreur, celle de ne pas utiliser un salage personnalisé en plus du hachage SHA-1. Car, dans l'état actuel des choses, notre pirate russe peut aujourd'hui décoder l'ensemble des 6,5 millions mots de passe. L'utilisation d'un salage maison lui aurait sûrement compliqué la tâche, en partant de l'hypothèse qu'il n'a pas eu accès au code de l'application et qu'il a utilisé une faille du type "injection SQL".
Seul bon point, les développeurs n'ont pas utilisé l'algorithme MD5, que l'on a tendance à retrouver systématiquement dans ce genre de scénario.
Merci à @Déborah et @Cobratrance pour la relecture.
17 Commentaires pour "Analyse du piratage des 6,5 millions de comptes de LinkedIn"
Flux des commentaires de cet article Ajouter un commentaireManifestement les 4 premiers digits ne sont pas tronqués pour tous les mots de passe (j'ai vérifé pour le mien
. Il demeure donc possible de remonter à certains mots de passe pour ce fichier. Le problème est que les gens utilisent souvent le même mot de passe pour accéder à différents services sur le web ...
@sidney : effectivement, je n'avais même pas vu étant donné que je n'ai inspecté que le début et la fin du fichier. D'après mes calcul, il y a 2 millions de lignes avec un hash non tronqué :
Du coup, je comprends pas pourquoi il manque les 5 premiers caractères sur le reste des lignes. Ça na plus de sens.
Sinon, comme on a pas le nom du login en face du hash, cela n'a pas de sens de chercher à cracker les hashs complets...
Cela m'a fait plaisir de "contribuer" à ton article
(@cobratrance, c'est moi)
Si tu as en a besoin une prochaine fois, n'hésite pas à me le demander.
Sinon, l'article est très intéressant et instructif.
Bonjour, et merci pour cet article intéressant.
Dès le titre, je note un raccourcis qui a sa petite importance : ce ne sont pas 6,5 millions de comptes qui ont été piratés, mais 6,5 millions de mots de passe hashés qui ont été publiés.
La nuance est de taille : pour retrouver quel mot de passe correspond à quel hash, le pirate s'est évidemment débarrassé des hash qui se répètent, ceci afin de ne pas refaire N fois le même travail pour des mots de passe identiques.
On peut donc supposer que c'est beaucoup plus que 6,5 millions de comptes qui ont été piratés.
Je croyais que le principe du hashage, c'était que l'on ne puisse pas remonter à la source avec le hash...ou du moins nécéssitait une grosse puissance de calcul par brute force (même si des simplification ont été trouvées). En plus avec 6 million de mdp à décrypter. A mon avis ceux qui craignent le plus sont les mots de passe générés par dictionnaires.
c'est bien d'avoir les mot de passe de 6.5 millions d'utilisateurs mais si vous ne savez pas à quel login il corresponde? LAWL
Car ou sont les login?
C'est assez rapide ce faire un dico multi caractères sous Linux. Ensuite faire un hash sur le password afin de faire une comparaison.
Il est quand même à rappeler qu'un hash n'est PAS un cryptage
@sl33k > C'est sans doute volontaire, comme les "00000" avant les hashs.
En tout cas, c'est une belle réussite
il n'y à pas des "0000" dans tout les hash.
@sl33k : @brigades : quand tu exploite une faille de type injection SQL, tu as accès à tous les champs de la base de données. Donc si il y a eu extraction des mot de passe, il y a de grande chance que le pirate ai eu accès au login correspondant.
@sl33k : pour les hashs qui n'ont pas de 0000, c'est un grand mystère...
@felow : oui, avec un hash, on peut difficilement l'inverser et il faut faire de la brute force. Si les mots de passes utilisés ne sont pas complexe et comporte que quelques caractères, cela devient assez simple de les cracker.
@pti-seb > Grand chance ? Je dirai même plus que c'est sur
C'est simplement qu'il ne fournis pas tout et qu'il garde le reste pour lui. Comme le détails de l'injection SQL faite ...
Et un script qui génère un dictionnaire de plusieurs Giga avec fonction de brute force en hash c'est facilement réalisable... Reste juste la puissance de calcul du PC quoi
@pti-seb : il me semble que mon message a été mal compris. Bien sûr que le hacker doit posséder les logins.
Je veux juste souligner que, contrairement à ce qui est répété plusieurs fois dans cet article, ce ne sont pas 6,5 millions de comptes qui ont été piratés mais certainement beaucoup plus.
La seule chose qu'on sait c'est que le pirate a publié 6,5 millions de mots de passes (hashés) différents. Si l'on tient compte du nombre considérable de gens qui utilisent les mêmes mots de passes de base ("0000", "1234", "john", "password", "linkedin", "secret", etc.), il n'y a aucune chance pour qu'en piratant 6 millions de comptes le pirate se soit retrouvé avec 6 millions de hash différents (puisqu'il n'y a pas de grain de sel).
Le titre est trompeur et bien en dessous de la réalité. Je suis prêt à parier que le nombre de comptes piratés est au moins le double du chiffre annoncé.
Bonjour,
@Seb, merci pour cet article. J'aimerais te signaler un problème technique (peut être) sur ton site. Lorsque je suis sur la page index, sur cet article, il affiche 3 commentaires seulement alors qu'il y en a beaucoup plus.
Ensuite lorsqu'on regarde le résultat de
$ head -n 5 combo_not.txt
000000a94d47b9ca82c58a3b092a50263b40f66e
000000a9876203148923f97c6f1a0635472e1e38
000000a9bf60e7f17fcac444a54791af780743a3
000000a97e734e7ed9766d1ce08ebc68d3e93ab2
000000a9b4b1b3497aac51e212ac9efdb00e7f4e
$ tail -n 5 combo_not.txt
000000a9e3c4a47ef783d462ef21317ce01b9264
000000a98f954c31b650dda48b6b3a4d5dc98b5e
000000a9d898684732caa690f8869e4f525f17a2
000000a91fa0b607e0dbdc34452a1215ac27d760
000000a906f329bbd9d545b25556ed44aebe81e6
Je vois une série de 6 zéros, non pas 5, merci de m'expliquer si je me trompe.
vérifier si votre mot de passe est dans la liste : https://lastpass.com/linkedin/
@SMed79 > A vérifier quand même si ce site est vraiment sécurisé et vrai... Sinon rien de mieux pour accélerer le processus
Imaginer que cette page soit fausse, c'est vous même qui dites que tel password = tel hash... Alors ?
@Djerfy > j'ai tester avec: linkedin, azerty,123123, 123456, 654321, password ... (en trouve toujour des utilisateur qui ne prenant pas au sérieux les mots de pass :/
Un gestionnaire de MDP : http://keepass.info/
conseil pour obtenir le mot de passe parfait : http://xkcd.com/936/
@NimaX : j'ai mal compté, je corrige. Sinon pour le problème d'affichage des commentaires, c'est le plugin de cache du site qui doit faire des sienne...
Bonsoir,
Est-il possible de fournir un script permettant de tester à la volée des mots de passe présent dans un fichier texte ?
J'ai tenté de le créer, sans succès, malgré l'ajout de mot de passe tel que "linkedin" ou "azerty" dans mon fichier de mot de passe personnel. Le voici :
#!/bin/sh
# Création du canal, basé sur un fichier texte contenant la liste des mots de passe à tester
exec 3<dictionnaire-JM.txt
# Lecture du canal 3 et création de la variable mdp_a_tester
while read lig 0<&3
do
mdp_a_tester=`echo $lig`
grep `echo -n mdp_a_tester | openssl sha1 | awk '{print $2}' | cut -c6-40` combo_not.txt