Active Directory : Domain Admins se réinitialise chaque jour — diagnostic « Restricted Groups » et correctifs

Vos ajouts au groupe Domain Admins disparaissent « comme par magie » chaque jour ? Voici un guide complet pour diagnostiquer, corriger et prévenir ce comportement, typiquement causé par un paramétrage Restricted Groups dans une GPO.

Sommaire

Contexte et symptômes

Dans un environnement Active Directory (niveau fonctionnel 2016, contrôleurs de domaine Windows Server 2016 Datacenter et Windows Server 2022 Datacenter Azure Edition), des comptes ou groupes ajoutés manuellement au groupe Domain Admins disparaissent à intervalles réguliers. Le groupe revient à son état initial et, dans l’interface, une ligne déroutante peut apparaître : Domain Admins est membre de Domain Admins.

Cette réinitialisation se produit :

  • À chaque actualisation de la stratégie de groupe (Group Policy refresh) ;
  • Au redémarrage ;
  • Après un gpupdate ou gpupdate /force exécuté sur un contrôleur de domaine.

Cause racine

Un paramètre Restricted Groups dans la Default Domain Policy (ou dans une GPO liée au domaine / aux contrôleurs de domaine) force la composition du groupe Domain Admins. Exemple typique :

Computer Configuration
 └─ Policies
    └─ Windows Settings
       └─ Security Settings
          └─ Restricted Groups
             └─ Contoso\Domain Admins
                 • Members : Contoso\Domain Admins
                 • Member of : BUILTIN\Remote Desktop Users

Ce réglage est problématique à double titre :

  1. La section Members écrase la composition effective du groupe Domain Admins à chaque application de la GPO (toute entrée non listée est supprimée).
  2. Auto‑référence : « Domain Admins » listé comme membre de lui‑même est un cas d’erreur de modélisation. Il conduit, de fait, à une configuration où les ajouts manuels ne sont jamais conservés et à des affichages incohérents dans les outils.

Comprendre Restricted Groups : Members vs Member Of

Le nœud Restricted Groups offre deux comportements distincts :

  • Members : liste autoritaire. Le moteur de sécurité (secedit) remplace la composition du groupe ciblé par cette liste exacte.
  • Member Of : appartenance assurée. Le groupe ciblé est ajouté aux groupes spécifiés (par exemple, ajouter « Domain Admins » à « Administrators » ou « Remote Desktop Users »). Cela n’efface pas sa propre composition interne.

Dans votre cas, la présence de Members : Contoso\Domain Admins signifie : « le seul membre autorisé de Domain Admins est Domain Admins lui‑même ». Toute autre entrée est supprimée lors du prochain cycle GPO.

Pourquoi ce réglage impacte tout le domaine

Sur des contrôleurs de domaine, il n’existe pas de base de comptes locale : la « base locale » est Active Directory. Lorsqu’un Restricted Groups cible un groupe du domaine et s’applique à des DC, la liste Members modifie directement le groupe AD. Dès lors, la moindre actualisation GPO réimpose l’état déclaré par la GPO.

Rythme de ré‑application

  • Postes et serveurs membres : toutes les ~90 minutes (+ aléa jusqu’à 30 min), au redémarrage, et lors d’un gpupdate.
  • Contrôleurs de domaine : par défaut, toutes les ~5 minutes, au redémarrage, et lors d’un gpupdate.

Impact sécurité et opérationnel

  • Disponibilité : impossibilité de conserver des délégations temporaires (ex. dépannage urgent).
  • Traçabilité : succession d’événements 4728/4729 (ajouts/suppressions) générés par SYSTEM, source : contrôleur de domaine.
  • Conformité : configuration « Domain Admins → Remote Desktop Users » inutile et risquée ; les administrateurs disposent déjà, par défaut, du droit « Allow log on through Remote Desktop Services ».

Diagnostic rapide

Méthode graphique via GPMC

  1. Ouvrez Group Policy Management (GPMC).
  2. Dans le nœud du domaine, utilisez Search → critère : SettingsRestricted Groups → mot‑clé « Domain Admins ».
  3. Inspectez chaque GPO trouvée, onglet Settings, section Security Settings > Restricted Groups.

