15/11/2024

CybersécuritéSystème

A la découverte de la base SAM de Windows – Importance, structure, compromission

I. Présentation

Dans cet article, nous allons nous intéresser à la base SAM de Windows puisqu'il s'agit d'un composant clé associé à la gestion des identités sur le système d'exploitation de Microsoft. S'il vous est arrivé de vous demander où étaient stockés les comptes utilisateurs et les groupes locaux d'une machine Windows, ainsi que les mots de passe, sachez que la réponse se situe dans la base SAM !

II. Qu'est-ce que la base SAM ?

A. Définition et objectif

SAM pour Security Account Manager est un composant présent sur chaque machine Windows ou Windows Server qui se présente sous la forme d'une base de données qui contient les objets de sécurité de Windows, notamment les utilisateurs et les groupes locaux. Cette base est sensible puisqu'au-delà de contenir le nom des utilisateurs, elle contient aussi les mots de passe des utilisateurs (pour des raisons de sécurité, le hash (ou condensat) est stocké) ! Il est important de comprendre que chaque machine (ordinateur ou serveur) a sa propre base SAM !

Au démarrage de l'ordinateur, la base SAM est exécutée en arrière-plan et lorsque l'on ouvre une session sur une machine avec un compte local, c'est la base SAM qui est sollicité par le processus LSA (lsass.exe) en charge de vérifier si les informations saisies correspondent à celles stockées dans la base SAM.

