FGPP Active Directory : empêcher l’expiration des mots de passe sans compromettre la sécurité

Limiter l’obsolescence des secrets tout en respectant les exigences de conformité : voilà le défi auquel répond la désactivation contrôlée de l’expiration des mots de passe grâce aux Fine‑Grained Password Policies (FGPP) d’Active Directory. Cet article détaille la méthode complète, de la conception à la vérification.

Sommaire

Vue d’ensemble : pourquoi une FGPP « sans expiration » ?

La stratégie de domaine par défaut impose souvent une rotation périodique (30, 90 ou 180 jours). Pourtant, la plupart des recommandations modernes (NIST 800‑63, ANSSI, BSI) déconseillent l’expiration automatique lorsqu’aucune preuve de compromission n’existe : l’utilisateur finit par composer des mots de passe plus faibles ou les consigne à proximité de son poste. Une FGPP vous permet de cibler uniquement les comptes nécessitant un mot de passe fort mais pérenne – comptes de service, comptes d’administration de tiers, équipements d’infrastructure, etc.

Rappel : fonctionnement interne d’une FGPP

  • Stockée dans le conteneur CN=Password Settings Container,CN=System,DC=....
  • Attributs principaux : msDS-MaximumPasswordAge, msDS-MinimumPasswordLength, msDS-PasswordComplexityEnabled, etc.
  • Priorité (msDS-PasswordSettingsPrecedence) : plus la valeur est faible, plus la FGPP est prioritaire.
  • Application via l’attribut multivalué msDS-PSOAppliesTo (liens directs vers utilisateurs ou groupes).
  • Évaluation à l’authentification : l’algorithme compare d’abord les FGPP, puis la politique de domaine.

La question clé : « Maximum password age » à 0 ou propriété non renseignée ?

AD DS fait une distinction cruciale : un champ non défini n’équivaut pas à zéro. Si msDS-MaximumPasswordAge est absent, le contrôleur se rabat sur Default Domain Policy. Fixer la valeur à 0 (TimeSpan 0 jour 0:00:00) supprime réellement la limite.

Comparatif rapide des approches

ObjectifAction recommandéeDétails pratiques
Désactiver réellement l’expirationDéfinir Maximum password age à 0Par PowerShell :
Set-ADFineGrainedPasswordPolicy -Identity "SansExpiration" -MaxPasswordAge 0.00:00:00
Éviter la valeur par défaut du domaineNe pas laisser la case décochéeSans valeur, la FGPP hérite de la Default Domain Policy (souvent 90 j).
Appliquer la FGPP aux bons comptesRenseigner msDS‑PSOAppliesToPointer vers un groupe de sécurité dédié (ex. SRV_NoExpiry).
Forcer la prise en compteAttendre la réplication AD + gpupdate /forceContrôler ensuite avec Get-ADUser et Get-ADFineGrainedPasswordPolicy.
Alternative par compteCocher « Password never expires »Modifie userAccountControl (flag 0x10000) ; valable pour quelques comptes isolés seulement.
Conserver d’autres contrôlesLaisser l’historique activéEnforce password history empêche le recyclage immédiat.

Mise en œuvre étape par étape

1. Créer la FGPP via la console MMC

  1. Ouvrez Active Directory Administrative Center (ADAC).
  2. Naviguez : System ➜ Password Settings Container.
  3. Cliquez sur New ➜ Password Settings.
  4. Saisissez :
    • Name : SansExpiration
    • Precedence : 10 (ou plus bas si d’autres FGPP existent)
    • Minimum password length : 16
    • Password complexity : Enabled
    • Enforce maximum password age : cochez puis laissez l’interface indiquer « (unchanged) » — vous corrigerez ensuite par script.
  5. Enregistrez.

2. Corriger MaxPasswordAge à 0

L’interface ne permet pas 0 jour. Utilisez l’une des deux méthodes :

Méthode PowerShell

# Exige RSAT ou l'exécution sur un contrôleur de domaine
Set-ADFineGrainedPasswordPolicy -Identity "SansExpiration" -MaxPasswordAge 0.00:00:00