PowerShell – inventaire exhaustif

Générez un rapport XML de toutes les GPO puis recherchez « Restricted Groups » :

# 1) Exporter toutes les GPO en XML
Get-GPO -All | ForEach-Object {
  $p = Join-Path $env:TEMP ("{0}.xml" -f $_.Id)
  Get-GPOReport -Guid $_.Id -ReportType Xml -Path $p
}

# 2) Rechercher les occurrences « Restricted Groups » ciblant Domain Admins

Get-ChildItem $env:TEMP -Filter *.xml | ForEach-Object {
$xml = [xml](Get-Content -LiteralPath $*.FullName)
if ($xml.DocumentElement.GPO.Computer.ExtensionData.Extension.RG | Where-Object {
$*.Member.Name -match 'Domain Admins' -or
$*.Members.Member.Name -match 'Domain Admins' -or
$*.MemberOf.Member.Name -match 'Domain Admins'
}) {
$_.FullName
}
} 

Vérifier la résultante sur un DC

gpresult /SCOPE COMPUTER /H C:\temp\gp.html
# Ouvrir le rapport et vérifier la section Security Settings > Restricted Groups

Observer les journaux de sécurité

ÉvénementSignificationOù le voir
4728Ajout d’un membre à un groupe de sécurité global (ex. Domain Admins)Journaux Sécurité des DC
4729Suppression d’un membre d’un groupe de sécurité globalJournaux Sécurité des DC
4737Modification d’un groupe de sécurité globalJournaux Sécurité des DC

Solutions et démarches correctives

Voici la procédure recommandée pour corriger la situation et retrouver un fonctionnement prévisible.

ÉtapeActionDétails
1Supprimer ou modifier le nœud Restricted GroupsOuvrez la GPO fautive (évitez de toucher à la Default Domain Policy). Supprimez l’entrée « Contoso\Domain Admins » OU remplacez‑la par une GPO dédiée si vous avez un vrai besoin d’automatiser certaines appartenances (en privilégiant la section Member Of plutôt que Members).
2Forcer l’actualisationSur chaque contrôleur de domaine : gpupdate /force. Attendez un cycle complet (ou validez avec gpresult / la console GPMC).
3Surveiller les futures modificationsActivez l’audit Security Group Management (succès et échecs). Deux options :
• Stratégie classique : Computer Configuration → Windows Settings → Security Settings → Local Policies → Audit Policy → Audit Account Management (Succès & Échecs).
• Audit avancé : Advanced Audit Policy Configuration → Account Management → Audit Security Group Management (Succès & Échecs).
Rappel : l’audit avancé remplace la politique classique lorsqu’il est activé.
4Bonne pratique GPON’éditez pas la Default Domain Policy pour des durcissements applicatifs. Créez une GPO dédiée, correctement nommée, documentée, liée au bon OU et filtrée (sécurité/WMI) si nécessaire.
5Alternative plus souplePour ajouter des membres sans écraser la composition complète, utilisez Group Policy Preferences → Local Users and Groups avec l’action Add (éviter Replace si vous ne voulez pas forcer une liste figée).

Exemples concrets de correction

Cas A : vous n’avez pas besoin de piloter « Domain Admins » via GPO

  1. Supprimez l’entrée Contoso\Domain Admins dans Restricted Groups.
  2. Appliquez gpupdate /force sur tous les DC.
  3. Ré‑ajoutez les membres nécessaires via Active Directory Users and Computers ou PowerShell :
    Add-ADGroupMember -Identity "Domain Admins" -Members "CONTOSO\Alice","CONTOSO\Grp‑Admins‑T0"
  4. Confirmez : Get-ADGroupMember "Domain Admins" | Select-Object Name,SamAccountName

Cas B : vous devez imposer une appartenance « Member Of »

Vous souhaitez, par exemple, garantir que « Domain Admins » est membre de « Administrators » (ce qui est déjà vrai par défaut) ou d’un autre groupe local. Configurez uniquement la section Member Of, pas Members. Cela évite d’écraser la composition interne de « Domain Admins ».

Cas C : besoin d’« ajouts » non destructifs sur des machines

