16/09/2024

Active DirectoryCybersécurité

Active Directory et l’administration Just-in-time : comment faciliter l’adhésion aux groupes sensibles ?

I. Présentation

Dans cet article, nous allons voir comment faciliter la gestion des groupes sensibles en environnement Active Directory, en appliquant le principe de l’administration « Just-in-time » (JIT).

Nous commencerons par quelques rappels sur le PAM (Privileged Access Management) et sur les risques associés à une mauvaise gestion des permissions Active Directory. Puis, nous verrons comment automatiser et faciliter la délégation selon le principe JIT grâce à l’utilisation d’un outil graphique basé sur PowerShell.

II. Rappel sur le PAM

PAM est une fonctionnalité apparue depuis Windows Server 2016 et présente dans le niveau fonctionnel de domaine Active Directory « Windows Server 2016 » minimum. Elle permet une administration gérée dans le temps (Appelée « Just in time ») accordant un accès hautement privilégié à un utilisateur pendant une période limitée pour accomplir une tâche spécifique. Cela permet de réduire les menaces et avoir le contrôle sur l'adhésion aux groupes sensibles.

Active Directory PAM - Schéma JIT

L'article précédent décrit les principes de base de cette technologie ainsi que les différentes étapes de son utilisation. Il s'adresse avant tout à ceux qui souhaitent configurer l'administration JIT via PowerShell.

A. Cas d'utilisation de l'administration JIT

Pour mieux comprendre le besoin de définir des autorisations limitées dans le temps et les risques associés à la négligence de la gestion des groupes, il est important de savoir pourquoi cela est nécessaire. Les autorisations limitées peuvent être utilisées dans trois cas majeurs : la gestion des groupes sensibles, les consultants externes et les stagiaires/apprenants.

  • Groupes sensibles :

Historiquement, l'adhésion aux groupes se faisait sur demande des responsables ou des ressources humaines, soit via un outil de gestion d'identité (MIM, Management AD Engine), soit manuellement par des demandes (tickets).

Le problème est que les groupes à privilèges ou sensibles ne sont pas souvent maintenus. Souvent, lors d'un départ, on se contente de désactiver le compte sans effectuer de nettoyage, ce qui peut être risqué si quelqu'un réactive le compte ou demande un ticket SPN au nom de ces comptes. Il est donc crucial de maîtriser cette gestion.

Idéalement, les groupes hautement privilégiés doivent rester vides et l'appartenance n'est accordée que lorsque cela est nécessaire respectant le principe du tiering model.

  • Consultant externes :

Lorsque des consultants externes travaillent sur un projet ou interviennent pour une durée limitée, souvent en l'absence de l'équipe IT, une gestion précise des accès est cruciale. Par exemple, un infogérant présent pour deux jours nécessitant un accès temporaire aux serveurs.

Cas de figure :

Si nous savons que le prestataire sera présent pour deux jours et partira à 18h, tandis que l'équipe IT termine plus tôt, il est risqué d'attendre le lendemain ou le week-end pour exécuter le script de retrait du groupe ou le faire manuellement. Si sa machine ou son compte est compromis, cela représenterait un grand risque.

  • Stagiaire et apprenti :

Il arrive souvent que les stagiaires conservent les droits de l'ancien département et obtiennent également ceux du nouveau. À la fin de leur période de formation, ils disposeront de plus d’autorisations dans le système que n’importe quel autre salarié.

B. Problématique

L'attribution d'appartenances à des groupes à durée limitée peut être confiée au service des ressources humaines ou à un autre service spécialisé. En effet, ces employés savent généralement mieux la durée de présence d'un consultant ou d'un stagiaire externe grâce à son contrat ou aux jours commandés. Malheureusement, pour ces utilisateurs non techniques, gérer ces tâches avec PowerShell peut compliquer les choses.

Pour rappel, voici la commande de base :

Add-ADGroupMember -Identity 'Nom du groupe ' -Members 'Nom d'utilisateur ' -MemberTimeToLive (New-TimeSpan -Minutes *****)

Le problème avec cette méthode est qu'elle nécessite de convertir des minutes en jours, semaines ou mois. Disposer d'un moyen de recherche pour effectuer l'intégration des utilisateurs avec cette méthode s'est avérée difficile.

Nous avons décidé alors de créer un outil simple avec une interface graphique pour faciliter la tâche à tout utilisateur autorisé à effectuer ces actions.

Commençons par préparer les prérequis.

III. Délégation des droits pour le PAM

Par défaut, seuls les administrateurs du domaine possèdent les droits nécessaires pour gérer le Privileged Access Management (PAM). Cette centralisation des droits peut s'avérer peu pratique, notamment dans des environnements où l'on souhaite étendre l'utilisation de la gestion PAM à d'autres équipes. Pour pallier cette limitation, nous allons attribuer les droits requis aux personnes concernées afin qu'elles puissent effectuer ces actions de manière autonome.

