jan 28 2008

De l’art du Crackage

Publié par Leyou at 22:34 dans Sécurité

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 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.

Nombre de Caractères
1
2
3
4
5
6
7
8

Nombre mdp
Temps de calcul – Num
10 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 2s 0d 0h 0m 20s 0d 0h 3m 20s
100 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 2s 0d 0h 0m 20s 0d 0h 3m 20s 0d 0h 33m 20s
1 000 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 2s 0d 0h 0m 20s 0d 0h 3m 20s 0d 0h 33m 20s 0d 5h 33m 20s
10 000 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 2s 0d 0h 0m 20s 0d 0h 3m 20s 0d 0h 33m 20s 0d 5h 33m 20s 2d 7h 33m 20s
100 000 0d 0h 0m 0s 0d 0h 0m 2s 0d 0h 0m 20s 0d 0h 3m 20s 0d 0h 33m 20s 0d 5h 33m 20s 2d 7h 33m 20s 23d 3h 33m 20s
1 000 000 0d 0h 0m 2s 0d 0h 0m 20s 0d 0h 3m 20s 0d 0h 33m 20s 0d 5h 33m 20s 2d 7h 33m 20s 23d 3h 33m 20s 231d 11h 33m 20s

Nombre mdp
Temps de calcul – Alpha
10 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 14s 0d 0h 12m 40s 0d 10h 59m 1s 23d 19h 9m 3s 1237d 11h 50m 57s
100 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 2s 0d 0h 2m 26s 0d 2h 6m 44s 4d 13h 50m 12s 237d 23h 30m 34s 12374d 22h 29m 30s
1 000 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 28s 0d 0h 24m 22s 0d 21h 7m 20s 45d 18h 22m 1s 2379d 19h 5m 40s 123749d 8h 55m 6s
10 000 0d 0h 0m 0s 0d 0h 0m 5s 0d 0h 4m 41s 0d 4h 3m 43s 8d 19h 13m 28s 457d 15h 40m 19s 23797d 22h 56m 45s 1237493d 17h 11m 2s
100 000 0d 0h 0m 1s 0d 0h 0m 54s 0d 0h 46m 52s 1d 16h 37m 12s 88d 0h 14m 40s 4576d 12h 43m 13s 237979d 13h 27m 30s 12374937d 3h 50m 29s
1 000 000 0d 0h 0m 10s 0d 0h 9m 0s 0d 7h 48m 41s 16d 22h 12m 3s 880d 2h 26m 46s 45765d 7h 12m 12s 2379795d 14h 35m 5s 123749371d 14h 24m 51s

Nombre mdp
Temps de calcul – Alpha Num
10 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 29s 0d 0h 30m 32s 1d 7h 33m 20s 81d 12h 27m 9s 5054d 4h 3m 31s
100 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 4s 0d 0h 4m 55s 0d 5h 5m 22s 13d 3h 33m 24s 815d 4h 31m 32s 50541d 16h 35m 11s
1 000 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 47s 0d 0h 49m 15s 2d 2h 53m 46s 131d 11h 34m 7s 8151d 21h 15m 21s 505416d 21h 51m 56s
10 000 0d 0h 0m 0s 0d 0h 0m 7s 0d 0h 7m 56s 0d 8h 12m 32s 21d 4h 57m 45s 1314d 19h 41m 11s 81518d 20h 33m 32s 5054169d 2h 39m 29s
100 000 0d 0h 0m 1s 0d 0h 1m 16s 0d 1h 19m 26s 3d 10h 5m 26s 212d 1h 37m 36s 13148d 4h 51m 51s 815188d 13h 35m 24s 50541691d 2h 34m 57s
1 000 000 0d 0h 0m 12s 0d 0h 12m 48s 0d 13h 14m 25s 34d 4h 54m 27s 2120d 16h 16m 6s 131482d 0h 38m 36s 8151885d 15h 54m 1s 505416911d 1h 49m 39s

Nombre mdp
Temps de calcul – AlphaNum All
10 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 1s 0d 0h 2m 36s 0d 4h 4m 38s 15d 23h 15m 39s 1501d 2h 31m 58s 141103d 22h 6m 10s
100 0d 0h 0m 0s 0d 0h 0m 0s 0d 0h 0m 16s 0d 0h 26m 1s 1d 16h 46m 20s 159d 16h 36m 35s 15011d 1h 19m 48s 1411039d 5h 1m 48s
1 000 0d 0h 0m 0s 0d 0h 0m 1s 0d 0h 2m 46s 0d 4h 20m 14s 16d 23h 43m 28s 1596d 22h 5m 56s 150110d 13h 18m 3s 14110392d 2h 18m 2s
10 000 0d 0h 0m 0s 0d 0h 0m 17s 0d 0h 27m 41s 1d 19h 22m 29s 169d 21h 14m 40s 15969d 4h 59m 22s 1501105d 13h 0m 38s 141103920d 23h 0m 21s
100 000 0d 0h 0m 1s 0d 0h 2m 56s 0d 4h 36m 51s 18d 1h 44m 57s 1698d 20h 26m 44s 159692d 1h 53m 41s 15011055d 10h 6m 25s 1411039209d 14h 3m 36s
1 000 000 0d 0h 0m 18s 0d 0h 29m 27s 1d 22h 8m 36s 180d 17h 29m 39s 16988d 12h 27m 24s 1596920d 18h 56m 51s 150110554d 5h 4m 12s 14110392095d 20h 36m 0s

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
  • [#] : !@#$%^&*()-_+=~`[]{}|\:;”‘<>,.?/

Une réponse à “De l’art du Crackage”

  1. farwarxle 20 juin 2008 à 19:34

    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!

Trackback URI | Commentaires RSS

Laisser une réponse