Choisir le compte d'un service Windows — LocalSystem, comptes virtuels et gMSA

· · Windows, Services Windows, Comptes de service, gMSA, LocalSystem, Comptes virtuels, Sécurité, Active Directory, Moindre privilège

« Un service interne que nous faisions tourner sous LocalSystem “pour l’instant” a été signalé à l’audit de sécurité comme “privilège excessif”. Vers quoi le changer ? » « Le service n’arrivait pas à accéder à un dossier partagé, alors nous le faisons tourner sous un utilisateur de domaine. Quand le mot de passe expire le service s’arrête, donc nous l’avons rendu sans expiration et l’avons écrit en clair dans le runbook. » — Parmi les consultations autour des services Windows des clients, ces deux-là sont des classiques.

Ce que les deux sites ont en commun, c’est que le compte d’ouverture de session du service est figé comme « le paramètre qui a fini par marcher », et non comme une décision de conception. Un service Windows tourne toujours dans le contexte de sécurité d’un compte, et ce compte décide de tout : ce qu’il peut faire en local, qui il est du point de vue de l’autre côté du réseau, et qui gère le mot de passe. Laisser cela à la valeur par défaut, et une vulnérabilité d’un seul service mène directement à la prise de la machine entière, et les mots de passe en clair se dispersent dans les runbooks et les scripts.

Trois choses que le compte d'ouverture de session décideUn service tourne toujours dans le contexte de sécurité d'un compte, et ce compte décide de tout ce qu'il peut faire en local, qui il est de l'autre côté du réseau, et qui gère le mot de passeLe compte d'ouverture de session du serviceCe qu'il peut faire en localQui il est de l'autre côté du réseauQui gère le mot de passe

Figure 1 : Choisir le compte d’ouverture de session est une décision de conception qui fixe à la fois les privilèges locaux, l’identité réseau et la gestion du mot de passe.

Il y a effectivement six choix — LocalSystem, LocalService, NetworkService, un compte virtuel (NT SERVICE\), un utilisateur de domaine, et un gMSA (compte de service administré de groupe). Destiné aux informaticiens de PME et aux développeurs d'applications Windows, cet article organise les privilèges, l'identité réseau et la gestion des mots de passe de ces six options en une seule table et résume un flux de décision, à partir des sources primaires Microsoft Learn d'août 2026.

Comment construire le service lui-même (choix entre le Planificateur de tâches et un service, implémentation avec un .NET Worker Service) est traité dans « Comment créer et exploiter un service Windows ». Cet article se concentre sur le « compte d’ouverture de session », là où arrivent le plus d’accidents.

1. La conclusion d’abord

  • Dans le doute, un compte virtuel est le premier candidat pour un service qui se termine à l’intérieur d’une seule machine, et un gMSA est le premier candidat pour un service qui accède à une ressource du domaine avec une identité propre au service. Microsoft donne aussi pour consigne d’utiliser un compte administré (MSA / compte virtuel) partout où c’est possible.12
  • Ne choisissez pas LocalSystem parce que « ça marche ». Le jeton inclut SYSTEM et BUILTIN\Administrators et détient des privilèges forts comme SeDebugPrivilege, donc une prise de contrôle perd presque tout sur cette machine. Le fait que sc.exe create soit LocalSystem par défaut est le terreau de cet accident.34
  • La différence entre LocalService et NetworkService est l’identité réseau. Les privilèges locaux sont minimaux pour les deux, mais du côté distant LocalService paraît anonyme et NetworkService paraît le compte ordinateur.5
  • **Un compte virtuel (NT SERVICE\) est le défaut moderne qui sépare l'identité par service sans imposer de gestion de mot de passe.** On peut indiquer « NT SERVICE\\nom-du-service » directement sur une ACL, et le compte de service par défaut de SQL Server est celui-là aussi.[^understand-service-accounts][^sql-service-accounts]
  • Quand LocalSystem, NetworkService ou un compte virtuel sort sur le réseau, il devient le compte ordinateur (DOMAIN\nom-ordinateur$). Accorder PC$ sur l’ACL d’un dossier partagé ou de SQL Server permet souvent de se passer d’un utilisateur de domaine.36
  • Une configuration qui utilise un utilisateur de domaine pour un service devient une dette à la fois sur l’exploitation des mots de passe et face au Kerberoasting. Le SCM ouvre une session avec le mot de passe stocké, donc l’expiration devient un échec de démarrage, et le « jamais d’expiration + note en clair » qui l’évite devient un cadeau pour l’attaquant.78
  • Un gMSA fait générer et faire tourner le mot de passe automatiquement par Active Directory. Les exigences sont un domaine et une clé racine KDS, et on configure le service en « DOMAIN\nom-de-compte$ » avec le champ mot de passe vide. Certaines applications ne le prennent pas en charge : il faut valider à l’avance.910
  • Changer le compte change les hypothèses du profil, de %TEMP% et de DPAPI. Les données protégées avec le DPAPI de l’ancien compte ne peuvent pas être déchiffrées par le nouveau.
  • Un inventaire de l’état actuel se confirme à partir des comptes d’ouverture de session de la liste des services et de l’ID d’événement 4624 (type d’ouverture de session 5).11

En une phrase, la conclusion de cet article est : faites d’une configuration qui « ne donne pas à un service un mot de passe humain » (comptes intégrés, compte virtuel, gMSA) le défaut, et traitez l’utilisateur de domaine comme un dernier recours.

2. Le tableau d’ensemble des choix — six comptes d’ouverture de session en une table

Un cran de rappel d’abord. Au démarrage du service, le Gestionnaire de contrôle des services (SCM) ouvre une session avec le compte configuré et, en cas de succès, crée un jeton d’accès et l’assigne au processus du service. Ensuite, chaque accès à une ressource — fichiers, canaux nommés, etc. — se décide en confrontant ce jeton à l’ACL.7 Choisir le compte d’ouverture de session est donc une conception qui décide du contenu du jeton passé au processus du service. Voici les six choix.

Ce que fait le SCM au démarrage d'un serviceLe SCM ouvre une session avec le compte configuré, en cas de succès crée un jeton d'accès et l'assigne au processus du service, et ensuite l'accès aux ressources se décide en confrontant le jeton à l'ACLOuiNonSCMOuvrir une session avec le compte configuréCréer un jeton d'accèsL'assigner au processus du serviceAccès à un fichier ou un canalL'ACL l'autorise-t-elle ?Accès réussiAccès refusé

Figure 2 : Chaque accès aux ressources du service se décide en confrontant le jeton créé par le SCM au démarrage à l’ACL.

Compte Privilèges locaux Identité réseau Gestion du mot de passe Usage typique
LocalSystem Quasi illimité (SYSTEM+Administrators) Compte ordinateur (PC$) Inutile (pas de mot de passe) Services exceptionnels qui tournent comme un avec l’OS
LocalService Minimal (classe Users) Anonyme Inutile Traitement local qui n’a pas besoin d’identité réseau
NetworkService Minimal (classe Users) Compte ordinateur (PC$) Inutile Traitement à faible privilège où une identité machine suffit
Compte virtuel NT SERVICE\ Minimal + octroi individuel sur l’ACL Compte ordinateur (PC$) Inutile (géré automatiquement) Le défaut d’un service métier qui tourne sur un seul serveur
Utilisateur de domaine Seulement ce que vous accordez Cet utilisateur lui-même Manuel (expiration, fuite et rotation laissées aux humains) Dernier recours pour une application qui ne prend pas en charge un gMSA
gMSA Seulement ce que vous accordez Ce gMSA lui-même AD génère et fait tourner automatiquement Quand un environnement de domaine a besoin d’une identité propre au service

