Security Accounts Manager (SAM)
Par 4n9e le 25-09-2004
Théorie sur les fichiers SAM, leur cryptage et approche de leur cracking
Le fichier SAM,
Security Accounts Manager, contient, en autre, la liste des comptes ainsi
que les mots de passe
cryptés.
Ce fichier se trouve généralement dans le répertoire
\<racine windows>\system32\config
Même un administrateur ne peut lire directement ce fichier. Par contre, il
existe une copie de sauvegarde compressée
dans le répertoire repair de la racine du répertoire de Windows.
V-struct
Petter Nordahl-Haggen, auteur d'Offline NT
Password & Registry Editor
http://home.eunet.no/~pnordahl/ntpasswd/,
découvert les structures du fichier SAM. Les comptes utilisateurs sont appelés
dans
\SAM\Domains\Account\Users\Names\, on peut les lister en parcourant ceci.
L'offset et la longueur des champs sont stockés dans ce qui est appelé la
V structure, une structure binaire
de 204 octets (0xCC en hexadécimal):
0x0c,0x10 Login
0x18,0x1c Nom complet
0x24,0x28 Commentaires
0x48,0x4c Répertoire utilisateur
0x9c,0xa0 Mot de passe LANMAN voir en fin de
tuto
0xa8,0xac Mot de passe NTLM voir en fin de tuto
Ces deux mots de passe sont cryptés avec un cryptage DES. Les deux clés de 56
bits utilisées sont dérivées du RID.
Le RID est un numéro sur 32 bits identifiant l'utilisateur, c'est l'équivalent
de l'UID sur un système Unix.
Compte administrateur
Sous Unix, le compte administrateur est simple à trouver, c'est le compte root.
Sous Windows, c'est plus complexe.
Le nom est souvent internationalisé: Administrator, Administrateur,... Pour le
reconnaître, il faut chercher un compte
dont le RID vaut 500.
Comme les structures du fichier SAM ont été rapidement mises à jour, Microsoft a
décidé de chiffrer par du RC4,
au sein même du fichier, les mots de passe cryptés.
Depuis le service pack 3 de NT 4, l'utilitaire
Syskey est fourni dans pour réaliser ce codage.
Depuis Windows 2000, ce cryptage est activé par défaut.
La clé de codage est :
soit présente dans le fichier lui-même en clair, autrement dit, il n'y a aucune
protection,
soit la clé est stockée dans le fichier SAM mais protégée par une passphrase, un
mot de passe à rallonge.
L'administrateur doit entrer ce mot de passe au démarrage de l'ordinateur pour
le débloquer.
soit l'administrateur utilise une disquette pour la stocker auquel cas, il faut
l'utiliser à chaque démarrage de la machine.
Dans la base de registre, la valeur stockée selon les versions de Windows dans
les clés
\SAM\Domains\Account\F,
Security\Policy\SecretEncryptionKey
ou,
HKLM\System\CurrentControlSet\Control\Lsa
reproduit ces trois possibilités:
1 - clé dans le registre
2 - clé protégée par une passphrase
3 - clé sur disquette
La possibilité 1 n'offre aucune sécurité, cela revient à mettre une serrure en
laissant la clé dessus. Les deux autres
empêchent les attaques directes des mot de passe
LANMAN et NTML.
Des attaques plus complexes sont toujours possibles. L'algorithme de cryptage
RC4 est un algorithme de cryptage par flux
utilisant le XOR.
Or dans ce type d'algorithme, le flux de cryptage ne doit pas être réutilisé, il
ne faut pas crypter
indépendamment les uns des autres des blocs de données.
Bindview s'est rendu compte en 1999 que Microsoft l'utilisait
(Il l'utilise toujours) pour crypter utilisateur par utilisateur le mot de passe
LANMAN puis le mot de passe NTLM.
Le flux de cryptage généré à partir de la clé RC4 est donc réutilisé! Cela ouvre
donc la voie à des attaques
cryptographiques. La mauvaise implémentation de cet algorithme permet de
vérifier la validité d'un mot de passe d'un
utilisateur.
Si le XOR produit par les deux mots de passe chiffrés en RC4 lus dans le fichier
est égale au XOR des mots
de passe Lanman et NTLM, bingo, le mot de passe est trouvé!
Si cette relation est vérifiée, le mot de passe est trouvé
____________-> NTLM________?___NTLM chiffré
Mot de passe_________> Xor_______Xor
potentiel
____________-> LANMAN _________LANMAN chiffré
Ainsi des attaques sont toujours réalisables même si la clé RC4 est inconnue.
C'est juste un peu plus lent que de s'attaquer
au cryptage NTLM directement quand cela était possible (absence de syskey ou clé
syskey connue).
En pratique
Dans la pratique, la liste des comptes et des mots de passe cryptés est
récupérable avec la série des programmes pwdump
(pwdump, pwdump2,pwdump3) en tant qu'administrateur ou via une faille de
sécurité. Cela ne fonctionne pas toujours surtout
si justement le fameux mot de passe administrateur est perdu.
NTFS
Pour se procurer le fichier de mot de passe, n'importe quel driver NTFS fait
l'affaire. Ensuite, une attaque par
dictionnaire ou force brute est possible mais cela peut prendre du temps. Vous
pouvez alors utiliser une disquette de boot
Linux avec le support expérimentale de l'écriture sur NTFS activé pour modifier
le fichier SAM.
Casser le code
Pour lancer une attaque par dictionnaire ou force brute, vous pouvez utiliser
John The Ripper
http://www.openwall.com/john/
ou
L0phtcrack
http://www.atstake.com/research/lc3/.
Une attaque brute permet 2,7 millions tentatives par seconde avec John The
Ripper sur un Athlon 1,4 Ghz et
à peine 4000 pour le codage MD5 utilisé sur la majorité des Linux. Microsoft
fait vraiment de drôles de choix...
Algorithme Lanman
Pour être crypté, le mot de passe est mis en majuscules et complété par des
zéros s'il faisait moins de quatorze caractères. Ensuite, la chaîne
0x4B,0x47,0x53,0x21,0x40,0x23,0x24,0x25 est cryptée avec les sept premiers
caractères du mot de passe par du DES pour former la première partie du mot de
passe crypté. De manière indépendante, cette même chaîne est chiffrée avec les
sept caractères suivants pour former la seconde partie du mot de passe. Le DES,
Data Encryption Standard, est un algorithme de chiffrage par bloc datant des
années 70 fonctionnant avec une clé de 56 bits.
_______mot de passe = "PaSswOrd"
________________|| Mise en majuscule,
________________|| on complète avec des zéros
________________\/
________PASSWORD,0,0,0,0,0,0
_____________||_____||
_____________\/_____\/
__________PASSWOR___D,0,0,0,0,0,0
_____________||________|| Cryptage DES de la constante
_____________||________|| 0x4B,0x47,0x53,0x21,0x40,0x23,0x24,0x25
_____________\/________\/
e5 2c ac 67 41 9a 9a 22 4a 3b 10 8f 3f a6 cb 6d
____________________________|| Concaténation
____________________________\/
e5 2c ac 67 41 9a 9a 22 4a 3b 10 8f 3f a6 cb 6d
Cette forme cryptée s'appelle le LANMAN hash.
Elle est apparue dans Windows 3.11 pour Workgroup.
Cette méthode de cryptage présente plusieurs faiblesses:
Un même mot de passe a toujours la même forme codée. Chercher à casser un mot de
passe ou un millier est aussi rapide:
il suffit de crypter le mot de passe une fois et de comparer sa forme cryptée
avec les différents comptes à casser.
Effectuer une comparaison ou un millier prend quasiment le même temps
(progression logarithmique), temps négligeable
devant celui du cryptage proprement dit.
Les mots de passe de sept caractères ou moins sont directement repérables. Leurs
formes LANMAN se terminent toujours
par aa d3 b4 35 b5 14 04 ee: cryptage DES de la constante
0x4B,0x47,0x53,0x21,0x40,0x23,0x24,0x25
par la chaîne 0,0,0,0,0,0,0.
L'espace de recherche est restreint: pas de minuscule. Des attaques par force
brute sont envisageables.
Certaines personnes voulaient savoir d'où venait la constante, si son choix
était important pour la sécurité de l'algorithme.
Ce n'est pas le cas. Par exemple, sous Linux et de nombreux Unix, la constante
cryptée par du DES est formée uniquement
de 0, difficile de faire plus simple.
Algorithme NTLM
Le mot de passe est convertit sous forme Unicode, représentation universelle des
caractères. En fait, comme les caractères
correspondent à de l'ASCII, cela revient à ajouter un caractère nul derrière
chaque caractère. Puis, la forme Unicode
est crypté avec l'algorithme MD4,
Message Digest 4 de la société RSA. En
fait, le DES fait pour crypter
et décrypter des messages tandis que MD4 a été conçu pour produire des
empreintes de messages.
________mot de passe = "PaSswOrd"
___________________|| Unicode
___________________\/
______________P,a,S,s,w,O,r,d
___________________|| MD4
___________________\/
MD4 hash :
cd a5 e8 81 b8 b7 68 89 5f b3 e0 11 2a e9 5e 28
Si la forme LANMAN du mot de passe a été cassé, il ne reste plus qu'à découvrir
la casse (majuscule/minuscule) du mot de
passe d'origine. Ainsi en cryptant les différentes variations sur la casse du
mot de passe LANMAN, le mot de passe original
est rapidement retrouvé. Par exemple, si le mot de passe LANMAN est TOTO123, il
suffit de tester les seize possibilités
suivantes pour retrouver le mot de passe NTLM: toto123, totO123, toTo123,
toTO123, tOto123, tOtO123, tOTo123, tOTO123
Toto123, TotO123, ToTo123, ToTO123, TOto123, TOtO123, TOTo123, TOTO123
Une attaque directe du mot de passe NTLM est difficilement réalisable en temps
de calcul. Cependant, comme dans le cas
du mot de passe LANMAN, s'attaquer à un millier de compte ou à un seul ne
demande pas plus de ressource.
Decryptage logiciel
Bien qu'il existe des logiciels capables de cracker le SAM tel quel, il est probable que cela leur devienne impossible sur certaines plateformes.
Le probleme vient de ce que les decrypteurs partent du
postulat que le LanMan et le NTLM ne
sont pas cryptés au RC4 (en option avant Win 2k).
Ceci affin de passer directement a leur travail habituel : le brute force sur un
code de type hash, ou le plus souvent un reverse sur le cryptage DES (cas de
LanMan) si on a affaire a un pass de
<=7 chr$ (et avouons-le, c'est assez fréquent !).
Or, depuis Win 2k ce cryptage supplémentaire est systématique.
Et si on sait que le RC4-40 est l'algorythme (RSA inc) largement utilisé sur
windows (Word, Excel...), rien n'est en réalité totalement impossible :
En effet, il est aisé de trouver des programmes (type pass recovery pour Word
etc...) ou des sources effectuant le reverse sur le RC4 afin de retomber sur nos
pieds et ainsi reprendre le travail plus haut avec les
LanMan et NTLM révélés.
Ces sources sont plus ou moins nombreuses étant donné que la méthode date de
1987 (écrite par Ronald Rivest pour RSA inc).
Efficace et rapide, c'est le standart adopté pour le SSL.
Ce cryptage ne dépend pas de la donnée, mais uniquement de la clé. Si elle est
de 40 bits (RC4-40), le théorie veut :
1000 miliard de combinaisons.
A 2 milions de tentatives / seconde, 7 jours de brute force.
Avec 700 machines en réseau, environs 20 minutes.
Merci a Swiat£a , Hacking.pl, pour les parties les plus techniques. La
cryptologie expliquée aux enfants !
4N9e pour FutureZone, 2004