Sécurité Active Directory : comment atteindre un score de 0/100 dans PingCastle ?
Sommaire
I. Présentation
Derrière ce titre d'article ambitieux se cache un constat simple : la majorité des PME n'ont pas les ressources suffisantes (argent, temps, personnel) pour auditer et sécuriser leur annuaire Active Directory, ce dernier étant pourtant la pierre angulaire de nombreux systèmes d'information. Par extension, il est aussi la cible privilégiée par les attaquants lors d'une cyberattaque, car compromettre l'Active Directory, c'est prendre le contrôle de l'infrastructure.
C'est d'autant plus flagrant lorsque l'on effectue un audit Active Directory avec PingCastle (ou un autre outil) puisque des problèmes de sécurité sont rapidement mis en évidence. Le rêve de tout RSI ou RSSI, pourrait être d'atteindre un score de 0/100 dans PingCastle, ce qui correspond à la meilleure note.
À partir de là, on va se poser de nombreuses questions : comment s'y prendre ? Par où commencer ? Combien de temps faut-il prévoir ? Quelles sont les bonnes pratiques ? Bien que le défi soit intéressant à relever, cela pourra refroidir plus d'une personne (et pas forcément par manque de motivation) !
La première bonne nouvelle, c'est qu'avec le projet HardenAD, vous bénéficiez d'une ligne directrice et d'un outil prêt à l'emploi pour atteindre cet objectif. La seconde bonne nouvelle, c'est que HardenAD 2.9.5 vient de sortir afin d'intégrer des éléments de sécurisation supplémentaires (notamment des objets GPO pour déployer BitLocker via l'ajout dans un groupe de sécurité et le blocage des protocoles NETBT-NS, WPAD, etc.).
II. L'audit Active Directory avec PingCastle
PingCastle est un outil français dont l'objectif est de réaliser un audit de l'Active Directory et/ou l'Azure Active Directory de votre environnement. Outil incontournable, PingCastle va analyser la configuration de votre annuaire, l'état des objets, les comptes à privilèges, les relations d'approbations, les versions de systèmes d'exploitation, etc... Afin de déterminer un score. Ce score correspond au niveau de risque du domaine Active Directory : plus il est élevé, moins l'Active Directory est sécurisé.
C'est très fréquent de croiser des annuaires Active Directory avec un score supérieur à 80, et il n'est pas rare d'avoir un score de 100/100 ! La note globale correspond à la note la plus élevée des quatre catégories (chaque catégorie regroupe un ensemble de points se sécurité). En aucun cas il ne s'agit d'un cumul ou d'une moyenne.
- Stale Object : points de sécurité liés aux utilisateurs ou aux ordinateurs
- Privileged Accounts : points de sécurité liés aux comptes avec des privilèges élevés (Administrateurs) du domaine Active Directory
- Trusts : points de sécurité liés aux relations d'approbations entre les domaines Active Directory
- Anomalies : points de sécurité liés à d'autres aspects de la configuration qui peuvent impacter la sécurité de votre annuaire
Après avoir effectué un audit avec PingCastle, on peut se poser la question suivante : comment améliorer la sécurité de mon annuaire Active Directory ? Ou plus ambitieux encore, et l'on en revient à notre rêve : comment atteindre un score de 0/100 dans PingCastle ?
Même s'il y a des indications et des liens vers des ressources externes dans le rapport généré par PingCastle, le travail est bien souvent important. Pire encore, on ne sait pas par où comment, ni comment s'y prendre pour améliorer la sécurité de son Active Directory tout en respectant les bonnes pratiques en matière de configuration. C'est là qu'intervient le projet HardenAD présenté dans la suite de cet article.
Note : PingCastle est gratuit lorsque vous réalisez l'audit vous-même, mais il faut acquérir une licence si vous l'utilisez dans le cadre d'une prestation commerciale pour un client. Par ailleurs, PingCastle Cloud est une version capable d'analyser un annuaire Azure Active Directory.
III. Gagnez du temps avec HardenAD
A. Qu'est-ce qu'HardenAD ?
Derrière le projet HardenAD se cache la communauté Harden qui est représentée par une association loi 1901 (à but non lucratif) ayant un objectif bien précis : aider les entreprises à améliorer la sécurité de leur système d'information, en commençant par l'Active Directory.
Note : la communauté Harden propose aussi Harden 365 pour la sécurisation de Microsoft 365 et d'autres projets sont en cours de développement.
Si l'on prend l'exemple de l'Active Directory qui fait l'objet de cet article, les experts Microsoft de la communauté Harden ont défini les standards de sécurisation d'un annuaire Active Directory. Cela en s'appuyant sur leur expérience, mais aussi les recommandations de Microsoft, de l'ANSSI, etc. D'un point de vue technique, ces standards ont été traduits en scripts PowerShell (open source) et en GPO pour être déployés facilement sur n'importe quel environnement après avoir personnalisé la configuration de l'outil HardenAD (via un fichier XML).
Autrement dit, plutôt que de passer des heures (pour ne pas dire des jours ou des semaines) à améliorer la sécurité de votre annuaire Active Directory, vous allez pouvoir gagner du temps en utilisant HardenAD. Après déploiement, votre annuaire va hériter de nouvelles stratégies de groupes, mais aussi de nouveaux groupes de sécurité, de nouvelles unités d'organisation, etc... Ce qui permet d'avoir une base saine (en parallèle de ce qui est déjà présent dans l'annuaire).
HardenAD, comme les autres outils de la communauté Harden, est gratuit, accessible sur GitHub, et est exploitable par n'importe quelle entreprise qui aimerait sécuriser son annuaire Active Directory après avoir effectué une analyse PingCastle (ou pas, d'ailleurs). De mon point de vue, je dirais même que l'objectif est de rendre accessible la sécurisation d'un annuaire Active Directory au plus grand nombre, et pas seulement aux grosses structures qui en ont les moyens.
De manière générale, la configuration et la sécurisation de l'Active Directory via HardenAD va avoir les objectifs suivants :
- Bloquer des outils d’attaques comme CrackMapExec
- Déployer un modèle de Tiering 5 tiers
- Paramétrer les machines du domaine
D'ailleurs, sur le site officiel, j'attire votre attention sur le fait qu'il y a de la documentation accessible de façon publique :
B. L'importance du modèle en tiering
Sans trop rentrer dans le détail, il me semble tout de même essentiel d'évoquer en quelques mots l'importance du modèle en tiering, basé sur 5 tiers avec HardenAD. Lorsque l'on met en place du tiering, on crée des silos qui vont permettre de regrouper certaines machines en fonction de leur rôle au sein du système d'information et de leur niveau de risque.
Au sein d'une infrastructure, il est clair qu'un contrôleur de domaine Active Directory n'aura pas la même importance qu'un serveur d'impression ou qu'un poste de travail utilisateur. De ce fait, ces machines seront réparties dans différents tiers dans le but de limiter la portée d'une compromission de comptes (grâce au cloisonnement de l'attaquant) mais aussi pour simplement durcir la tâche à l'attaquant. Cela est rendu possible puisque l'on va limiter ou interdire l'escalade vers un tiers de niveau supérieur (selon les cas).
HardenAD déploie un modèle basé sur 5 tiers :
- Tiers 0 : serveurs liés aux services d'authentification, d'infrastructure et de sauvegarde. Le meilleur exemple : les contrôleurs de domaine
- Tiers 1 : serveurs liés aux applications métiers
- Tiers 2 : les postes de travail des utilisateurs et la gestion des comptes utilisateurs
- Tiers 1 Legacy : serveurs avec un système d'exploitation obsolète (plus supporté par l'éditeur)
- Tiers 2 Legacy : stations de travail avec un système d'exploitation obsolète (plus supporté par l'éditeur), ce qui est parfois utile pour la compatibilité applicative
En ce qui concerne l'administration des différents tiers, et en l'absence d'un bastion, elle devra s'effectuer par des machines d'administration (appelés PAW pour Privileged Access Workstation) qui servent de points de connexion sécurisés pour se connecter sur les serveurs. Par exemple, à partir de son poste de travail, l'administrateur système doit se connecter en RDP sur une machine PAW (avec du MFA de préférence), pour ensuite se connecter sur le serveur cible. Pour aller plus loin, il est recommandé d'avoir un second rebond intermédiaire vers une machine PAW spécifique au tiers que l'on souhaite administrer, avant de se connecter à la ressource cible.
Un article complet sur le tiering Active Directory sera mis en ligne par la suite.
C. Qui se cache derrière HardenAD ?
À l'origine de la communauté Harden, et donc de l'outil HardenAD, nous retrouvons deux personnes compétentes et expérimentées : Guillaume MATHIEU et Loïc VEIRMAN. D'ailleurs, c'est Loïc qui a écrit les premières lignes de code de cet outil dont la communauté est grandissante.
Au-delà des créateurs et adhérents à l'association Harden, la communauté Harden est soutenue par plusieurs sociétés partenaires comme INEXSYA, MSSEC, QWANT et SYNETIS.
D. La communauté Harden recherche des contributeurs
La communauté Harden recherche des contributeurs qui pourraient soumettre de nouvelles idées de paramètres pour aller toujours plus loin dans la sécurisation et la protection contre les attaques. Il est essentiel d'obtenir des idées et suggestions de la part de personnes qui évoluent dans des univers différents et qui font face à des problématiques diverses et variées.
Par ailleurs, la communauté Harden recherche des pentesters qui pourraient évaluer le niveau de sécurité d'une infrastructure Active Directory où l'outil HardenAD a été déployé.
Si cela vous intéresse, n'hésitez pas à contacter l'association via cette adresse e-mail : contact[at]hardenad.net
IV. Déployer HardenAD
A. Que va faire HardenAD sur mon environnement ?
Au moment où le script PowerShell "HardenAD" va être exécuté sur votre contrôleur de domaine, il y aura de nombreux éléments mis en place. On peut notamment lister :
- Des unités d'organisation pour permettre la mise en place du tiering pour l'administration de l'infrastructure au sens large (contrôleurs de domaine, serveurs membres et postes de travail)
- Des stratégies de groupe pour durcir et uniformiser la configuration des serveurs et postes de travail (voir plus loin dans l'article)
- Des filtres WMI, en complément des stratégies de groupe
- Des groupes de sécurité et des utilisateurs pour les différents tiers d'administration, mais aussi l'application des GPOs
Tout le nécessaire à la mise en place de cette configuration se situe dans l'archive ZIP disponible sur le GitHub du projet.
Donc, dans l'archive ZIP d'HardenAD, nous allons retrouver un ensemble d'éléments :
- Le script HardenAD.ps1 qui sert à déployer l'outil HardenAD après avoir personnalisé la configuration
- Un répertoire "Configs" avec plusieurs fichiers, dont le fichier XML de personnalisation
- Un répertoire "Inputs" avec tous les modèles de GPO, les binaires d'installation de LAPS ou encore des modèles ADMX
- Un répertoire "Logs" qui contient les journaux d'exécution d'HardenAD (un fichier est généré lors de l'exécution du script)
- Un répertoire "Modules" avec des fichiers modules PowerShell utiles au bon fonctionnement de l'outil
- Un répertoire "Outputs" qui contient une base KeePass avec les identifiants/mots de passe des différents comptes d'administration générés
- Un répertoire "Tools" avec les outils utiles au bon fonctionnement d'HardenAD (GpoManagers, KeePass, XmlBuilder)
Comme vous le verrez en lisant la suite de cet article, HardenAD sera plus facile à intégrer sur un nouvel annuaire que sur une infrastructure existante dans un environnement complexe. Dans ce cas, si vous souhaitez être accompagné, vous pouvez contacter Loïc VEIRMAN et Guillaume MATHIEU.
B. Démo HardenAD
Pour cette démonstration, un annuaire Active Directory tout neuf sera utilisé. Il utilise le domaine "it-connect.local" avec le contrôleur de domaine "WS2022-AD", sous Windows Server 2022.
L'intérêt d'utiliser un annuaire Active Directory vierge pour cette démonstration, c'est de montrer que le score PingCastle est de 55/100 (ou 70/100 après quelques jours) sur un environnement vierge. Sur un annuaire Active Directory où il n'y a pas de configuration supplémentaire, et où plusieurs mois ou années se sont écoulés depuis la mise en œuvre, la situation s'aggrave encore plus...
Maintenant, on va déployer HardenAD sur cet environnement.
Note : lorsqu'il sera question d'exécuter HardenAD sur l'environnement de production, il conviendra de sauvegarder au moins deux contrôleurs de domaine, de vérifier l'état de santé de l'annuaire Active Directory (dcdiag) et d'exécuter l'outil sur le contrôleur de domaine qui est maître du rôle FSMO "Emulateur PDC".
Comme je l'ai précisé précédemment, HardenAD est livré avec un fichier de personnalisation au format XML. Ce fichier est situé dans le répertoire "Configs" et se nomme "TasksSequence_HardenAD.xml".
Harden AD s’appuie sur les variables "%domain%", "%domaindns%" et "%RootDN%" pour entre autres créer les nouvelles unités d’organisation et importer les GPO. Si vous ne modifiez pas manuellement ces 3 variables, l’outil vous proposera de le faire automatiquement (depuis la bêta 4).
Voici un exemple :
Remarque : pensez aussi à vérifier le non des groupes d'administration par défaut comme Administrateurs (ou Administrators) qui peuvent varier selon la langue du premier contrôleur de domaine de la forêt AD.
Même si ce n'est pas l'objectif, vous avez la main pour personnaliser le nom et la description de l'ensemble des éléments qui seront créés. Par exemple, on pourrait personnaliser le nom des comptes d'administration qui seront créés.
Quand la personnalisation est terminée, le script peut être exécuté. Ensuite, il faut patienter quelques minutes..
.\HardenAD.ps1
Après exécution du script "HardenAD.ps1", de nombreuses unités d'organisation sont générées dans l'annuaire. On peut voir qu'il y a une évolution importante en comparaison de l'arborescence native de l'Active Directory, notamment dans l'objectif de mettre en œuvre du tiering pour l'administration de l'infrastructure.
À l'intérieur de ces unités d'organisations, nous retrouvons aussi un ensemble de groupes de sécurité et quelques comptes d'administration (pour chaque tiers).
Dans le même temps, HardenAD a aussi généré 77 stratégies de groupe sur mon Active Directory. La nouvelle version 2.9.5, contient 82 GPO, ce qui prouve que HardenAD continue de s'étoffer. Nous n'allons pas passer en revue l'ensemble des stratégies de groupe, mais elles vont permettre de sécuriser l'Active Directory et les postes de travail (LAPS, BitLocker, etc.).
Même si les stratégies de groupe sont liées à la racine du domaine, ne vous inquiétez pas : elles ne sont pas appliquées. Chaque stratégie de groupe s'applique grâce à un groupe de sécurité spécifique, comme le montre l'image ci-dessous. Ainsi, vous gardez le contrôle : vous décidez quand et sur quels utilisateurs/machines le paramètre s'appliquera. Autrement dit, l'autorisation par défaut "Utilisateurs authentifiés" ("Authenticated Users") a été retirée au profit d'un groupe dédié pour chaque GPO.
Pour appliquer une GPO, il y a deux façons de faire :
- Ajouter les objets (ordinateur/utilisateur) en tant que membre du groupe d'Apply créé pour chaque GPO (déploiement maîtrisé et progressif "au compte-goutte")
- Modifier le filtrage de sécurité de la GPO pour remettre la sécurité par défaut, à savoir "Utilisateurs authentifiés", mais attention si la GPO est liée à la racine du domaine...
Simplement après avoir exécuté le script HardenAD.ps1, le score PingCastle passe de 55/100 à 30/100. Voici un avant/après :
Cette première amélioration s'explique par la correction des points suivants :
- The LAN Manager Authentication Level allows the use of NTLMv1 or LM (Les DCs sont en mesure d'utiliser NTLMv1 ou LM)
- Non-admin users can add up to 10 computer(s) to a domain (Les utilisateurs non-administrateurs peuvent ajouter jusqu'à 10 machines au domaine)
- The Recycle Bin is not enabled (La corbeille Active Directory n'est pas activée)
- LAPS doesn't seem to be installed (LAPS ne semble pas être installé) - Point qui devrait évoluer avec l'arrivée de Windows LAPS
- The audit policy on domain controllers does not collect key events (La politique d'audit sur les contrôleurs de domaine ne collecte pas les événements clés)
- No GPO has been found which disables LLMNR or at least one GPO does enable it explicitly (Aucune GPO n'a été trouvée pour désactiver LLMNR)
- The PowerShell audit configuration is not fully enabled (La journalisation PowerShell n'est pas activée)
- No GPO has been found which implements NetCease (Il n'y a pas de protection contre l'outil Bloodhound)
Nous noterons qu’Harden AD déploie LAPS Legacy (et non Windows LAPS) car cette version permet de prendre des machines avec des OS non supporté comme Windows 2008 R2 ou Windows 7.
D'autres points restent à améliorer, car nous sommes encore loin du score de 0/100, mais cela implique d'activer les stratégies de groupe qui sont pour le moment créées, mais non appliquées. On peut citer la GPO "HAD_Print-Spooler_Disabled" qui va permettre de désactiver le service Spouleur d'impression sur les contrôleurs de domaine (ce qui vous posera problème si votre DC est aussi votre serveur d'impression !).
Sur le contrôleur de domaine, HardenAD déploie une tâche planifiée pour purger des groupes à partir d'une liste définie dans un fichier XML. Dans ce fichier XML, on peut ajouter le groupe "Administrateur du schema" (sans accent sur le "e") afin qu'il soit purgé de façon automatique (une fois par jour). Cela permettra de corriger le point "The groupe Schema Admins is not empty" relevé par PingCastle et de gagner 10 points au passage.
Pour le moment, la règle "Hardened Paths have been modified to lower the security level" de PingCastle n'est pas gérée par HardenAD, mais cela devrait être intégré dans une future version, car il s'agit simplement d'une stratégie de groupe à configurer et à appliquer. De ce fait, l'équipe d'HardenAD pourrait l'intégrer facilement ! 😉
Tout seul, HardenAD ne parviendra pas à vous faire atteindre un score de 0/100 puisqu'il y a des actions à réaliser de votre côté et qui vont plus loin que de la sécurisation. Voici quelques points non pris en charge de façon légitime :
- Last AD Backup has been performed X day(s) ago (La dernière sauvegarde AD a été effectuée il y a X jour(s))
- Vous devez mettre en place la sauvegarde Active Directory avec Windows Server Backup et/ou une autre solution.
- The subnet declaration is incomplete (La déclaration de sous-réseau est incomplète)
- Dans la console "Sites et services Active Directory", il convient de correctement déclarer ses sites et les sous-réseaux associés.
- Number of accounts which has never-expiring passwords (Nombre de comptes dont les mots de passe n'expirent jamais)
- L'option "Le mot de passe n'expire jamais" est activée sur le compte Administrateur, ce qui ne plait pas à PingCastle. Il convient de décocher cette option et de créer une PSO spécifique pour ce compte avec une expiration dans plusieurs années.
- Policy where the password length is less than 8 characters (Politique dans laquelle la longueur du mot de passe est inférieure à 8 caractères)
- Mise en place d'une politique de mots de passe digne de ce nom...
- The number of DCs is too small to provide redundancy
- Nouveau domaine = 1 seul contrôleur de domaine, ce qui ne permet pas une redondance donc vous devez mettre en place un second DC.
Après avoir exécuté HardenAD, mis en place certains éléments déployés par cet outil et corrigé certains points qui ne sont pas dans le périmètre de l'outil, on parvient à obtenir un score de 0/100 comme le montre le rapport ci-dessous !
Certains points sont relevés par PingCastle à titre d'information et n'influencent pas le score final. On peut citer par exemple :
- Authenticated Users can create DNS records
- DsHeuristics has not been set to enable the mitigation for CVE-2021-42291
- The PreWin2000 compatible group contains "Authenticated Users"
V. Conclusion
HardenAD va grandement vous faciliter la tâche pour améliorer la sécurité de votre AD et respecter les bonnes pratiques en matière d'administration. Dans le même temps, il va aussi durcir la tâche aux attaquants qui chercheraient à s'en prendre à votre environnement.
HardenAD va bien au-delà des recommandations de PingCastle, notamment pour vous accompagner dans la mise en place du tiering. À l'inverse, il ne permet pas de répondre à l'ensemble des points de sécurité, car si vous n'avez pas au moins deux contrôleurs de domaine, ce point sera mis en évidence par PingCastle. Cette limite est compréhensible et c'est à vous de faire le déploiement. Quoi qu'il en soit, atteindre un score de 0/100 dans PingCastle semble plus que jamais accessible ! Et pour une fois, vous pourrez vous féliciter d'avoir une aussi mauvaise note ! 😉
Au-delà de ce score, le plus important c'est d'avoir l'outillage nécessaire (GPO, groupes, utilisateurs, etc.) pour que l'annuaire Active Directory soit bien sécurisé et que l'administration de l'infrastructure respecte les règles de l'art. Toutefois, soyons honnêtes : il faut avoir une bonne connaissance de l'Active Directory et du fonctionnement de Windows pour déployer sereinement le modèle HardenAD.
Dès à présent, vous pouvez envisager la sécurisation de votre annuaire Active Directory grâce à l'outil HardenAD. Vous avez deux options :
- Effectuer le déploiement vous-même, en prenant le temps de configurer l'outil et d'évaluer l'impact des modifications. Pour s'approprier le modèle, il est indispensable d'effectuer un essai sur un environnement de développement.
- Solliciter une entreprise parrain de la communauté (telles que INEXSYA, MSSEC et SYNETIS) ou un membre de la communauté (comme moi) afin d'être accompagné dans le cadre d'une prestation. Cette option est recommandée pour déployer le modèle de sécurité dans les ETI et les grands comptes.
Le modèle HardenAD est en constante évolution pour s'adapter aux nouvelles recommandations et pour être de plus en plus complet. Comme évoqué précédemment dans l'article, n'hésitez pas à contacter l'association que ce soit pour contribuer, poser une question ou obtenir un accompagnement sur un projet de sécurisation Active Directory.
Qu'en pensez-vous ?
Merci pour cette belle découverte, je ne connaissais HardenAD. Bravo à vous, à l’asso et tous les contributeurs.
HardenAD est une vraie mine d’or ! Ayant suivi son développement depuis la v1, les améliorations sont nombreuses. Je l’utilise dans tous les AD mon entreprise pour sécuriser.
Bonjour, j’aurai une question si je pourrais avoir la réponse ça serait super… lorsque j’ajoute les utilisateurs dans les groupes de filtrage de sécurité les gpo ne s’applique pas. j’ai fait un gpresult /r pour voir et il me dit : les objets de stratégies de groupes n’ont pas été appliqués car ils ont été refusés. Comment faire pour les rendre applicable ?
Merci par avance !
Bonjour
Les Gpo Harden Ad sont des Gpo de type Configuration ordinateur.
Il faut ajouter les comptes ordinateurs en tant que membres des groupes qui filtrent l’application des Gpo.
Bonne journée.
Guillaume MATHIEU
Encore un très bon Article merci !
cette outil est tellement une tuerie que j’ai « peur » de l’appliquer en production.
Pourtant ca serait le top car ce qu’il met en oeuvre est ce que nous essayons de faire (difficilement) depuis 2ans.
Alors chaud pour casser une prod ? 😀
Ca ne marcherait pas de créer un nouveau contrôleur de domaine. De lancer HardenAD puis de migrer l’ancien vers le nouveau AD ? Moi aussi trop peur de lancer en production
Bravo pour le boulot,
J’ai mis en place les bonnes pratique en autodidacte depuis un bail et n’ai donc pas utilisé HardenAD mais je trouve l’initiative excellente. Surtout dans un état d’esprit Open Source qui vise à faire monter en maturité la cyber résilience française.
Si je peux me permettre un point de vue constructif :
Attention à ne pas faire penser à un miracle à déployer en quelques minutes. Sur le terrain les entreprises ou organismes ont souvent dû faire des compromis durant la vie de leur ldap, ce qui rend le travail un peu plus complexe qu’un simple « déployez-déplacez-admirez ». (compte génériques, application exotiques ou industrielles nécessitant de vieux protocoles).
De plus la mise en place d’un silo d’authentification est un gros plus pour le tier 0, et ça PingCastle ne le détecte pas du tout (contrairement à ORADAD). Atteindre 0/100 doit être un check point, pas une ligne d’arrivée.
Bonne continuation..