Plus d’informations sur le mode d’impression protégé de Windows pour les entreprises
Pour en savoir plus sur les bases du mode d’impression protégé de Windows pour les entreprises et les développeurs, veuillez consulter la section Mode d’impression protégé de Windows pour les entreprises et les développeurs.
Le système d’impression Windows a historiquement été une cible fréquente pour les attaques, et les bugs d’impression représentaient 9 % de tous les cas signalés au Microsoft Security Response Center (MSRC) au cours des trois dernières années. Le service Spooler, qui gère la gestion des imprimantes, la conversion des données et bien d’autres tâches, est le cœur du système d’impression Windows. Ce processus s’exécute en tant que SYSTEM, l’un des niveaux de privilège les plus élevés de Windows, ce qui en fait une cible attrayante. Le Spooler est également largement accessible aux utilisateurs standard et charge du code tiers à la demande. Ces pilotes étaient historiquement nécessaires pour prendre en charge une large gamme d’imprimantes à une époque où l’industrie manquait de normes uniformes pour la gestion des documents et la communication avec les imprimantes. Cet écosystème vaste de pilotes provenant de divers fabricants permet à Windows de prendre en charge un large éventail d’imprimantes plus anciennes et leurs plus de 40 langages de description de page (PDL). Cependant, cette complexité rend difficile l’adoption d’un ensemble commun de critères. Cette complexité présente de nombreux défis en matière de sécurité qui limitent la capacité de Microsoft à fournir des options plus sûres pour les utilisateurs. Cette rubrique aborde les défis liés à la sécurisation de la pile d’impression et partage des informations qui peuvent aider les utilisateurs aujourd’hui. Elle donne également un aperçu d’une collaboration entre l’équipe Microsoft Offensive Research & Security Engineering (MORSE) et l’équipe Windows Print sur ce que nous pensons être l’avenir de l’impression Windows, une révision de la pile d’impression basée sur IPP qui ne charge plus les pilotes tiers et fonctionne avec une surface d’attaque réduite.
Le problème des pilotes
Le modèle de sécurité des pilotes d’impression repose sur un modèle de responsabilité partagée où la pile d’impression de Windows et les pilotes tiers doivent chacun jouer un rôle pour fournir des fonctionnalités et respecter les promesses de sécurité tout en évitant d’introduire des vulnérabilités. Ceci est similaire à d’autres sous-systèmes de Windows, mais l’impression est un scénario difficile car les clients souhaitent que le processus soit sans friction lors du chargement de code distant dans un processus système hautement privilégié.
Le chargement de code provenant de tiers présente plusieurs défis du point de vue de la sécurité. Non seulement vous devez vous assurer que vous chargez le code que vous aviez l’intention de charger, mais ce code peut également modifier le comportement de votre application de manière inattendue. Par exemple, les pilotes prennent en charge une logique de parsing complexe qui peut entraîner des bugs permettant de prendre le contrôle total du Spooler ou du processus d’impression associé. En cas de découverte d’une vulnérabilité dans un pilote, Microsoft dépend du tiers pour mettre à jour le pilote. Lorsque les éditeurs n’existent plus ou considèrent les anciens produits comme étant hors support, il n’y a pas de solution claire pour résoudre la vulnérabilité.
La dépendance aux pilotes tiers dans un modèle de responsabilité partagée limite l’agilité de Microsoft et les options pour sécuriser les clients. Nous sommes souvent à la pointe des nouvelles protections de sécurité, mais nous ne pouvons pas les déployer uniformément lors du chargement de code tiers.
Compatibilité
Un des défis liés aux pilotes d’impression est leur ancienneté. De nombreux pilotes d’impression ont plusieurs décennies et sont incompatibles avec les mesures de sécurité modernes telles que Control Flow Guard (CFG), Control Flow Enforcement Technology (CET), Arbitrary Code Guard (ACG) et de nombreuses autres protections que Microsoft a mises en œuvre au fil des ans. Ces protections sont souvent « tout ou rien », ce qui signifie que tous les binaires participants doivent prendre des mesures pour être compatibles pour que la protection soit efficace. Étant donné que tous les fabricants d’imprimantes n’ont pas pris les mesures nécessaires pour mettre à jour ces pilotes, le service d’impression ne bénéficie actuellement pas de ces mesures modernes de protection contre les exploits. Si une vulnérabilité est découverte, les attaquants ont plus de chances de réussir à l’exploiter.
Permissions excessives
La pile d’impression Windows conserve de nombreux aspects de son design d’origine, vieux de plus de deux décennies. Le Spooler d’impression s’exécute en tant que SYSTEM avec des privilèges spéciaux qui le rendent plus puissant que les comptes Administrateur standard sur Windows. Les pilotes chargés dans le Spooler (y compris les pilotes tiers) fonctionnent à ce niveau de privilège pour l’impression de documents de base et la gestion des requêtes des utilisateurs. Pour chaque requête de l’utilisateur que le Spooler reçoit, il doit déterminer le bon niveau d’accès pour cette tâche, ce qui peut s’avérer difficile.
L’une des raisons pour lesquelles le Spooler maintient ces permissions est liée aux préoccupations de compatibilité descendante. Des milliers de pilotes, fabriqués au cours des 30 dernières années, sont utilisés dans Windows, et il est difficile d’identifier tous les risques possibles pour les utilisateurs.
La solution idéale serait de supprimer complètement les pilotes et de déplacer le Spooler vers un modèle de sécurité de moindre privilège. Certaines opérations peuvent nécessiter des privilèges de niveau SYSTEM, mais la plupart ne le nécessitent certainement pas. Le défi auquel nous sommes souvent confrontés chez Microsoft est que toute solution doit tenir compte des exigences de compatibilité de nos clients. Équilibrer ce besoin avec le désir d’améliorer la sécurité est une tâche difficile. Heureusement, nous pensons avoir une solution.
Notions de base de IPP
IPP est un protocole basé sur HTTP et prend en charge de nombreuses méthodes d’authentification que l’on attend de HTTP. Chaque requête IPP est un message HTTP POST, et les imprimantes sont identifiées à l’aide d’URIs tels que ipps://printer.example.com/ipp/print. IPP prend en charge toutes les opérations courantes que l’on attend d’une imprimante telles que :
Create-Job : Créer un nouveau travail d’impression
Send-Document : Ajouter un document à un travail d’impression
Print-Job : Créer un nouveau travail d’impression avec un seul document
Get-Printer-Attributes : Obtenir le statut et les capacités de l’imprimante
Get-Jobs : Obtenir une liste des travaux en file d’attente
Get-Job-Attributes : Obtenir le statut et les options du travail
Cancel-Job : Annuler un travail en file d’attente
L’impression sans pilote prend en charge un nombre limité de PDL basés sur des standards publics tels que PWG Raster et PDF. Cela limite le nombre unique de formats que le système d’exploitation doit gérer pour la conversion et simplifie grandement le code. Le rendu côté client est utilisé pour générer le document final envoyé à l’imprimante.
Application de support d’impression (PSA)
Les PSA permettent aux OEM et aux IHVs d’imprimantes d’étendre notre prise en charge IPP existante pour répondre à leurs besoins spécifiques. Toutes les imprimantes ne prennent pas en charge les mêmes fonctionnalités et options de configuration. Les PSA permettent des expériences utilisateur personnalisées sans compromettre l’expérience que les utilisateurs attendent.
Point and Print
Point and Print est une fonctionnalité qui permet aux utilisateurs de se connecter à une imprimante distante sans fournir de pilotes, et dispose de tous les pilotes nécessaires installés sur le client. Point and Print reste avec IPP, mais fonctionne différemment. Nous n’avons plus besoin d’installer de pilotes, mais une configuration de base est nécessaire pour configurer l’imprimante. Ce processus fonctionne comme suit avec IPP :
Le client et le serveur Windows établissent une connexion via RPC
Le serveur et le client utilisent leur pilote IPP Microsoft inclus
Le serveur utilise IPP pour communiquer avec l’imprimante
Le PSA est installé, si disponible
Sécurité
L’impression basée sur IPP dans Windows supprime aujourd’hui la nécessité des pilotes tiers. IPP prend en charge le chiffrement des transports, et avec un nombre limité de PDL pris en charge, la complexité du parsing est considérablement réduite. Il s’agit d’une amélioration significative par rapport au modèle nécessitant l’utilisation de pilotes.
L’impression IPP dans Windows est déjà une grande avancée du point de vue de la sécurité, et nous encourageons les utilisateurs à passer à cette solution dès que possible. Nous encourageons également les administrateurs à donner la priorité à cette action dans toute leur flotte.
Sécurité du Spooler en mode d’impression protégé de Windows
Le mode d’impression protégé de Windows repose sur la pile d’impression IPP existante, où seules les imprimantes certifiées Mopria sont prises en charge, et désactive la possibilité de charger des pilotes tiers. En faisant cela, nous pouvons apporter des améliorations significatives à la sécurité de l’impression dans Windows qui ne pourraient autrement se produire. Notre objectif est de fournir à terme la configuration par défaut la plus sécurisée et de donner la flexibilité de revenir à l’impression basée sur des pilotes (héritée) à tout moment, si les utilisateurs constatent que leur imprimante n’est pas compatible. Pour utiliser le mode d’impression protégé de Windows, assurez-vous que les imprimantes ont IPP activé.
Lorsque les utilisateurs activent le mode d’impression protégé de Windows, les opérations normales du Spooler sont différées vers un nouveau processus Spooler qui met en œuvre les améliorations du mode d’impression protégé de Windows. Examinons certaines de ces modifications.
Configuration d’impression limitée et sécurisée
En mode d’impression protégé de Windows, de nombreuses configurations héritées ne sont plus valides. Une attaque courante sur Windows consistait à exploiter le fait qu’un moniteur de port d’imprimante puisse être une bibliothèque de liens dynamiques (DLL), et les attaquants en abusaient pour charger du code malveillant. Les attaquants utilisaient également des liens symboliques pour tromper le Spooler afin qu’il charge du code malveillant, ce qui n’est plus possible. De nombreuses API héritées sont mises à jour pour restreindre la configuration à des valeurs qui ont du sens uniquement lors de l’utilisation d’IPP. Cela limite les opportunités pour les attaquants d’utiliser le Spooler pour modifier des fichiers sur le système.
Blocage des modules
Les API qui permettent le chargement de modules seront modifiées pour empêcher le chargement de nouveaux modules. Par exemple, AddPrintProviderW et d’autres appels aboutiraient au chargement de modules qui pourraient être malveillants. Nous appliquerons également une restriction qui garantit que seuls les binaires signés par Microsoft requis pour IPP sont chargés.
Rendu XPS par utilisateur
Le rendu XPS s’exécute en tant qu’utilisateur au lieu de SYSTEM en mode d’impression protégé de Windows. La plupart des travaux d’impression dans Windows impliquent aujourd’hui une certaine conversion XPS, et le processus qui gère cette tâche (PrintFilterPipelineSVC) est la source de nombreuses vulnérabilités de corruption de mémoire. Comme pour les autres problèmes, en exécutant ce processus en tant qu’utilisateur, l’impact de ces bugs est minimisé.
Privilèges réduits pour les tâches courantes du Spooler
La suppression des pilotes nous permet également de prendre les tâches courantes effectuées par le processus Spooler et de les déplacer vers un processus s’exécutant en tant qu’utilisateur. Si ces processus présentent des vulnérabilités de corruption de mémoire, l’impact est limité aux actions que seul l’utilisateur peut effectuer.
Le nouveau processus Spooler Worker dispose d’un nouveau jeton restreint qui supprime de nombreux privilèges tels que SeTcbPrivilege, SeAssignPrimaryTokenPrivilege, et ne s’exécute plus au niveau SYSTEM IL.
Atténuations binaires
En supprimant les binaires tiers, nous pouvons désormais activer de nombreuses atténuations binaires dans lesquelles Microsoft a investi au fil des ans. Les processus en mode d’impression protégé de Windows s’exécutent avec de nombreuses nouvelles atténuations binaires. En voici les principales :
Control Flow Enforcement Technology (CFG, CET) – Atténuation matérielle qui aide à atténuer les attaques basées sur le Return Oriented Programming (ROP).
Création de processus enfant désactivée : La création de processus enfant est bloquée. Cela empêche les attaquants de lancer un nouveau processus s’ils parviennent à obtenir l’exécution de code dans le Spooler.
Redirection Guard : empêche de nombreuses attaques de redirection de chemin courantes qui ciblent souvent le Spooler d’impression.
Arbitrary Code Guard : empêche la génération de code dynamique au sein d’un processus.
Ces protections rendent plus difficile l’exploitation d’une vulnérabilité si elle est découverte.
Point and Print avec le mode d’impression protégé de Windows
Comme mentionné ci-dessus, Point and Print permet normalement le chargement des pilotes ainsi que la configuration de l’imprimante IPP. Certains utilisateurs peuvent avoir un environnement avec uniquement des imprimantes IPP, mais des attaquants malveillants peuvent se faire passer pour une imprimante et tromper les utilisateurs pour qu’ils installent des pilotes. Le mode d’impression protégé de Windows empêche Point and Print d’installer des pilotes tiers, atténuant ainsi ce risque.