On dépile le NTDS #5 - Les comptes machines dans l’Active Directory

Part 5 : Les comptes machines dans l’Active Directory

Dans cet article, nous faisons un focus sur les comptes machine de l’Active Directory dans sa base de données NTDS. Comme évoqué au cours du 4e volet de cette série d’articles, les comptes machines sont facilement identifiables par la présence du caractère « $ » à la fin du nom du compte (1).

De la même manière qu’un utilisateur a besoin d’un compte pour s’authentifier auprès du service Active Directory et accéder à ses ressources, une machine (poste de travail, serveur, imprimante, etc.), il a également besoin d’un compte pour être membre du domaine.

Création d’un compte machine

Lorsqu’un poste de travail est ajouté au domaine, un compte est automatiquement créé dans la base NTDS. Ce compte est assez similaire à un compte utilisateur et possède un mot de passe. Néanmoins, ce dernier est généré aléatoirement par le service Active Directory et changé par défaut tous les 30 jours.

Note : Si un poste de travail ne s’est pas connecté depuis plus de 30 jours au domaine, la prochaine authentification au domaine sera autorisée et le mot de passe sera renouvelé.

L‘ajout de machine dans le domaine peut s’effectuer de deux façons :

  • Depuis la machine qui s’enrôle sur le domaine : nécessite qu’un administrateur se connecte sur le poste et ajoute la machine dans le domaine. Le compte sera ainsi créé dans l’Active Directory et sera inclus par défaut dans l’OU (Organisation Unit) « Computers ». La connexion au poste pour l’ajout dans le domaine n’est néanmoins pas recommandée, car le compte ajoutant la machine au domaine sera propriétaire de celle-ci avec des droits privilégiés. Afin d’éviter ce chemin de contrôle de type « owner » du compte machine, il est recommandé d’effectuer une jonction de domaine hors connexion à l’aide de l’utilitaire « Djoin ».
OU « computers » dans laquelle sont affectés par défaut les comptes machines

Note : Les chemins de contrôle dans l’Active Directory sont une agrégation de « relations de contrôle » entre les entités du domaine (utilisateurs, ordinateurs, groupes, GPO, conteneurs, etc.) et dont le but est de répondre à des questions telles que « Qui peut obtenir des privilèges ‘Domain Admins’ ? », « Quelles ressources un utilisateur peut-il contrôler ? », ou même « Qui peut lire les emails du PDG ? ». Nous aborderons le sujet des chemins de contrôles et de leur identification dans un prochain article à venir dans cette série.

  • Les comptes machines « pre-stage » ou « pre-created » : compte créé avant que la machine n’existe. Ce procédé est notamment utilisé par les solutions de déploiement et permet de mieux contrôler l’ajout de machine dans l’Active Directory. Cette option est la plus privilégiée en entreprise, car elle permet notamment d’inclure directement la nouvelle machine dans la bonne OU et ainsi d’appliquer les GPO correspondantes.

Il arrive que le mot de passe stocké sur la machine et le mot de passe stocké dans la base NTDS soit différent. La machine est ainsi désynchronisée et ne peut plus s’authentifier. Une opération de réinitialisation est nécessaire. La commande PowerShell Reset-ComputerMachinePassword (2) peut être utilisée.

Propriétés des comptes machines

Comme les comptes utilisateurs, les comptes machines ont de nombreux attributs dans la base NTDS. Beaucoup sont partagés avec les comptes utilisateurs comme le sAMAccountName, objectSID, groupe, logoncount, description, whenCreated, etc. Néanmoins, certains attributs sont spécifiques comme le nom du système d’exploitation (operatingSystem), sa version (operatingSystemVersion) ou son service pack (operatingSystemServicePack).

Afin de déterminer la nature de chaque machine dans l’Active Directory, il est également nécessaire de s’intéresser aux propriétés actives présentes dans l’UAC (UserAccountControl) sur le compte associé. Les propriétés actives sont référencées par une valeur hexadécimale. Ainsi, pour connaitre le nombre de valeurs actives, il convient d’appliquer un masque.