LocalSystem, LocalService, NetworkService et un compte virtuel n’ont aucun concept de mot de passe. Les seuls qui ouvrent une session avec un mot de passe stocké dans le SCM (= expiration et fuite possibles) sont un utilisateur de domaine et un utilisateur local.73

Ci-dessous nous creusons cette table une ligne à la fois.

3. Ce qui ne va pas avec LocalSystem

3.1. Plus fort encore que « Exécuter en tant qu’administrateur »

LocalSystem (nom d’affichage Local System, NT AUTHORITY\SYSTEM) est un compte prédéfini que le SCM utilise, et il détient des privilèges étendus sur l’ordinateur local. Le jeton inclut les SID de NT AUTHORITY\SYSTEM et de BUILTIN\Administrators, et il peut accéder à la plupart des objets du système. De plus, SeDebugPrivilege, qui peut déboguer d’autres processus, et SeTcbPrivilege, qui agit comme une partie de l’OS, sont activés par défaut.3

Cette force est synonyme de l’ampleur des dégâts en cas de prise de contrôle. Si un service qui tourne sous LocalSystem a une vulnérabilité d’exécution de code arbitraire, un attaquant atteint, d’un souffle, la lecture et l’altération des fichiers de chaque utilisateur sur cette machine (SYSTEM a le Contrôle total par défaut sur NTFS5), la lecture de la mémoire d’autres processus via SeDebugPrivilege, et le vol d’informations d’identification puis le déplacement latéral (un point de départ pour Pass-the-Hash et assimilés). La chaîne du vol d’informations d’identification et du déplacement latéral est traitée dans « NTLM et Kerberos expliqués en images » et « Guide pratique de Windows LAPS ».

Les dégâts quand un service LocalSystem est prisSi un service qui tourne sous LocalSystem a une vulnérabilité d'exécution de code arbitraire, un attaquant atteint la lecture et l'altération des fichiers de chaque utilisateur, la lecture de la mémoire d'autres processus, et le vol d'informations d'identification puis le déplacement latéralUne vulnérabilité d'exécution de codeL'attaquant obtient les privilèges SYSTEMLecture et altération des fichiersLecture de la mémoire d'autres processusVol d'informations d'identificationDéplacement latéral vers une autre machine

Figure 3 : Une vulnérabilité dans un service LocalSystem laisse un attaquant atteindre, d’un souffle, la prise de la machine entière et un point de départ pour le déplacement latéral.

3.2. Pourquoi on le choisit encore

La raison est simple : c’est le défaut, et un accès refusé n’apparaît jamais. Le défaut quand on omet obj= sur sc.exe create est LocalSystem,4 et beaucoup d’anciens exemples et modèles d’installeur supposent encore LocalSystem. Parce que l’on peut rester libre d’erreurs de privilège pendant le développement, la structure qui produit en masse « ça a marché, donc on laisse » est là. La documentation de Microsoft elle-même indique que la plupart des services n’ont pas besoin d’un niveau de privilège aussi élevé, et que si on n’en a pas besoin on devrait envisager LocalService ou NetworkService.3

La structure qui fait encore choisir LocalSystemLe défaut de sc.exe create est LocalSystem, et les anciens exemples et modèles supposent aussi LocalSystem, donc aucun accès refusé n'apparaît pendant le développement et une configuration ça a marché donc on laisse est produite en masseLe défaut de sc.exe createCréé comme LocalSystemAnciens exemples et modèlesPas d'accès refusé pendant le développementÇa a marché, donc on laisseDes services à privilège excessif sont produits en masse

Figure 4 : Le défaut et une expérience de développement « sans accès refusé » produisent en masse des services figés sous LocalSystem.

3.3. La différence avec TrustedInstaller — LocalSystem n’est pas illimité non plus

Appeler LocalSystem « le compte le plus fort de Windows » n’est pas exact. La Protection des ressources Windows (WRP) depuis Windows Vista n’autorise les modifications des fichiers, dossiers et clés de registre importants du système qu’à TrustedInstaller (le service Programme d’installation des modules Windows), et même SYSTEM ou un administrateur reçoit un accès refusé sur une réécriture.12 Le « Vous avez besoin d’une autorisation de TrustedInstaller » d’Explorer est ce mécanisme. À l’inverse, LocalSystem peut atteindre presque tout hors de la zone protégée par WRP, et il n’y a d’ordinaire aucune raison de donner cela à un service métier.

La relation entre la zone protégée par WRP et TrustedInstallerLes modifications des fichiers système et clés de registre importants que WRP protège ne sont autorisées qu'à TrustedInstaller, et même SYSTEM ou un administrateur reçoit un accès refuséPeut modifierAccès refuséPresque tout est autoriséTrustedInstallerFichiers système protégés par WRPSYSTEM et administrateursHors de la zone protégée par WRP

Figure 5 : LocalSystem n’est pas illimité non plus ; les modifications de la zone protégée par WRP ne sont autorisées qu’à TrustedInstaller.

3.4. Cas où LocalSystem est raisonnable

Ce qui est exceptionnellement raisonnable, c’est un service dont les privilèges requis dépassent dès le départ la classe administrateur — travailler étroitement avec un pilote de périphérique, opérer le fondement de sécurité de l’OS, gérer d’autres services ou sessions, etc. Des logiciels comme un agent de sauvegarde ou un EDR s’appliquent. Même alors, il vaut la peine de confirmer qu’il existe un chemin de code qui utilise vraiment ce privilège, et d’envisager si le travail qui a besoin du privilège peut être séparé (pour savoir le dire, voir « Quand Windows exige-t-il réellement des privilèges administrateur »).

4. LocalService et NetworkService — comptes intégrés au moindre privilège

LocalService (NT AUTHORITY\LOCAL SERVICE, SID : S-1-5-19) et NetworkService (NT AUTHORITY\NETWORK SERVICE, SID : S-1-5-20) sont des comptes intégrés préparés pour les services à faible privilège. Tous deux ne détiennent que des privilèges minimaux en local, et ne peuvent guère plus qu’un membre du groupe Users.51

La différence entre les deux tient à un point : qui ils sont du point de vue de l’autre côté du réseau.5

  • LocalService : se connecte au distant avec des informations d’identification anonymes. Il ne peut pas accéder à une ressource qui exige une authentification.
  • NetworkService : présente les informations d’identification de l’ordinateur au distant (dans un environnement de domaine, DOMAIN\nom-ordinateur$).

La coupure est LocalService si « il ne sort pas sur le réseau, ou s’il le fait il n’a pas besoin d’identité », et NetworkService si « vous voulez accéder à une ressource du domaine avec l’identité de la machine ».

La différence entre LocalService et NetworkServiceLes privilèges locaux sont minimaux pour les deux, mais du côté distant LocalService se connecte avec des informations d'identification anonymes et NetworkService présente celles de l'ordinateurLocalServiceSe connecte avec des informations anonymesUne ressource qui exige une authentification est impossibleNetworkServicePrésente les informations de l'ordinateurDans un domaine il apparaît comme PC$

Figure 6 : Les privilèges locaux sont le même minimum, mais l’identité visible de l’autre côté du réseau se coupe entre anonyme et compte ordinateur.

