jan 28 2008
De l’art du Crackage
Dernièrement je suis tombé sur une base de données qui trainait dans la nature contenant 269 478 noms d’utilisateurs accompagnés de leurs mots de passe. Cette base de données provient d’un site populaire en rapport à un jeux multijoueur très en vogue actuellement. Ce site touche donc un public standard, pas plus renseigné qu’un autre internaute lambda, sur la protection des mots de passe.
Lors d’un enregistrement sur ce site, il n’y a aucune limite de longueur minimale ou maximale et les principaux caractères spéciaux sont autorisés.
Je me suis donc amusé à faire quelques stats & quelques tests pour mieux cerner le crackage de mots de passe. En voici la présentaiton.
Un mot sur les crackeurs
Les plus connus (hors rainbowtable) sont
- Cain & Abel
- PasswordsPro (payant)
- L0phtCrack (n’est plus supporté mais est troujours trouvable sur le net)
- John The Ripper
- “Cain & Abel” & PasswordsPro sont deux crackeurs fonctionnant sur le système Windows.
- L0phtCrack n’étant plus supporté, il est conseillé d’en utiliser un autre. Cependant il fonctionne sur Windows.
- John The Ripper fonctionne quant à lui sur Unix & Windows.
Par contre au niveau performance, je suis pas très attiré par John The Ripper. Ayant un pc “standard” j’ai à peu près les taux de calculs suivants :
- Cain & Abel : 4 800 000 hash/s
- PasswordsPro : 5 000 000 hash/s
- John The Ripper : 2 000 000 hash/s (!!!!)
Autant vous dire que j’aurais plutôt tendance à utiliser l’un des deux premiers.
Bien sûr il existe d’autres outils qui permettent d’attaquer les hashs mais ce n’est pas vraiment le but de cet article.
Evaluation de la robustesse des mots de passe
Je me suis ensuite prêté à un petit jeux qui consiste à évaluer la robustesse des différents types de mots de passe.
Pour commencer de façon très simplissime, voici une estimation par la pratique du temps de calcul néccessaire pour tester toutes les combinaisons selon la taille de la chaîne (avec Cain & Abel). Le Charset utilisé est : abcedfghijklmnopqrstuvwxyzABCEDFGHIJKLMNOPQRSTUVWXYZ0123456789.
- 5 caractères : ~3 minutes
- 6 caractères : ~3heures 10minutes
- 7 caractères : ~8jours 6heures
- 8 caractères : ~1.4 année
- 9 caractères : ~90 années
Pour information, mon processeur est un P4 HT 2.8 Ghz et il est accompagné de 1 024 Mo de mémoire DDR2.
Avec un tel charset on constate que des mots de passes dont la longueur est inférieure à 8 caractères sont tout à fait crackable. Ensuite, ce n’est plus réellement faisable par un seul ordinateur de configuration standard.
Maintenant : La Classification des mots de passes
Pour étudier les mots de passe j’ai décidé de compter le nombre de passes pour chaque longueur, pour chaque type de charset, etc.
Voici alors ce que j’ai obtenu (en gras, les pourcentages supérieurs à 10%) :
- Nombre de mots de passe total : 269 478 (100%)
- Nombre de mots de passe égaux aux logins : 12 923 (4,7955677272356%)
- Nombre de mots de passe dont la longueur est de :
- 1 caractère : 309 (0,11466613230022%)
- 2 caractères : 476 (0,1766377960353%)
- 3 caractères : 3 787 (1,4053095243396%)
- 4 caractères : 11 349 (4,2114755193374%)
- 5 caractères : 16 419 (6,0928906997974%)
- 6 caractères : 59 901 (22,228530714938%)
- 7 caractères : 37 011 (13,734330817358%)
- 8 caractères : 59 597 (22,115720021672%)
- 9 caractères : 34 096 (12,652609860545%)
- 10 caractères : 22 716 (8,4296306191971%)
- 11 caractères : 10 976 (4,0730597674022%)
- 12 caractères : 12 821 (4,7577167709423%)
- Nombre de mots de passe strictement du type (voir fin de page) :
- [a-z] : 30 669 (11,380891946652%)
- [A-Z] : 340 (0,12616985431093%)
- [0-9] : 36 181 (13,426327937717%)
- [#] : 64 (0,023749619634998%)
- [a-zA-Z] : 83 715 (31,065615745998%)
- [a-z0-9] : 38 245 (14,192253170945%)
- [A-Z0-9] : 1042 (0,38667349468231%)
- [a-zA-Z0-9] : 76 523 (28,396752239515%)
- [a-z#] : 362 (0,13433378606046%)
- [A-Z#] : 6 (0,0022265268407811%)
- [0-9#] : 147 (0,054549907599136%)
- [a-zA-Z#] : 776 (0,28796413807435%)
- [a-z0-9#] : 513 (0,19036804488678%)
- [A-Z0-9#] : 18 (0,0066795805223432%)
- [a-zA-Z0-9#] : 877 (0,32544400656083%)
- Nombre de mots de passe contenant :
- [a-z] : 231 680 (85,973623078693%)
- [A-Z] : 163 297 (60,597525586504%)
- [0-9] : 153 546 (56,979048382428%)
- [#] : 2 763 (1,0253156101797%)
- Nombre de mots de passe ayant :
- 1 seul type : 67 254 (24,957139358315%)
- 2 types différents : 123 517 (45,835652632126%)
- 3 types différents : 77 830 (28,881764002998%)
- 4 types différents : 877 (0,32544400656083%)
On constate ici que :
- 5 % des mots de passe sont identiques aux logins (!!!!)
- Presque 90% ont plus de 5 caractères.
- Les 3/4 des mots de passe ont 2 ou 3 types de caractères différents.
- Les caractères spéciaux sont très peu utilisés (1% !!!).
- Les mots de passe les plus couramment utilisés sont de la forme : c1b4S6 (6 caractères, mix-alpha-numeric)
Temps néccessaire
Voyons maintenant le temps néccessaire pour tester toutes les combinaisons selon le type de caractères présents, la longueur du mot de passe, et le nombre de mots de passe à attaquer. On estimera ici que l’on réalise 5 000 000 de combinaisons/secondes.
En rouge, lorsque cela demande moins d’1 heure, en violet moins d’une journée, en bleu moins d’une semaine et en marron, moins d’un mois.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bien sûr, des machines plus puissantes ou des attaques distribuées peuvent permettre de réduire considérablement ces temps de calcul.
*Types
- [a-z] : abcdefghijklmnopqrstuvwxyz
- [A-Z] : ABCDEFGHIJKLMNOPQRSTUVWXYZ
- [0-9] : 0123456789
- [#] : !@#$%^&*()-_+=~`[]{}|\:;”‘<>,.?/
Au niveau des ‘hash/s’, de quel format tu parles? DES , MD5 ….
Pourquoi JTR est plus de 2 fois plus lent que Cain & Abel? Optimisation du code?
En tous cas, de super stats! Ça en dit long!