Voici les propriétés présentes dans l’UAC qui nous intéressent pour les comptes machines. L’ensemble des propriétés est disponible à l’adresse suivante : https://learn.microsoft.com/en-us/troubleshoot/windows-server/identity/useraccountcontrol-manipulate-account-properties

NomValeur hexadécimaleRôleNote
ACCOUNTDISABLE0x00000002Indique que le compte machine est désactivé. Un poste de travail ayant cette caractéristique ne pourra plus se connecter au domaine.Lorsqu’un collaborateur rend son poste de travail ou qu’un serveur est décommissionné, il est commun de désactiver le compte associé avant de le supprimer.
LOCKOUT0x00000010Indique que le compte machine est verrouillé. Un poste de travail ayant cette caractéristique ne pourra plus se connecter au domaine. Celle-ci reste assez rare sur les comptes machine.Le blocage d’un compte machine reste très rare sur un domaine en production.
PASSWD_NOTREQD0x00000020Indique qu’aucun mot de passe n’est requis. En revanche, cela ne signifie pas l’absence de mot de passe.Lorsqu’un compte machine est créé, cet attribut est positionné et disparait lorsque la machine a joint le domaine. Cependant, il n’est pas rare de voir encore cet attribut sur des comptes machine du domaine, généralement dû à l’utilisation de logiciels de management d’identité tiers, qui lors de la création du compte, oublient de supprimer cette propriété.
Les comptes de relation d’approbation (trust) entre domaines disposent par défaut de cette caractéristique.
INTERDOMAIN_TRUST_ACCOUNT0x00000800Indique que c’est un compte de relation d’approbation entre domaines (trust)Le nombre de comptes avec cette propriété permet de connaitre le nombre de relations d’approbation avec d’autres domaines.
WORKSTATION_TRUST_ACCOUNT0x00001000Indique que c’est un serveur, un poste de travail ou un autre équipement réseau enrôlé dans l’ADPour la majorité, ces comptes sont les serveurs Windows de l’infrastructure et les postes de travail des utilisateurs. Les autres comptes sont des serveurs de fichiers, imprimantes ou autres types d’équipements.  
SERVER_TRUST_ACCOUNT0x00002000Indique que c’est un contrôleur de domaineCette propriété est généralement associée avec TRUSTED_FOR_DELEGATION et ne doit être activée uniquement sur les contrôleurs de domaines.
DONT_EXPIRE_PASSWORD0x00010000Indique que le mot de passe n’expire jamaisCette propriété est généralement utilisée sur des comptes machines d’équipement non Windows, qui ne supportent pas le mécanisme de changement automatique. Les mots de passe de ces comptes doivent être robustes.
MNS_LOGON_ACCOUNT0x00020000Indique que le compte est MNS (Majority Node Set).Ce type de compte n’est quasiment jamais rencontré et est requis pour les opérations sur les nœuds de cluster pour les serveurs.
TRUSTED_FOR_DELEGATION0x00080000Indique que la machine supporte la délégation Kerberos non contrainte. Ce mécanisme permet au serveur de prendre la place de l’utilisateur et de s’authentifier au nom de celui-ci auprès d’un autre service (impersonification).  D’un point de vue sécurité, seuls les contrôleurs de domaine doivent avoir cette propriété. L’approbation d’autres machines est une opération ayant des conséquences de sécurité importantes et ne doit être effectuée qu’en cas de nécessité. Nous approfondirons le sujet des délégations dans un autre article.
NOT_DELEGATED0x00100000Indique que le compte utilisateur n’est pas « relayable »Par défaut, aucun compte ne possède cet attribut. La restriction de délégation des comptes sensibles, en particulier ceux d’administration, est une mesure de sécurisation fortement recommandée.
PASSWORD_EXPIRED0x00800000Indique que le mot de passe a expiréLes mots de passe des comptes machine n’expirent jamais (renouvelés automatiquement). Seuls des cas très spécifiques comme des machines non Windows (ex : un NAS) pourraient avoir cet attribut.  
TRUSTED_TO_AUTH_FOR_DELEGATION0x01000000Indique que la machine peut endosser l’identité d’un client et peut s’authentifier comme telle auprès d’autres serveurs distants du réseau (transition de protocole)Uniquement les RODC sont censés avoir cette propriété. Celle-ci est en effet très sensible d’un point de vue sécurité et ne doit être positionnée que pour les comptes pour lesquels cela est absolument nécessaire.
PARTIAL_SECRETS_ACCOUNT0x04000000Indique que le serveur est un RODC (Read Only Domain Controller)Uniquement les RODC sont censés avoir cette propriété.