Ces deux-là ont toutefois une faiblesse d’un point de vue moderne. Le même compte est partagé par beaucoup de services. Si cinq services tournent sous LocalService, tant que l’ACL est par compte, les cinq peuvent accéder aux ressources les uns des autres. SQL Server ne prend pas en charge le compte Local Service pour la même raison : c’est un compte partagé et on ne peut pas le séparer des autres services.1

Un compte partagé ne peut pas être séparéSi plusieurs services partagent le même LocalService, tant que l'ACL est par compte ils peuvent accéder aux ressources les uns des autresService ALe même LocalServiceService BService CPeuvent accéder aux ressources les uns des autresParce que l'ACL est par compte

Figure 7 : Les services qui partagent le même compte ne peuvent pas être séparés des ressources les uns des autres par une ACL.

Résoudre ce « rester à faible privilège, mais séparer par service » est le sujet suivant, le compte virtuel.

5. Comptes virtuels (NT SERVICE\) — le défaut moderne

5.1. On peut avoir une identité par service sans mot de passe

Un compte virtuel est un « compte local administré » disponible à partir de Windows Server 2008 R2 / Windows 7. Il a trois caractéristiques.6

  • Le compte est géré automatiquement ; ni création ni définition de mot de passe n’est nécessaire
  • Le nom est NT SERVICE\<nom-du-service>, et il devient une identité unique à chaque service
  • Dans un environnement de domaine, il peut accéder au réseau avec les informations d’identification du compte ordinateur (DOMAIN\nom-ordinateur$)

Autrement dit, il conserve le mérite « pas de gestion de mot de passe » de LocalService/NetworkService et retire le défaut « on ne peut pas séparer parce que le compte est partagé ». C’est aussi pourquoi l’installation de SQL Server utilise par défaut un compte virtuel tel que NT SERVICE\MSSQLSERVER.1

Ce qu'un compte virtuel rend compatibleUn compte virtuel conserve le mérite absence de gestion de mot de passe de LocalService et NetworkService, retire le défaut on ne peut pas séparer parce que partagé, et a une identité unique à chaque serviceConserverRetirerMérite (pas de gestion de mot de passe)Compte virtuelDéfaut (on ne peut pas séparer car partagé)Une identité unique à chaque serviceNi création ni mot de passe n'est nécessaire

Figure 8 : Un compte virtuel conserve les mérites des comptes intégrés et ne retire que le défaut on ne peut pas séparer parce que partagé.

5.2. On peut écrire « NT SERVICE\nom-du-service » directement sur une ACL

La commodité pratique est que on peut ajouter seulement ce service à une ACL par nom. « Seul ce service peut écrire dans ce dossier de données » se réalise sans créer de groupe ni gérer de mot de passe.

# Change the service's logon account to a virtual account
# The value of obj= is "NT SERVICE\service-name". Do not specify a password
sc.exe config MyAppService obj= "NT SERVICE\MyAppService"

# Confirm the configuration (check SERVICE_START_NAME)
sc.exe qc MyAppService

# Grant modify rights on the data folder to this service only
icacls "C:\ProgramData\MyApp" /grant "NT SERVICE\MyAppService:(OI)(CI)M"

Dans l’interface graphique, dans services.msc ouvrez les propriétés du service → l’onglet « Connexion » → saisissez NT SERVICE\nom-du-service dans « Ce compte », et laissez les champs mot de passe vides (pour un compte virtuel ou un MSA, ne pas spécifier de mot de passe est la spécification du SCM). Après le changement, un redémarrage du service l’applique.

5.3. La contrainte — hors de la machine ce n’est pas « ce service »

L’identité d’un compte virtuel est locale à la machine et n’est pas reconnue depuis le domaine. Sur le réseau elle s’effondre vers le compte ordinateur comme décrit plus loin, donc le distant ne peut pas dire « de quel service il s’agit », et on ne peut pas non plus partager la même identité sur plusieurs serveurs.10

L'identité d'un compte virtuel s'effondre hors de la machineUn compte virtuel unique par service à l'intérieur de la machine s'effondre aussi vers le compte ordinateur sur le réseau, et le distant ne peut pas dire de quel service il s'agitCompte virtuel ACompte ordinateur PC$Compte virtuel BL'identité visible du côté distantOn ne peut pas dire de quel service il s'agit

Figure 9 : Même avec une identité unique à l’intérieur de la machine, de l’autre côté du réseau chaque service ressemble au même PC$.

Le moment où cette contrainte — besoin d’une identité propre au service de l’autre côté du réseau, besoin de la même identité sur plusieurs serveurs — devient un problème est celui où un gMSA (chapitre 8) est appelé.

6. Identité en sortant sur le réseau — la pratique du compte ordinateur (PC$)

6.1. « Un service ne peut pas accéder à un dossier partagé » est un malentendu

Sur une machine jointe au domaine, quand un service qui tourne sous LocalSystem, NetworkService ou un compte virtuel accède à une ressource distante, il s’authentifie comme le compte ordinateur (DOMAIN\nom-ordinateur$).36 Beaucoup des consultations d’ouverture « il n’arrivait pas à accéder à un dossier partagé, donc nous en avons fait un utilisateur de domaine » se résolvent en fait ainsi. L’ACL de destination n’autorisait simplement pas PC$.

Accès distant en tant que compte ordinateurUn service LocalSystem, NetworkService ou compte virtuel sur une machine jointe au domaine s'authentifie auprès du distant comme le compte ordinateur, et si l'ACL de destination autorise PC$ il peut accéderOuiNonService (LocalSystem, un compte virtuel, etc.)S'authentifier comme PC$L'ACL de destination autorise-t-elle PC$ ?L'accès à un dossier partagé ou une BD réussitAccès refusé

Figure 10 : Dans un environnement de domaine, accorder PC$ sur l’ACL de destination suffit à établir l’accès distant sans utilisateur de domaine.

L’octroi côté serveur de fichiers est le même qu’une opération d’ACL ordinaire ; indiquez nom-ordinateur$ comme nom de compte (dans la boîte de dialogue de sélection d’objet de l’interface, incluez « Ordinateurs » dans les types d’objets).

# On the file-server side: grant a service on APPSV01 modify rights on the shared folder
# You need to grant both share permissions and NTFS permissions
Grant-SmbShareAccess -Name "AppData" -AccountName "CORP\APPSV01$" -AccessRight Change -Force
icacls "D:\Shares\AppData" /grant "CORP\APPSV01$:(OI)(CI)M"

SQL Server est le même : créez le compte ordinateur comme une connexion et la chaîne de connexion passe avec Integrated Security=true et sans mot de passe.

-- On the DB-server side: permit Windows integrated authentication from a service on APPSV01
CREATE LOGIN [CORP\APPSV01$] FROM WINDOWS;

6.2. Connaître les limites de l’approche PC$

Cette approche a deux limites.

  1. La granularité est par machine. LocalSystem, NetworkService et chaque service à compte virtuel qui tourne sur la même machine ressemblent tous au même PC$ depuis le distant. On ne peut pas « n’autoriser que ce service » sur la destination, et on ne peut pas non plus auditer quel service a utilisé ce compte.2
  2. Elle ne peut pas être utilisée dans un environnement de groupe de travail. Un compte ordinateur est un objet Active Directory, donc une machine non jointe au domaine n’en a pas. Il faut une conception qui traite explicitement les informations d’identification du compte de destination.

Quand on veut dépasser la limite 1, la réponse 2026 n’est pas l’utilisateur de domaine du chapitre suivant… mais de sauter ce problème et de passer à un gMSA.