Même si une machine est intégrée à un domaine Active Directory, elle conserve sa base SAM en local. Ce qui permet de se connecter à la machine avec un compte local ou avec un compte du domaine Active Directory (ou un compte Microsoft, d'ailleurs).

Note : sur un contrôleur de domaine Active Directory, la base SAM ne contient pas les informations d'authentification des utilisateurs et des groupes locaux. Ces informations sont stockées directement dans la base d'annuaire Active Directory représentée par le fichier NTDS.dit.

B. Où est stockée la base SAM ?

La base SAM est représentée par le fichier "%SystemRoot%\system32\config\SAM" (généralement dans "C:\Windows\") qui est en fait un fichier associé à la base de Registre Windows : HKEY_LOCAL_MACHINE\SAM\.

Base SAM Windows dans le Registre

III. La structure de la base SAM

La base SAM est constituée de deux domaines.

Il y a un premier domaine nommé "Account" dans la base SAM qui contient les utilisateurs et groupes locaux propres à la machine. En pratique, ce domaine utilise comme nom le nom d'hôte de Windows. Les utilisateurs sont stockés sous "Users" et les groupes sous "Aliases" (alias) ! Contrairement à ce que l'on pourrait penser, ils ne sont pas stockés sous "Groups".

Il y a un second domaine nommé "Builtin" qui contient les groupes intégrés à Windows. Par exemple, le domaine "Builtin" contiendra le groupe "Administrateurs" permettant d'accorder les privilèges d'administrateur sur une machine Windows. C'est pour cette raison que l'on peut voir l'écriture suivante : "BUILTIN\Administrateurs". Historiquement, l'ensemble de ces groupes sont stockés sous "Aliases" (alias) dans le domaine Builtin.

Les domaines de la base SAM

Comme le montre l'image ci-dessous, les utilisateurs locaux d'une machine Windows sont stockés dans le domaine "Account" de la base SAM. Nous retrouvons les comptes natifs sur un système Windows (comme Administrateur et Invité), ainsi que les comptes créés par l'utilisateur. Ici, nous pouvons remarquer la présence de l'utilisateur "Florian".

Aperçu des utilisateurs dans la base SAM

Sous "Names", la clé de Registre correspondante à chaque compte est vide ! En fait, il faut se référer aux clés de Registre du niveau supérieur : 000001F4, 000001F5, 000001F7, etc... jusqu'à 000003E9 pour avoir accès à des informations sensibles sur les comptes.

Pour le nom de ces clés de Registre, Windows utilise des valeurs hexadécimales que l'on peut convertir en décimales. Ainsi :

  • 000001F4 devient 500
  • ....
  • 000003E9 devient 1001

Et donc ?

Sur Windows, chaque utilisateur et chaque groupe sont associés à un SID (Security Identifier), c'est-à-dire un identificateur de sécurité, qui est unique pour chaque objet de la machine (l'Active Directory adopte ce même principe pour les objets de la base d'annuaire). La structure et l'analyse des SID pourra faire l'objet d'un autre article.

Sur une machine Windows, nous savons que le SID du compte Administrateur termine toujours par 500 (suffixe commun). Cette partie du SID s'appelle le RID (Relative Identifier) de l'utilisateur.

Par exemple :

S-1-5-21-1660400566-1867812361-5792324776-500

Vous pouvez le vérifier sur votre machine en exécutant la commande PowerShell suivante (bien que d'autres méthodes existes) :

Get-CimInstance win32_useraccount | Format-Table domain,name,sid

Ceci permet d'affirmer que la clé de Registre 000001F4 contient les informations du compte Administrateur. Ce sera le cas sur toutes les machines Windows.

Quant à la clé de Registre 000003E9 (soit 1001 en décimal), elle correspond à l'utilisateur "Florian" puisque le SID de ce compte utilisateur se termine par 1001 :

S-1-5-21-1660400566-1867812361-5792324776-1001

À chaque fois, pour chaque compte, il y a plusieurs valeurs. Parmi elles, il y a les valeurs V et F dont le nom n'est pas très évocateur, mais qui contiennent des informations sur l'état du compte. Les données de la valeur V permettent d'obtenir le nom d'utilisateur, la description, le hash du mot de passe, l'état du compte (activé/désactivé), etc... Tandis que la valeur F contient des informations différentes comme la date et l'heure de la dernière connexion.

Base SAM et les valeurs V et F

Remarque : vous pouvez tomber sur certains tutoriels où l'on vous demande de modifier directement les données de la valeur V pour agir sur l'état d'un compte. Par exemple, pour activer le compte Administrateur s'il est désactivé.

Désormais, vous en savez un peu plus sur la structure et le fonctionnement de la base SAM !

IV. Accès à la base SAM

A. Accéder à la base SAM avec regedit.exe

Pour visualiser la base SAM dans le Registre Windows, il est obligatoire d'ouvrir l'éditeur de Registre (regedit.exe) en tant que SYSTEM, qui est le niveau de permissions le plus élevé sur Windows. Autrement dit, vous ne pourrez pas voir son contenu même en ouvrant regedit.exe en tant qu'administrateur.

Pour élever ses privilèges en tant que SYSTEM, vous pouvez utiliser le célèbre outil PsExec !

Ainsi, la commande ci-dessous permet d'ouvrir regedit.exe en tant que SYSTEM et accéder à la base SAM. Le fait d'ouvrir regedit.exe en tant que SYSTEM permet aussi d'accéder à d'autres parties du Registre comme "HKEY_LOCAL_MACHINE\SECURITY" où l'on peut retrouver les identifiants mis en cache.

psexec.exe -i -s regedit.exe

Une fois que regedit.exe est ouvert, vous n'avez plus qu'à parcourir le Registre Windows jusqu'à la base SAM :

HKEY_LOCAL_MACHINE\SAM\SAM

Vous pourrez alors visualiser la structure évoquée dans cet article.

Accès à la base SAM de Windows

B. Peut-on consulter la base SAM en tant qu'anonyme ?

Historiquement, sur les versions de Windows obsolètes, la base SAM était accessible de manière anonyme ! Cela signifie qu'il était possible d'énumérer le contenu de la base SAM afin d'identifier les comptes avec des privilèges élevés et de les cibler dans une attaque.

Fort heureusement, Microsoft a changé la donne en activant par défaut le paramètre de stratégie "Accès réseau : ne pas autoriser l'énumération anonyme des comptes SAM". Ce paramètre que vous pouvez retrouver à l'emplacement indiqué ci-dessous, peut être configuré via la stratégie de groupe locale d'une machine ou avec une stratégie de groupe Active Directory.

Configuration ordinateur > Paramètres Windows > Paramètres de sécurité > Options de sécurité

Base SAM et accès anonyme (GPO)

À cet emplacement, vous pourrez retrouver également d'autres paramètres. Voici les valeurs recommandées pour renforcer la sécurité :

  • "Accès réseau : ne pas autoriser l'énumération anonymes des comptes SAM" : sur l'état activé (valeur par défaut)
  • "Accès réseau : ne pas autoriser l'énumération anonymes des comptes et partages SAM" : sur l'état activé
  • "Accès réseau : Permet la traduction de noms/SID anonymes" : sur l'état désactivé (valeur par défaut)

À ce sujet, vous pouvez consulter la documentation Microsoft pour avoir des détails supplémentaires.

Remarque : sur un contrôleur de domaine Active Directory, ce sont les permissions de l'annuaire qui détermine si l'accès anonyme est autorisé ou non.

Sur une machine où l'accès anonyme serait autorisé, la base SAM peut être interrogée à distance avec un outil comme NMAP. En effet, l'outil NMAP (inclus nativement dans Kali Linux) intègre un script nommé "smb-enum-users" capable d'énumérer la liste des utilisateurs d'une machine Windows. Cette commande s'utilise de cette façon :

nmap -p139,445 --script smb-enum-users <Adresse IP de la cible>

Sur les systèmes d'exploitation récents, tels que Windows 10 ou Windows 11 ou Windows Server, vous pourrez constater que cette commande "ne fonctionne pas", car les accès anonymes sont bloqués. Si vous parvenez à lister les comptes utilisateurs, c'est qu'il y a eu une modification de la politique de sécurité de la machine.

V. Compromission de la base SAM

La base SAM est vulnérable à différentes techniques d'attaques, même s'il faut des privilèges élevés pour accéder à son contenu. Pour cette démonstration, nous allons effectuer les actions suivantes :

  • Exporter la base SAM d'une machine Windows 11
  • Extraire tous les hash NT de la base SAM
  • Effectuer une attaque par dictionnaire pour tenter de deviner les mots de passe des comptes utilisateurs
  • Réutiliser le hash NT de la base SAM via la technique Pass the hash, vers une autre machine sous Windows 10

Les premières manipulations seront effectuées à partir de la machine Windows 11, tandis que la suite sera effectuée à partir d'une autre machine Kali Linux.

A. Exporter la base SAM

Sur une machine Windows sur laquelle nous disposons des droits Administrateurs, il existe différentes méthodes pour élever ses privilèges afin d'extraire ou lire le contenu de la base SAM. On peut citer Mimikatz ainsi que CrackMapExec (à distance). À cela s'ajoute PsExec qui pourra nous permettre d'exporter la base SAM (via un export du Registre) afin de travailler sur ce fichier en mode hors ligne.

Pour un attaquant, il y a plusieurs techniques à tenter afin d'obtenir les droits administrateur sur une machine. Il peut s'agir de l'exploitation d'une vulnérabilité dans une application ou le système d'exploitation, ou la compromission d'un compte utilisateur qui est - malheureusement - administrateur de sa machine.

Nous allons voir comment exporter la base SAM sur Windows 11 (ou une autre version).

À partir de PsExec, nous pouvons ouvrir une Invite de commandes en tant que SYSTEM avec la commande suivante :

psexec.exe -i -s cmd.exe

Dans cette nouvelle console, nous allons commencer par exporter la partie du Registre "HKEY_LOCAL_MACHINE\SAM", comme ceci :

reg save hklm\sam c:\tool\sam

Export base SAM avec PsExec et Reg save

Puis, la partie "HKEY_LOCAL_MACHINE\SYSTEM" afin de pouvoir récupérer les hash des mots de passe avec un autre outil :

reg save hklm\system c:\tool\system

Une fois que l'on a ces deux fichiers, il faut travailler dessus avec un autre outil. Les deux fichiers sont copiés vers la machine Kali Linux.

Remarque : ici, l'export de la base SAM est effectué sur une installation en ligne de Windows. C'est également possible sur une installation hors ligne, d'où l'intérêt de chiffrer les disques de sa machine avec BitLocker.

B. Extraire tous les hash de la base SAM

Là encore, nous pouvons utiliser différents outils... Dont Impacket qui est inclus à Kali Linux.

Nous allons nous positionner dans le répertoire où sont stockés les fichiers "sam" et "system" :

cd /home/kali/Documents

Puis, avec Impacket nous allons extraire les hash de la base SAM :

impacket-secretsdump -system system -sam sam local

Ce qui donne une sortie avec le nom des comptes (UID), le RID associé, le LM Hash et le NT Hash.

Impacket Hash base SAM Windows

C. Attaque brute force sur la base SAM

Maintenant que nous disposons de la liste des "NT hash" (associé au protocole NTLM) stockés dans la base SAM, nous allons pouvoir réaliser une attaque par brute force dans le but de compromettre les mots de passe.

Notre ami John The Ripper, spécialiste du craquage de mots de passe et disponible sur Kali Linux, va pouvoir nous aider !

Nous avons besoin de deux fichiers :

  • Un fichier dictionnaire qui contient une liste de mots de passe à tester, ici ce sera "dictionnaire.txt" avec quelques mots de passe :

Dictionnaire pour craquer base SAM

  • Un fichier avec les hash à craquer, ici ce sera "hash.txt" et il aura le contenu suivant :
Administrateur:500:aad3b435b51404eeaad3b435b51404ee:2b391dfc6690cc38547d74b8bd8a5b49:::
Invité:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:e06c5c2faf99e54d79ffe49a56f75b18:::
Florian:1001:aad3b435b51404eeaad3b435b51404ee:d69bd228bf431ea6b2b1069875fe9a00:::

Puis, nous allons appeler ces deux fichiers avec John The Ripper, en lui précisant le format des hash via "--format=NT" :

john --wordlist=dictionnaire.txt --format=NT hash.txt

Quelques secondes plus tard, John m'indique qu'il est parvenu à trouver deux mots de passe ! Il s'agit des mots de passe pour les comptes Administrateur et Florian !

John The Ripper base SAM hash NT

Les résultats de cette analyse sont mis en cache dans le fichier "~/.john/john.pot" qu'il faudra supprimer si vous souhaitez relancer l'opération depuis le début.

Pour visualiser les résultats à tout moment, exécutez cette commande :

john --show --format=nt hash.txt

Voilà, nous venons de craquer le mot de passe Administrateur de la machine Windows 11 à partir du contenu de la base SAM !

D. Utilisation de la technique Pass the hash

Au sein d'un parc informatique, l'administrateur système crée ce que l'on appelle un master afin d'avoir une image de référence à déployer sur l'ensemble des ordinateurs de l'entreprise. Ceci permet d'avoir une installation homogène et le même socle : même système d'exploitation et mêmes applications (ce qui n'empêche pas de gérer le cas par cas).

Au sein de chaque machine, nous aurons donc une base SAM locale, avec un compte Administrateur ! Le mot de passe de ce compte Administrateur est susceptible d'être le même sur tous les postes basés sur ce master puisque l'image est, en quelque sorte, dupliquée ! Si c'est le cas, cela veut dire que le hash NT du compte Administrateur est le même sur tous les ordinateurs.

Sans avoir besoin de craquer le mot de passe comme nous l'avons fait précédemment, le simple fait de disposer du hash NT permet de se connecter à une autre machine qui accepte l'authentification NTLM. Puisqu'il s'agit du hash NT d'un compte Administrateur, ceci ouvre la porte à de nombreuses possibilités...!

Par exemple, avec CrackMapExec nous avons seulement besoin de préciser l'adresse IP de la machine cible, le nom de l'utilisateur, son hash NT et choisir une action à exécuter !

La première commande liste les partages de la machine distante :

crackmapexec smb 192.168.14.134 -d . -u Administrateur -H 2b391dfc6690cc38547d74b8bd8a5b49 --shares

CrackMapExec - Pass the hash liste des partages

Puis, avec les deux commandes ci-dessous, nous pouvons créer un compte Administrateur local sur la machine Windows 10, avec notre propre nom d'utilisateur et le mot de passe de notre choix !

crackmapexec smb 192.168.14.134 -d . -u Administrateur -H 2b391dfc6690cc38547d74b8bd8a5b49 -x "net user adminflo P@ssword /add"
crackmapexec smb 192.168.14.134 -d . -u Administrateur -H 2b391dfc6690cc38547d74b8bd8a5b49 -x "net localgroup Administrateurs adminflo /add"

CrackMapExec - Pass the hash base SAM

Ainsi, à partir de la base SAM d'une première machine, nous sommes parvenus à agir sur une autre machine grâce à la technique "Pass the hash" ! Ceci est possible, car le compte Administrateur a le même mot de passe sur les deux machines. Ici, il s'agit d'un exemple avec des comptes locaux, mais il y a aussi des possibilités en environnement Active Directory.

Même si bien sûr vous pouvez continuer à utiliser une image de type "master" pour déployer vos machines, vous n'avez plus le droit d'utiliser le même mot de passe Administrateur sur toutes ces machines ! La bonne nouvelle, c'est qu'il existe un outil gratuit qui répond à ce besoin : Windows LAPS !

VI. Conclusion

Suite à la lecture de cet article, vous en savez beaucoup plus sur la base SAM : son importance au sein de Windows, sa structure, et vous avez une idée des risques associés ! Désormais, si ce n'est pas déjà fait, vous pouvez vous pencher sur la mise en œuvre de BitLocker et de Windows LAPS pour améliorer la sécurité de vos postes de travail.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

6 commentaires sur “A la découverte de la base SAM de Windows – Importance, structure, compromission

  • Merci pour cet article !

    Simple question : dans la note sur BitLocker, il est question d' »installation en ligne/hors ligne ».
    À quoi fais-tu référence ?
    Merci !

    Répondre
    • Hello Quentin,
      Avec le mode en ligne, j’entends une machine démarrée sous Windows sur laquelle nous effectuons nos manipulations, comme dans cette démo. En hors ligne, c’est que l’on accède aux données du disque Windows à partir d’un « live CD » ou en mettant le disque dans une autre machine, donc Windows n’est pas actif.

      Répondre
  • Merci beaucoup Florian! Avec ton article j’ai fini de comprendre quelques trucs sur tout ça qu’on a aussi appris à l’école l’année dernière mais certaines choses n’étaient pas claires pour moi.

    Répondre
  • Super article, merci beaucoup pour ces informations qui m’ont permises d’avancer dans mon apprentissage !

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.