jeudi 20 août 2015

News Nager comme un poisson dans l'eau avec bcrypt





On a vu avec l'affaire 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 dumper sur le site pourtant crypter avec bcrypt.


Je voulais faire cette parenthèse sécurité pour essayer de comprendre comment bcrypt fonctionner d'une part et d'autre part comment les pirates ont pu réussir à décrypter si facilement l'intégralité des données.


Dans le monde informatique, comme dans tous types de monde professionnel à ses codes, abréviations et surtout lexiques à 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 de m'exclure de certains standards mais aussi et nous le verrons pour le web2.0 de demain, au fur et à mesure, 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 fondé sur l'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 et la particularité de Blotti est 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. 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


Nous sommes bien loin de notre cryptage conventionnel : md5(salt + mdp)







Son fonctionnement


Utilisation de bcrypt pour crypter


Le fonctionnement est simple. Vous allez vous connecter à votre PHP serveur 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 monter, 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


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-il fait ?



Je pense que soit le 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'oublié 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 craquage 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/1EEmclh
via IFTTT

Aucun commentaire:

Enregistrer un commentaire