Deux limites de l'approche PC$L'authentification comme PC$ a une granularité de niveau machine donc ni autorisation ni audit par service n'est possible, et dans un groupe de travail le compte ordinateur lui-même n'existe pas donc on ne peut pas l'utiliserL'approche PC$Limite 1 : par machineLimite 2 : pas de groupe de travailNi autorisation ni audit par serviceUtiliser des informations explicitesAu-delà : un gMSA

Figure 11 : Quand on veut dépasser les deux limites de granularité machine et de prérequis de domaine, on saute l’utilisateur de domaine et on passe à un gMSA.

7. Le problème d’utiliser un utilisateur de domaine pour un service

7.1. Le problème structurel du mot de passe

Si vous assignez un utilisateur de domaine (ou un utilisateur local) à un service, le SCM stocke ce mot de passe et l’utilise pour ouvrir une session à chaque démarrage. Le SCM ne gère pas l’expiration, donc quand le mot de passe expire l’ouverture de session échoue et le service ne démarre pas.7

De là commence la spirale négative que l’on voit souvent sur le terrain.

  1. Un accident d’arrêt du service à cause de l’expiration se produit
  2. En prévention de récidive, « mot de passe n’expire jamais » est défini
  3. Une procédure de changement n’est jamais établie, et le même mot de passe est écrit en clair dans les runbooks, scripts et Planificateur de tâches de plusieurs serveurs
  4. Même quand quelqu’un part, le mot de passe ne change pas (si on le change, on ne sait pas ce qui s’arrêtera)
La spirale négative d'exploiter avec un utilisateur de domaineLe mot de passe expire et le service s'arrête, jamais d'expiration est défini en prévention de récidive, un mot de passe en clair se répand dans les runbooks et scripts, et même quand quelqu'un part on ne peut pas le changer1. L'expiration arrête le service2. Jamais d'expiration est défini en prévention3. Un mot de passe en clair se répandRunbooks, scripts, tâches4. Même quand quelqu'un part, on ne peut pas le changer

Figure 12 : En partant d’un accident d’expiration, jamais d’expiration et la diffusion d’un mot de passe en clair se figent.

Microsoft souligne aussi qu’une configuration qui utilise un compte de domaine pour un service coûte un effort opérationnel considérable dans la gestion manuelle du mot de passe et du SPN, et que la maintenance peut mener à un arrêt de service.1

7.2. Kerberoasting — un compte de service est visé

Une autre attaque spécifique à un compte de service utilisateur de domaine est le Kerberoasting. Un service qui reçoit une authentification Kerberos inscrit un SPN (nom de principal de service) sur le compte d’ouverture de session. Tout utilisateur authentifié du domaine peut demander un ticket de service à un compte qui a un SPN inscrit, donc un attaquant obtient le ticket et tente un brute-force hors ligne du mot de passe. Un mot de passe de 10 à 16 caractères décidé par un humain ne résistera pas à cette attaque.

Le flux du KerberoastingUn ticket de service vers un compte de service qui a un SPN inscrit peut être demandé par tout utilisateur authentifié, donc un attaquant obtient le ticket et tente un brute-force hors ligne du mot de passeUn utilisateur authentifié du domaineDemander un ticket pour le SPNObtenir un ticket de serviceBrute-force hors ligne10 à 16 caractères environ seront cassés

Figure 13 : Tout utilisateur authentifié peut demander un ticket, et un mot de passe d’une longueur décidée par un humain ne résistera pas à un brute-force hors ligne.

La réponse efficace est de rendre le mot de passe d’une force qu’un humain ne peut ni deviner ni casser. Microsoft liste aussi le forçage d’un mot de passe long, et l’utilisation d’un gMSA dont le mot de passe devient une longue valeur aléatoire générée par machine.8 Le même document mentionne aussi le blindage Kerberos (FAST), mais FAST protège les données de pré-authentification et la résistance à l’usurpation de KDC ; il n’empêche pas un utilisateur authentifié de demander un ticket de service à un SPN, donc ce n’est pas un substitut à la force du mot de passe d’un compte de service. La relation entre SPN et Kerberos, et les conditions sous lesquelles l’authentification retombe sur NTLM, sont diagrammées dans « NTLM et Kerberos expliqués en images ».

7.3. Si vous utilisez quand même un utilisateur de domaine

Si vous n’avez pas le choix que d’utiliser un utilisateur de domaine, pour des raisons telles que l’application ne prenant pas en charge un gMSA, traitez ce qui suit comme l’atténuation minimale.

  • Faites du mot de passe 25 caractères ou plus générés aléatoirement, et ne l’écrivez nulle part ailleurs que dans un outil de gestion de mots de passe (runbooks, scripts, Excel partagé)
  • Faites-en un compte dédié au service et scindez-le par service (ne le partagez pas avec un compte humain2)
  • Refusez l’ouverture de session interactive et le Bureau à distance, et n’autorisez que « Ouvrir une session en tant que service »
  • Minimisez les groupes auxquels il appartient (l’ajouter à Domain Admins est hors de question)
  • Établissez une procédure de rotation périodique et mettez les endroits qu’un changement affectera dans un registre

Faire tout cela est moins sûr et moins facile que de migrer vers un gMSA — c’est le chapitre suivant.

8. gMSA — laisser la gestion du mot de passe à Active Directory

8.1. Le mécanisme et l’effet

Un gMSA (compte de service administré de groupe) est un compte de domaine qui laisse la gestion du mot de passe au contrôleur de domaine. Le mot de passe est calculé par le contrôleur de domaine à partir de la clé racine KDS (Key Distribution Service), et seuls les hôtes autorisés l’obtiennent.13

Comment un gMSA gère le mot de passeLe contrôleur de domaine calcule le mot de passe à partir de la clé racine KDS, seuls les hôtes autorisés l'obtiennent et l'utilisent pour faire tourner le service, et le mot de passe est renouvelé automatiquement tous les 30 jours par défautClé racine KDSLe DC calcule le mot de passeUn hôte autorisé l'obtientUtilisé pour faire tourner le serviceRotation automatique tous les 30 jours par défaut

Figure 14 : Le contrôleur de domaine prend en charge la génération, la distribution et la mise à jour du mot de passe, et les humains peuvent opérer sans connaître le mot de passe.

Les effets sont clairs.9

  • Un mot de passe de 240 octets généré aléatoirement : brute-force et attaques par dictionnaire deviennent irréalistes, et la résistance au Kerberoasting monte substantiellement
  • Rotation automatique tous les 30 jours par défaut : un humain n’a pas besoin de planifier un changement, et le service n’a pas besoin d’être arrêté
  • La même identité peut être partagée sur plusieurs serveurs : une ferme de serveurs sous équilibrage de charge peut s’authentifier mutuellement comme le même principal
  • Gestion des SPN plus simple : l’inscription et la gestion des SPN peuvent aussi être déléguées et simplifiées

Les humains peuvent opérer sans connaître le mot de passe — si on le prend comme le mécanisme qui fait pour un compte de service ce que Windows LAPS fait pour un mot de passe d’administrateur local, le placement est plus facile à saisir.

8.2. Exigences

Un gMSA a des prérequis.10

  • Un environnement de domaine Active Directory (impossible dans un groupe de travail)
  • Niveaux fonctionnels de domaine et de forêt Windows Server 2012 ou supérieur
  • Une clé racine KDS a déjà été créée
  • Le nom du gMSA est unique dans la forêt, pas seulement dans le domaine
  • L’intervalle de changement de mot de passe ne peut être défini qu’à la création

