Comment créer un domaine Active Directory respectueux des bonnes pratiques de sécurité ?
Sommaire
I. Présentation
Comment créer un domaine Active Directory qui respecte toutes les règles de base en matière de sécurité ? Autrement dit, comment créer un domaine Active Directory qui répond à tous les points de sécurité évalués par des outils d'audit comme PingCastle et Purple Knight ? La réponse se nomme "Hello-My-Dir", un outil open source conçu dans ce but !
Dans ce tutoriel, nous allons découvrir plus en détail cet outil et apprendre à l'utiliser afin de pouvoir déployer un nouveau domaine Active Directory que l'on pourrait considérer "secure by design". Nous allons déjà commencer par évoquer la problématique de sécurité liée à l'Active Directory (AD) avant d'évoquer les fonctions de cet outil et son utilisation.
II. Active Directory : qu'est-ce qui ne va pas avec la configuration par défaut ?
L'Active Directory, à l'instar d'autres applications et services, n'est pas sécurisé dans sa configuration par défaut. Ainsi, lorsqu'un domaine Active Directory est créé, sa configuration ne respecte pas les bonnes pratiques et les recommandations en matière de sécurité.
C'est un vrai problème puisque l'AD, par sa fonction de gestion des identités, joue un rôle central dans le système d'information des entreprises. Cela en fait une cible privilégiée lors des cyberattaques et, malheureusement, il est bien trop souvent, le maillon faible d'une infrastructure. Quelques minutes peuvent suffire à un attaquant pour obtenir des privilèges élevés sur le domaine, et ainsi obtenir les clés de votre royaume.
Il suffit d'exécuter les outils d'audit PingCastle et Purple Knight sur un Active Directory existant ou fraîchement installé pour mettre en lumière ces vulnérabilités potentielles.
Nous pouvons citer notamment les points suivants :
- Pour l'authentification, le protocole NTLM v1 est autorisé par défaut, ce qui ouvre la porte à plusieurs attaques connues.
- Une stratégie de mots de passe pas suffisamment robuste et qui ne respecte pas les standards actuels.
- Chaque utilisateur authentifié peut ajouter jusqu'à 10 machines au domaine Active Directory.
- Le protocole de résolution de noms LLMNR est autorisé.
- Etc.
Nous allons voir dans quelle mesure l'outil Hello-My-Dir répond à cette problématique.
III. L'outil Hello-My-Dir
L'outil Hello-My-Dir s'adresse à toutes les personnes qui ont pour objectif de déployer un nouveau domaine Active Directory et qui sont soucieuses de la sécurité de ce nouvel environnement. Il va permettre de partir sur une base saine et corriger un ensemble de lacunes présentes dans la configuration par défaut d'un annuaire AD.
Dans les faits, Hello-My-Dir va durcir la configuration de l'Active Directory pour que ce dernier soit conforme aux points de sécurité vérifiés par les outils PingCastle et Purple Knight.
Créer un domaine à partir de l'outil Hello-My-Dir n'est pas suffisant pour sécuriser une infrastructure Active Directory dans son ensemble, mais il représente un pas dans la bonne direction. C'est une bonne première étape, tandis que la seconde étape pourrait être l'utilisation de l'outil HardenAD pour mettre en œuvre un modèle d'administration en tiering. D'ailleurs, ces deux outils sont liés puisqu'ils ont été créés par la même personne : Loïc Veirman. Encore une fois, avec cet outil, il nous fait profiter de son expertise avec l'Active Directory.
La création d'un domaine Active Directory avec Hello-My-Dir se déroule en 3 étapes :
- Première étape pour générer les fichiers de configuration (nom de votre domaine, niveaux fonctionnels, etc.).
- Seconde étape pour créer la nouvelle forêt et le domaine Active Directory.
- Troisième étape pour durcir l'environnement grâce à la création de règles de configuration et à la mise en place de GPO.
Par la suite, pour aller plus loin, vous pouvez aussi utiliser l'outil pour ajouter un nouveau contrôleur de domaine Active Directory à un environnement existant, sur le même principe. C'est-à-dire en respectant les bonnes pratiques de sécurité. Pour rappel, il est recommandé d'avoir au moins 2 contrôleurs de domaine.
Ci-dessous, le lien vers le dépôt officiel du projet. Il donne accès au téléchargement du projet, à la documentation et vous pouvez l'utiliser pour effectuer des suggestions.
Passons à l'utilisation de cet outil.
IV. Créer un nouveau domaine Active Directory
Passons à la création d'un nouveau domaine AD avec Hello-My-Dir. L'outil est compatible avec les versions récentes de Windows Server, que ce soit avec une interface graphique ou en mode core. Pour ma part, je vais utiliser un serveur Windows Server 2022, en mode core (sans interface graphique).
Avant de passer à la création du domaine, veillez à effectuer les actions suivantes :
- Nommer la machine (nom du système)
- Définir une configuration réseau IPv4 statique
- Installer les dernières mises à jour Windows Server
Remarque : l'installation est à effectuer à partir d'un compte Administrateur sur la machine locale qui va devenir le futur contrôleur de domaine AD.
Quand c'est fait, vous pouvez passer à la suite.
A. Télécharger Hello-My-Dir
La première étape consiste à télécharger l'outil : vous pouvez le faire via l'interface graphique ou avec PowerShell, selon votre environnement.
En amont, nous allons créer le répertoire "C:\Scripts" pour accueillir l'outil. Libre à vous d'utiliser un autre emplacement.
New-Item "C:\Scripts" -ItemType Directory
Puis, nous passons au téléchargement de l'archive ZIP du projet. Ici, la dernière version actuelle est téléchargée, donc veillez à adapter le lien après avoir vérifié les versions sur le GitHub du projet. Le fichier de sortie sera nommé "HelloMyDir-v1.1.2.zip".
Invoke-WebRequest -Uri "https://github.com/LoicVeirman/Hello-My-Dir/archive/refs/tags/v1.1.2.zip" -OutFile "HelloMyDir-v1.1.2.zip"
Une fois l'archive téléchargée, nous allons la décompresser avec le cmdlet "Expand-Archive" puis nous placer à l'intérieur du répertoire obtenu. Dans le répertoire du projet, il y a un ensemble de dossiers et fichiers, dont le script principal nommé "Invoke-HelloMyDir.ps1".
Expand-Archive .\HelloMyDir-v1.1.2.zip
B. Préparer la configuration
Nous devons exécuter le script "Invoke-HelloMyDir.ps1" pour générer des fichiers de configuration afin de personnaliser l'environnement cible. Exécutez simplement le script, sans paramètre :
cd .\HelloMyDir-v1.1.2\Hello-My-Dir-1.1.2\
.\Invoke-HelloMyDir.ps1
Remarque : par la suite, si vous avez besoin de modifier une valeur avant de créer le domaine AD, exécutez de nouveau cette commande en ajoutant simplement le paramètre "-Prepare".
Vous devez répondre à plusieurs questions, dans cet ordre :
- Voulez-vous créer un nouveau domaine dans une nouvelle forêt ? La réponse est "Oui" bien entendu ("Y").
- Quel est le nom de domaine complet (DNS) de ce futur domaine ? Pour ma part, ce sera "it-connect.local"
- Quel est le nom de domaine NetBIOS de ce futur domaine ? Pour ma part, ce sera "IT-CONNECT"
- Quel niveau fonctionnel souhaitez-vous pour la nouvelle forêt ? Indiquez "7" pour choisir le niveau fonctionnel le plus élevé disponible à ce jour, en attendant la sortie de Windows Server 2025. Sauf besoin spécifique, vous n'avez pas d'intérêt à choisir une version inférieure.
- Voulez-vous activer la corbeille Active Directory ? Répondez "Oui".
- Voulez-vous activer la fonctionnalité de PAM ? Répondez "Non" car ceci implique d'avoir FIM en tant que prérequis.
- Quel niveau fonctionnel souhaitez-vous pour le nouveau domaine ? Sélectionnez le plus élevé, donc "7" si vous avez déjà pris "7" pour la forêt, car le niveau fonctionnel du domaine ne peut pas être inférieur à celui de la forêt.
- Définissez l'emplacement pour le répertoire SYSVOL : conservez la valeur par défaut.
- Définissez l'emplacement pour le répertoire NTDS : conservez la valeur par défaut.
- Quel doit être le nom du compte de service ? Par défaut, ce sera "DLGUSER01"
- Quel doit être le nom du groupe de délégation ? Par défaut, ce sera "LS-DLG-DomainJoin-Extended".
Cette opération va générer les fichiers de configuration (XML) disponible dans le dossier "Configuration" du projet. Vos choix sont notamment stockés dans le fichier "RunSetup.xml".
Une fois cette première étape effectuée, le script doit être exécuté de nouveau. Encore une fois, il n'est pas utile de préciser de paramètres.
.\Invoke-HelloMyDir.ps1
Cette seconde exécution va permettre d'installer le rôle "Services de domaine Active Directory" (ADDS) sur le serveur, ainsi que les outils d'administration associés à la gestion de ce domaine. Il s'agit de différentes consoles pour administrer l'AD, le DNS, le DFS (associé au partage SYSVOL) et les GPO, ainsi que le module PowerShell pour l'Active Directory.
Une fois le rôle ADDS installé, la nouvelle forêt sera créée avec votre domaine Active Directory. Ce processus se termine par une ligne estampillée "IMPORTANT" : vous devez copier et stocker en lien sûr le mot de passe précisé en bout de ligne. Il s'agit du mot de passe DSRM (restauration des services d'annuaire) que l'outil a généré aléatoirement. Il ne pourra pas être récupéré ultérieurement.
Une fois ce précieux sésame récupéré, appuyez sur n'importe quelle touche du clavier pour redémarrer le serveur.
Suite au redémarrage du serveur, celui-ci est désormais le premier contrôleur de domaine Active Directory du domaine "it-connect.local". Pour vous connecter au serveur, utilisez le compte Administrateur local et son mot de passe, tel qu'ils étaient avant la création du domaine.
Mais, l'utilisation de Hello-My-DIR ne s'arrête pas ! Nous devons initier la troisième phase du processus : le durcissement de la configuration. Pour cela, nous devons relancer le script pour qu'il effectue les actions de sécurisation.
.\Invoke-HelloMyDir.ps1
À la fin du processus, stockez en lien sûr le mot de passe (ou plutôt la passphrase) correspondant au compte "DLGUSER01", généré aléatoirement par l'outil.
Si vous rencontrez une erreur, sachez que Hello-My-Dir dispose de son propre journal. Au même titre que les autres journaux Windows, ses événements sont disponibles via l'Observateur d'événements, ainsi qu'à partir de PowerShell. Le journal se nomme "HelloMyDir".
Get-EventLog -LogName "HelloMyDir" | fl
Voici un aperçu de ce journal, à partir de la console PowerShell.
V. Aperçu de la configuration déployée
Désormais, nous allons regarder de plus près la configuration effectuée par Hello-My-Dir, afin de comprendre sa valeur ajoutée vis-à-vis d'un domaine AD dans sa configuration par défaut.
A. Les utilisateurs et les groupes de sécurité
Au sein du conteneur "Users", Hello-My-Dir crée un utilisateur et un ensemble de groupes de sécurité. En plus du compte "Administrateur" natif, seuls les membres du groupe "LS-DLG-DomainJoin-Extended" ont l'autorisation d'ajouter des ordinateurs au domaine. C'est notamment le cas du compte "DLGUSER01" qui est un compte de service, sous la forme d'un utilisateur standard, avec cette délégation de droits.
B. Les stratégies de groupe
Hello-My-Dir crée et active 2 stratégies de groupe (GPO) :
- Default Domain Security : une GPO appliquée sur la racine du domaine.
- Default Domain Controllers Policy : une GPO appliquée sur l'unité d'organisation "Domain Controllers" pour appliquer des paramètres spécifiques aux contrôleurs de domaine.
Ce qui donne :
Ci-dessous, le contenu de la stratégie de groupe "Default Domain Security" :
- LDAP Signing: exiger la signature pour le client LDAP, afin de forcer la signature LDAP (sécurisation des échanges)
- NTLM : accepter uniquement les réponses NTLM version 2.
- LLMNR : désactiver la résolution de noms basée sur LLMNR (voir cet article).
- SMB : désactiver le protocole SMB version 1 (ceci permet de forcer la désactivation, bien que le SMB v1 soit désactivé sur les versions récentes de Windows)
- PowerShell : journalisation des actions effectuées par PowerShell par l'activation du module logging (voir cet article pour plus de précisions).
- Windows LAPS : activation et configuration de Windows LAPS pour la sécurisation du compte Administrateur local.
- Énumération des sessions : configuration de la clé de Registre "SrvsvcSessionInfo" pour se protéger de l'énumération des sessions.
Ci-dessous, le contenu de la stratégie de groupe "Default Domain Controllers Security" :
- Audit : configuration de la stratégie d'audit pour assurer la traçabilité de certaines actions (gestion des comptes, utilisation de privilèges, connexion, etc.).
- LDAP Signing : exiger la signature pour le serveur LDAP, afin de passer en version sécurisée. En complément, sachez qu'un certificat autosigné est généré pour le LDAPS, puis ajouté au magasin de certificats du DC en tant qu'autorité de certification de confiance. Ceci sera utile pour connecter une application à l'AD, via LDAPS à la place de LDAP.
- Kerberos : autoriser uniquement l'AES128 et l'AES256 bits pour le chiffrement Kerberos.
- Spouleur d'impression : désactivation du service "Spouleur d'impression" sur les contrôleurs de domaine (ce qui implique qu'un DC ne doit pas assurer la fonction de serveur d'impression).
- Renforcer l'accès aux chemins UNC correspondants à "SYSVOL" et "NETLOGON".
Même si ce n'est pas directement lié aux stratégies de groupe, sachez que Hello-My-Dir déclare également un sous-réseau (subnet) pour le site Active Directory par défaut. C'est un élément de configuration essentiel, et bien souvent oublié.
C. Les stratégies de mots de passe affinées
Hello-My-Dir crée aussi un ensemble de stratégies de mots de passe affinées (appelée aussi "PSO"), qu'il est possible d'appliquer à différents profils d'utilisateurs. Ces modèles prêts à l'emploi permettront d'appliquer une politique de mots de passe plus ou moins stricte à des comptes utilisateurs, en fonction de leur usage et leur niveau de privilèges.
Chaque PSO s'applique sur un groupe de sécurité qui porte le même nom. Ainsi, si vous souhaitez appliquer une PSO à un utilisateur ou un groupe d'utilisateurs, il suffira de l'ajouter au groupe de sécurité correspondant. Référez-vous à cette page de la documentation de l'outil pour savoir comment bien affecter ces PSO.
D. Audit avec PingCastle
Qu'en est-il du score de l'audit PingCastle à la suite de la mise en place d'un domaine Active Directory avec Hello-My-Dir ? Comme le montre l'image ci-dessous, le niveau de risque est de 5/100, ce qui est un excellent score. En vérité, il est tout à fait possible d'atteinte 0/100. Comment ? Simplement en déployant un second contrôleur de domaine, car c'est la seule règle en défaut dans PingCastle.
La bonne nouvelle, c'est que le déploiement d'un second contrôleur de domaine avec Hello-My-Dir, c'est tout à fait possible ! Il y a un mode spécifique pour cela !
Avant tout, le serveur doit être préparé sur le même principe que le premier contrôleur de domaine. Il doit pouvoir résoudre le nom de domaine "it-connect.local", ce qui implique d'utiliser le 1er DC déployé comme serveur DNS. De plus, avant de lancer cette commande, vous devez copier le fichier de configuration "RunSetup.xml" de votre 1er DC vers le futur DC (pour qu'il récupère tout le paramétrage).
La commande ci-dessous doit être exécutée une première fois sur le nouveau serveur pour intégrer la machine au domaine (sauf si vous le faites en amont). Puisque le compte "DLGUSER01" doit être utilisé pour l'intégration de machines au domaine, nous l'utilisons pour la jonction au domaine de ce nouveau serveur.
.\Invoke-HelloMyDIR.ps1 -AddDC
Puis une seconde fois pour l'intégrer comme DC.
.\Invoke-HelloMyDIR.ps1 -AddDC
Suite à l'ajout de ce second DC, le score de PingCastle est désormais à 0/100 !
VI. Conclusion
Si vous avez la volonté de créer un domaine Active Directory respectueux des bonnes pratiques en matière de sécurité, ne perdez pas de temps à l'installer, à l'analyser avec PingCastle, puis à durcir sa configuration. Utilisez directement le modèle proposé par l'outil Hello-My-Dir puisqu'il répond exactement à ce besoin.
Gardez à l'esprit que cette configuration, bien qu'idéale, peut poser un problème dans certains environnements. En effet, elle ne peut pas répondre à tous les scénarios d'utilisation : si vous utilisez des systèmes d'exploitation ou des périphériques obsolètes, vous pourriez avoir besoin de certains protocoles, eux aussi, vulnérables et déconseillés.
Pour aller plus loin, intéressez-vous à la mise en œuvre d'un modèle d'administration en tiering.
C’est excellent !
Bonjour,
J’ai utiliser votre tuto sur un Serveur2019 avec interface graphique, en lancant le Windows PowerShell en tant qu’admin sur la session Admin, et lors de second lancement du script j’ai toutes les étapes qui sont en echec. Le log ne m’aide pas.
Est-ce que j’ai raté une étape ?
J’ai trouvé qqun (flo313) qui a eu le même problème et qu’il l’a résolut.
Il s’agit d’un bug dans le script à la line 579.
Tout les détails ici (en anglais)
https://github.com/LoicVeirman/Hello-My-Dir/issues/6
Bonjour,
Une fois le processus exécuté jusqu’au bout et après redémarrage du serveur, comment peut-on se connecter au serveur en RDP ? le port 3389 ne semble pas accessible.
Que faire pour administrer le serveur sans utiliser les RSAT ?
Bonsoir AcidSoft,
j’ai également rencontré quelques soucis pour se connecter en RDP sur les VMs jointes à un active directory créé avec Hello-My-Dir. A priori, le compte admin de l’AD ne permet pas de se connecter. Par contre, en créant un nouvel utilisateur et en l’ajoutant aux utilisateurs autorisés au Bureau à Distance, ça passe nickel.
Est-ce le comportement normal nécessaire pour la sécu ? Je suis preneur de l’info.
Je viens de m’apercevoir d’un petit détail. L’admin fait partie du groupe Protected Users et ceci devrait expliquer l’impossibilité de se connecter en RDP, mais également un point que j’avais remarqué : pas de mise en cache des login.
Bref tout s’explique, tout marche comme prévu.