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)