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