Créer la clé racine KDS est une tâche unique, mais pendant jusqu’à 10 heures après la création on ne peut pas créer de gMSA, parce qu’on attend la réplication vers chaque contrôleur de domaine. C’est un dispositif de sécurité pour empêcher l’accident d’un échec de récupération du mot de passe avant que la réplication soit terminée.14

De la création de la clé racine KDS à la création d'un gMSAAprès la création de la clé racine KDS on attend la réplication vers chaque contrôleur de domaine, donc pendant jusqu'à 10 heures on ne peut pas créer de gMSA ; après la fin de la réplication on peut en créer unCréer la clé racine KDSJusqu'à 10 heures d'attente de réplicationUn dispositif de sécurité pour empêcher un accident d'échec de récupérationLa réplication vers chaque DC est terminéeOn peut créer un gMSA

Figure 15 : L’attente jusqu’à 10 heures après la création de la clé racine est un temps d’attente pour empêcher un échec de récupération tant que la réplication n’est pas finie.

# Run as a domain administrator, on a domain controller (or an administrative
# workstation with the AD PowerShell module)

# Confirm whether a KDS root key exists, and create one if not (once per forest)
Get-KdsRootKey
Add-KdsRootKey -EffectiveImmediately   # Actually usable after up to 10 hours

8.3. La procédure de la création à la configuration

La procédure est en quatre étapes : « ① créer un groupe autorisé à récupérer → ② créer le gMSA → ③ l’installer sur les serveurs → ④ le définir sur le service ».10

Les quatre étapes d'introduction d'un gMSAL'introduire en quatre étapes : créer un groupe autorisé à récupérer le mot de passe, créer le gMSA, l'installer sur chaque serveur, et le définir comme compte d'ouverture de session du service① Créer un groupe autorisé à récupérer② Créer le gMSAAjouter les PC$ des serveurs③ Installer sur chaque serveurValider la récupération avec la commande Test④ Le définir sur le service

Figure 16 : De la création du groupe à la définition du service, l’introduction d’un gMSA avance en quatre étapes.

# ① Create a security group permitted to retrieve the password,
#    and add the computer accounts of the servers that will run the service
New-ADGroup -Name "GG-SvcBatchHosts" -GroupScope Global
Add-ADGroupMember -Identity "GG-SvcBatchHosts" -Members "APPSV01$", "APPSV02$"
# Group membership is evaluated at computer logon, so
# restarting the target servers after adding is the reliable approach

# ② Create the gMSA
New-ADServiceAccount -Name "svc-batch" `
    -DNSHostName "svc-batch.corp.example.com" `
    -PrincipalsAllowedToRetrieveManagedPassword "GG-SvcBatchHosts"

# ③ On each server that will run the service, install the gMSA and validate
Install-ADServiceAccount -Identity "svc-batch"
Test-ADServiceAccount -Identity "svc-batch"   # True means retrieval is working

# ④ Set it as the service's logon account. Append $ to the name, and do not specify a password
sc.exe config MyBatchService obj= "CORP\svc-batch$"
Restart-Service MyBatchService

Lors de la définition depuis services.msc aussi, le nom de compte est du type CORP\svc-batch$ajoutez $ à la fin, et laissez les champs mot de passe vides. Un compte de la famille MSA ne peut pas être utilisé pour une ouverture de session interactive.1 Ensuite, accordez CORP\svc-batch$ sur l’ACL d’un dossier partagé ou de SQL Server à la place de PC$, et l’accès réseau avec une identité propre au service est complet, sans mot de passe.

8.4. Certaines applications ne le prennent pas en charge

En garde, tout logiciel ne tournera pas sous un gMSA. Les choses qui configurent l’identité d’ouverture de session par un mécanisme standard — un service Windows, un pool d’applications IIS, une tâche du Planificateur de tâches — sont largement prises en charge, mais il y a des contraintes telles que le clustering de basculement lui-même ne prenant pas en charge un gMSA, et une application dont l’intérieur exige un mot de passe ne peut pas l’utiliser.10 Microsoft indique aussi clairement qu’il faut confirmer le comportement en tant que gMSA dans un environnement de test avant la production.9

Distinguer si quelque chose prend en charge un gMSAUne application qui configure l'identité d'ouverture de session par un mécanisme standard prend largement en charge un gMSA, mais le clustering de basculement et une application dont l'intérieur exige un mot de passe ne peuvent pas l'utiliser, donc confirmez dans un environnement de test avant la productionMécanisme standardMot de passe exigéL'application cibleComment l'ouverture de session est-elle définie ?gMSA pris en chargeService, IIS, une tâchegMSA impossibleClustering de basculementTester avant la production

Figure 17 : Une application qui configure l’ouverture de session par un mécanisme standard est largement prise en charge, mais certaines conceptions ne le sont pas, donc une validation avant la production est indispensable.

Il y a aussi des frères : le sMSA (compte de service administré autonome) pour un seul serveur, et le dMSA (compte de service administré délégué, introduit dans Windows Server 2025, qui se lie à l’identité de l’appareil pour contrer le vol d’informations d’identification). Pour une construction nouvelle, prenez un gMSA comme base et considérez selon les exigences.6

9. Conception d’accompagnement — droits d’ouverture de session, profil, DPAPI et audit

Quatre autres choses qui changent avec le compte, à retenir.

9.1. Le droit « Ouvrir une session en tant que service » (SeServiceLogonRight)

Pour démarrer en tant que service, le compte a besoin du droit utilisateur « Ouvrir une session en tant que service ». LocalSystem, LocalService et NetworkService l’ont intégré, mais tout autre compte (un utilisateur de domaine, un gMSA, etc.) a besoin d’une assignation explicite.15

Si vous le définissez depuis l’onglet « Connexion » de l’interface services.msc, le composant logiciel enfichable accorde ce droit automatiquement. En revanche, CreateService / ChangeServiceConfig (les API que sc.exe config appelle) ne vérifient pas que le compte spécifié a ce droit. La cause typique d’un service configuré par un script qui s’arrête au démarrage avec « le service n’a pas pu démarrer en raison d’un échec d’ouverture de session » est celle-ci. Ne vous fiez pas à un effet de bord d’un outil ; incluez dans la procédure de déploiement, explicitement, l’ajout à « Ouvrir une session en tant que service » dans la Stratégie de sécurité locale (secpol.msc), ou une configuration via GPO/Intune (dans un environnement qui configure ce droit avec une stratégie de groupe, un octroi local est écrasé quand la stratégie s’applique, donc cela aussi demande de l’attention). Inversement, le geste standard pour un compte dédié au service est de définir « Refuser l’ouverture de session locale » en même temps.

La différence selon le chemin de configuration du droit Ouvrir une session en tant que serviceL'interface services.msc accorde le droit automatiquement, mais l'API que sc.exe config appelle ne vérifie pas le droit, donc un compte sans le droit arrête le service avec un échec d'ouverture de session au démarrageOuiNonDéfinir dans services.mscLe droit est accordé automatiquementLe service peut démarrerDéfinir avec sc.exe configLe droit n'est pas vérifiéA-t-il le droit ?Le service peut démarrerS'arrête avec un échec d'ouverture de sessionAccorder explicitement avec secpol.msc ou une GPO

Figure 18 : L’interface accorde le droit automatiquement, mais une configuration par script ne le vérifie pas, donc il faut inclure un octroi explicite dans la procédure.