Méthode ADSI Edit

  1. Lancez adsiedit.msc.
  2. Connectez‑vous à Default naming context.
  3. Parcourez jusqu’à CN=SansExpiration,CN=Password Settings Container,CN=System,DC=….
  4. Éditez l’attribut msDS-MaximumPasswordAge : entrez 0.

3. Lier la FGPP

  1. Créez un groupe de sécurité global : SRV_NoExpiry.
  2. Ajoutez‑y les comptes concernés (comptes de service, administrateurs externes, etc.).
  3. Dans ADAC, ouvrez la FGPP ; volet droit : Add ➜ Applies to ➜ sélectionnez le groupe.

4. Vérifier la réplication et l’application

# Contrôle de la FGPP elle‑même
Get-ADFineGrainedPasswordPolicy -Identity "SansExpiration" |
 Select-Object Name,MaxPasswordAge,MinPasswordLength,PasswordHistoryCount

# Contrôle côté utilisateur

Get-ADUser SomeServiceAccount -Properties msDS-ResultantPSO |
Select-Object SamAccountName,msDS-ResultantPSO 

La colonne msDS-ResultantPSO doit afficher la FGPP SansExpiration. Si elle est vide, c’est la politique de domaine qui reste appliquée.

Bonnes pratiques de sécurité compensatoire

La non‑expiration n’est pas synonyme de laissez‑faire. Renforcez la posture avec :

  • MFA : obligatoire pour les comptes interactifs.
  • PAM / PAW : postes administratifs dédiés, coffre de mots de passe.
  • Filtre de mots de passe bannis : Azure AD Password Protection (mode local) ou plugin tiers.
  • Audits réguliers : contrôlez la longueur et le hachage (LSA Protection, NTLMv2 only).
  • Surveillance SIEM : déclenchez des alertes sur les authentifications anormales.

Troubleshooting

Symptôme : le mot de passe expire malgré la FGPP

Cause probableDiagnosticCorrectif
FGPP non prioritaireGet-ADUser ... -Prop msDS-ResultantPSO renvoie une autre FGPPRéduisez la precedence à une valeur plus basse (p < autres).
Réplique non propagéerepadmin /replsummary signale des échecs.Dépannez la réplication, puis klist purge côté client.
Valeur MaxPasswordAge non définieGet-ADFineGrainedPasswordPolicy affiche « (none) »Renseignez la valeur à 0.00:00:00 comme indiqué.
Flag « Password never expires » désactivé sur un compte isoléAudit UAC (userAccountControl)Cochez temporairement le flag ou migrez le compte dans le groupe cible.

Audit et conformité : rapports à fournir

Pour prouver à un auditeur que votre décision est maîtrisée :

  1. Documentez la FGPP : capture d’écran ADAC + export CSV.
  2. Listez les comptes concernés :
    Get-ADGroupMember SRV_NoExpiry | Get-ADUser -Prop Enabled,LastLogonDate | Export-Csv FGPP_NoExpiry_Users.csv -NoTypeInformation
  3. Conservez la raison business : ticket ITSM ou dossier de risques.
  4. Plan de révision annuelle : incluez la FGPP dans vos revues d’accès (ISO 27001 A.9, CIS 5.2).

FAQ express

Une FGPP « no expiry » viole‑t‑elle PCI‑DSS ? Non, si vous appliquez d’autres contrôles compensatoires et limitez la FGPP aux comptes non‑interactifs ; validez toutefois avec votre QSA. Puis‑je cibler des OU entières ? Pas directement : FGPP s’applique à des utilisateurs ou groupes. Placez votre OU dans un groupe dynamique (PowerShell ou Azure AD DS). Que se passe‑t‑il si je réactive l’expiration ? L’attribut pwdLastSet des comptes conserve la dernière date ; le cycle recommence immédiatement.

Résumé opérationnel

En fixant msDS-MaximumPasswordAge à 0 dans une FGPP à priorité élevée puis en la ciblant via un groupe de sécurité, vous obtenez un périmètre précis de comptes dont le mot de passe long et complexe n’expire jamais. Vous évitez ainsi les risques induits par un renouvellement arbitraire tout en gardant la main sur les contrôles annexes (MFA, audit, filtres).

Sommaire