Dans cet exemple, nous allons accorder aux groupes des administrateurs de niveau 2 le droit d'ajouter des utilisateurs au groupe des administrateurs locaux sur les postes de travail. Par ailleurs, les équipes de supports (hotliners) et les ressources humaines (RH) se verront octroyer les droits nécessaires pour gérer les groupes par défaut.

Remarque : cette étape de délégation est un prérequis à respecter pour pouvoir, justement, déléguer l'administration JIT en PowerShell ou avec l'outil que nous vous présenterons dans la suite de l'article.

  • Méthode gestion par OU :

Cliquez avec le bouton droit sur l'OU (Unité d'Organisation) contenant les groupes que vous souhaitez gérer, puis sélectionnez "Délégation de contrôle".

Attention : Assurez-vous qu'aucun groupe à privilèges, comme les groupes d'administrateurs de machines ou de serveurs, n'est présent dans cette OU pour éviter toute mauvaise manipulation.

Cliquez sur "Suivant" dans la fenêtre Assistant délégation de contrôle :

Cliquez sur "Ajouter" pour ajouter les groupes ou utilisateurs autorisés à gérer le PAM.

Dans notre cas, nous avons ajouté l'utilisateur « RH1 », qui est responsable de la gestion des accès pour les nouveaux arrivants. Cet utilisateur, connaissant les dates des contrats, pourra accorder des droits d'accès à des groupes spécifiques (par exemple, pour accéder à des ressources ou des documents) pour une durée déterminée.

Une fois les membres sélectionnés, cliquez sur « Suivant ».

Cochez la case "Modifier l'appartenance à un groupe" puis cliquez sur « Suivant » puis sur terminer.

  • Accorder le droit sur un groupe particulier :

Il est possible d'accorder le droit sur un groupe au lieu d'une OU. Pour ce faire, affichez les fonctionnalités avancées à partir du menu « Affichage » de la console.

Ouvrez les propriétés du groupe, puis cliquez sur « Avancé ». Ici, ce sont les propriétés du groupe « GG_Hotliner » qui sont modifiées.

Cliquez ensuite sur « Ajouter ».

Sélectionnez votre groupe, puis modifiez la propriété "S'applique à" afin de choisir "Objets Groupes descendants".

Descendez jusqu'en bas de la liste des permissions, puis cliquez sur "Effacer tout".

Cochez les propriétés « Lire Membres » et « Ecrire membres », cliquez ensuite sur « OK ».

Cliquez sur « Appliquer » puis « Ok » pour fermer la fenêtre.

La délégation des permissions est maintenant terminée. Vous n'aurez plus besoin d'être administrateur du domaine pour effectuer les tâches JIT (délégation temporaire des accès privilégiés).

IV. Active Directory : outil de gestion du PAM

A. L'outil « AD Just-in-Time Management »

Passons maintenant à la partie concernant l'automatisation. L’outil présenté dans cet article a été développé pour pallier le manque d'interface graphique proposé par Microsoft. La gestion du PAM ne peut être effectuée que via PowerShell, ce qui peut parfois intimider certains administrateurs.

La fonction PAM ne peut être contrôlée que via PowerShell et de nombreux administrateurs ont encore peur de l'utiliser.

Le script repose sur deux fonctions principales :

  • function Get-PAMGroupMembers : permet de rechercher et d'afficher les utilisateurs ou groupes dans Active Directory.
  • Convert-TimeToReadableFormat : convertit la durée en minutes.

L'automatisation est réalisée à l'aide de la commande de base suivante :

Add-ADGroupMember -Identity $GroupName -Members $UserName -MemberTimeToLive $timeSpan

Vous pouvez télécharger le fichier .exe ou le script PowerShell (.ps1) à partir de la page du projet sur GitHub :

Il est également possible de copier le code dans un éditeur de code comme PowerShell ISE.

Si vous utilisez le fichier ".exe", assurez-vous qu'il est bien signé. N'utilisez pas de binaire provenant d'une autre source.

Vous pouvez vérifier la signature du fichier dans les propriétés de celui-ci. Il a été signé par mes soins.

Double-cliquez sur le fichier téléchargé ou exécutez le script .ps1 dans PowerShell ou ISE pour lancer l'outil.

L'interface de l’outil se veut simple et ergonomique. Voici quelques explications :

  • Partie 1 : permet de lister les utilisateurs en saisissant les premières lettres d'un login, facilitant ainsi la recherche.
  • Partie 2 : permet de sélectionner le groupe cible.
  • Le bouton « Show TTL » : permet de vérifier la durée d'ajout de l'utilisateur au groupe en cas de doute.
  • Le bouton « Show Group » : permet de lister les membres temporaires d'un groupe sélectionné dans la zone 2.
  • Le bouton « Add user » : Permet d'ajouter un utilisateur temporairement dans le groupe en fonction du temps choisi, soit en jours, soit en minutes. Autrement dit, ajouter l’utilisateur sélectionné dans le groupe sélectionné.