9.2. Le profil, %TEMP% et HKEY_CURRENT_USER changent

Le SCM charge le profil utilisateur de ce compte au démarrage du service.7 Donc les vrais %TEMP%, %APPDATA% et HKEY_CURRENT_USER sont une chose différente par compte d’ouverture de session, et quand on change de compte, les paramètres et caches enregistrés dans le profil de l’ancien compte ont l’air d’« avoir disparu ».

La réponse de conception est simple : mettez les données du service non pas sous le profil mais sur un chemin explicite tel que C:\ProgramData\<nom-d-application>, et accordez cette ACL au compte d’ouverture de session. Ainsi un changement de compte n’entraîne pas une migration de données.

Dépendance au profil et réponse de placement des donnéesLe vrai profil est une chose différente par compte d'ouverture de session, donc changer de compte fait paraître les données de l'ancien profil comme disparues, mais les placer sur un chemin explicite et accorder l'ACL rend la migration inutileRéponseChanger le compte d'ouverture de sessionUn profil différent est chargéLes anciennes données ont l'air d'avoir disparuLes placer sous ProgramDataAccorder l'ACL au compte d'ouverture de sessionPas de migration même quand le compte change

Figure 19 : Évitez le profil et mettez les données sur un chemin explicite, et un changement de compte n’entraîne plus de migration de données.

9.3. Les données protégées avec DPAPI sont liées au compte

Plus facile encore à manquer est DPAPI. Les données chiffrées avec DPAPI de portée utilisateur (CryptProtectData ou ProtectedData de .NET) ne peuvent, en principe, être déchiffrées que par le même compte qui les a protégées. Au moment où vous changez le compte, une chaîne de connexion ou une clé d’API stockée ne peut plus être lue — c’est DPAPI qui fait correctement son travail, mais si ce n’est pas dans la procédure de migration cela devient un incident.

La relation entre les données protégées par DPAPI et un changement de compteLes données protégées avec DPAPI de portée utilisateur ne peuvent être déchiffrées que par le même compte qui les a protégées, donc après avoir changé le compte d'ouverture de session il faut ressaisir les secretsLe même ancien compteLe nouveau compteProtéger par DPAPI avec l'ancien compteUne chaîne de connexion protégée et assimilésQuel compte déchiffre ?Peut déchiffrerNe peut pas déchiffrerRessaisir les secrets

Figure 20 : Les données protégées par DPAPI sont liées au compte qui les a protégées, et après un changement de compte il faut ressaisir.

La réponse est d’inclure dans le plan de migration la procédure « ressaisir les secrets après le changement de compte » (pour la conception de l’endroit où les stocker, voir « Stocker les secrets des applications Windows »). Aussi, une configuration qui peut se terminer avec l’authentification intégrée Windows en tant que gMSA ou PC$ peut éliminer le stockage du secret lui-même. L’ordre correct est de considérer « peut-on s’en passer » avant « où le stocke-t-on ».

Et si le service veut traiter « avec les privilèges de l’utilisateur appelant », on utilise l’emprunt d’identité plutôt que de rendre le compte plus fort. Pour cela, voir « Bien gérer les jetons d’emprunt d’identité Windows ».

9.4. Audit — regarder 4624 type d’ouverture de session 5

Un démarrage de service est enregistré dans le journal des événements de sécurité comme ID d’événement 4624 (Un compte a ouvert une session) avec le type d’ouverture de session 5 (Service : le SCM a démarré un service). Le champ « Virtual Account » de l’événement indique si l’ouverture de session était par un MSA / compte virtuel, donc on peut aussi l’utiliser pour surveiller l’usage des comptes administrés.11

Le flux d'audit d'un démarrage de serviceLe SCM qui démarre un service est enregistré comme ID d'événement 4624 type d'ouverture de session 5, et le champ Virtual Account peut identifier si l'ouverture de session était par un compte administréLe SCM démarre un serviceEnregistrer l'ID d'événement 4624Type d'ouverture de session 5 (Service)Champ Virtual AccountSurveillance des comptes administrés

Figure 21 : Un démarrage de service est enregistré comme un 4624 de type d’ouverture de session 5, et on peut même suivre l’usage des comptes administrés.

Pour un inventaire de l’état actuel, agréger les comptes d’ouverture de session de la liste des services est la méthode rapide.

# Aggregate which services are running as which account
Get-CimInstance Win32_Service |
    Group-Object StartName |
    Sort-Object Count -Descending |
    Select-Object Count, Name

# Inventory non-standard services running as LocalSystem (tell in-house / third-party by the path)
Get-CimInstance Win32_Service |
    Where-Object { $_.StartName -eq 'LocalSystem' -and $_.PathName -notlike '*\Windows\*' } |
    Select-Object Name, DisplayName, PathName

Si cette sortie aligne « un service métier qui tourne sous LocalSystem » et « un service qui tourne sous un utilisateur de domaine », le flux de décision du chapitre suivant est appelé.

10. Flux de décision — décider avec quatre questions

Voici le contenu jusqu’ici, comme procédure de sélection. Répondez à quatre questions dans l’ordre.

Le flux de décision pour le compte d'ouverture de sessionDécider le compte d'ouverture de session en répondant dans l'ordre aux quatre questions de l'accès réseau, de l'adhésion au domaine, de la suffisance d'une identité de niveau machine, et de la prise en charge d'un gMSANonOuiNonOuiOuiNonOuiNonAuth Windows vers un pair ?Compte virtuelLocalSystem si besoinJoint au domaine ?Protéger les infos stockéesNiveau machine suffisant ?Compte virtuel + PC$L'appli prend en charge un gMSA ?gMSAUtilisateur + atténuations

Figure 22 : Répondez aux quatre questions dans l’ordre et lequel des six choix vous devez utiliser est décidé.

Question 1 : Ce service accède-t-il à une autre machine sur le réseau (un dossier partagé, une BD, une API, etc.) avec l’authentification Windows ?

Sinon, un compte virtuel est le défaut. Seulement si un privilège local spécial est nécessaire, confirmez ce besoin puis envisagez LocalSystem.

Question 2 : (S’il accède) La machine est-elle jointe au domaine ?

Dans un groupe de travail, ni PC$ ni un gMSA ne peuvent être utilisés. Utilisez une conception qui traite explicitement les informations d’identification du compte de destination (protégez le stockage avec DPAPI ou assimilé), ou envisagez de joindre le domaine.

Question 3 : (Dans un domaine) Une identité de niveau machine (PC$) suffit-elle ?

Si oui, un compte virtuel (ou NetworkService) + accorder PC$ sur l’ACL de destination est complet. Si vous avez besoin d’une identité propre au service, ou d’une identité commune sur plusieurs serveurs, passez à la question 4.

Question 4 : L’application prend-elle en charge un gMSA ?

Si oui (les choses qui configurent l’ouverture de session par un mécanisme standard — SCM, un pool d’applications IIS, le Planificateur de tâches — le font généralement), un gMSA. N’oubliez pas une vérification de comportement dans un environnement de validation. Si c’est non pris en charge quoi qu’il arrive, utilisez un utilisateur de domaine dédié après avoir appliqué chaque atténuation de la section 7.3.

En table c’est comme suit.

