21/11/2008

Déjouer les Rainbow Table

Dans le mileu de l'informatique, une guère est mené. Ceux qui attaquent, et ceux qui tentent sans cesse de se défendre contre ces attaquent. Tout le monde sait qu'Internet est bati sur des normes, qui par ailleurs, possèdent de nombreuses faiblesses...

Cet article va aborder une manière simple de déjouer les attaques par RainbowTable sur les Hash utilisé en général, dans les systèmes d'authentification sur Internet.
  • Qu'est-ce qu'un Hash
  • Qu'est-ce qu'une RainbowTable
  • Application du MD5 Salt

La majorité des programmeurs n'ignore pas l'existence de système cryptographique. Mais sur Internet, certains de ces systèmes sont beaucoup plus usités que les autres.

Je veux bien entendu parler des systèmes de Hashages MD5 & SHA. RSA est également très utilisé dans les échanges, mais nous n'aborderont pas son concept ou sa faiblesse dans ces lignes.

Ainsi comme je l'ai stipulé, il existe deux fonctions de Hashage principale, la MD (Meta Digest) et le SHA (Secure Hash Algorithm). À l'heure où j'ébauche ces lignes, le Meta Digest en est à sa version 5, et est nommé MD5.

Son fonctionnement, sans rentrer dans les détails technique de l'algorithme, est des plus simple. Chaque langage possède cette fonction, et il suffit en règle général de taper md5(Password) pour obtenir un Hash de la variable Password.

Il s'agit en somme d'une fonction qui permet d'obtenir une chaine incompréhensible (Crypté) sous forme Héxadécimale, correspondant en général à un Password.


Mais comme tout système il a une faiblesse majeur, presque pire pour les systèmes d'authentification que les Collisions pour les fichiers. En effet, il existe ce l'on nomme des RainbowTable.

Ces RainbowTable sont en somme, de gigantesque Bases de Donnés dont la contenance est une correspondance entre un mot de passe Hashé (Crypté), via un algorithme quelconque, et sa définition en clair (Humainement Compréhensible).

Parti de là, il est simple pour un attaquant possédant un Hash d'en retrouver sa signification en clair. Surtout lorsque l'on sait qu'il existe pléthore de site Internet faisant office de GUI pour des RainbowTable.


Mais il existe une technique très connue et très usité qui permet de palier à ce problème. Cette méthode est connu sous le nom de Hash Salt. En général utilisé avec MD5 (MD5 Salt), étant donné que c'est le plus populaire pour Crypter des Password, il est tout de même possible d'effectuer cette action avec du SHA (SHA Salt).

Imaginez. Vous êtes Webmaster d'un Forum PHPBB tournant sous Lighty (Lighttpd), et vous souhaitez mettre en place un système d'authentification suffisament sécurisé pour ne pas avoir d'ennuis à l'avenir...

Ainsi au lieu d'utiliser promptement la fonction MD5 afin de Hasher les Password des Utilisateurs, nous allons Hasher quelque chose comme :

Login : r00t
Password : illusion
Salt : dGhpc2lzdGhlc2FsdC4uL*mFuZGlmbW9zdHNlY3VyZQ==
MD5(Salt + Login + Password)

Résultat : '1e8fc51d30594b6e6597b528ac1a7176'

Comme je l'ai dit, le procédé est simple. Mais son utilisation rend le système d'authentification beaucoup plus robuste qu'un simple MD5(Password). Mais cela permet également d'éviter bon nombre d'erreur ou de vulnérabilité plosible.

De fait, avec un Hashage ordinaire des donnés, si deux Utilisateurs A & B possèdent le même Password, ces derniers possèderont également le même Hash MD5.

Ainsi, si A rentre le Login de B et rentre son mot de passe normalement, le système va accepter la connexion, car pour ce dernier, tout est normal... Alors que la réalité est tout autre.

Egalement, les RainbowTable sont ici déjoué par le fait qu'il s'agit d'un Hash presque aléatoires, et les possibilités pour BruteForcer un tel Hashage des Donnés sont beaucoup trop nombreuses.

Il s'agit là d'une méthode très simple, mais à la fois très puissante.

.:Liens:.
Code/Decode Base 64
Hashage MD5/SHA-1
Comprendre MD5
RainbowCrack  

.:RainbowTable:.
BDD de HashCracker

Aucun commentaire: