Windows : comment se protéger de la vulnérabilité PrintNightmare ?
Sommaire
I. Présentation
Dans cet article, je vais vous expliquer comment vous protéger contre la vulnérabilité PrintNightmare, associée à la référence CVE-2021-34527 et qui cible le service "Spouleur d'impression" de Windows. Nous mettrons en place une GPO de protection.
PrintNightmare, c'est le nom de la nouvelle vulnérabilité critique qui touche le service "Spouleur d'impression" de Windows et qui inquiète particulièrement, car elle est activement exploitée. D'ailleurs, elle peut être exploitée à distance et lorsqu'une attaque est menée à bien, elle peut permettre à un attaquant de récupérer les droits SYSTEM sur un contrôleur de domaine.
Dans un premier temps, cette vulnérabilité a été associée à une nouvelle manière d'exploiter la faille CVE-2021-1675, corrigée le 8 juin dernier à l'occasion du Patch Tuesday. Mais in fine, il s'agit bien d'une nouvelle faille de sécurité de type Zero Day (qui a fuité un peu par erreur) et qui a sa propre référence CVE : CVE-2021-34527.
La faille de sécurité PrintNightmare concerne de nombreuses versions de Windows : Windows 7, Windows 8.1 et Windows 10, ainsi que toutes les versions de Windows Server depuis Windows Server 2008, y compris en Server Core (installation sans interface graphique).
L'ANSSI estime qu'il faut prendre cette vulnérabilité très au sérieux, tout comme l'agence américaine CISA (Cybersecurity and Infrastructure Security Agency).
- Voir les recommandations CERT-FR (reprises dans cet article)
- Publication de Microsoft
Voici les recommandations à appliquer pour se protéger contre cette vulnérabilité.
[Actualisé le 24 juillet 2021] Actuellement, voici l'état de la situation quant à la résolution de cette vulnérabilité :
Le correctif publié par Microsoft en urgence pour protéger les machines contre la vulnérabilité PrintNightmare serait partiellement inefficace. Par "partiellement inefficace", cela signifie qu'il protège les machines contre l'exécution de code malveillant à distance, mais que l'élévation de privilèges en local (privilèges SYSTEM) semble toujours possible. Pour exploiter cette vulnérabilité, l'attaquant peut inciter l'utilisateur à ouvrir un document malveillant.
Ce nouvel état donne lieu à une nouvelle référence CVE : CVE-2021-34481. A ce jour, il n'existe pas de correctif pour cette vulnérabilité.
II. PrintNightmare : protection contre l'exécution de code à distance
A ce jour, pour se protéger contre la vulnérabilité PrintNightmare, à l'exception de la vulnérabilité CVE-2021-34481, l'ANSSI recommande d'effectuer les actions suivantes.
A. Installation du correctif Microsoft pour PrintNightmare
Bien qu'il corrige partiellement la vulnérabilité PrintNightmare, il est recommandé d'installer le correctif publié par Microsoft dans les plus brefs délais. Voici la liste des correctifs en fonction des versions de Windows :
- Windows 10 version 21H1 (KB5004945)
- Windows 10 version 20H1 (KB5004945)
- Windows 10 version 2004 (KB5004945)
- Windows 10 version 1909 (KB5004946)
- Windows 10 version 1809 et Windows Server 2019 (KB5004947)
- Windows 10 version 1803 (KB5004949)
- Windows 10 version 1507 (KB5004950)
- Windows 10 version 1607 et Windows Server 2016 (KB5004948)
- Windows 8.1 et Windows Server 2012 R2 (patch mensuel : KB5004954 / mise à jour de sécurité seule : KB5004958)
- Windows 7 SP1 et Windows Server 2008 R2 SP1 (patch mensuel : KB5004953 / mise à jour de sécurité seule : KB5004951)
- Windows Server 2008 SP2 (patch mensuel : KB5004955 / mise à jour de sécurité seule : KB5004959)
Note : les versions de Windows 10 qui ne sont plus sous support ne recevront pas de correctifs. C'est le cas de Windows 10 version 1903.
B. Fonctionnalité "Pointer et Imprimer"
Microsoft recommande de configurer la fonctionnalité "Pointer et Imprimer" d'une certaine façon, en mentionnant deux clés de Registre. Ces clés de Registre n'existent pas par défaut.
Si les clés de Registre ne sont pas présentent sur votre machine, il n'est pas nécessaire d'appliquer une modification.
Si les clés de Registre existent sur votre machine, il faut s'assurer que les valeurs soient conformes aux recommandations de Microsoft.
- La clé de registre NoWarningNoElevationOnInstall (DWORD) accessible à l'emplacement "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint" doit être égale à 0
- La clé de registre NoWarningNoElevationOnUpdate (DWORD) située au même emplacement doit être égale à 0
Reste à savoir quant un correctif pour la vulnérabilité CVE-2021-34481 sera disponible.
III. PrintNightmare : les recommandations pour se protéger complètement
Ci-dessous, les recommandations à appliquer sur vos machines avant la mise à disposition du correctif de Microsoft. Elles restent toujours valides pour se protéger complètement contre la vulnérabilité PrintNightmare, y compris la vulnérabilité CVE-2021-34481.
Pour appliquer les recommandations, tenez compte des rôles de vos serveurs (contrôleurs de domaine, serveur d'impression, etc.), mais aussi des postes de travail. En fonction de votre infrastructure et des usages, tout n'est pas forcément applicable sur toutes les machines.
A. Désactiver le service "Spouleur d'impression"
Tout d'abord, il est recommandé de désactiver le service Spouleur d'impression sur les contrôleurs de domaine et sur tous les serveurs où le spouleur d'impression n'est pas utile (ce service gère les interactions entre votre machine et les imprimantes).
Attention : quand ce service est arrêté, il n'est plus possible d'imprimer à partir de l'hôte local. Cela n'est pas gênant sur la majorité des serveurs, mais à l'inverse cela peut être problématique sur les postes de travail.
Pour définir le type de démarrage "Désactivé" sur le service "Spouleur d'impression" ou "Print Spooler" en anglais. Voici la commande PowerShell qui permet d'effectuer cette configuration :
Set-Service -Name Spooler -StartupType Disabled
Une fois que le type de démarrage du service est modifié, il faut arrêter le service. En PowerShell, cela donne :
Stop-Service -Name Spooler
Une autre manière de faire consiste à créer une GPO. Grâce à cette GPO, on va pouvoir désactiver le service et l'arrêter. Parcourez les paramètres de cette façon :
Configuration ordinateur > Préférences > Paramètres du Panneau de configuration > Services
Créez une nouvelle configuration de service via un clic droit et configurez-le de cette façon :
Note : pour appliquer cette configuration de service à seulement certains hôtes, vous pouvez utiliser le ciblage avancé sur cet élément via l'onglet "Commun".
Sachez que de manière générale, sans parler de cette faille de sécurité, il est recommandé de désactiver le "Spouleur d'impression" sur les contrôleurs de domaine.
Passons à la seconde recommandation.
B. Bloquer les interactions distantes sur le Spouleur d'impression
Le paramètre "Autoriser le spouleur d'impression à accepter les connexions des clients" doit être désactivé pour bloquer les connexions en question.
Attention : quand ce paramètre est désactivé, les demandes d'impression distantes sont refusées. Concrètement, vous ne pouvez plus partager d'imprimantes sur l'hôte où s'applique cette stratégie. Par contre, il est toujours possible d'imprimer (sauf si le service Spouleur d'impression est arrêté) : ce qui est intéressant pour les postes clients. Il n'y a que le serveur d'impression que ça devrait gêner, finalement.
Toujours dans une GPO, ce paramètre est accessible à cet endroit :
Configuration ordinateur > Stratégies > Modèles d'administration > Imprimantes
C. Configurer le pare-feu Windows
L'ANSSI recommande "d'interdire les connexions entrantes sur les ports 445 et 139 (canaux nommés SMB) ainsi qu'interdire les connexions à destination du processus spoolsv.exe". Là encore, nous pouvons agir par GPO et ces règles sont là pour protéger les postes de travail puisqu'ils ont besoin du service d'impression.
Note : si vous utilisez le pare-feu de votre Endpoint, ce n'est pas utile de configurer le pare-feu de Windows par GPO : modifiez directement la politique de votre solution de sécurité pour créer des règles.
Suivez le chemin suivant :
Configuration ordinateur > Stratégies > Paramètres Windows > Paramètres de sécurité > Pare-feu Windows Defender avec fonctions avancées de sécurité (x2) > Règles de trafic entrant
Créer une nouvelle règle de trafic entrant via un clic droit : un assistant va démarrer.
Pour le type de règle, on ne va pas s'embêter à créer nos propres règles, car ce que l'on cherche à faire correspond à un modèle prédéfini. Choisissez "Partage de fichiers et d'imprimantes".
Cochez ensuite toutes les règles pour tout bloquer.
Concernant l'action à appliquer, choisissez "Bloquer la connexion". Bien sûr. 😉
Une fois la règle créée, vous obtenez le résultat ci-dessous. Ce qui pourrait vous gêner éventuellement, c'est le blocage du SMB pour l'accès distant aux fichiers des machines. Là encore, testez et surtout adaptez en fonction des rôles de la machine ciblée.
D. Détection d'une attaque sur le système
Lorsqu'une machine est victime de la faille de sécurité PrintNightmare, elle va générer des événements que l'on peut capturer et détecter à l'aide de l'Observateur d'événement de Windows, au sein du journal lié à la sécurité, mais aussi du journal de l'outil System Monitor (s'il est installé). Ces logs peuvent être collectés et analysés dans un outil adapté de type SIEM.
L'ANSSI indique qu'il faut prêter attention à l'événement avec un ID 4688 lorsqu'il est généré par le processus spoolsv.exe (Spouleur d'impression). Ce type d'événement n'est pas généré par défaut, voici comment l'activer.
Pour assurer un suivi des processus dans l'observateur d'événements, il faut activer le paramètre "Auditer le suivi des processus". Il se situe à cet emplacement :
Configuration ordinateur > Paramètres Windows > Paramètres de sécurité > Stratégies locales > Stratégie d'audit
Ensuite, pour générer les événements avec l'ID 4688, il faut activer le paramètre "Inclure une ligne de commande dans les événements de création de processus" qui se trouve sous :
Configuration ordinateur > Stratégies > Modèles d'administration > Système > Audit de création de processus
Sur les serveurs où l'application des règles de protection n'est pas possible, il est d'autant plus important de mettre en place cette génération des logs et d'en assurer la surveillance.
Quelques mots pour finir...
- Sur les postes de travail et les serveurs (autre que contrôleur de domaine et serveur d'impression), il sera possible dans la majorité des cas de désactiver le paramètre de GPO "Autoriser le spouleur d'impression à accepter les connexions des clients" et de configurer le pare-feu Windows, ce qui permettra de se protéger.
- Sur les contrôleurs de domaine, on pourra désactiver et arrêter le service Spouleur d'impression, et désactiver le paramètre de GPO "Autoriser le spouleur d'impression à accepter les connexions des clients" en complément. Si vous manipulez le pare-feu, attention avec les règles qui bloquent le SMB, vous allez avoir de mauvaises surprises : cela va bloquer l'accès au partage SYSVOL.
- Sur les serveurs d'impression, cela semble difficile d'appliquer ces recommandations sans remettre en cause le bon fonctionnement du service d'impression. Si vous utilisez une solution d'impression tierce avec son propre spouleur, alors ce sera surement une chance, car vous pourrez probablement appliquer une ou plusieurs de ces recommandations. Sinon, il faut mettre les serveurs d'impressions sous surveillance.
J'espère que cet article pourra vous aider à combattre la vulnérabilité PrintNightmare ! Bon courage !
Article actualisé le 24 juillet 2021.
Hello
Merci pour les explications et recommandations.
Pour Linux y a t’il des recommandations spécifiques quant au spouleur ?
Et merci pour les articles réguliers et toujours documentés.
@+
Hello Christophe,
En l’occurrence cette faille de sécurité ne touche pas Linux, mais peut-être que tu posais la question de manière générale?
Bonne journée
Florian
Bonjour,
En voyant la date de l’article et faisant mes recherches, j’ai lu que la mise à jour CVE-2021-36958 (publiée en Aout 2021) corrigeait cette vulnérabilité si jamais.
Bonne journée.