Sécurisation des comptes machines

La majorité des comptes machines disposent d’un mot de passe robuste, généré automatiquement et aléatoirement tous les 30 jours. Néanmoins, les équipements non compatibles avec ce mécanisme (généralement les systèmes non Windows) reposent sur un mot de passe défini manuellement et qui peut être faible. Ces mots de passe sont comme les comptes utilisateurs stockés sous format NT ou dans certains cas au format LM. (cf. l’article sur les mots de passe).

Note : Sur les vieux Active Directory, il est possible de trouver des comptes « Assign this computer account as a pre-Windows 2000 ». Le mot de passe de ces comptes machines est le nom du compte machine en minuscule. Ainsi, le mot de passe du compte machine “XMCO$” sera “xmco”.

Le vol d’un compte machine peut permettre de faire de la reconnaissance (ex : parcours des partages en authentifié) ou d’initier plusieurs attaques (3) sur l’Active Directory ou encore de mettre en place de la persistance (4).

Dans le cadre de nos analyses IAMBuster, il est fréquent que quelques comptes machines, reposant sur un mot de passe faible, soient identifiés. Nous regardons également attentivement les dates de dernière connexion et les versions des OS pour repérer les systèmes obsolètes actifs ou ceux qui seraient désynchronisés.

Graphiques issus de notre offre IAMBuster

Note : Par défaut, n’importe quel utilisateur du domaine, avec les droits administrateurs locaux sur son poste, a la capacité d’enrôler jusqu’à 10 machines au domaine. Cela entraîne la création d’un compte machine dans l’annuaire Active Directory. Cette fonctionnalité peut également faciliter l’exploitation de certaines vulnérabilités (CVE-2021-42278 / CVE-2021-42287). Il est ainsi recommandé de vérifier que l’attribut ms-DS-MachineAccountQuota sur le domaine est à zéro.

D’un point de vue journalisation, l’événement 4741, qui correspond à la création d’un compte machine sur le domaine, peut être surveillé.

Les propriétés des comptes machines sont donc aussi importantes que celles des comptes utilisateurs et les auditer régulièrement permet d’identifier des défauts de configuration qui faciliteraient le travail des attaquants.


1.Les comptes gMSA (Group Managed Service Account) se terminent également par « $ ». Néanmoins, les différentes propriétés abordées dans cet article permettent facilement de les différencier.

2.https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/reset-computermachinepassword?view=powershell-5.1

3.https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/resource-based-constrained-delegation#performing-a-complete-s4u-attack
https://pentestlab.blog/2022/02/01/machine-accounts/
https://securityboulevard.com/2022/06/elevating-privileges-with-authentication-coercion-using-dfscoerce/

4. https://pentestlab.blog/2022/01/17/domain-persistence-machine-account/

Bastien Cacace

Découvrir d'autres articles

  • Active Directory

    On dépile le NTDS #6 – LAPS, des attributs particuliers (1/2)

    Lire l'article
  • Active Directory

    On dépile le NTDS #2 – La Datatable

    Lire l'article
  • NTDS - Partie 4
    Active Directory

    On dépile le NTDS #4 – Les comptes dans l’Active Directory

    Lire l'article