Réinitialiser le mot de passe du compte krbtgt

Explication du concept et des différences entre Microsoft-AD et Samba-AD

Le compte krbtgt est un compte critique dans la sécurité du domaine Active Directory. L’emprunte (hash) de ce compte est utilisé pour signer les tickets Kerberos échangés avec les clients.

La compromission des secrets d’authentification du compte krbtgt permet d’avoir le contrôle sur toutes les ressources du domaine. Ce compte doit être changé en cas de compromission de la base de comptes de l’AD.

Il est recommandé de le changer régulièrement (par exemple tous les mois ou tous les deux mois). La recommandation ANSSI est actuellement tous les 40 jours.

Lors d’un changement de mot de passe du compte krbtgt, Microsoft-AD garde en cache l’ancien hash pour permettre de garantir que le changement de mot de passe puisse être répliqué vers l’ensemble des contrôleurs de domaine.

Sur un Microsoft-AD, il est donc nécessaire de faire le changement de mot de passe du compte krbtgt deux fois pour garantir la sécurité si le compte a été compromis. Le délais entre les deux changements de mot de passe est important, car s’il est trop court, ça peut poser des soucis de réplication, s’il est trop long, ça peut laisser suffisamment de temps à un attaquant qui a compromis l’AD dans le passé de récupérer à nouveau le nouveau compte krbtgt.

Samba-AD n’implémente actuellement pas la conservation du hash N-1 pour le compte krbtgt (la conservation du hash N-1 n’est appliquée uniquement qu’aux comptes machines). Ceci n’est pas bloquant en pratique car si l’on valide que la réplication s’est bien propagée à l’ensemble des DC juste après le changement, les comptes des contrôleurs de domaine sont encore valides et donc les tickets pour la réplication fonctionnent toujours.

Le fait que Samba-AD ne stocke pas le hash N-1 fait que les clients Kerberos seront obligés de négocier un nouveau TGT lors de la prochaine demande de ST. Cela n’est pas un soucis sur les postes Windows qui conservent les identifiants de connexion en mémoire dans le processus lsass.exe, ils peuvent donc renouveler leur TGT sans soucis. Il en est de même pour les processus Winbind des serveurs de fichiers. Les comptes utilisateurs membre du groupe Protected Users auront besoin de renouveler leur TGT manuellement.

Avertissement

Il faut faire attention aux appliances qui peuvent se comporter différemment des postes et serveurs Windows vis à vis du renouvellement de leur TGT (durée plus longue de renouvellement, renouvellement pas automatique, etc.). Il peut alors être intéressant de faire un test au préalable.

En conclusion, dans le cas de Samba-AD, il est nécessaire de ne faire qu’une seule fois le changement de mot de passe du compte krbtgt pour garantir la confidentialité de celui-ci. Par contre lors du changement du mot de passe krbtgt, il faut garantir que l’ensemble des DC soient bien joignables et bien répliqués pour garantir une réplication rapide du changement vers tous ces DC.

Obtenir le script de changement du mot de passe KRBTGT

Samba fournit un script dans le code source pour effectuer le changement du mot de passe. Celui ci n’est actuellement pas packagé dans le RPM distribué par Tranquil IT. On peut le récupérer dans le tar.gz du code source ou dans le git (prendre la version correspondante à votre release Samba) :

# Samba 4.18
wget https://gitlab.com/samba-team/samba/raw/v4-17-stable/source4/scripting/devel/chgkrbtgtpass
# Samba 4.19
wget https://gitlab.com/samba-team/samba/raw/v4-18-stable/source4/scripting/devel/chgkrbtgtpass
# Samba 4.19
wget https://gitlab.com/samba-team/samba/raw/v4-19-stable/source4/scripting/devel/chgkrbtgtpass

Il faut récupérer ce fichier et le recopier sur le contrôleur de domaine avec le rôle PDC.

Changer le mot de passe KRBTGT sur un Samba-AD

Il est préférable de faire le changement de mot de passe sur la machine qui a le rôle PDC.

  • Avant de faire le changement de mot de passe, vérifier que la réplication fonctionne avec l’ensemble des DC :

    samba-tool drs replicate <remote_dc> <pdc_dc> dc=mydomain,dc=lan
    
  • Ensuite, lancer le script que l’on a récupéré précédemment :

    python3 chgkrbtgtpass
    
  • Vérifier que le mot de passe a bien été mis à jour en vérifiant la date de dernière modification :

    pdbedit -Lv krbtgt
    
  • Ensuite, forcer la réplication sur l’ensemble des DC. En pratique Samba-AD va faire très rapidement des notifications de changements à l’ensemble des DCs, et la réplication aura probablement déjà eu lieu :

    samba-tool drs replicate <remote_dc> <pdc_dc> dc=mydomain,dc=lan
    
  • Finalement, vérifier sur les différents DC que la réplication du compte s’est bien passée :

    pdbedit -Lv krbtgt