Utilisez Group Policy Preferences → Local Users and Groups avec l’action Add pour ajouter des comptes/groupes au groupe local Administrators ou Remote Desktop Users des postes/serveurs sans remanier des groupes AD sensibles.

Commandes utiles au quotidien

ObjectifCommande
Lister les membres actuels de Domain AdminsGet-ADGroupMember "Domain Admins" -Recursive | Select Name,SamAccountName,objectClass
Voir qui a changé la compositionFiltrer le journal Sécurité des DC sur 4728/4729/4737 (compte, DC, horodatage)
Exporter la résultante GPO d’un DCgpresult /SCOPE COMPUTER /H C:\temp\gp.html
Retrouver quelles GPO manipulent Restricted GroupsGPMC → Search → Settings contains Restricted Groups • ou script PowerShell (rapport XML)

Bonnes pratiques pour les groupes à privilèges

  • Éviter l’administration « par liste figée » sur Domain Admins. Préférer des groupes « rôles » (ex. Grp‑Admins‑AD‑T0) que l’on neste dans Domain Admins quand nécessaire.
  • Modèle de niveaux (Tier 0/1/2) : isoler les comptes et stations d’administration Tier 0. Restreindre la portée d’usage des comptes à privilèges.
  • JIT/JEA/PIM : privilégier l’élévation à durée limitée (PIM, approbation, expiration) plutôt que des appartenances permanentes.
  • Journalisation centralisée : expédier 4728/4729/4737 vers un SIEM avec corrélation et alertes en quasi‑temps réel.
  • Ne pas empiler des solutions concurrentes : si vous utilisez Restricted Groups, n’appliquez pas en parallèle un GPP Local Users and Groups en mode Replace sur les mêmes cibles.

Erreurs courantes à éviter

  • Éditer la Default Domain Policy pour autre chose que les paramètres « de domaine » (verrouillage des mots de passe, Kerberos…). Créez des GPO dédiées.
  • Déclarer Members : Domain Admins dans Restricted Groups : cela entraîne la suppression de tout membre non listé.
  • Ajouter Domain Admins dans Remote Desktop Users : redondant et élargit la surface d’attaque. Les administrateurs ont déjà le droit RDP via la stratégie de sécurité par défaut.
  • Oublier que l’audit avancé remplace l’audit classique : ne mélangez pas les deux.

Procédure de vérification après correction

  1. Contrôle des GPO : la GPO fautive ne doit plus contenir « Restricted Groups → Domain Admins » avec la section Members.
  2. Application : exécuter gpupdate /force sur tous les DC et attendre un cycle (5 à 10 min typiquement).
  3. Lecture du groupe : vérifier que les membres ajoutés persistent au-delà de plusieurs cycles GPO et d’un redémarrage de DC.
  4. Journal : confirmer l’absence d’événements 4729 indésirables générés par SYSTEM.

Checklist express

  • J’ai identifié quelle GPO impose la composition de « Domain Admins ».
  • J’ai supprimé/modifié le nœud Restricted Groups problématique.
  • J’ai forcé l’application et contrôlé via gpresult / GPMC.
  • J’ai ré‑ajouté les membres légitimes et validé leur persistance.
  • J’ai activé l’audit Security Group Management (succès & échecs) sur les DC.
  • J’ai documenté la GPO (naming, but, contact, périmètre) et appliqué le modèle Tier 0.

FAQ rapide

Q : Pourquoi « Domain Admins » apparaît‑il comme membre de lui‑même ?
R : C’est un symptôme d’un paramétrage Restricted Groups erroné (auto‑référence). La GPO tente d’imposer que le seul membre autorisé de « Domain Admins » soit… « Domain Admins ». Les ajouts manuels sont donc systématiquement supprimés.

Q : Je veux juste permettre à certains techniciens de se connecter en RDP sur des serveurs.
R : N’ajoutez pas « Domain Admins » à Remote Desktop Users. Créez un groupe dédié (ex. Grp‑Ops‑RDP‑Serveurs) et attribuez‑lui l’autorisation (« Allow log on through Remote Desktop Services » via GPO) ou ajoutez‑le au groupe local Remote Desktop Users par GPP (Add).

