Rotation du mot de passe de AZUREADSSOACC
Suivre les recommandations pour Microsoft Entra Seamless SSO
Windows Server 2003 a introduit de nombreuses fonctionnalités dans Active Directory, dont la plupart sont encore utilisées aujourd’hui. Cependant, au moins une nouveauté de Windows Server 2003 est tombée aux oubliettes : les objets dynamiques.
Les objets dynamiques désignent une classe d’objet qui a une durée de vie limitée et qui seront supprimés automatiquement par Active Directory. Ceux-ci peuvent prendre la forme de n’importe quelle autre classe d’objet : utilisateur, groupe, unité d’organisation…
Cet article est inspiré du post de Narayanan Subramanian sur Medium : fun with dynamic Objects in AD: Part 1, à la différence que je n’utilise pas les outils admod
et adfind
mais plutôt les bonnes vieilles commandes PowerShell Active Directory.
Les objets dynamiques :
entryTTL
msDS-Entry-Time-To-Die
Pour le dernier point : il s’agit d’une mesure de sécurité visant à éviter de détruire le domaine. En effet : il n’est pas possible de supprimer un objet qui a été ajouté dans le schéma. Ajouter un objet dynamique qui finira par disparaître dans le schéma ou la configuration mènera donc à une corruption pure et simple de votre Active Directory.
Dans un commentaire sur l’article de Narayanan Subramanian, Joe Richards annonce cependant qu’il y aurait plusieurs manière de créer un objet dynamique dans l’une de ces deux partitions, laissant ainsi une bombe à retardement dans le domaine.
Commentaire original :
[…] We had a sit down with [Microsoft] about how to blow up an entire AD forest in seconds, or worse, leave a time bomb.
I still remember a few guys from the [Product Group] sitting in a room in Redmond and Dean said this is what is possible and they said no it isn’t and then boom he showed a whole schema disappear on a test forest right in front of them. […]
Then we pointed out multiple different ways it could be done via different angles with the dynamic object functionality […]
Je n’ai personnellement jamais vu des objets dynamiques utilisés en environnement de production. Probablement par méconnaissance puisque cette technologie est assez peu connue, mais surtout par manque d’intérêt selon moi :
L’absence de commande PowerShell native et/ou d’option dans l’interface graphique rend également cette technologie inaccessible pour beaucoup d’administrateurs.
Il existe deux paramètres sur les objets dynamiques dans la configuration du domaine Active Directory : DynamicObjectMinTTL
et DynamicObjectDefaultTTL
.
Les deux valeurs se trouvent dans l’attribut msDS-Other-Settings
, présent sur l’objet contoso.com/Configuration/Services/Windows NT/Directory Service.
Paramètre | Valeur par défaut | Description |
---|---|---|
DynamicObjectMinTTL | 900 (15 minutes) |
Si un objet dynamique est créé avec une durée de vie inférieure à celle indiquée dans ce paramètre, la durée de vie sera automatiquement ajustée à cette valeur |
DynamicObjectDefaultTTL | 86400 (24 heures) |
Si aucun TTL n’est spécifié pour un objet dynamique, c’est cette valeur qui sera utilisée par défaut |
Pour consulter la configuration de votre domaine en PowerShell :
$domainDn = (Get-ADDomain).DistinguishedName
$path = "CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,$domainDn"
Get-ADObject $path -Properties 'msDS-Other-Settings'
Il n’existe pas de commande PowerShell issue du module Active Directory pour créer un objet dynamique, l’utilisation de .NET est obligatoire. Voici un exemple de code pour créer un objet dynamique de type “utilisateur” :
$dynamicObject = ([ADSI]("LDAP://OU=Users,DC=contoso,DC=com")).Create('user', 'CN=dynamicUser,CN=Users,DC=contoso,DC=com')
$dynamicObject.PutEx(2, 'objectClass', @('dynamicObject', 'user'))
$dynamicObject.Put('entryTTL', 900)
$dynamicObject.SetInfo()
Ou plus simplement avec une fonction personnalisée : New-ADDynamicObject
New-ADDynamicObject -Name 'dynamicUser' -ObjectType user
Ces commandes vont créer un objet dynamique de type utilisateur nommé “dynamicUser” sous contoso.com/Users avec une durée de vie de 900 secondes (15 minutes).
Avec la commande suivante, nous allons modifier directement la valeur de l’attribut entryTTL
qui contient la durée de vie restante pour l’objet. Cette action permet donc de prolonger (ou réduire) la durée de vie d’un objet.
Get-ADObject -Filter {SamAccountName -eq 'dynamicUser'} | Set-ADObject -Replace @{entryTTL = 900}
Rappel : vous ne pouvez pas réduire la durée de vie restante d’un compte en dessous de la valeur
DynamicObjectMinTTL
de votre domaine.
Pour lister les objets dynamiques, il n’est pas possible d’utiliser l’attribut entryTTL
. La valeur de celui-ci n’étant pas fixe (elle est calculée en temps réel), il est impossible de l’utiliser comme filtre. Vous tomberez sur l’erreur suivante : Get-ADObject : A Filter was passed that uses constructed attributes.
A la place, on peut utiliser msDS-Entry-Time-To-Die
qui contient la date programmée de fin de vie de l’objet (valeur fixe) :
Get-ADObject -LDAPFilter '(msDS-Entry-Time-To-Die=*)' -Properties entryTTL, msDS-Entry-Time-To-Die
Résultat :
DistinguishedName : CN=dynamicUser,CN=Users,DC=contoso,DC=com
entryTTL : 682
msDS-Entry-Time-To-Die : 29/04/2025 15:40:07
Name : dynamicUser
ObjectClass : user
ObjectGUID : 3cc5722f-c427-4918-a787-0bec0b3adf58
DistinguishedName : OU=dynamicOU,DC=contoso,DC=com
entryTTL : 817
msDS-Entry-Time-To-Die : 29/04/2025 15:42:22
Name : dynamicOU
ObjectClass : organizationalUnit
ObjectGUID : f5c7be5f-b006-4b94-b937-3c079a9cdf25
A la création, il est impossible d’ajouter un objet statique “staticUser” au sein d’un objet dynamique “dynamicOU”.
Si vous essayez de faire cela, vous obtiendrez le message d’erreur générique suivant : “Windows cannot create the object staticUser because: The server is unwilling to process the request”.
New-ADUser staticUser -Path 'OU=dynamicOU,DC=contoso,DC=com'
Cependant, ce mécanisme de protection ne fonctionne qu’à la création de l’objet enfant. Vous pouvez donc créer votre utilisateur “staticUser” ailleurs dans le domaine pour le déplacer ensuite vers l’objet parent “dynamicOU” :
New-ADUser staticUser
Move-ADObject (Get-ADUser staticUser) -TargetPath 'OU=dynamicOU,DC=contoso,DC=com'
Dans le cas où un objet dynamique serait le parent d’au moins un objet statique, l’objet dynamique ne sera pas supprimé automatiquement (même lorsque entryTTL
tombe à zéro) :
DistinguishedName : OU=dynamicOU,DC=contoso,DC=com
entryTTL : 0
msDS-Entry-Time-To-Die : 29/04/2025 15:42:22
Name : dynamicOU
ObjectClass : organizationalUnit
ObjectGUID : f5c7be5f-b006-4b94-b937-3c079a9cdf25
S’il n’y a plus aucun objet statique enfant d’un objet dynamique avec un entryTTL = 0
, alors l’objet dynamique sera automatiquement supprimé.
Lorsque la valeur de l’attribut entryTTL
arrive à zéro, l’objet disparaît du domaine sans laisser de trace (ne tombe pas dans la corbeille Active Directory).
Get-ADObject -Filter {SamAccountName -eq 'dynamicUser'} -IncludeDeletedObjects
En pratique, la suppression de l’objet ne se fait pas immédiatement après que l’attribut
entryTTL
a atteint 0.
Il faut parfois attendre quelques minutes ou forcer une réplication pour que l’objet disparaisse.
Suivre les recommandations pour Microsoft Entra Seamless SSO
Commentaires