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

Part 4 : Les comptes dans l’Active Directory

Cet article aborde les comptes de l’Active Directory que nous allons retrouver dans la base de données NTDS. Comme évoqué au cours du 2e volet de cette série d’article, les comptes sont des objets stockés dans la datatable.

Les types de compte

On peut distinguer trois types de comptes dans un Active Directory :

  • Comptes utilisateurs : Ils ont généralement des noms reconnaissables qui correspondent au nom de l’utilisateur (exemple : p.nom). En entreprise, les comptes d’administration peuvent être marqués comme tels afin de les reconnaitre plus facilement (ex : p.nom-adm).
  • Comptes machines : Ils sont généralement nommés selon la machine à laquelle ils correspondent et leur nom termine par un signe dollar « $ » (par exemple : « COMPUTERNAME$ ». Lorsqu’un domaine a une relation d’approbation avec un autre domaine, le nom de ce dernier apparait également sous la forme d’un compte machine.
  • Comptes de service : Ces comptes sont souvent nommés d’après le service qu’ils font fonctionner. En fonction des usages, ils peuvent être des comptes de services managés (MSA(1), qui se termine par « $ »), des comptes machines ou des comptes utilisateurs pour faire fonctionner le service cible. Par exemple, un compte de service pour SQLServer pourrait s’appeler « SQLService ».

Les attributs

Lorsqu’on ouvre une base NTDS, les comptes sont associés à énormément d’attributs. D’un point de vue sécurité, voici ceux qui nous intéressent :

PropriétéColonneDescription
sAMAccountNameATTm590045Le login du compte qui permet d’identifier l’utilisateur ou le service qui l’utilise. Ex : bastien.nom
objectSIDATTr589970Security Identifier(2). Identifiant unique pour chaque objet. Ex : S-1-5-21–7623811015-3361044348-030300820-1013
dBCSPwdATTk589879Empreinte du mot de passe au format LM. Cet attribut est chiffré. Cf. Part-3 : Les empreintes de mot de passe.
unicodePwdATTk589914Empreinte du mot de passe au format NT. Cet attribut est chiffré. Cf. Part-3 : Les empreintes de mot de passe.
pekListATTk590689Clés stockées  (Password encryption key). Chiffrées comme les empreintes LM et NT.
supplementalCredentialsATTk589949Attribut chiffré (avec la même clé que les empreintes LM et NT) pouvant contenir la valeur en clair du mot de passe. 
servicePrincipalNameATTm590595Service Principal Name (SPN) d’un compte de service. Ex : MSSQLSvc/COMPUTERNAME:1433
primarygroupATTj589922Le groupe primaire du compte. Exemple : RID 513 (utilisateur du domaine) ou RID 515 (ordinateur du domaine).
logoncountATTj589993Le nombre de fois qu’un utilisateur s’est authentifié auprès du contrôleur de domaine. Cet attribut n’est pas répliqué (dans le cas où le domaine est constitué de plusieurs DC).
badPwdCountATTj589836Le nombre de mots de passe invalides saisis. Cet attribut est réinitialisé lorsque l’utilisateur saisit le bon mot de passe ou après un certain temps défini dans les paramètres du domaine. Cet attribut n’est pas répliqué.
descriptionATTm13La description du compte. Cet attribut est souvent utilisé pour stocker des mots de passe par les administrateurs. Des outils(3) disponibles sur Internet permettent d’effectuer des vérifications automatisées.
whenCreatedATTl131074La date de création du compte
whenChangedATTl131075La dernière fois que le compte a été modifié
lastlogonATTq589876La dernière date de connexion du compte sur le contrôleur de domaine. Attention, ce champ n’est pas répliqué entre les différents contrôleurs de domaine.
lastLogonTimestampATTq591520La dernière date de connexion du compte sur le contrôleur de domaine. À la différence de lastlogon, celui-ci est répliqué par défaut uniquement si la valeur précédente est supérieure à 14 jours(4).
accountExpiresATTq589983Date à laquelle le compte ne pourra plus être utilisé (peut être vide). Lorsque le compte est expiré, il est toujours considéré comme activé dans la propriété « status ».
pwdLastSetATTq589920La date du dernier changement de mot de passe
userPrincipalNameATTm590480Le nom complet du compte (login + domaine). Ex : bastien.nom@xmco.lan
userAccountControlATTj589832Propriété du compte tel qu’activé, désactivé, verrouillé, absence d’expiration du mot de passe, etc. L’ensemble des propriétés sont disponibles sur le site de Microsoft.
infoATTm131153Attribut complémentaire à l’attribut « description » pouvant contenir des précisions sur le compte
operatingSystemATTm590187Nom du système. Ex : Windows Server 2019 Standard
operatingSystemVersionATTm590188Version du système. Ex : 10.0 (17763)
operatingSystemServicePackATTm590189Information sur le Service pack. Ex : Service Pack 1.
sIDHistoryATTr590433Contient les SID précédents utilisés pour référencer l’objet si ce dernier a été déplacé depuis un autre domaine.
adminCountATTj589974Attribut ayant une valeur vide, 0 et 1. Lorsque la valeur est égale à 1, l’utilisateur est, ou était, dans un groupe d’administration protégé. Plus d’informations sont disponibles dans cet article(5).

Les comptes par défaut « built-in »

Lors de la création d’un domaine, trois comptes « Built-in » sont créés :

  • Administrateur (RID 500) : compte administrateur de domaine par défaut ;
  • Invité (RID 501) : compte permettant un accès limité à une machine du domaine. Par défaut, celui-ci est désactivé et son mot de passe est vide ;
  • Krbtgt (RID 502) : compte de service dont le mot de passe est utilisé dans le processus d’authentification Kerberos. Ce compte est également désactivé par défaut et son mot de passe est généré de manière aléatoire.

Il est recommandé de ne pas utiliser le compte Administrateur pour administrer le domaine. En effet, ce compte non nominatif ne permet pas d’imputer les actions effectuées à un utilisateur. Ce compte doit être uniquement un compte de secours et son mot de passe doit être stocké de manière sécurisée et tracée.

Tips : Pour connaitre la date de création d’un domaine, il suffit de relever la date de création de l’un des trois comptes ci-dessus.

Le compte d’administration DSRM

Un compte moins connu appelé DSRM pour Directory Services Restore Mode est un compte local qui existe sur chaque contrôleur de domaine, permettant la restauration de l’Active Directory. Ce compte « brise-glace » n’est pas stocké dans la base de données NTDS.dit car celui-ci doit être accessible même si la base de données NTDS.dit ne peut pas être lue, comme c’est le cas lorsqu’un contrôleur de domaine démarre en mode DSRM. À noter que depuis une mise à jour KB961320, une option est proposée pour synchroniser le mot de passe du compte DSRM avec celui du compte administrateur built-in. Une technique de persistance pour un attaquant ayant compromis ce compte est décrite dans l’article suivant : https://adsecurity.org/?p=1714

Quel est le nombre de comptes maximum pour un AD ?

Lors de nos audits avec notre solution IAMBuster, nous avons audité des Active Directory jusqu’à plus de 250 000 comptes et pour un nombre total de SID d’environ 500 000. Cela peut sembler beaucoup mais le service Active Directory depuis Windows Server 2012 peut gérer un peu plus de deux milliards de SID dans la vie d’un domaine selon la documentation officielle(6). Cette limitation provient du fait que l’identifiant relatif (RID) attribué à chaque objet (comptes, groupes, etc.) est limité sur 31 bits (soit maximum le nombre entier non signée 2 147 483 647) et qu’il n’est pas réutilisé.

S-1-5-21-2718885639-921538116-1870948965-96387
Exemple d’un SID d’un objet avec en gras le RID

L’analyse des objets « comptes” est donc indispensable lors des audits de la partie IAM des Active Directory. Elle permet ainsi d’identifier les défauts de sécurité, les problèmes d’hygiène et d’organisation d’un domaine.

Les attributs des comptes ci-dessus permettent d’effectuer un ensemble de contrôle de sécurité tels que :

Points de contrôleAttributs permettant de répondre
Est-ce qu’un compte est toujours utilisé ?lastLogonTimestamp
Est-ce qu’un compte a changé son mot de passe depuis sa création ?whenCreated, pwdLastSet
Mon domaine possède-t-il des systèmes obsolètes ?operatingSystem, operatingSystemVersion,  operatingSystemServicePack
Mon domaine a-t-il des comptes utilisateurs exposant un SPN ?servicePrincipalName
Des comptes utilisateurs proviennent-ils d’un autre domaine ?sIDHistory
Existe-t-il des comptes qui n’ont pas d’expiration de mot de passe ?userAccountControl
Est-ce que des comptes utilisateurs ont encore un mot de passe sous un format LMDBCSPwd
La pré-authentification Kerberos est-elle activée sur l’ensemble des comptes ?userAccountControl
Combien de comptes sont bloqués ou désactivés ?userAccountControl
Est-ce qu’un compte est approuvé pour la délégation Kerberos ?userAccountControl
La « master key » de mon domaine a-t-elle été modifiée récemment ?pwdLastSet du compte Krbtgt

Exemple de graphique extrait d’IAMBuster exploitant les dates de changement de mot de passe et les dates de dernière connexion des utilisateurs


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
  • Active Directory

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

    Lire l'article