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.
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
Objectif | Action recommandée | Détails pratiques |
---|---|---|
Désactiver réellement l’expiration | Définir Maximum password age à 0 | Par PowerShell :Set-ADFineGrainedPasswordPolicy -Identity "SansExpiration" -MaxPasswordAge 0.00:00:00 |
Éviter la valeur par défaut du domaine | Ne pas laisser la case décochée | Sans valeur, la FGPP hérite de la Default Domain Policy (souvent 90 j). |
Appliquer la FGPP aux bons comptes | Renseigner msDS‑PSOAppliesTo | Pointer vers un groupe de sécurité dédié (ex. SRV_NoExpiry). |
Forcer la prise en compte | Attendre la réplication AD + gpupdate /force | Contrôler ensuite avec Get-ADUser et Get-ADFineGrainedPasswordPolicy . |
Alternative par compte | Cocher « Password never expires » | Modifie userAccountControl (flag 0x10000) ; valable pour quelques comptes isolés seulement. |
Conserver d’autres contrôles | Laisser 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
- Ouvrez Active Directory Administrative Center (ADAC).
- Naviguez : System ➜ Password Settings Container.
- Cliquez sur New ➜ Password Settings.
- 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.
- Name :
- 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
- Lancez
adsiedit.msc
. - Connectez‑vous à Default naming context.
- Parcourez jusqu’à
CN=SansExpiration,CN=Password Settings Container,CN=System,DC=…
. - Éditez l’attribut
msDS-MaximumPasswordAge
: entrez0
.
3. Lier la FGPP
- Créez un groupe de sécurité global :
SRV_NoExpiry
. - Ajoutez‑y les comptes concernés (comptes de service, administrateurs externes, etc.).
- 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 probable | Diagnostic | Correctif |
---|---|---|
FGPP non prioritaire | Get-ADUser ... -Prop msDS-ResultantPSO renvoie une autre FGPP | Réduisez la precedence à une valeur plus basse (p < autres). |
Réplique non propagée | repadmin /replsummary signale des échecs. | Dépannez la réplication, puis klist purge côté client. |
Valeur MaxPasswordAge non définie | Get-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 :
- Documentez la FGPP : capture d’écran ADAC + export CSV.
- Listez les comptes concernés :
Get-ADGroupMember SRV_NoExpiry | Get-ADUser -Prop Enabled,LastLogonDate | Export-Csv FGPP_NoExpiry_Users.csv -NoTypeInformation
- Conservez la raison business : ticket ITSM ou dossier de risques.
- 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).