Active Directory : les informations cachées derrière le « User Account Control »

Le terme ”User Account Control” peut renvoyer vers deux mécanismes bien connus des utilisateurs de Windows. Le premier a été introduit dans Windows Vista et permet d’exécuter les programmes avec des droits restreints par défaut. Le second est un attribut des comptes (utilisateurs ou ordinateurs) dans Active Directory. C’est ce deuxième mécanisme que nous allons aborder dans cet article.

L’attribut “User Account Control” est un nombre décimal, compris entre 2 et 134 167 290. En réalité, si ce nombre n’a aucune signification en base 10, celui-ci devient plus lisible en binaire. On se retrouve alors avec un nombre codé sur 4 octets (32 bits) non signé. Chaque bit de ce nombre est indépendant des autres et joue le rôle de « flag » :

  • si sa valeur est à 1 alors la propriété à laquelle il correspond est activée pour le compte à qui est attribué l’UAC,
  • si elle est désactivée, le bit est à 0.

bit 32 0000 0000 0000 0000 0000 0000 0000 0000 bit 1

Le tableau ci-dessous décrit l’ensemble des propriétés contenues dans l’UAC [1].

N° du bit Valeur décimale Propriété Description
1 1 SCRIPT Un script sera exécuté à la connexion du compte.
2 2 ACCOUNTDISABLE Le compte est désactivé.
3 4 Réservé Champ obligatoirement à 0.
4 8 HOMEDIR_REQUIRED Un dossier d’accueil doit obligatoirement être spécifié.
5 16 LOCKOUT Le compte est verrouillé par le système.
6 32 PASSWD_NOTREQD Le compte peut en pas avoir de mot de passe.
7 64 PASSWD_CANT_CHANGE L’utilisateur ne peut pas modifier le mot de passe.
8 128 ENCRYPTED_TEXT_PWD_ALLOWED L’utilisateur peut envoyer un mot de passe chiffré
9 256 TEMP_DUPLICATE_ACCOUNT Indique qu’il s’agit d’un compte temporaire pour les utilisateurs qui se trouvent dans un autre domaine.
10 512 NORMAL_ACCOUNT Type de compte par défaut qui représente un utilisateur classique.
11 1 024 Réservé Champ obligatoirement à 0.
12 2 048 INTERDOMAIN_TRUST_ACCOUNT Ce champ définit un compte de confiance pour un domaine qui à d’autres domaines de confiance.
13 4 096 WORKSTATION_TRUST_ACCOUNT Définit un compte ordinateur du domaine qui exécute Windows NT 4.0 Workstation, Windows NT 4.0 Server, Windows 2000 Professionnel ou Windows 2000 Server.
14 8 192 SERVER_TRUST_ACCOUNT Définit un compte d’ordinateur pour un contrôleur de domaine, membre de ce domaine.
15 16 384 Réservé Champ obligatoirement à 0.
16 32 768 Réservé Champ obligatoirement à 0.
17 65 536 DONT_EXPIRE_PASSWORD Le mot de passe du compte n’expire jamais.
18 131 072 MNS_LOGON_ACCOUNT Ce champ définit un compte MNS (Majority Node Set).
19 262 144 SMARTCARD_REQUIRED Ce champ oblige l’utilisateur à se connecter avec une carte à puce.
20 524 288 TRUSTED_FOR_DELEGATION Permet à un compte de service d’être approuvé par la délégation Kerberos.
21 1 048 576 NOT_DELEGATED Empêche le compte utilisateur d’utiliser la délégation Kerberos, même si le compte de service est approuvé.
22 2 097 152 USE_DES_KEY_ONLY Limite à l’utilisation de DES (Data Encryption Standard) pour la génération de clef.
23 4 194 304 DONT_REQ_PREAUTH Ce compte n’a pas besoin de la pré-authentification Kerberos pour se connecter.
24 8 388 608 PASSWORD_EXPIRED Indique que le mot de passe du compte a expiré.
25 16 777 216 TRUSTED_TO_AUTH_FOR_DELEGATION Ce compte est autorisé à la délégation.
26 33 554 432 Réservé Champ obligatoirement à 0.
27 67 108 864 PARTIAL_SECRETS_ACCOUNT Le compte fait partie des contrôleurs de domaine en lecture seule (Read Only Domain Controler – RODC)
28 134 217 728 Réservé Champ obligatoirement à 0.
29 268 435 456 Réservé Champ obligatoirement à 0.
30 536 870 912 Réservé Champ obligatoirement à 0.
31 1 073 741 824 Réservé Champ obligatoirement à 0.
32 2 147 483 648 Réservé Champ obligatoirement à 0.

Exemple :

Prenons un UAC de valeur : 514

L’UAC nous indique ainsi qu’il s’agit d’un compte normal, à l’état désactivé.

 

Quelques valeurs par défaut :

  • Compte utilisateur : 512 (NORMAL_ACCOUNT)
  • Contrôleur de domaine : 532 480 (TRUSTED_FOR_DELEGATION + SERVER_TRUST_ACCOUNT)
  • Serveur : 4 096 (WORKSTATION_TRUST_ACCOUNT)

Maintenant que la mécanique du User Account Control est moins floue, nous allons parler des bonnes pratiques associées [2].

  • Un contrôleur de domaine doit contenir SERVER_TRUST_ACCOUNT et TRUSTED_FOR_DELEGATION.
  • Un contrôleur de domaine en lecture seule doit contenir PARTIAL_SECRETS_ACCOUNT, TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION et WORKSTATION_TRUST_ACCOUNT.
  • Les comptes doivent imposer la pré-authentification Kerberos et donc ne pas contenir DONT_REQUIRE_PREAUTH.
  • Les comptes ne doivent pas avoir de mot de passe sans date d’expiration donc la propriété DONT_EXPIRE ne doit pas être appliquée.
  • Aucun compte hors contrôleur de domaine ne doit contenir TRUSTED_FOR_DELEGATION si la délégation d’authentification n’est pas contrainte.
  • L’attribut USE_DES_KEY_ONLY ne doit pas être utilisé car il est obsolète.

 

Pour conclure, l’important n’est pas de connaître la valeur de l’attribut UAC d’un compte mais ce qu’il veut dire. C’est pourquoi les solutions d’IAG préfèrent le traduire en plusieurs champs “activé/désactivé” comme “Mot de passe n’expire jamais : Activé”. L’UAC est une source d’information brute semblable à celles d’autres systèmes (exemple : flag “REVOKED” pour les systèmes RACF) mais trouve toute sa force une fois décomposé et traduit pour rendre la gouvernance des identités et des accès simple et lisible pour les utilisateurs finaux.

 

Sources :

[1] Documentation Microsoft attribut UAC — https://docs.microsoft.com/fr-fr/troubleshoot/windows-server/identity/useraccountcontrol-manipulate-account-properties (26/03/2021)

[2] Points de contrôle Active Directory ANSSI — https://www.cert.ssi.gouv.fr/uploads/guide-ad.html (26/03/2021)

 

Vous avez aimé cet article?

Partager sur twitter
Twitter
Partager sur linkedin
LinkedIn