Q : Comment être alerté dès qu’un membre est ajouté/retiré ?
R : Activez l’audit 4728/4729 (succès & échecs), collectez‑les dans un SIEM et créez des alertes corrélées (ex. ajout de compte « user » dans « Domain Admins » en heures non ouvrées).

Q : Le phénomène revient malgré la suppression dans la GPO.
R : Cherchez d’autres sources en concurrence : une seconde GPO, un GPP en mode Replace, un script de conformité, un outil de gestion de configuration (SCCM/Intune/Ansible), une tâche planifiée sur DC.

Annexe : scripts prêts à l’emploi

Inventaire des GPO ciblant « Restricted Groups »

# Exporter et lister les GPO qui référencent « Restricted Groups »
$reports = Join-Path $env:TEMP "GPOReports"
New-Item -ItemType Directory -Path $reports -Force | Out-Null
Get-GPO -All | ForEach-Object {
  $file = Join-Path $reports ("{0}.xml" -f $_.DisplayName.Replace(' ','_'))
  Get-GPOReport -Guid $_.Id -ReportType Xml -Path $file
}

"--- GPO contenant 'Restricted Groups' ---"
Get-ChildItem $reports -Filter *.xml | ForEach-Object {
$x = [xml](Get-Content $*.FullName)
$rg = $x.DocumentElement.GPO.Computer.ExtensionData.Extension.RG
if ($rg) { "{0}" -f $*.BaseName }
}

"--- GPO qui touchent 'Domain Admins' ---"
Get-ChildItem $reports -Filter *.xml | ForEach-Object {
$x = [xml](Get-Content $*.FullName)
$rg = $x.DocumentElement.GPO.Computer.ExtensionData.Extension.RG
if ($rg) {
$hit = $false
foreach ($item in $rg) {
if ($item.Member.Name -match 'Domain Admins' -or
$item.Members.Member.Name -match 'Domain Admins' -or
$item.MemberOf.Member.Name -match 'Domain Admins') { $hit = $true }
}
if ($hit) { "{0}" -f $*.BaseName }
}
} 

Restauration contrôlée des membres légitimes

# Exemple : définir explicitement un socle minimal (sans utiliser Restricted Groups)
$g = "Domain Admins"
$legit = @("CONTOSO\Grp-Admins-T0","CONTOSO\Alice")
# Ajouts idempotents
foreach ($m in $legit) {
  if (-not (Get-ADGroupMember $g -Recursive | Where-Object {$_.SamAccountName -eq ($m.Split('\')[-1])})) {
    Add-ADGroupMember -Identity $g -Members $m
  }
}
# Contrôle
Get-ADGroupMember $g | Select Name,SamAccountName | Sort Name

Activation d’un audit robuste

# Activer l'audit avancé Account Management (à appliquer via GPO sur l'OU Domain Controllers)
# (à exécuter dans une session GPMC/AGPM ou par modèle de référence)
# Catégories : Audit Security Group Management - Success and Failure
# Vérifier ensuite via : auditpol /get /category:"Account Management"

Informations complémentaires utiles

  • Fréquence de ré‑application : ~90 min (+ aléa) sur postes/serveurs membres ; ~5 min sur DC ; à chaque redémarrage ou gpupdate.
  • Interaction audit classique vs avancé : l’Advanced Audit Policy remplace l’Audit Policy classique lorsque configurée.
  • Événements clés : 4728 (ajout), 4729 (suppression), 4737 (modification d’un groupe global).
  • Sécurité renforcée : adoptez le modèle Tier 0/1/2 pour limiter l’usage de Domain Admins et réduire l’impact d’une GPO mal configurée.

Conclusion

Le « reset » quotidien du groupe Domain Admins n’est pas un bug mais la conséquence d’un Restricted Groups mal employé dans une GPO (souvent la Default Domain Policy). Supprimez ou corrigez ce nœud, appliquez la GPO, rétablissez les membres légitimes et activez une journalisation adaptée. En privilégiant des GPO dédiées, des préférences non destructives et un modèle d’administration à niveaux, vous éviterez les régressions et retrouverez une gouvernance claire des privilèges.

Sommaire