Active Directory : comment réinitialiser le mot de passe krbtgt ?

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

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.

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.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian B.

Consultant chez Délibérata le jour, blogueur pour IT-Connect la nuit, je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian has 2147 posts and counting.See all posts by florian

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.