jeudi 20 août 2015

News Comment Team Impact a-t-il cracké les password d'Ashley Madison (+ tuto bcrypt) ?


On a vu avec l'affaire d'Ashley Madison dont j'ai déjà fait 2 articles conséquents, que Team Impact avait décrypté les mots de passe de la base de données dumpé sur le site pourtant crypté avec bcrypt.
Je voulais faire cette parenthèse sécurité pour essayer de comprendre comment bcrypt fonctionnait d'une part, et d'autre part comment les pirates ont pu réussir à décrypter si facilement l'intégralité des données.

Le monde informatique, comme dans tous types de monde professionnel : a ses codes, abréviations et surtout lexique à connaître. Les techniques sont nombreuses pour mettre en place une sécurité efficace en vue de protéger les données d'un site.
Citation:

L'utilisation d'une BDD implique souvent la protection, car elle est convoitée par les pirates pour leurs précieuses informations.

Personnellement, j'ai fait le choix de travailler différemment, ce qui me permet d'exclure certains standards mais aussi et nous le verrons pour le web 2.0 de demain, que PHP malgré sa puissance, perd du terrain et que des alternatives verront le jour.

Bcrypt, c'est quoi au juste ?

Citation:

C'est un algorithme de chiffrement symétrique Blowfish.
"Symétrique" signifie que l'on va utiliser une clé pour crypter notre message, dans notre cas le mot de passe. Cette clé va être générée de manière aléatoire, la particularité de Blowfish sont les grandes valeurs des clés pouvant aller de 32 à 448 bits.

Blowfish a poussé plus loin le procédé de cryptage en poussant le concept avec l'algorithme Eksblowfish qui répète le processus avec un nombre d'itération choisi au départ d'une base puissance de 2. Représentant donc plusieurs cycles de hash de notre mot de passe qui vont améliorer la sécurité finale du cryptage.

Je vous mets le lien vers Wikipédia qui explique clairement son principe : http://ift.tt/1EEmclf

Par conséquent nous sommes bien loin de notre cryptage conventionnel : md5(salt + mdp)



Comment fonctionne Blowfish ?
Utilisation de bcrypt pour crypter
Le fonctionnement est simple. Vous allez vous connecter à votre serveur PHP afin de lancer quelques requêtes qui permettront que le système s'applique sur vos mots de passe.

Citation:

Je pense que la sécurité de Madison a du procédé de la même façon, mais avec malheureusement peu de succès vu les révélations sur le Dark Web.
Allez tout d'abord sur votre base de données. Pour l'exemple, je vais prendre une base de données s'appelant Monster et avec une table user contenant passwd,…


Citation:

Mon mot de passe est : MDP (j'ai simplifié pour l'exemple).
Mon id est 1.
Dans un premier temps, on va intégrer le module à notre base :

Code PHP:

CREATE EXTENSION pgcrypto

Voilà les conditions sont prêtes pour la suite des opérations.
Nous allons aller sur la DOC de pgcrypto qui utilise Eksblowfish et suivre les indications proposées.

Citation:

Il nous explique qu'il faut, pour l'itération du crypto sélectionner une fréquence de 4 à 100 par seconde.
Je vais être honnête plus vous montez, plus cela va mouliner sec alors ne soyez pas trop gourmand.

La requête à lancer sur la table est :

Code PHP:

UPDATE user SET pswhash crypt('MDP'gen_salt('bf',4)) WHERE id 1

Expliquons ce code :
On va demander à notre serveur de mettre à jour "user" en remplaçant le mot de passe "MDP" par l'application de Blowfish BF sur la base d'une itération de 4 pour l'id 1. Il en ressort pswhash le nouveau mot de passe hashé par l'algorithme.

Notre mot de passe est passé par ce type de processus :

Citation:

hash = hash( hash(hash(hash(MDP)) )) soit la formule ( hash(password) ) * N

Dans notre cas (hash(MDP)) * 4
Pour l'authentification, c'est-à-dire pour comparer le mot de passe entré par l’utilisateur à celui qui est en base, la Doc nous donne le code suivant :

Code PHP:

SELECT FROM user WHERE pswhash crypt('MDP'pswhash); 

PHP mais pas seulement
Le cryptage est disponible dans bon nombre de langages dont. Java, Python, Ruby, Perl et PHP 5++.

En Ruby voila ce que cela donne :

PS: ce script n'est pas de moi n'ayant pas la prétention de travailler sous Ruby, mais d'un très bon développeur Yorick.

Code:

require 'benchmark'

require 'bcrypt'

password = 'MDP'

amount  = 100

Benchmark.bmbm(20) do |run|

run.report("Cost of 5") do

  amount.times do

    hash = BCrypt::Password.create(password, :cost => 5)

  end

end

run.report("Cost of 10") do

  amount.times do

    hash = BCrypt::Password.create(password, :cost => 10)

  end

end

run.report("Cost of 15") do

  amount.times do

    hash = BCrypt::Password.create(password, :cost => 15)

  end

end

end


En Perl (qui se prête bien aux itérations et boucle) d'Andrew main est ici: Crypt::Eksblowfish



Code:

use Crypt::Eksblowfish::Bcrypt qw(bcrypt_hash);

$salt    = '1p23j1-9381-23';

$password = 'MDP';

$hash    = bcrypt_hash({

  key_nul => 1,

  cost  => 10,

  salt  => $salt,

}, $password);


En python sa version est disponible aussi sur Github. Sur PHP la mise en application du hash est détaillé sur PHPnet.


Puissant et pourtant... Comment Team Impact s'y est prit ?
D'après Ycombinator, on devrait utiliser ce type de cryptage qui est plus sécurisé que le MD5 basique. Je conçois qu'il est clair que celui qui utilisent des BDD soit à même d'oublier que la sécurité passe par tous les niveaux, mais ce n'est pas le but de cet article.

Ils ont surement utilisé un puissant calculateur qui va parcourir les mots de passe hasher en travaillant sur un dictionnaire.

Pourtant, je pense qu'il est peu probable qu'il ait cherché à passer avec un Brute force sur un chiffrement symétrique comme Blowfish.


Citation:

Des logiciels ou script comme Jhon the Ripper ou encore hashcat et bien d'autres permettent de cracker des mots de passe.
La question qui se pose est surtout avec quelle facilité l'ont-ils fait ?

Je pense que soit la crypto a été faite avec une itération trop faible, soit les mots de passe des utilisateurs étaient également trop faibles.


La sécurité informatique n'a pas bien fait son travail

Ce que l'on sait, c'est que ce système de crypto bien utilisé va permettre d'améliorer la sûreté de nos mots de passe, mais il ne pourra rien faire si l'on ne prend pas un MDP assez complexe ou que l'on applique pas la base de crypto comme il faut.

Alors n'hésitez pas à forcer sur vos mots de passe, personnellement j'utilise des MDP de plus de 24 caractères générés aléatoirement.

La sécurité est importante ne l'oubliez jamais, car je pense que Madison et surtout ses membres ne l'oublieront pas eux.

Merci de m'avoir lu. Sachez que je ne suis pas expert en cryptologie surtout en crackage de mots de passe d'où peut être des lacunes sur ce point précis.

Si vous avez des remarques pertinentes visant à améliorer l'article, je serai enchanté de les écouter et de rectifier les parties concernées.

À bientôt.


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1Po77dx
via IFTTT

Aucun commentaire:

Enregistrer un commentaire