Situation Recommandation Notes
Local seulement, privilèges ordinaires Compte virtuel Accorder l’ACL à NT SERVICE\<nom>
Local seulement, un privilège au-delà d’administrateur est requis LocalSystem Valider d’abord le besoin du privilège
Traitement local qui n’a pas besoin d’identité réseau LocalService Acceptable pour garder un service existant tel quel
Accéder à une ressource du domaine avec l’identité de la machine Compte virtuel (ou NetworkService) Accorder PC$ sur l’ACL de destination
Accéder à une ressource du domaine avec une identité propre au service gMSA Clé racine KDS + confirmer la prise en charge
La même identité sur plusieurs serveurs (équilibrage de charge, etc.) gMSA Impossible avec un compte virtuel
Une application qui ne prend pas en charge un gMSA + une identité spécifique est nécessaire Un utilisateur de domaine dédié Les atténuations de la section 7.3 sont requises
Un groupe de travail + un accès distant est nécessaire Protéger et stocker des informations d’identification explicites Envisager aussi de revoir la conception

11. Résumé

  • Le compte d’ouverture de session d’un service est une décision de conception qui décide à la fois des privilèges locaux, de l’identité réseau et de la gestion du mot de passe. Ne le laissez pas au défaut (LocalSystem).
  • LocalSystem détient un jeton SYSTEM+Administrators et des privilèges forts, et les dégâts en cas de prise de contrôle sont maximisés. La plupart des services métier n’ont pas besoin de ce privilège.
  • LocalService et NetworkService sont tous deux à faible privilège ; la différence est l’identité réseau (anonyme, ou le compte ordinateur). Parce que le compte est partagé par plusieurs services, toutefois, on ne peut pas les séparer.
  • Un compte virtuel (NT SERVICE\) est le défaut moderne qui peut séparer par service tout en n'ayant pas besoin de gestion de mot de passe. On peut l'indiquer directement sur une ACL, et la configuration n'est que de changer le nom du compte d'ouverture de session.
  • LocalSystem, NetworkService et un compte virtuel sortent sur le réseau comme DOMAIN\PC$ dans un environnement de domaine. Accorder PC$ sur l’ACL d’un dossier partagé ou de SQL Server permet souvent de se passer d’un utilisateur de domaine.
  • Utiliser un utilisateur de domaine pour un service a les problèmes structurels d’un arrêt par expiration, de la diffusion d’un mot de passe en clair, et du Kerberoasting. Si vous en utilisez un, un compte dédié + un long mot de passe aléatoire + des restrictions d’ouverture de session sont requis.
  • Un gMSA est un mécanisme dans lequel AD génère et fait tourner le mot de passe automatiquement ; les exigences sont un domaine, un niveau fonctionnel 2012 ou supérieur, et une clé racine KDS. Configurez le service en « DOMAIN\nom$ » avec le champ mot de passe vide.
  • Quand vous changez le compte, incluez le droit « Ouvrir une session en tant que service », le déplacement du profil et de %TEMP%, et la resaisie des données protégées par DPAPI dans la procédure de migration. L’audit se confirme avec l’ID d’événement 4624 type d’ouverture de session 5.

La prochaine fois que vous installez un service, arrêtez-vous un instant sur l’écran des paramètres d’ouverture de session et reposez cette question. En tant que qui, et jusqu’où, ce service devrait-il pouvoir accéder ? La réponse devrait être une ligne de la table de décision de cet article.

Articles connexes

Domaines de conseil associés

KomuraSoft LLC prend en charge la conception du compte d’ouverture de session et le durcissement au moindre privilège pour les services Windows et les applications résidentes, la migration vers un compte virtuel ou un gMSA de services existants construits sur l’hypothèse de LocalSystem, et l’investigation des pannes causées par un accès refusé, DPAPI et le profil après un changement de compte. Commencer au stade « on nous a signalés à un audit, mais nous ne savons pas par où commencer » convient tout à fait.

Références

  1. Microsoft Learn, Configure Windows service accounts and permissions. Que le compte de service par défaut de SQL Server est un compte virtuel (NT SERVICE\MSSQLSERVER et assimilés), que lors de la spécification d’un compte virtuel ou d’un MSA on laisse le champ mot de passe vide, qu’un MSA est un nom avec un $ final et ne peut pas être utilisé pour une ouverture de session interactive, que Local Service est un compte partagé donc on ne peut pas le séparer et qu’il n’est pas pris en charge par SQL Server, que l’utilisation d’un compte de domaine coûte de l’effort dans la gestion manuelle du mot de passe et du SPN et que la maintenance peut mener à un arrêt de service, et qu’il faut toujours faire tourner un service comme un compte au moindre privilège.  2 3 4 5 6

  2. Microsoft Learn, Securing on-premises service accounts. La priorité d’abord un gMSA pour un service local, puis un sMSA si on ne peut pas l’utiliser, puis un compte ordinateur, et enfin un compte utilisateur ; que quand on utilise un compte ordinateur on ne peut pas dire quel service utilise ce compte et on ne peut pas auditer un changement ; et les rôles d’un compte de service (identifier, authentifier et démarrer le service).  2 3

  3. Microsoft Learn, LocalSystem Account. Que LocalSystem détient des privilèges étendus sur l’ordinateur local et que le jeton inclut les SID de NT AUTHORITY\SYSTEM et BUILTIN\Administrators, qu’il n’a pas de mot de passe, qu’il présente les informations d’identification de l’ordinateur à un serveur distant, une liste de privilèges incluant SE_DEBUG_NAME et SE_TCB_NAME, et que la plupart des services n’ont pas besoin de ce niveau de privilège et devraient envisager LocalService/NetworkService.  2 3 4 5 6

  4. Microsoft Learn, sc.exe config. Que l’on spécifie le compte d’ouverture de session du service avec le paramètre obj=, que le défaut est LocalSystem, et le paramètre password= quand on utilise un compte utilisateur autre que LocalSystem.  2

  5. Microsoft Learn, Local accounts. Que SYSTEM (S-1-5-18) a le Contrôle total par défaut sur un volume NTFS, que NETWORK SERVICE (S-1-5-20) présente les informations d’identification de l’ordinateur à un serveur distant, et que LOCAL SERVICE (S-1-5-19) détient des privilèges minimaux en local et présente des informations d’identification anonymes au réseau.  2 3 4

  6. Microsoft Learn, Service accounts. Qu’un compte virtuel est un compte local géré automatiquement qui n’a pas besoin de gestion de mot de passe, que le nom est de la forme NT SERVICE<SERVICENAME>, que dans un environnement de domaine il accède au réseau avec les informations d’identification du compte ordinateur (\$), et les critères de choix parmi sMSA, gMSA, dMSA et un compte virtuel.  2 3 4

  7. Microsoft Learn, Service User Accounts. Qu’un service tourne dans le contexte de sécurité d’un compte utilisateur, que le SCM ouvre une session sur le compte au démarrage et associe un jeton d’accès au processus du service, que le SCM charge le profil utilisateur, et que le SCM ne gère pas l’expiration du mot de passe donc l’expiration fait échouer l’ouverture de session et le service ne démarre pas.  2 3 4 5

  8. Microsoft Learn, Protect SMB traffic from interception. Recommandations incluant un gMSA comme protection de compte de service (un long mot de passe aléatoire généré par machine rendant le craquage par brute-force ou dictionnaire irréaliste), le forçage d’un mot de passe long, et une mention du blindage Kerberos (FAST).  2

  9. Microsoft Learn, Secure group managed service accounts. Qu’un mot de passe gMSA est une génération aléatoire de 240 octets difficile à brute-forcer ou à attaquer par dictionnaire, que l’OS Windows change le mot de passe tous les 30 jours donc un administrateur n’a pas besoin de planifier un changement ni d’arrêter le service, le déploiement vers une ferme de serveurs et une gestion des SPN plus simple, que si un service ne prend pas en charge un gMSA on utilise un sMSA et si cela n’est pas non plus possible un compte utilisateur standard avec une gestion forte des mots de passe, et qu’il faut confirmer le comportement en tant que gMSA dans un environnement de test avant la production.  2 3

  10. Microsoft Learn, Manage group Managed Service Accounts. Les prérequis du gMSA (niveau fonctionnel de domaine/forêt 2012 ou supérieur, création d’une clé racine KDS), que le nom du gMSA doit être unique dans la forêt, que l’intervalle de changement de mot de passe ne peut être défini qu’à la création, la spécification du groupe autorisé à récupérer le mot de passe avec -PrincipalsAllowedToRetrieveManagedPassword de New-ADServiceAccount, la procédure Install-ADServiceAccount/Test-ADServiceAccount, que l’identité d’un compte virtuel est locale à la machine et n’est pas reconnue depuis le domaine, qu’un cluster de basculement ne prend pas en charge un gMSA, et que le SCM, un pool d’applications IIS et le Planificateur de tâches prennent en charge la configuration de l’ouverture de session comme un gMSA.  2 3 4 5

  11. Microsoft Learn, 4624(S): An account was successfully logged on. Que l’événement 4624 est enregistré sur l’ordinateur accédé quand une session d’ouverture de session est créée, que le type d’ouverture de session 5 signifie un service (le SCM démarrant un service), et que le champ « Virtual Account » peut identifier une ouverture de session par un MSA ou un compte virtuel et peut être utilisé pour surveiller les comptes de service administrés.  2

  12. Microsoft Learn, About Windows Resource Protection. Que la Protection des ressources Windows (WRP) empêche le remplacement de fichiers, dossiers et clés de registre importants du système, que l’accès total à une ressource protégée par WRP est restreint à TrustedInstaller et qu’une modification ne peut être faite que par le mécanisme de remplacement pris en charge via le service Programme d’installation des modules Windows, et qu’une application qui essaie de modifier une ressource protégée reçoit un accès refusé. 

  13. Microsoft Learn, Group Managed Service Accounts overview. Qu’un gMSA est un compte de domaine qui laisse la gestion du mot de passe à Windows, que le contrôleur de domaine calcule le mot de passe à partir du secret partagé du Key Distribution Service (kdssvc.dll) et qu’un hôte membre interroge le contrôleur de domaine pour les mots de passe actuel et précédent, et qu’il permet une authentification mutuelle comme le même principal dans une ferme de serveurs. 

  14. Microsoft Learn, Create a Key Distribution Service (KDS) root key. Qu’une clé racine est nécessaire pour que le contrôleur de domaine commence à générer des mots de passe gMSA, la procédure de création avec Add-KdsRootKey -EffectiveImmediately, que pendant jusqu’à 10 heures après la création on ne peut pas créer de gMSA parce qu’on attend la convergence de la réplication AD, et qu’une réplication incomplète peut faire échouer la récupération du mot de passe. 

  15. Microsoft Learn, Policy CSP - UserRights: LogOnAsService. Que le droit « Ouvrir une session en tant que service » laisse un principal de sécurité ouvrir une session en tant que service, que Local System, Local Service et Network Service ont ce droit intégré, qu’un service exécuté comme tout autre compte a besoin de ce droit assigné, et le chemin de configuration par stratégie de groupe. 

