Comment est chiffré / retrouver le mot de passe d’un compte utilisateur -> désactiver le chiffrement LMHASH !

Salut à tous

Cet article a pour but de vous présenter :
– Comment est chiffré le mot de passe dans un domaine Active Directory et quels sont les risques en terme de sécurité du chiffrement LMHASH ?
– La procédure pour récupérer le mot de passe d’un compte utilisateur en déchiffrant le mot de passe au format LMHASH.
– La procédure pour supprimer le chiffrement LMHASH.

1. Comment est chiffré le mot de passe dans un domaine Active Directory et quels sont les risques en terme de sécurité du chiffrement LMHASH ?
Les mots de passe d’un annuaire Active Directory sont chiffrés via deux méthodes :
– Le LMHASH (si mot de passe de moins de 15 caractères). Cette algorithme de chiffrement n’est plus fiable. En copiant le HASH sur un site web spécialisé comme http://www.objectif-securite.ch/, il est possible de retrouver la valeur du mot de passe.
– Le NTHASH : cette méthode est sécurisée.
Le mot de passe au format LMHASH est converti en majuscule et découpé en deux blocs de 7 octets (1 octet = 1 caractère). Les caractères non renseignés sont remplacés par des bits à 0.
Les attributs qui gèrent les mots de passe dans Active Directory sont protégés en lecture d’où le fait que l’attribut dBCSPwd (mot de passe au format LMHASH) et lmPwdHistory (historique des mots de passe au format LMHASH) apparaissent en non défini avec ADSIEDIT.
Nous allons voir dans la partie suivant comment créer une copie de l’annuaire et de la monter comme une simple base LDAP. L’outil NTDSXtract permettra d’extraire  la valeur des attributs dBCSPwd et lmPwdHistory.

2. La procédure pour récupérer le mot de passe d’un compte utilisateur en déchiffrant le mot de passe au format LMHASH :

2.1 Créer un média (IFM) de l’annuaire Active Directory :
La première étape est de créer un snapshot de l’annuaire Active Directory (il faut un contrôleur de domaine Windows 2008 R2). Pour ceux, sous Windows 2003, partir d’une sauvegarde de votre contrôleur de domaine (restaurer vers un emplacement différent).
Pour cela, ouvrir une session avec un compte utilisateur membre du groupe Admins du domaine et taper les commandes suivants :
Ntdsutil
Activate instance ntds
Ifm
Create full c:\ifm

2.2 Installer une machine sous Linux (RedHat Enterprise) :
Pour cette article, j’ai installé une machine virtuelle sous Debian 6 connectée au réseau d’entreprise.
Installer ensuite les VMware Tools. Pour cela :
apt-get install autoconf
apt-get install gcc-4.3*
apt-get install linux-headers-$(uname -r)
Dans le menu VM | Install VMware Tools.
Copier le fichier VMTools dans un répertoire de travail cp /media/cdrom/VMwareTools-8.4.2-261058.tar.gz /usr/local/src
Se positionner dans le répertoire cd /usr/local/src
Décompresser le fichier VMTools tar xzf /usr/local/src/VMwareTools-8.4.2-261058.tar.gz
Se positionner dans le répertoire cd /usr/local/src/vmware-tools-distrib/
Lancer le script ./vmware-install.pl
Répondre par défaut aux questions (touche entrée)
Les VMTools doivent s’installer et le cdrom virtuel se démonte automatiquement.
Redémarrer.
Pour plus d’informations sur l’installation des VMware Tools, voir l’article suivant :
http://eric.coquard.free.fr/Blog/files/86b7d124a6befcd0f4f1c2470c8dc04a-35.html
Installer GCC pour pouvoir compiler des sources en tapant la commande :
apt-get install gcc
apt-get install make

