Blog d'un Éternel Geek

Nager comme un poisson dans l'eau avec bcrypt

http://vivageek.com/data/images/secu/blowfish.jpg

 

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

 

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

 

 

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

https://fr.wikipedia.org/wiki/Bcrypt

 

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

 

 

http://vivageek.com/data/images/secu/cryptoblow.jpg

 

 

 

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.

 

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,…

 

 

  • 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 :

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.

 

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 :

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 :

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 :

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.

 

 

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

 

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.

 

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.

 






 Geek me     Je suis un Geek dans l'âme. 18 ans à silloner internet pour récolter des informations afin de comprendre son fonctionnement. Idéalement j'étudie également le comportement humain.

C'est afin de vous partager mes connaissances que j'ai ouvert ce blog alors je vous souhaite une bonne lecture.



À lire également


Écrire un commentaire

Votre adresse de messagerie ne sera pas publiée.

Quelle est la quatrième lettre du mot nniogq ? :