Articles récents partageant les mêmes étiquettes, pour approfondir des sujets proches.

Ces pages replacent le sujet dans un contexte plus large de services et de décisions.

Cet article est directement lié aux services suivants.

Questions fréquentes

Questions souvent posées lors d’une consultation sur le sujet de cet article.

Faut-il changer tout de suite un service que l'on fait tourner « pour l'instant » sous LocalSystem ?
Un changement immédiat n'est pas toujours la bonne réponse. Vérifiez d'abord si ce service a vraiment besoin de privilèges locaux de classe LocalSystem (des privilèges forts au-delà d'un administrateur). S'il s'agit seulement de lecture/écriture de fichiers et de communication réseau, le premier candidat est un compte virtuel (NT SERVICE\nom-du-service). Lors de la migration, confirmez l'octroi d'accès aux dossiers et clés de registre nécessaires, le traitement des données qui dépendent du profil ou de DPAPI, et la présence du droit « Ouvrir une session en tant que service ». Validez le démarrage et les fonctions principales dans un environnement de test, puis basculez la production.
Faut-il choisir un compte virtuel ou NetworkService ?
Pour un choix nouveau, nous recommandons un compte virtuel. Sur le réseau, les deux apparaissent comme le compte ordinateur (DOMAIN\nom-ordinateur$), et les deux ont de petits privilèges locaux. NetworkService est toutefois partagé par plusieurs services, donc on ne peut pas séparer avec une ACL qui « n'autorise que ce service ». Un compte virtuel a une identité propre à chaque service, et on peut indiquer NT SERVICE\nom-du-service directement sur une ACL. Les produits Microsoft récents comme SQL Server utilisent aussi un compte virtuel par défaut.
Peut-on utiliser un gMSA dans un environnement de groupe de travail (sans domaine) ?
Non. Un gMSA est un mécanisme dans lequel un contrôleur de domaine Active Directory génère et gère le mot de passe ; un domaine et la création d'une clé racine KDS sont des prérequis. Dans un groupe de travail, la base est de terminer le traitement local avec un compte virtuel ou LocalService/NetworkService. S'il faut accéder à une autre machine, il faut un autre conception, par exemple utiliser explicitement les informations d'identification d'un compte préparé sur la destination. L'accès réseau en tant que compte ordinateur (PC$) n'est aussi valable que dans un environnement de domaine.
Après avoir changé le compte d'ouverture de session du service, je ne peux plus lire les paramètres et informations d'identification enregistrés. Pourquoi ?
Parce que chaque compte d'ouverture de session est lié à son propre profil utilisateur, %TEMP%, HKEY_CURRENT_USER et clé DPAPI. En particulier, les données protégées avec DPAPI de portée utilisateur (CryptProtectData et assimilés) ne peuvent, en principe, être déchiffrées que par le même compte qui les a protégées. Les fichiers enregistrés sous le profil (AppData et assimilés) sont aussi un autre chemin depuis le nouveau compte. Avant de changer de compte, planifiez la procédure de recréation des données protégées par DPAPI (saisie à nouveau des clés d'API, etc.) et la migration des fichiers sous le profil.
Si je veux seulement que le service accède à un dossier partagé, faut-il un utilisateur de domaine ?
Dans beaucoup de cas, non. Dans un environnement de domaine, un service qui tourne sous LocalSystem, NetworkService ou un compte virtuel s'authentifie auprès du distant comme le compte ordinateur (DOMAIN\nom-ordinateur$). Ajoutez ce PC$ aux autorisations de partage et aux autorisations NTFS du dossier partagé et il peut lire et écrire. Si vous voulez un contrôle d'accès avec une identité propre au service, ou la même identité sur plusieurs serveurs, envisagez un gMSA plutôt qu'un utilisateur de domaine.

Profil de l’auteur

Page de présentation de l’auteur de l’article.

Go Komura

Représentant de KomuraSoft LLC

Spécialisé dans le développement de logiciels Windows, le conseil technique et l’analyse de pannes, notamment pour les systèmes existants et les incidents difficiles à reproduire.

Retour au blog