2.3 Télécharger et installer LIBESEDB :
LIBESEDB permet de monter une base de données ESE (Extensible Storage Engine). Pour rappel, Active Directory est une base ESE.
Télécharger LIBESEDB à cette adresse :
http://code.google.com/p/libesedb/
Dans le cadre de cet article, nous téléchargeons le fichier libesedb-alpha-20120102.tar.
Ouvrir une session sur le serveur Debian 6.
Aller dans Applications | Accessoires puis Terminal Administrateur.
S’authentifier en tant que root.
Aller dans le répertoire avec le fichier TAR et l’extraire.
tar -xvf libesedb-alpha-20120102.tar
Aller dans le répertoire LIBESEDB. Dans notre cas /home/gmathieu/Téléchargements/libesedb20120102.
Lancer la configuration des sources.
./configure
Compiler ensuite le programme en tapant la commande suivante :
make
Une fois la compilation terminée, taper la commande suivante pour installer l’application :
Make install

2.4 Télécharger et installer NTDSXtract :
Télécharger NTDSXtract à l’adresse suivante :
http://www.ntdsxtract.com/downloads/ntdsxtract/ntdsxtract_v1_0.zip

2.5 Récupération du LMHASH :
Copier le dossier c:\ifm dans /home/gmathieu/Téléchargement
cd /home/gmathieu/Téléchargements/libesedb-20120102/esedbtools
./esedbexport /home/gmathieu/Téléchargements/ifm/Active\ Directory/ntds.dit
La commande doit renvoyer ce résultat :
esedbexport 20120102
Opening file.
Exporting table 1 (MSysObjects) out of 11.
Exporting table 2 (MSysObjectsShadow) out of 11.
Exporting table 3 (MSysUnicodeFixupVer2) out of 11.
Exporting table 4 (datatable) out of 11.
Exporting table 5 (hiddentable) out of 11.
Exporting table 6 (link_table) out of 11.
Exporting table 7 (quota_rebuild_progress_table) out of 11.
Exporting table 8 (quota_table) out of 11.
Exporting table 9 (sdpropcounttable) out of 11.
Exporting table 10 (sdproptable) out of 11.
Exporting table 11 (sd_table) out of 11.
Export completed.
Elle génère un répertoire /ntds.dit.export dans le dossier esedbtools avec les fichiers suivants :
2745173 -rw-r–r– 1 root root 10400205 17 août  20:38 datatable.3
2745174 -rw-r–r– 1 root root      693 17 août  20:38 hiddentable.4
2745175 -rw-r–r– 1 root root    14680 17 août  20:38 link_table.5
2745170 -rw-r–r– 1 root root    75538 17 août  20:38 MSysObjects.0
2745171 -rw-r–r– 1 root root    75538 17 août  20:38 MSysObjectsShadow.1
2745172 -rw-r–r– 1 root root      103 17 août  20:38 MSysUnicodeFixupVer2.2
2745176 -rw-r–r– 1 root root       80 17 août  20:38 quota_rebuild_progress_table.6
2745177 -rw-r–r– 1 root root     1301 17 août  20:38 quota_table.7
2745178 -rw-r–r– 1 root root       14 17 août  20:38 sdpropcounttable.8
2745179 -rw-r–r– 1 root root       96 17 août  20:38 sdproptable.9
2745180 -rw-r–r– 1 root root    54996 17 août  20:38 sd_table.10
On va maintenant utiliser l’outil NTDSXtract pour récupérer le LMHASH.
Taper la commande suivante :
cp datatable.* “/home/gmathieu/Téléchargements/NTDSXtract 1.0”
cp link_table.* “/home/gmathieu/Téléchargements/NTDSXtract 1.0”
cp /home/gmathieu/Téléchargements/ifm/registry/*
“/home/gmathieu/Téléchargements/NTDSXtract 1.0”
cd “/home/gmathieu/Téléchargements/NTDSXtract 1.0”
python ./dsusers.py datatable.3 link_table.5 –passwordhashes SYSTEM 
La commande renvoie ce résultat :
Running with options:
Extracting password hashes
Initialising engine…
Scanning database – 100% -> 3717 records processed
Searching for Schema object – 100% -> 12 records processed
Extracting schema information – 100% -> 1549 records processed
Extracting object links… 
List of users:
==============
Record ID:           5768
User name:           Guillaume Mathieu
User principal name: guillaume.mathieu@tphat.intra
SAM Account name:    guillaume.mathieu
SAM Account type:    SAM_NORMAL_USER_ACCOUNT
GUID: 1eaee5d6-5f8f-4e8c-a840-31caddad6755
SID:  S-1-5-21-2163606747-459301225-4249714960-1121
When created:         2013-08-05 08:12:08
When changed:         2013-08-17 18:20:58
Account expires:      Never
Password last set:    2013-08-17 18:20:58.095203
Last logon:           2013-08-15 12:30:01.708144
Last logon timestamp: 2013-08-12 18:41:32.890748
Bad password time     2013-08-15 12:29:32.988494
Logon count:          18
Bad password count:   0
User Account Control:
NORMAL_ACCOUNT
PWD Never Expires
Ancestors:
$ROOT_OBJECT$ intra tphat Utilisateurs Guillaume Mathieu
Password hashes:
Guillaume Mathieu:$NT$13b29964cc2480b4ef454c59562e675c:::
Guillaume Mathieu:11cb3f697332ae4c4a3b108f3fa6cb6d:::
Avec la commande suivante on a même l’historique des mots de passe au format LMHASH :
python ./dsusers.py datatable.3 link_table.5 –passwordhashes SYSTEM –passwordhistory SYSTEM

MAJ 16/01/2015 : attention c’est 2 caractères “-” dans la commande avant  passwordhashes

Le résultat ci-dessous :
Record ID:           5768
User name:           Guillaume Mathieu
User principal name: guillaume.mathieu@tphat.intra
SAM Account name:    guillaume.mathieu
SAM Account type:    SAM_NORMAL_USER_ACCOUNT
GUID: 1eaee5d6-5f8f-4e8c-a840-31caddad6755
SID:  S-1-5-21-2163606747-459301225-4249714960-1121
When created:         2013-08-05 08:12:08
When changed:         2013-08-17 18:20:58
Account expires:      Never
Password last set:    2013-08-17 18:20:58.095203
Last logon:           2013-08-15 12:30:01.708144
Last logon timestamp: 2013-08-12 18:41:32.890748
Bad password time     2013-08-15 12:29:32.988494
Logon count:          18
Bad password count:   0
User Account Control:
            NORMAL_ACCOUNT
            PWD Never Expires
Ancestors:
            $ROOT_OBJECT$ intra tphat Utilisateurs Guillaume Mathieu
Password hashes:
            Guillaume Mathieu:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu:11cb3f697332ae4c4a3b108f3fa6cb6d:::
Password history:
            Guillaume Mathieu_nthistory0:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu_nthistory1:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu_nthistory2:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu_nthistory3:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu_lmhistory0:11cb3f697332ae4c4a3b108f3fa6cb6d:::
            Guillaume Mathieu_lmhistory1:11cb3f697332ae4c4a3b108f3fa6cb6d:::
            Guillaume Mathieu_lmhistory2:99d1842dae7bad31a5615a0b1741a415:::
            Guillaume Mathieu_lmhistory3:ce2f42bb6280ebf4b01331c7e77ec962:::
Dans l’exemple ci-dessous, on a plusieurs fois le même mot de passe car l’administrateur a réinitialisé le mot de passe depuis la console Utilisateurs et Ordinateurs Active Directory.

2.6 Convertir le LMHASH en mot de passe :
Se connecter sur le site objectif sécurité et entrer le LMHASH :
http://www.objectif-securite.ch/ophcrack.php
Dans le cas du compte guillaume.mathieu, on a deux lignes Password Hashes :
Password hashes:
Guillaume Mathieu:$NT$13b29964cc2480b4ef454c59562e675c:::
Guillaume Mathieu:11cb3f697332ae4c4a3b108f3fa6cb6d:::
La ligne avec $NT$1 correspond au NTPASSORD.
La second ligne correspond au LMHASH.
Copier le LMHASH sous cette forme (11cb3f697332ae4c4a3b108f3fa6cb6d) à cette adresse :
http://www.objectif-securite.ch/ophcrack.php
On retrouve le mot de passe en majuscule.
L’application du site web se sert du NTHASH pour déterminer les caractères en majuscule.

3. La procédure pour supprimer le chiffrement LMHASH :
Maintenant que l’on a compris les danger du LMHASH, on va voir :
– Les prérequis pour désactiver le LMHASH
– Comment désactiver le LMHASH ?

3.1 Les prérequis pour désactiver le LMHASH :
Avant de désactiver le LMHASH, vérifier les points suivants :
– Vous ne disposez pas de machine sous Windows 95 / 98 ou Windows NT4 antérieur au SP3.
– Vous ne disposez pas de serveur SAMBA antérieur à la version 3.
– Vous ne disposez pas de cluster sous Windows 2000 ou Windows 2003.
– Pas de machine Apple sous Outlook 2001 en mode Exchange.
Pour les cluster Windows 2003 (MSCS) : il existe un correctif (KB 890761).
Pour les cluster Windows 2000 : vous devez être en SP3 minimum (KB 272129). La KB 828861 semble aussi indiquer qu’il faut obligatoirement sous Windows 2000 Server configurer le mot de passe du service cluster avec au moins 15 caractères si le LMHASH est désactivé. Le correctif ne semble en effet n’exister que pour Windows 2003.
Je vous invite à lire ces articles :
http://support.microsoft.com/kb/272129/en-us
http://support.microsoft.com/kb/299656/en-us
http://support.microsoft.com/kb/828861/en-us
http://support.microsoft.com/kb/890761/en-us
http://support.microsoft.com/kb/895092/en-us
http://www.markwilson.co.uk/blog/2004/06/problems-with-microsoft-clusters.htm
http://blogs.technet.com/b/askcore/archive/2011/08/11/windows-2003-server-cluster-and-access-denied-errors.aspx

3.2 Comment désactiver le LMHASH ?
Pour désactiver le LMHASH, vous pouvez appliquer une de ces deux méthodes :
– Activer la GPO « Network security: Do not store LAN Manager hash value on next password change ». Lancer la console GPMC.MSC. Editer la Default Domain Controller Policy. Aller dans Computer Configuration | Policies | Windows Settings | Security Settings. Configurer le paramètre « Do not store LAN Manager hash value on next password change » à Enabled.
– Définir un mot de passe supérieur à 15 caractères.
Attention, cela désactive le chiffrement LMHASH au prochain changement de mot de passe !
Il faut donc changer le mot de passe de tous les comptes utilisateurs et de tous les comptes ordinateurs au moins une fois.
Pour supprimer l’historique des mots de passe, il faut changer le mot de passe un nombre de fois correspondant à l’historique des mots de passe !
Remarque :
Le paramètre « No LMHASH » est activé par défaut sur les contrôleurs de domaine Windows 2008 R2. Donc attention quand vous migrez vos contrôleurs de domaine vers Windows 2008 R2.
Pour plus d’informations :
http://support.microsoft.com/kb/299656/en-us
http://support.microsoft.com/kb/946405/en-us

MAJ 21/08/2013 : l’outil Lm2ntcrack.exe permet de récupérer le mot de passe avec les majuscules et minuscules. Pour cela taper la commande suivante :
Lm2ntcrack.exe –l=”UPPERCASE_PASSWORD” –n=”NTHASH”

PS : merci à Mathieu W. et Damien W. pour la découverte du LMHASH.
http://www.xmco.fr/lm2ntcrack/lm2ntcrack-current_win32.zip

A+
Guillaume MATHIEU
Consultant PROSERVIA (ManPowerGroup Solutions)
La connaissance s’accroît quand on la partage
http://msreport.free.fr 

A propos Guillaume Mathieu

Directeur Technique chez Flexsi
Ce contenu a été publié dans Active Directory, Annuaire, Linux, Outils, Sécurité, Système, Windows 2000 Pro, Windows 2000 Server, Windows 2003 Server, Windows NT4, Windows Server 2008, Windows Server 2008 R2, Windows Seven, Windows Vista, avec comme mot(s)-clé(s) , , , , , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire