Gestion des empreintes des mots de passe sur Oracle
Date : 29 Novembre 2005
Cet article se propose de présenter ces faiblesses.
Principe du "hachage"
Pour ne pas stocker les mots de passe en clair, une méthode classique consiste
à stocker les empreintes des mots de passe, calculées avec une fonction, dite
de "hachage", ayant les propriétés suivantes :
- non réversible : il n'existe pas de fonction inverse permettant de calculer le mot de passe depuis son empreinte,
- résultat unique : une empreinte correspond à un mot de passe et un seul.
L'authentification d'un utilisateur consiste alors à appliquer la fonction
de "hachage" au mot de passe qu'il présente, et à comparer le
résultat obtenu à l'empreinte qui lui est associée.
Les différents types d'attaques contre cette méthode
Un attaquant qui connaît l'empreinte d'un mot de passe peut utiliser les
méthodes suivantes pour tenter de retrouver le mot de passe associé :
- Méthode dite de "brute force" qui consiste à essayer toutes
les possibilités jusqu'à trouver l'empreinte connue.
Cette méthode requière du temps, mais peu de ressources mémoire. - Méthode de dictionnaire qui consiste à calculer les empreintes de tous
les mots de passe possibles et à stocker les couples mot de passe/empreinte
dans un dictionnaire. Une fois ce dictionnaire construit, il est très
simple et rapide de trouver le mot de passe correspondant à une empreinte.
Cette méthode requière peu de temps, mais des ressources mémoire importantes. - Un compromis entre ces deux
méthodes consiste à construire des tables baptisées
"arcs-en-ciel" ("Rainbow Tables") permettant de
retrouver un mot de passe depuis son empreinte en quelques minutes.
Cette méthode a été décrite dans un article de Philippe Oechslin (cité en référence) et a été implémentée dans l'outil "RainbowCrack" (voir lien en référence). Elle a également fait l'objet d'un article du bulletin mensuel du Cert-IST en juillet 2003.
Règles à respecter pour se protéger de ces attaques
L'application des règles suivantes complique considérablement ces d'attaques :
- L'utilisation de mots de passe complexes : en utilisant des mots de passe longs et formés avec des caractères choisis parmi un grand nombre de caractères potentiels, cela accroît le nombre de mots de passe possibles, et accroît donc le temps ou l'espace nécessaire pour mener l'un des types d'attaque décrits précédemment.
- L'utilisation d'une chaîne de caractère aléatoire ("salt") lors du calcul de l'empreinte des mots de passe : cette technique complique l'utilisation d'un dictionnaire pré-calculé.
- L'utilisation d'un algorithme de génération d'empreinte lent : cette lenteur pénalise faiblement l'authentification d'un utilisateur, mais ralentit énormément les attaques par force brute, ainsi que la constitution de dictionnaires d'empreintes.
- Le changement régulier des mots de passe : ils doivent être changés à
un intervalle de temps inférieur au temps moyen nécessaire pour trouver un
mot de passe via la méthode de force brute.
Implémentation du "hachage" dans les SGBD Oracle
Les SGBD Oracle stockent les couples "nom/empreinte du mot de passe"
des utilisateurs dans la table Oracle "SYS.USER$".
L'algorithme utilisé pour la génération d'empreintes est le suivant :
- Concatène le nom et le mot de passe de l'utilisateur.
- Met toute la chaîne obtenue en majuscules.
- Convertit la chaîne obtenue dans un codage multi-octets.
- Chiffre le résultat avec l'algorithme DES en mode CBC avec une clé fixe.
- Chiffre le résultat de (3) avec l'algorithme DES en mode CBC, avec le dernier bloc obtenu en (4) comme clé.
- Convertit le dernier bloc obtenu en (5) en une chaîne de caractères
visualisable.
Faiblesses de cette implémentation
Concaténation du nom d'utilisateur et du mot de passe
L'utilisation de cette méthode donne une empreinte équivalente pour des
couples différents. Par exemple pour "oracle"/'password" et pour
"oracl/epassword".
La connaissance d'une empreinte correspondant à un couple "nom/mot de
passe" permet de connaître l'empreinte de tous les couples équivalents.
Cette faiblesse permet de réduire le temps des attaques par force brute et la
taille des dictionnaires pré-calculés.
Utilisation d'une clé ("salt") fixe
Cette faiblesse facilite la création d'un dictionnaire "mot de
passe/empreinte" pour un utilisateur connu ("SYSTEM") par
exemple.
Conversion des noms et mots de passe en majuscules
Cette faiblesse réduit le nombre de combinaisons de lettre possibles pour
former des mots de passe ("Password" équivalent à "password").
Elle réduit donc le temps nécessaire pour mener à bien une attaque par force
brute et la taille des dictionnaires pré-calculés.
Algorithme de calcul simple
La rapidité de l'algorithme de calcul d'une empreinte réduit le temps
nécessaire pour mener à bien une attaque par force brute et le temps de
construction d'un dictionnaire pré-calculé.
Exemples d'attaques
L'attaquant doit tout d'abord connaître un couple "nom
d'utilisateur/empreinte de mot de passe". Pour cela il doit avoir l'une des
possibilités suivantes :
- accéder à la table Oracle "SYS.USER$".
Cet accès est normalement réservé aux administrateurs Oracle, et aux utilisateurs ayant les privilèges "SELECT ANY DICTIONARY" (ou "SELECT ANY TABLE" sur certains systèmes), - espionner un trafic TNS ("Transport Network Substrate") Oracle non chiffré,
- lire et décoder les fichiers correspondants à la table Oracle "SYS.USER$",
- exploiter des vulnérabilités permettant des injections SQL.
Deux types d'attaque ont été implémentés :
- une attaque par force brute, avec OpenSSL 0.9.8-beta3. Sur un système Intel Pentium 4 à 2.8 GHz, cette implémentation permet de calculer les empreintes de tous les mots de passe d'une longueur de 8 caractères correspondant à un nom d'utilisateur de 8 caractères, en moins de 40 jours, ramenant la durée moyenne d'une attaque à 20 jours.
- une attaque en
utilisant l'outil "RainbowCrack". Sur un système Intel Pentium
4 à 2.8 GHz, elle a été utilisée pour construire, en trois semaines, 5
tables "arc-en-ciel" permettant de trouver en quelques minutes
le mot de passe d'un utilisateur "SYSTEM" depuis son empreinte,
avec une probabilité de 98,1%.
Conseils aux administrateurs d'Oracle
Les recommandations suivantes réduisent les possibilités d'attaque :
- accorder les privilèges minimum aux applications web,
- restreindre au maximum l'accès aux empreintes des mots de passe,
- chiffrer le trafic TNS ("Transport Network Substrate"),
- obliger les utilisateurs à utiliser des mots de passe ayant une longueur minimum,
- obliger les utilisateurs à changer de mots de passe régulièrement.
Pour plus d'information :
- Article du SANS Institute : http://www.sans.org/rr/special/index.php?id=oracle_pass
- Attaques par tables "arc-en-ciel" (article de Philippe Oechslin): http://actes.sstic.org/SSTIC04/Compromis_temps_memoire/SSTIC04-article-Oechslin-Compromis_temps_memoire.pdf
- Outil "RainbowCrack" : http://www.antsight.com/zsl/rainbowcrack/