Bruteforcer une chaine MD5: Nouvelles méthodes et comparatif des softs

Le 31 mars 2009 par John JEAN Laisser un commentaire »

nvidia logoblog

La plupart des développeurs utilisent généralement le MD5 pour stocker les données sensibles de leurs utilisateurs (mot de passe, parfois numéro de carte bleu, et ainsi de suite…). Ces derniers ont tendance à considérer cette méthode de hachage comme fiable alors qu’elle ne l’est pas. En effet, dès 1996, des chercheurs en sécurité ont mis en exergue la possibilité de créer des collisions. En 2004, les collisions complètes sont découvertes et le MD5 n’est dès lors plus considéré comme fiable d’un point de vue purement cryptographique. Cependant, sa facilité d’implémentation avec PHP à l’aide de md5(); et la méconnaissance des développeurs fait que cette méthode est encore très largement rependue au détriment de fonctions de hachage plus récentes et donc plus robustes comme SHA-256.

Suite à ces découvertes, plusieurs logiciels ont vu le jour afin de permettre de bruteforcer cette méthode de hachage (et pas uniquement celle-ci). Je suis souvent amené à devoir cracker ces chaines pour montrer au décideur pressé que le travail d’obfuscation des données par son développeur ou sysadmin n’est en réalité pas vraiment fiable. « Oui vous avez réussi à accéder à ma base de donnée, et alors ? Les données de nos clients sont cryptées ». Pour montrer au décideur qu’il fait fausse route, je me dois donc souvent de « bruteforcer » une ou plusieurs informations.

Les logiciels automatisant le bruteforce ont assez largement évolués récemment, passant d’une utilisation CPU, à CPU multi-core, et désormais CPU + GPU. En effet, le reversing des méthodes de hachage fascine, et remet chaque jour un peu plus en question la sécurité basée sur ces méthodes (surtout MD5 là pour le coup). Il suffit par exemple de voir l’excellent travail sur les certificats SSL: Creating a rogue CA certificate. Un fail dans une méthode remet en question bien plus de choses que la méthode en elle-même.

GPU est l’acronyme de Graphics Processing Unit, grosso-modo, l’utilisation de la puissance de calcul de votre carte graphique. Ce vecteur de puissance était jusqu’alors inexploité pour la simple et bonne raison que leur utilisation était closed-source. Nvidia a largement ouvert et démocratisé l’accessibilité aux processeurs graphiques en mettant à disposition un environnement de développement nommé CUDA.

Voici donc un petit comparatif des logiciels, le but est avant tout de démontrer en quoi l’utilisation des GPUs constitue une avancée non négligeable (tiens ça me rappelle une histoire de PS3 montées en grappes), et surtout de montrer qu’à fonctionnement équivalent, ils ne sont pas tous aussi rapides. L’autre but est bien évidement de vous sensibiliser si vous utilisez toujours cette méthode de cryptage dans vos sites (je fais le malin, mais Wordpress utilise le md5 pour stocker les passwords).

Machine utilisée pour ce test:
Dell XPS M1530
Intel Core 2 Duo CPU T9300 2,50 Ghz
NVIDIA GeForce Go 8600M GT, 256 MB

Comparatif des softs
J’étais parti pour inclure John the Ripper dans le test, mais il fallait employer un hack. Je me suis donc concentré sur les softs faisant bien nativement du bruteforce de MD5.

CAIN (http://www.oxid.it/cain.html)
Bon, à la décharge de CAIN, il ne sert pas uniquement à bruteforcer des hashs. C’est un couteau suisse qui permet de faire de l’ARP Poisoning, d’appliquer des filtres de snif etc. Donc bon, considérons que sa GUI ainsi que l’essence du soft font que ce n’est pas sa force, mais tout de même:
Résultat obtenu:
7 Millions h/s

CAIN

CAIN2 CAIN3

MDcrack (Shot 1) (http://membres.lycos.fr/mdcrack/)
Probablement l’un des plus anciens et des plus connus soft de bruteforce de MD5. Tout en command-line.
Dans ce premier shot, pour simuler l’évolution, je l’ai limité à un seul CORE pour le CPU.
Résultat obtenu:
12,5 Millions h/s

MDCRACK1

MDCRACK12 MDCRACK13

Le CPU est sollicité à 50% ce qui est parfaitement logique compte tenu du fait que j’ai un Dual CORE.

MDcrack (Shot 2) (http://membres.lycos.fr/mdcrack/)
Pour le second shot, je décide d’utiliser pleinement mon CPU. C’est à dire, avant que l’on utilise les GPU, ce qui se faisait de mieux en matière de bruteforce. J’ai un core DUO, je double sans surprise.
Résultat obtenu:
24 Millions h/s

MDCRACK23

MDCRACK2 MDCRACK22

GPU MD5 CRACK (http://bvernoux.free.fr/md5/index.php)
Cette fois nous utilisons un bruteforcer sollicitant les GPUs. Malhreusement il dispose d’une GUI qui doit impacter ses perfs mais voyons tout de même la différence:
Résultat obtenu:
44 Millions h/s !

GPUMD5

GPUMD52 GPU MD53

Extreme GPU Bruteforcer (http://www.insidepro.com/eng/egb.shtml)
Un autre GPU Bruteforcer, cette fois en command-line, mais on remarque que lui non plus ne sollicte pas le CPU au maximum.
Résultat obtenu:
53 Millions h/s !

EGB3

EGB1 EGB2

BarsWF (http://3.14.by/en/md5)
Là, on passe en mode uber-gore. On constate avec ce logiciel une réelle maximisation de l’utilisation CPU + GPU. La courbe d’utilisation CPU n’est plus sinusoidale ici. Je n’ai pas une grosse config pour le coup, reportez vous à la conclusion pour voir ce qu’il a vraiment dans le sac :-)
Résultat obtenu: 124 Millions h/s !

BarsWF1

BarsW2 BARSW3

Conclusion

Vous devez mieux comprendre pourquoi l’image illustrant ce billet est un logo Nvidia. La rapidité de bruteforce via GPU n’est en rien comparable à ce que l’on pouvait exploiter il y a encore quelques années. J’ai demandé à un collègue qui a un double CORE, et une CG ATI (ATI Radeon HD 4870) de réaliser le test pour moi:

*¦ Key: kshnmhwi Avg.Total: 1066.40 MHash/sec ¦

¦ Hash:87a2f7772d361d70d4b43cb5141a50e1 ¦

¦ Progress: 28.92 % ETC 0 days 0 hours 2 min 19 sec ¦

+———————————————————–+

– Key is: johnjean——————————————
Résultat obtenu avec BarWF: 1 066 Millions h/s !
Deux minutes pour mettre à mal la chaine: johnjean

Je n’ai évoqué ici que la maximisation de tentative de hash/s, pas le temps global que met une chaine à être forcée. Lors de mon prochain billet je tenterai d’établir un comparatif avec les méthodes d’attaque par rainbow table. A noter également que je n’ai pas parlé de la suite Elcomsoft Distributed Password Recovery qui permet de monter des grappes de travail. En gros l’application se divise en deux parties une cliente et une serveur. On peut donc créer un serveur et relier 20 machines dessus. Avec des machines comme celle de mon collègue (1 066 Millions h/s) bruteforcer une base de donnée client pour en extraire les pass et plus ne doit pas prendre bien longtemps. N’hésitez donc pas à modifier vos méthodes de stockage même si les énorme montage sont généralement reservé aux agences à trois lettres :-) Il va sans dire que les signatures de fichier en MD5 sont tout aussi faillible que ce que vous encryptez.

PS: Voici plus d’un mois que j’avais posté, mais je viens de trouver un logiciel me permettant de blogger depuis le train, cela devrait reprendre. (BlogDesk)

24 commentaires

  1. Fefaine dit :

    Très intéressant !

  2. zuckbin dit :

    J’adore

    Ca donne vraiment envie d’essayer tout ca ;)

  3. Titus dit :

    Toujours aussi intéressant, même si je ne comprend pas souvent tout.
    Merci à Fefaine qui m’a fait découvrir le blog au passage :)

  4. christophe dit :

    MD5 n’est pas une fonction de chiffrement mais de hachage. Un condensat MD5 ne peut pas donc être déchiffré, on peut juste bruteforcer pour tenter de le retrouver.

    Les 2 (voir 3) premiers paragraphes sont remplis de fausses informations, avec des mélanges entre les collisions et les attaques par force brute par exemple.

  5. John JEAN dit :

    Hello,

    Un grand merci pour ces précisions, ne pas hésiter à me dire ce que tu veux que je patch, je ferais ca avec plaisir; j’avoue que pour les abus de langages je suis spécialiste :)

    Même si c’est vrai qu’il apparait plus que logique qu’on ne parle pas de « cryptage ».
    J’ai fait plus d’effort de cohérence pour cet article: http://www.john-jean.com/blog/crypto/john-the-ripper-multi-core-grace-a-open-mpi-233

    Merci encore pour ton commentaire.

  6. Emir dit :

    Bonjour,
    j’ai essayé de mettre en marche ma carte graphique ati 4890, et quand j’ai lancé l’outil BarWF, pour avec exec de AMD/ATI il m’a affiché une erreur.
    Est-ce que c’est car j’ai un processeur intel E6850 ou c’est quelque chose autre? Merci

  7. John JEAN dit :

    Bonjour,

    Je n’ai testé que sous Nvidia mais je suppose que ATI propose la même chose que CUDA. Pensez à bien installer les drivers nécessaires avant de tenter d’utiliser le soft.

  8. Emir dit :

    des drivers comme celle d’ATI ou tu pense à quelque chose d’autre… à mon avis c’est car je ne possède pas un processeur AMD.

  9. John JEAN dit :

    L’équivalent de Cuda (nvidia) chez ATI c’est ATI Stream, gratte de ce côté (niveau soft / drivers)

  10. Julien dit :

    J’arrive un peu tard pour la discution, mais je pose quand même mes chiffres ;-)

    Avec BarsWF (v0.9b), sur un Athlon X2 6000+, et une Radeon HD3200 (intégrée au chipset), le tout sous Win7-64b, avec les drivers 9.9, voici les perfs annoncées sur le hash 87a2f7772d361d70d4b43cb5141a50e1.
    C’est classé selon qu’on cherche uniquement des minuscules, +majuscules, +chiffres, et +caractères spéciaux :

    a : 9.500 MHah/s
    aA : 38.000 Mhash/s
    aA0 : 50.000 MHash/s
    aA0~ : 100.000 MHash/s

    Se ne sont que les chiffres du GPU, le CPU quand à lui contribue à hauteur de 15 MHash/s….

    Les chiffres paraissent pas trop énormes ??

    Pour ceux qui veulent tester, il faut bien sur prendre la version spécial AMD, mais le soft demande des dll (3) qu’il ne trouve pas.
    En fait elles sont dans c:\windows\system32\, mais elles sont nommées ati—.dll alors qu’on attends amd—.dll. Il faut donc en faire une copie dans le dossier de BarsWF et les renommer.

  11. Julien dit :

    Précisions :

    Il dit n’utiliser qu’un seul des 2 core du CPU (chiffre uniquement pour CPU0), mais les 2 core sont à 100%, ça le fait chez tout le monde sur CPU AMD ?

    Sinon je ne sais pas si il utilise ATI Stream ou si il passe en direct (genre OpenGL?), mais je n’ai ajouté aucun driver de plus que les classiques (avec catalyst).
    Les erreurs que certains rencontrent dans les commentaires sont surement le manque de dll que j’ai expliqué dans le commentaire précédant.

  12. Julien dit :

    Mais tu ne trouves pas ces chiffres énormes ?
    Le point que j’utilise n’est pas une virgule, mais un séparateur de milliers.

    Je commence juste à m’intéresser au sujet, donc je n’ai pas d’ordre de grandeur. 100000 MHash /s c’est pas trop gros pour être vrai ??

  13. Emir dit :

    meme si je change les noms et si je met dans le meme dossier les fichier ati… ca ne marche pas.ma config: vista x64, C2D 6850 avec 4890

  14. Julien dit :

    @Emir : quelle est l’erreur exacte ? Pour moi c’était très clair, il ne trouvait pas la dll.

  15. Emir dit :

    pareil, il ne trouvé pas la dll, esuite j’ai ajouté dll et il me sort l’erreur suivant: que amdcalck.dll n’est pas concu pour fonctioner sous windows

  16. Julien dit :

    @Emir : peut etre un problème de 32/64b.
    Mes fichiers s’appellent :
    amdcalcl64.dll, amdcaldd64.dll, amdcalrt64.dll, se sont bien les versions 64b (je n’avais pas fait attention).

    Si tu es bien sous Vista64, il faut faire de même (bien trouver les versions 64b).

    Enfin, vérifie aussi que tu as les derniers drivers (9.9, version 64b) car d’après certains forums, certaines anciennes versions ne sont pas top pour ce qu’on leur demande ;-)

  17. Julien dit :

    J’ai des nouvelles.
    Je me disais bien que mes valeurs étaient trop extrêmes, avec une bonne carte graphique on arrive à peine à 500 MHash/s

    Le coupable : mon driver ATI !
    Ca fonctionne en fait UNIQUEMENT avec les 8.12 (c’est vieux !), alors que je croyais que c’était « à partir des 8.12″.

    J’attends une réponse du forum officiel pour savoir si les prochaines versions de BarsWF changeront cela, car j’ai pas trop envi de repasser aux 8.12…

  18. John JEAN dit :

    @Julien: Merci pour ce retour d’expérience.

  19. Julien dit :

    Des nouvelles du forum officiel (et après j’arrête de spammer les commentaires ;-) )

    Le dev a bien essayé d’utiliser les nouvelles versions du SDK d’ATI (pour que ça fonctionne avec les nouveaux pilotes), mais les perfs sont divisées par 2,5 ! Donc aucun intérêt pour lui (et je le comprends).

    Sinon pour ceux qui ne sont pas habitués, chez ATI il y a un pilote par mois, et son nom est composé de l’année + mois.
    Donc le 8.12 date de décembre 2008. Ce qui induit donc que les cartes récentes ne sont pas pris en charge à 100%, et que bcp de bugs ont été corrigés depuis (et il faut être motivé pour vérifier si on est concerné, sans savoir si tout est documenté dans les changes-log).

    A priori le dev a plus d’espoir dans une implémentation OpenCL, wait and see.

  20. John JEAN dit :

    @Julien: Encore un grand merci pour toutes tes précisions :)

Laisser un commentaire