Il est important de noter que vous pouvez ajouter un utilisateur pour un laps de temps soit en minutes, soit en jours, mais pas les deux en même temps. La sélection d’une date annule automatiquement la durée en minutes.

Pour annuler ou ajuster le temps restant d'un utilisateur dans un groupe, il suffit de le réajouter au même groupe avec une nouvelle date. Cette nouvelle date remplacera la précédente. Par exemple, si un utilisateur a été ajouté pour 15 jours, vous pouvez le réajouter pour 3 jours en utilisant le bouton « Add user », et cette dernière durée sera celle retenue.

B. Exemple d’utilisation

Dans cette démonstration, nous avons ouvert une session avec l'utilisateur « RH1 », à qui nous avons précédemment délégué les droits d'ajout sur l'OU « Groupes ».

Nous allons ajouter l’utilisateur « user2 », qui est un stagiaire, au groupe « GG_DOC_Marketing_RO » pendant une durée limitée : 31 août 2024.

Ouvrez alors l'outil en double-cliquant sur l'exécutable. Entrez ensuite le login ou une partie du login de l'utilisateur que vous souhaitez gérer. Puis, appuyez sur "Select user", confirmez votre choix en double-cliquant sur le login correspondant au bon utilisateur.

L'utilisateur choisit sera listé dans la zone texte :

Répétez la même procédure pour sélectionner le groupe cible :

Sélectionnez ensuite la date souhaitée. Dans notre cas, nous avons choisi la fin du mois, qui correspond à la fin du contrat du stagiaire, pour lui accorder les droits sur le groupe permettant la lecture des documents partagés du service marketing.

Une fois terminé, cliquez sur "Add user". L'utilisateur sera alors ajouté au groupe, et un message en vert confirmera l'opération réussie. En cas d'erreur, un message d'erreur sera affiché.

Vous pouvez vérifier les membres temporaires du groupe en cliquant sur "Show group".

Si vous essayez d'ajouter un utilisateur à un groupe pour lequel il n'a pas les droits, un message d'erreur sera affiché. Par exemple, dans notre cas, l'utilisateur "RH1" n'a pas la permission d'ajouter temporairement des utilisateurs dans un groupe IT nommé « GG_Hotliner ».

Nous allons répéter la même procédure pour peupler le groupe des Administrateurs de postes de travail à partir d'un compte administrateur de niveau 2, pour une durée d'intervention de 30 minutes.

Comme vous pouvez le constater, l'utilisateur en question est bien membre du groupe N2, mais il est différent de celui qui sera ajouté au même groupe

De la même façon, sélectionnez l'utilisateur, puis le groupe « admins_PDT » (poste de travail). Ensuite, définissez le nombre de minutes, dans notre cas 30 minutes. Nous avons cliqué sur le bouton « Show TTL » pour vérifier la durée d'ajout

Ensuite, à l'aide du bouton « Add user », nous avons ajouté l'utilisateur « tech1 » au groupe pour lui permettre d'effectuer les tâches nécessaires sur les machines pendant la durée spécifiée.

C. Bonnes pratiques

Terminons par quelques rappels sur les bonnes pratiques.

  • Utilisez toujours des comptes différents pour les actions d'administration par rapport à ceux utilisés pour ouvrir des sessions classiques. Par exemple, attribuez un compte adm_n1 ou adm_n2 à chaque membre de l'équipe IT, en plus de leur compte utilisateur habituel.
  • Si vous avez installé LAPS dans votre entreprise, évitez d'accorder des accès permanents aux groupes qui permettent la lecture des mots de passe, en particulier pour les serveurs. Suivez le même principe de Just-In-Time (JIT) en ajoutant les utilisateurs (comme les administrateurs) uniquement lorsque cela est nécessaire, et pour une durée limitée. Cela contribuera à réduire les risques et à maintenir un meilleur contrôle sur votre infrastructure.

V. Conclusion

L'administration Just-In-Time (JIT) est devenue un élément indispensable pour la sécurité des infrastructures sous Active Directory. Les entreprises qui n'adoptent pas ce principe risquent de laisser des failles dans la gestion de leurs identités IAM. La solution proposée ici permet de faciliter cette gestion, en particulier pour les entreprises qui n'ont pas encore opté pour une solution payante.

Je tiens à remercier l'équipe HardenAD et IT-Connect pour leur soutien dans ce travail.

author avatar
Mehdi DAKHAMA Consultant et formateur
Consultant et formateur expert Windows Server et Cloud Azure. Chercheur en Cybersécurité.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail