Active Directory : comment réinitialiser le mot de passe krbtgt ?
Sommaire
I. Présentation
Chaque domaine Active Directory contient un compte utilisateur nommé "krbtgt", désactivé par défaut et il ne doit pas être supprimé ! Le mot de passe de ce compte est utilisé pour générer les tickets Kerberos, vous voyez son importance.
Le mot de passe de ce compte se ne renouvelle pas automatiquement, ce qui représente un risque en matière de sécurité. Ce compte mémorise deux mots de passe : celui qui est actif, et l'ancien, cela permet de conserver la validité des tickets Kerberos déjà émis. Tout en sachant que par défaut, la durée maximale d'un ticket Kerberos est de 10 heures.
II. Procédure pour gérer le mot de passe du compte krbtgt
La modification du mot de passe du compte krbtgt doit s'opérer selon une méthode très précise, qu'il faut suivre à la lettre, sous peine de rencontrer des problèmes d'authentification. En effet, les tickets en cours deviendraient invalides.
Dans la pratique, nous devons réinitialiser le mot de passe du compte krbtgt une première fois. Ensuite, il faut s'assurer que le mot de passe est répliqué sur l'ensemble des contrôleurs de domaine. Il va falloir réinitialiser une seconde fois le mot de passe du compte (puisqu'il en mémorise 2) afin de mener l'opération jusqu'au bout.
Avant cela, il vaut mieux attendre au moins 10 heures après le premier changement de mot de passe pour être sur que tous les tickets en cours de validité intègre le nouveau mot de passe (le deuxième reste l'ancien). Ensuite, il faudra réinitialiser une seconde fois le mot de passe : le compte krbtgt aura alors deux nouveaux mots de passe.
Sur le site Technet, un script est disponible pour réaliser cette opération. Celui-ci contient une documentation que je vous recommande de lire avant de réaliser l'opération, et il respecte la bonne procédure. Il dispose de trois modes pour vous accompagner dans la démarche :
- Mode n°1 pour effectuer les contrôles et analyser l'environnement, indispensable avant de lancer l'opération
- Mode n°2 pour simuler l'opération sans réellement modifier le mot de passe
- Mode n°3 pour réinitialiser le mot de passe
La dernière version du script peut être récupérée sur GitHub, voici le lien : Script krbtgt
III. Utiliser le script
Ce script n'étant pas signé il faut, tout d'abord, modifier la politique d'exécution ou alors débloquer ce fichier ; au choix (adapter en fonction du nom du fichier).
Unblock-File .\New-CtmADKrbtgtKeys.ps1
Ensuite, exécutez le script et il faudra choisir un mode.
Lorsque l'on démarre le mode n°1, le script va vérifier différentes choses, notamment : la présence des modules PowerShell nécessaires, le nom du domaine, le niveau fonctionnel du domaine, la durée maximale d'un ticket Kerberos, si tous les tickets basés sur la clé n-1 (mot de passe) sont expirés ainsi que la connectivité avec les différents DC.
Note : si vous rencontrez une erreur sur le test RPC alors que votre serveur est bien joignable, je vous invite à lire la partie suivante de cet article.
Dans le dossier où se situe le script, un fichier de log sera créé à chaque fois, voici un exemple :
Lorsque tout est prêt, il est ne reste plus qu'à choisir le mode 3 pour réinitialiser une première fois le mot de passe. Il faudra saisir "y" est valider pour déclencher l'opération.
Si vous cherchez à relancer une deuxième modification maintenant, le script va vous avertir que vous n'avez pas attendu que les tickets Kerberos en cours soient arrivés à expiration, c'est plutôt bien pensé et cela permet de sécuriser l'opération 🙂
Le script s'occupe de générer un mot de passe complexe de 32 caractères, et il vérifie également la réplication avec les autres contrôleurs de domaine.
Voici la commande exécutée pour réinitialiser le mot de passe :
Set-ADAccountPassword -Identity (Get-ADUser krbtgt -Server $Server).DistinguishedName -Server $Server -Reset -NewPassword (ConvertTo-SecureString ((New-CtmADComplexPassword 32).ToString()) -AsPlainText -Force
IV. Cas particulier sur une version française de Windows Server
Si comme moi, vous avez testé le script sur une version française de Windows Server, vous avez dû faire face à un erreur liée au RPC. Ce qui donne lieu à un joli "RpcToDCsPassed : False" dans le fichier de log.
Pourtant, si l'on test manuellement la communication RPC vers son serveur dans une console, en exécutant la même commande que le script, ça semble fonctionner :
rpcping.exe -s SRV-ADDS-01.it-connect.local -u 9 -a connect
En fait, le problème se situe directement dans le code du script. A la ligne 62, on considère la connexion RPC opérationnelle si la commande rpcping.exe retourne le mot "completed" dans le résultat :
# Check output of RPCPING for success
If ($RpcPingResult -like "*Completed*")....
Sauf qu'en français, l'utilitaire rpcping.exe répond d'une autre façon donc forcément cela pose problème. Nous allons devoir modifier la ligne n°62 dans le script : remplacez le mot "Completed" par "appels effectu".
Il y a un autre problème similaire, cette fois-ci avec la commande repadmin.exe à la ligne 84.
# Check output of REPADMIN for success
If ($RepAdminResult -like "*Successfully replicated object*")
Sur cette ligne, remplacez la phrase "Successfully replicated object" par "correctement r‚pliqu". Enregistrez : le tour est joué 😉
Tous les combien de temps faut-il réinitialiser le mot de passe du compte krbtgt ? Je pense que tous les 6 mois, c'est une bonne chose.
top merci pour ce débugging
j’avais la même erreur et ca fonctionne maintenant.
Bonjour.
J’ai exécuter un script similaire pour modifier le mot de passe du krbtgt. Néanmoins je ne l’ai exécuter qu’une seule fois. Est-il possible que cela pose problème d’authentification des utilisateurs si le deuxième mot de passe reste l’ancien. Et si cela pose un problème de sécurité.
Bonjour,
Le fait de l’exécuter qu’une seule fois n’est pas gênant pour l’authentification. D’un point de vue sécurité et pour aller au bout du processus, il faut le faire une deuxième fois comme je l’explique dans l’article car le compte mémorise deux mots de passe (justement pour éviter les problèmes d’authentification). Néanmoins, il faut bien attendre entre les deux exécutions : je t’invite à le refaire une deuxième fois 🙂
Bonne journée
Florian
Bonjour,
Le script de réinitialisation du Krbtgt n’est plus accessible sur le site de microsoft. est-il possible que partager ce fichier via un autre support ?
Merci par avance de votre aide.
William
Re,
Je n’ai pas l’habitude de répondre à mes message, mais ici, je pensais que cela aiderai rapidement les personnes dans mon cas.
en fouinant du coté du github de Microsoft, voici le lien qui permet l’accès au script
https://github.com/microsoft/New-KrbtgtKeys.ps1/blob/master/New-KrbtgtKeys.ps1
Bonne journée.
Il y a même une version plus récente (v2.8) depuis que l’on trouve ici
https://github.com/zjorz/Public-AD-Scripts/blob/5666e5fcafd933c3288a47944cd6fb289dde54a1/Reset-KrbTgt-Password-For-RWDCs-And-RODCs.ps1
Merci William !
Bonjour, moi personnellement je bloque a la méthode 2.
Apres avoir répondu « y » a la questions si j’exécute ou pas j’ai le message d’erreur suivant :
« Single object replication failed to one or more writable domain controllers. All failures should be remediated before attempting Mode 3.
One or more items failed. Resolve failures and retry. »
Je suis bien en administrateur je ne comprend pas. Si quelqu’un peux m’aider.
Merci. Julian.
Bonjour Julian,
Déjà je t’invite a récupérer la version 2.8 du script de Jorge de Almeida Pinto depuis son Github, la version dans le lien ci dessus est en 2.5 (je n’ai pas le lien sous la main mais en cherchant un peu tu devrais trouver).
Il faudrait voir pourquoi l’étape deux échoue, as tu fais un dc diag ? as tu des erreurs de réplication entre tes DC ? les traces d’un vieux DC mal décommissionné dans ton DNS ou ton AD ? ? quel est le niveau fonctionnel de ta foret et ton AD ?
Bref il nous faudrait plus d’infos 😉
Hello,
J’ai mis à jour l’article pour mettre le nouveau lien vers le GitHub 🙂
A+
Florian
Bonjour Florian,
Je sais que ton commentaire date un peu, mais actuellement, en 2024, je rencontre également le même problème. On m’indique qu’il y a un souci de réplication entre les DC, alors que la commande repadmin ne remonte aucune erreur.
Il existe un problème de réplication, faudrait le resoudre avant de relancer
Pour le soucis de réplication, ça peut venir de la langue FR du serveur (comme pour la ligne 62), Il faut modifier la ligne 84 : « Successfully replicated object* » en « a ‚t‚ correctement r‚pliqu »
Ce qui donne :
If ($RepAdminResult -like « *a ‚t‚ correctement r‚pliqu* ») {Return (New-Object -TypeName PSObject -Property @{‘Success’=$true; ‘Message’= »$ObjectDN – Successfully replicated from $SourceDC to $TargetDC. »})}
Hi good night.
I have to do this change procedure for information security.
What kind of impact can there be on an unsuccessful first-time replication?
Thanks for the attention
Bonjour,
J’essaye de passer ce script mais j’obtiens des erreurs à l’exécution (voir ci- dessous).
J’ai beau chercher sur internet d’où cela pourrait venir je ne trouve rien.
Un grand merci si vous pouvez m’aider.
Au caractère C:\Users\administrateur.XXX\Desktop\KRBTGT\Reset-KrbTgt-Password-For-RWDCs-And-RODCs.ps1:220 : 21
+ Sign up
+ ~
Le caractère perluète n’est pas autorisé. L’opérateur & est réservé à une utilisation future. Placez un caractère
perluète entre guillemets doubles (« & ») pour que ce symbole soit considéré comme une chaîne.
Au caractère C:\Users\administrateur.XXX\Desktop\KRBTGT\Reset-KrbTgt-Password-For-RWDCs-And-RODCs.ps1:232 : 18
+
+ ~
L’opérateur « < » est réservé à une utilisation future.
Au caractère C:\Users\administrateur.XXX\Desktop\KRBTGT\Reset-KrbTgt-Password-For-RWDCs-And-RODCs.ps1:246 : 16
+
+ ~
L’opérateur « < » est réservé à une utilisation future.
perluète entre guillemets d
Au caractère C:\Users\admin
+
+ ~
Bonjour,
J’aurais tendance à dire que c’est à cause de la version de PowerShell de ton serveur. Tu sais de quelle version il s’agit ?
A+
Florian
Bonjour, merci pour la réponse !
J’ai cette version :
PS C:\Users\XXX> $PSVersionTable
Name Value
—- —–
PSVersion 5.1.1439
PSEdition Desktop
PSCompatibleVersions {1.0, 2.
BuildVersion 10.0.143
CLRVersion 4.0.3031
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Il s’agit d’un DC en Server 2016 Standard en version 1607 (Windows Update à jour).
Question conne mais Powershell se met à jour ? Si oui je savais pas !
Bonjour je rebondis sur cette question, j’ai exactement le meme souci et ne trouve pas de solutions
powershell 5.1.1763.2268
ws2019
avez vous reussi de votre coté ?
Bonjour,
merci pour les articles de ce site qui aident vraiment quand on est tout seul dans son coin.
Petites questions :
Quels sont les impacts quand on lance le script sur le domaine : des liaisons se perdent pendant la transition , partage de fichiers,etc??
Quels sont les risques si cela se passe mal ? on reste au mot de passe précédent ?
J ai un infra avec deux DC. serveurs de fichiers, ftp, qq centaines de pc.
Merci d avance.
Bonjour,
Très bon article, surtout que tu l’as bien personnalisé et expliqué.
Bonjour Florian,
Est-il possible et conseillé d’intégrer ce script dans une tâche planifiée tous les 6 mois afin de ne pas devoir se rappeler de le faire manuellement ?
Bonjour Florian,
le script a évolué et propose aujourd’hui 8 choix (6 de test, 1 de prod et 1 de nettoyage) :
Which mode of operation do you want to execute?
– 1 – Informational Mode (No Changes At All)
– 2 – Simulation Mode | Temporary Canary Object Created To Test Replication Convergence!
– 3 – Simulation Mode | Use KrbTgt TEST/BOGUS Accounts – No Password Reset/WhatIf Mode!
– 4 – Real Reset Mode | Use KrbTgt TEST/BOGUS Accounts – Password Will Be Reset Once!
– 5 – Simulation Mode | Use KrbTgt PROD/REAL Accounts – No Password Reset/WhatIf Mode!
– 6 – Real Reset Mode | Use KrbTgt PROD/REAL Accounts – Password Will Be Reset Once!
– 8 – Create TEST KrbTgt Accounts
– 9 – Cleanup TEST KrbTgt Accounts
– 0 – Exit Script
Il pourrait être intéressant de mettre à jour l’article compte tenu de ces éléments.
Merci beaucoup pour tes articles qui me sont très utiles.
@+
Yoann
1- Informational Mode (No Changes At All) : Ce mode est purement informatif et n’effectue aucune modification. Il est utilisé pour analyser l’environnement et rechercher d’éventuels problèmes.
2- Simulation Mode | Temporary Canary Object Created To Test Replication Convergence : Ce mode crée un objet canari temporaire pour tester la convergence de la réplication d’Active Directory. Cela permet de visualiser comment une modification réelle (comme la réinitialisation d’un mot de passe krbtgt) se propagerait dans l’infrastructure AD.
3- Simulation Mode | Use KrbTgt TEST/BOGUS Accounts – No Password Reset/WhatIf Mode : Ce mode utilise des comptes krbtgt de test fictifs pour simuler une réinitialisation de mot de passe sans effectuer de changement réel. C’est utile pour comprendre les implications d’une réinitialisation sans l’effectuer.
4 – Real Reset Mode | Use KrbTgt TEST/BOGUS Accounts – Password Will Be Reset Once : Ce mode réinitialise réellement le mot de passe du compte krbtgt de test. Cela entraîne un changement réel et est souvent utilisé pour valider le processus avant de le faire sur de vrais comptes.
5 – Simulation Mode | Use KrbTgt PROD/REAL Accounts – No Password Reset/WhatIf Mode : Semblable au mode 3, mais utilise les comptes krbtgt de production réels pour simuler une réinitialisation de mot de passe. Aucun changement réel n’est effectué.
6 – Real Reset Mode | Use KrbTgt PROD/REAL Accounts – Password Will Be Reset Once : Ce mode réinitialise réellement le mot de passe du compte krbtgt de production. Cela a un impact direct sur la sécurité de l’environnement AD et devrait être effectué conformément aux politiques de sécurité.
7 – Y en A PAS … bizaroide 😉
8 – Create TEST KrbTgt Accounts : Ce mode est utilisé pour créer des comptes krbtgt de test fictifs. Ces comptes sont utilisés dans les simulations pour éviter d’affecter les comptes krbtgt réels utilisés par les contrôleurs de domaine.
9 – Cleanup TEST KrbTgt Accounts : Ce mode nettoie ou supprime les comptes krbtgt de test fictifs créés par le mode 8 ou précédemment utilisés dans les tests.
Super, merci !