Cybersécurité : durcir la configuration de Windows et Windows Server avec HardeningKitty
Sommaire
I. Présentation
Dans ce tutoriel, nous allons effectuer le durcissement de configuration de machines sous Windows à l'aide d'un outil open source nommé HardeningKitty. Autrement dit, nous allons analyser la configuration de notre machine pour voir si elle répond aux bonnes pratiques en matière de sécurité.
Ceci est nécessaire car la configuration par défaut d'un système d'exploitation, que ce soit Linux ou Windows, n'est pas en adéquation avec les bonnes pratiques de sécurité. Certaines recommandations peuvent être trop contraignantes et la configuration doit être adaptée en tenant compte du contexte et des besoins de l'entreprise. Ainsi, c'est à l'administrateur système de faire le nécessaire pour améliorer la sécurité des postes de travail et des serveurs. Le hardening, ou durcissement, va permettre de réduire la surface d'attaque d'une machine.
Dans cet exemple, nous allons durcir la configuration d'un serveur Windows Server 2022, mais la procédure est identique pour une machine Windows 10 ou Windows 11 (d'ailleurs Windows 11 est utilisé pour la vidéo), ainsi que pour des versions plus anciennes de Windows Server. L'essentiel étant de récupérer l'image ISO d'installation depuis le site officiel de l'éditeur, en l'occurrence ici : Microsoft.
II. Les guides de bonnes pratiques pour Windows
Vers qui se tourner pour obtenir des informations sur ces fameuses bonnes pratiques de configuration pour améliorer la sécurité de Windows ?
A. Microsoft Security Baselines
Tout d'abord, il faut savoir que Microsoft propose un ensemble de documents baptisés "Microsoft Security baseline" et correspondants à chaque version de Windows, Windows Server, et certaines applications comme le navigateur Microsoft Edge.
À chaque fois, Microsoft propose une documentation pour lister chaque paramètre à configurer et de quelle façon. Celle-ci est accompagnée par des modèles de GPO, ainsi que des modèles d'administration pour ces mêmes GPO (ADMX), et des scripts PowerShell.
Vous pouvez télécharger ces documents via ce lien.
B. Les guides du CIS Benchmark
Le CIS (Center for Internet Security) propose un ensemble de guides de bonnes pratiques pour de nombreux produits et services : Windows, Windows Server, Debian, Cisco, Apache, Fortinet, Google Chrome, Google Workspace, Kubernetes, SQL Server, VMware, Azure, etc... Ces guides, maintenus à jour au fil des versions, ont une excellente réputation. Ils sont très souvent utilisés comme référence lorsque l'on souhaite durcir la configuration d'un système ou d'une application.
Vous pouvez télécharger ces guides gratuitement, après avoir complété un formulaire où l'on vous demandera quelques informations vous concernant.
Si l'on prend l'exemple du guide dédié à Windows Server 2022, il contient 1065 pages. Pour chaque paramètre de configuration à modifier, vous avez une description, des notes, une explication (quel est l'intérêt d'activer / configurer tel paramètre), et les impacts potentiels. Il existe également des versions estampillées STIG (Security Technical Implementation Guide) où il y a un focus supplémentaire sur la partie cybersécurité.
Très intéressant, mais rapidement chronophage.
Vous pouvez télécharger ces guides via cette page.
C. Les autres ressources
Au-delà des ressources proposées par Microsoft et les guides du CIS, nous pouvons compter sur ceux d'autres organisations et entités : l'ANSSI en France, la BSI en Allemagne (l'équivalent de l'ANSSI), la CISA aux Etats-Unis, etc...
Mais à chaque fois, vous ferez surement le même constat :
- Comment comparer les recommandations d'un guide avec la configuration d'un serveur ou d'un poste de travail ?
- Comment configurer un serveur ou un poste de travail afin de respecter les bonnes pratiques sans devoir y passer "un temps fou" ?
C'est exactement pour répondre à ces deux problématiques que vous devez vous intéresser à HardeningKitty.
III. Découverte de HardeningKitty
A. HardeningKitty, c'est quoi ?
HardeningKitty est un outil gratuit que vous pouvez utiliser à la fois pour auditer la configuration de votre système et effectuer le durcissement de celle-ci. HardeningKitty est capable de s'appuyer sur la liste de recommandations de l'auteur de l'outil, mais également d'autres "security baselines" comme celles de Microsoft et du CIS. Ainsi, vous allez pouvoir automatiser le hardening de Windows 10, Windows 11, Windows Server, etc.
Le durcissement va modifier différents composants et services de votre système d'exploitation dans le but de réduire la surface d'attaque (ASR), configurer les journaux d'audit de Windows, configurer le pare-feu Windows Defender, activer / désactiver / configurer certaines fonctionnalités, etc. Dans une grande majorité des cas, HardeningKitty modifie le Registre pour effectuer la configuration.
Pour accéder au projet HardeningKitty sur GitHub, il y a deux liens. Un lien vers le projet source d'origine, et un lien vers un autre dépôt où vous pouvez retrouver chaque version stable signée par le certificat de scip AG. Ceci signifie que le script PowerShell d'HardeningKitty peut être exécuté sur une machine Windows même si elle autorise uniquement l'exécution de scripts signés (ceci fait écho à la stratégie d'exécution PowerShell).
B. Prenez des précautions
Avant d'effectuer des modifications en masse sur votre machine Windows, il est primordial d'assurer vos arrières. Autrement dit, prenez les précautions habituelles : testez les modifications sur un environnement de tests et vérifiez vos sauvegardes.
Au-delà de permettre l'audit de la configuration d'une machine, HardeningKitty peut déployer la nouvelle configuration durcie. Forcément, ceci peut être à l'origine d'un ou plusieurs effets de bords. Nous verrons également qu'il y a une fonction de "backup" dans HardeningKitty.
Remarque : vous pouvez aussi envisager d'effectuer une sauvegarde de la base de Registre Windows, et même créer un snapshot s'il s'agit d'une machine virtuelle.
IV. Utilisation d'HardeningKitty sur Windows
A. Télécharger HardeningKitty
Commencez par télécharger la dernière version signée depuis GitHub. Pour ma part, il s'agit de la version 0.9.2. Vous obtenez une archive ZIP qu'il suffit de décompresser afin d'obtenir un ensemble de fichiers, notamment le module PowerShell correspondant à HardeningKitty.
Notez également la présence du dossier "lists" qui contient un ensemble de fichiers CSV : un fichier CSV par liste de bonnes pratiques supportées par l'outil.
Nous avons à chaque fois deux fichiers CSV : un pour les paramètres de l'ordinateur (machine) et un pour les paramètres de l'utilisateur (user).
B. Sauvegarde de la configuration actuelle
Avant même d'auditer notre configuration ou d'effectuer la moindre modification sur le système, nous allons sauvegarder l'état actuel. Attention, quand vous utilisez HardeningKitty, vous devez effectuer une sauvegarde correspond à la liste ou aux listes que vous envisagez de "déployer" par la suite.
Dans cet exemple, nous allons utiliser ces deux listes :
- CIS Microsoft Windows Server 2022 (Machine) - 22H2 - 2.0.0
- Soit le fichier : finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_machine.csv
- CIS Microsoft Windows Server 2022 (User) - 22H2 - 2.0.0
- Soit le fichier : finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_user.csv
Ouvrez une console PowerShell en tant qu'administrateur afin de pouvoir utiliser l'outil.
Positionnez-vous dans le répertoire d'HardeningKitty et importez le module :
cd C:\users\Administrateur\Downloads\HardeningKitty-v.0.9.2\
Import-Module .\HardeningKitty.psm1
Pour effectuer la sauvegarde des paramètres machines et utilisateurs pour les listes évoquées ci-dessus, utilisez ces commandes :
# Paramètres machine
Invoke-HardeningKitty -Mode Config -Backup -BackupFile ".\Backup_$($env:COMPUTERNAME)_$(Get-Date -Format yyyyMMdd-hhmm)_Machine.csv" -FileFindingList ".\lists\finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_machine.csv"
# Paramètres utilisateur
Invoke-HardeningKitty -Mode Config -Backup -BackupFile ".\Backup_$($env:COMPUTERNAME)_$(Get-Date -Format yyyyMMdd-hhmm)_User.csv" -FileFindingList ".\lists\finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_user.csv"
À chaque fois, nous obtiendrons un fichier de "sauvegarde" au format CSV dont le nom sera constitué de la façon suivante :
- Backup_<nom de l'ordinateur>_<Date et heure actuelle>_<Machine ou User>.csv
Quelques secondes ou minutes sont nécessaires pour effectuer la sauvegarde.
Quand c'est fait, nous obtenons deux fichiers :
C. Auditer la configuration de la machine
La sauvegarde de la configuration étant effectuée, nous allons pouvoir auditer notre machine. Là encore, nous allons bien spécifier les noms des listes que nous souhaitons utiliser comme référence.
HardeningKitty doit être utilisé en mode "Audit" :
# Audit des paramètres machine
Invoke-HardeningKitty -Mode Audit -Log -Report -FileFindingList ".\lists\finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_machine.csv"
# Audit des paramètres utilisateur
Invoke-HardeningKitty -Mode Audit -Log -Report -FileFindingList ".\lists\finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_user.csv"
À chaque fois, HardeningKitty indique une note globale ainsi que le nombre de paramètres vérifiés et les résultats associés. Ici, nous pouvons qu'il y a eu 459 paramètres vérifiés et qu'il y en a 312 points de configuration à améliorer. L'idée étant de se concentrer en priorité sur ceux considérés comme "Medium" et "High". Imaginez un instant effectuer toutes ces corrections manuellement...
Your HardeningKitty score is: 3.57. HardeningKitty Statistics: Total checks: 459 - Passed: 147, Low: 43, Medium: 269, High: 0.
Le résultat dépend clairement de la liste utilisée. En effet, sur une même machine, mais avec la liste de vérification par défaut de l'outil (qui est le fruit de l'expertise de l'auteur de cet outil - Elle est estampillée Windows 10 !), le score obtenu est totalement différent :
Your HardeningKitty score is: 3.22. HardeningKitty Statistics: Total checks: 391 - Passed: 79, Low: 68, Medium: 243, High: 1.
Si l'on s'appuie sur la liste de Security Baseline de Microsoft pour Windows Server 2022, en prenant la configuration adaptée pour les contrôleurs de domaine (ici, l'outil est utilisé sur un DC), le résultat est encore différent :
# Exécuter l'audit :
Invoke-HardeningKitty -Mode Audit -Log -Report -FileFindingList ".\lists\finding_list_msft_security_baseline_windows_server_2022_21h2_dc_machine.csv"
# Résultat obtenu :
Your HardeningKitty score is: 3.2. HardeningKitty Statistics: Total checks: 328 - Passed: 74, Low: 27, Medium: 227, High: 0.
- Nommer le rapport d'audit
Afin de pouvoir effectuer une analyse et avoir un bon aperçu de l'état actuel de la configuration du serveur, il est préférable de générer un rapport d'audit. Ceci est déjà le cas avec le paramètre "-Report". HardeningKitty va générer un fichier CSV que l'on pourra exploiter dans Excel.
Pour créer un rapport avec le nom de votre choix, ajoutez le paramètre "-ReportFile" suivi du nom du fichier. Nous allons réutiliser la même logique pour le nom du fichier de rapport. Voici un exemple :
Invoke-HardeningKitty -Mode Audit -Log -Report -FileFindingList ".\lists\finding_list_msft_security_baseline_windows_server_2022_21h2_dc_machine.csv" -ReportFile ".\Audit_$($env:COMPUTERNAME)_$(Get-Date -Format yyyyMMdd-hhmm)_Machine.csv"
En sortie, le fichier suivant est obtenu :
Audit_SRV-ADDS-01_20240228-1259_Machine.csv
Si nous l'ouvrons avec Excel, nous pouvons appliquer différents filtres, un tri, etc... pour analyser les résultats.
- Affiner l'audit avec un filtre
Si vous souhaitez effectuer un audit en tenant compte uniquement des points dont la sévérité est élevée, vous pouvez ajouter un filtre comme ceci :
Invoke-HardeningKitty -Filter { $_.Severity -eq "High" } -FileFindingList ".\lists\finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_machine.csv"
Lorsque la phase d'audit est terminée, vous pouvez passer à l'action : demander à HardeningKitty de durcir la configuration de votre machine.
Remarque : comment est calculé le score d'audit ? Sachez que la formule utilisée pour calculer le score d'HardeningKitty est la suivante : (Points obtenus / Maximum de points) * 5 + 1.
D. Durcir la configuration de la machine
Pour durcir la configuration de la machine Windows Server 2022, nous utilisons le mode "HailMary" (Ave Maria). A ce sujet, la documentation officielle précise : "La méthode HailMary est très puissante. Elle peut être utilisée pour déployer une liste de résultats sur un système. Tous les résultats sont placés sur ce système selon les recommandations de la liste. Le pouvoir s'accompagne de la responsabilité. N'utilisez ce mode que si vous savez ce que vous faites. Assurez-vous d'avoir une copie de sauvegarde du système."
Le mode HailMary va nous permettre de déployer tous les paramètres de configuration contenus dans les deux listes que nous avons choisi d'utiliser.
- Voici la commande à exécuter pour déployer les paramètres ordinateurs :
Invoke-HardeningKitty -Mode HailMary -Log -Report -FileFindingList ".\lists\finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_machine.csv"
- Voici la commande à exécuter pour déployer les paramètres utilisateurs :
Invoke-HardeningKitty -Mode HailMary -Log -Report -FileFindingList ".\lists\finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_user.csv"
Sachez qu'avant d'effectuer des modifications sur votre machine, HardeningKitty va créer un point de restauration. Si le point de restauration ne peut pas être créé, ce qui sera le cas sur Windows Server car il faut utiliser la Sauvegarde Windows à la place, l'opération est arrêtée immédiatement. Nous devons donc réexécuter les commandes avec le paramètre "-SkipRestorePoint".
Invoke-HardeningKitty -Mode HailMary -Log -Report -FileFindingList ".\lists\finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_machine.csv" -SkipRestorePoint
À chaque fois, et puisque nous avons précisé les paramètres "-Log" et "-Report", un fichier journal et un fichier de rapport (CSV) seront générés. Le fichier de log reprend toutes les lignes visibles dans la console. Voici un extrait du fichier journal "hardeningkitty_log_srv-adds-01_finding_list_cis_microsoft_windows_server_2022_22h2_2.0.0_machine-20240228-113957.log" :
[*] 28/02/2024 11:40:15 - Starting Category Administrative Templates: Windows Components
ID 18.10.89.1.1, HKLM:\Software\Policies\Microsoft\Windows\WinRM\Client, AllowBasic, Registry key created
ID 18.10.89.1.1, HKLM:\Software\Policies\Microsoft\Windows\WinRM\Client, AllowBasic, Registry value created/modified
ID 18.10.89.1.2, HKLM:\Software\Policies\Microsoft\Windows\WinRM\Client, AllowUnencryptedTraffic, Registry value created/modified
ID 18.10.89.1.3, HKLM:\Software\Policies\Microsoft\Windows\WinRM\Client, AllowDigest, Registry value created/modified
ID 18.10.89.2.1, HKLM:\Software\Policies\Microsoft\Windows\WinRM\Service, AllowBasic, Registry key created
ID 18.10.89.2.1, HKLM:\Software\Policies\Microsoft\Windows\WinRM\Service, AllowBasic, Registry value created/modified
ID 18.10.89.2.2, HKLM:\Software\Policies\Microsoft\Windows\WinRM\Service, AllowAutoConfig, Registry value created/modified
ID 18.10.89.2.3, HKLM:\Software\Policies\Microsoft\Windows\WinRM\Service, AllowUnencryptedTraffic, Registry value created/modified
ID 18.10.89.2.4, HKLM:\Software\Policies\Microsoft\Windows\WinRM\Service, DisableRunAs, Registry value created/modified
Mais, priorisez la lecture du rapport avec Excel, ou un autre outil, pour l'analyse post-hardening. Ce rapport permet d'avoir une liste exhaustive des changements de configuration effectués.
Par la suite, si vous avez besoin de revenir en arrière, vous pouvez restaurer la configuration via cette commande (en adaptant le nom du fichier CSV) :
Invoke-HardeningKitty -Mode HailMary -Log -Report -FileFindingList ".\Backup_SRV-ADDS-01_20240228-1128_user.csv" -SkipRestorePoint
V. Conclusion
Si vous souhaitez durcir la configuration de vos machines en vous appuyant sur les recommandations de Microsoft, du CIS, du BSI, ou du DoD, alors HardeningKitty est probablement l'outil qu'il vous faut ! L'utilisation de cet outil devrait vous permettre de gagner énormément de temps. Néanmoins, vous devez prendre le temps d'analyser le contenu de ces guides et devez avoir une bonne connaissance de votre infrastructure et de ses particularités. Ceci vous permettra d'anticiper les éventuels effets de bords.
D'ailleurs, si vous envisagez de déployer la configuration recommandée par le CIS Benchmark, vous devez parcourir chaque guide afin d'avoir un aperçu des fonctions et services de Windows qui seront affectés lorsque le déploiement sera fait avec HardeningKitty. Cette recommandation s'applique également pour les autres guides.
Le seul bémol, c'est le fait qu'il soit nécessaire de l'exécuter machine par machine : ce qui pourra s'avérer utile lors de la création d'un master (image de référence) pour vos postes de travail ou serveur. En effet, ceci vous permettra de créer une image durcie.
HardeningKitty intègre bien un paramètre mode "GPO" (-Mode GPO) permettant de convertir une liste de résultats en une stratégie de groupe (GPO). Toutefois, ceci semble encore expérimental : "Pour l'instant, seuls les paramètres de registre peuvent être convertis et tout n'a pas encore été testé."
Merci pour cette belle découverte.
Testé en lab, c’est top !
Testé aussi, c’est top ! merci
Top cette article! Je cherchais quelque chose du genre pour Windows 11
Merci 😉
Merci, dans le cadre de la création d’une image template, conseillez vous quand même de passer par une GPO ? En effet, si l’on met les paramètres en dur dans le modèle, en cas de modification il faudra repasser sur chaque serveur crée alors que par GPO cela sera centralisé ?
Bonne question
Bonjour Florian, avec tes connaissance du produit WAPT, trouverais-tu utile qu’un paquet WAPT d’audit soit créé basé sur cette solution ?
Est-ce que ça marche aussi pour durcir une machine faisant partie d’un domaine?
Salut florian,
cela ne marche pas quand j’applique le mode HailMary , problème de langue apparemment, je ne comprends pas l’audit fonctionne mais pas le durcissement. 🙁
[*] 07/10/2024 12:52:21 – Language warning
[?] 07/10/2024 12:52:21 – HardeningKitty was developed for the system language ‘en-US’. This system uses ‘fr-FR’ Language-dependent analyses can sometimes produce false results. Please create an issue if this occurs.
merci pour cette magnifique présentation Florian , j’aurai une question si je veux durcir les postes de mon Parc , c’est possible de procéder de cette manière : je lance la copie du dossier Hardeningkitty sur le C de chaque machine via une GPO et ensuite créer une tache planifier pour une exécution immédiate des script pour initier le durcissement des postes c’est une bonne démarche ou vous avez une proposition plus simple je vous remercie d’avance