Windows client Print Spooler security

Lo spooler di stampa di Windows è un servizio che dal 1990 a oggi è stato vittima di ben  80 CVE (Common Vulnerabilities and Exposures), l’elenco dei CVE è pubblicato su CVE – Search Results (mitre.org) ricercando per keyword=windows+print+spooler.

L’ultimo CVE è il CVE – CVE-2024-21433 (mitre.org) del 12 marzo 2024 e come descritto da Microsoft al seguente CVE-2024-21433 – Security Update Guide – Microsoft – Windows Print Spooler Elevation of Privilege Vulnerability che consente di ottenere privilegi SYSTEM e coinvolge tutte le versioni di Windows, tale vulnerabilità è stata risolta con la KB5035885 (aggiornamento cumulativo mensile) – Supporto tecnico Microsoft.

Ovviamente una prima linea di difesa è quella di impedire l’accesso remoto allo spooler di stampa se non è necessario, ovvero se non è strettamente necessario evitare di condividere stampanti e mettere in sicurezza il servizio Spooler.

La condivisione di una stampante su un sistema operativo client dovrebbe essere evitata per diverse ragioni:

  • E’ preferibile centralizzare la gestione delle stampanti tramite un server di stampa basato su  un sistema operativo server, inoltre si tenga presente che la EULA dei sistemi operativi Windows Client prevedono che il licenziatario possa consentire ad un massimo di 20 ulteriori dispositivi di accedere al software installato sul dispositivo con licenza per utilizzare le seguenti funzionalità software: servizi file, servizi stampa, servizi di informazioni Internet, Condivisione connessione Internet e servizi di telefonia sul dispositivo con licenza (a riguardo si veda Microsoft License Terms Windows 11 e Microsoft License Terms Windows 10)
  • Dal moneto che sistema operativo di tipo client è per sua natura utilizzato da un utente è implicitamente più esposto a rischi di sicurezza a causa del fatto che l’utente potrebbe compiere azioni insicure e ciò potrebbe compromettere il sistema e far sì che la condivisione delle stampante diventi un veicolo di infezione per i client che utilizzano la stampante condivisa, distribuendo ad esempio dei driver con codice malevolo durante l’installazione della stampante condivisa oppure sfruttando vulnerabilità non note o non ancora corretta durante la comunicazione con i client che inviano stampe.
  • La condivisione della stampante e quindi la possibilità che il servizio spooler accetti connessioni da altri client via rete espone ovviamente il sistema ad attacchi da parte di client sulla rete eventualmente compromessi estendendo l’infezione con rischio di aumentare le probabilità che l’attaccante possa via privledge escalation arrivare a controllare la rete o permettendo di esfiltrare un maggior numero di dati, un client con stampante condivisa è già di per se un obbiettivo interessate per un attaccante in quanto gli permette di esfiltrare le copie nello spool delle stampe.
  • La condivisione delle stampanti sui client non è consigliabile perché può essere complessa e dispendiosa in termini di tempo rispetto ad una gestione delle stampanti in modo centralizzato su un server in quanto è ovviamente più semplice manutenere e gestire un server di stampa che dovere gestire vari client con stampanti condivise, inoltre l’uso delle stampanti condivise sui client limita la visibilità e il controllo del traffico di stampa rendendo difficoltoso identificare la fonte di eventuali problemi di congestione o latenza.

In sintesi, la condivisione di stampanti sui client può avere un impatto negativo significativo sul traffico di rete e sulle prestazioni, causando congestione, latenza elevata e difficoltà di gestione. L’utilizzo di un server di stampa dedicato offre numerosi vantaggi, tra cui una riduzione del traffico di rete, migliori prestazioni, maggiore controllo e scalabilità, nonché un miglior gestione della sicurezza.

Di seguito analizzeremo vari approcci per mettere in sicurezza il servizio Spooler e limitare gli attacchi e le compromissioni dei client tramite malware che possono sfruttare vulnerabilità nel servizio di stampa.

Blocco della condivisione delle stampanti sui client tramite Group Policy

La sicurezza del servizio di stampa era già stata presa in considerazione in Windows Server 2003 in cui era stata resa disponibile la seguente group policy computer:

Computer Configuration / Administrative Templates / Printers / Allow Print Spooler to accept client connections

In lingua italiana tale group policy è denominata “Consenti allo spooler di stampa di accettare connessioni client” e come riportato in Use Group Policy settings to control printers – Windows Server | Microsoft Learn tale group policy determina se lo spooler di stampa accetterà le connessioni client.

Quando il criterio è abilitato o non configurato, lo spooler accetterà sempre le connessioni client, mentre se il criterio è disabilitato, lo spooler non accetterà connessioni client, né consentirà agli utenti di condividere le stampanti.

Disabilitando il criterio tutte le stampanti attualmente condivise rimarranno tali e per rendere effettive le modifiche apportate a questo criterio, è necessario riavviare lo spooler.

Dopo aver impostato la group policy per disabilitare le connessioni client se si prova a condivide una stampante si avrà il seguente messaggio di errore:

Mediante l’uso di questa group policy sarà possibile evitare che vengano condivise stampanti da utenti con privilegi amministrativi sui client inavvertitamente magari durante attività di configurazione e test col rischio che poi le condivisioni rimangano permanenti.

Disabilitazione della Condivisione file e stampanti per reti Microsoft

Un’altra misura di protezione è quella disabilitare “Condivisione file e stampanti per reti Microsoft” negli elementi della connessione di rete. Al contrario della group policy vista precedentemente disabilitando la “Condivisione file e stampanti per reti Microsoft” oltre ad impedire l’accesso alle stampanti condivise dalla connessione di rete su cui è stato disabilitato l’elemento verranno impedito anche gli accessi alle cartelle condivise. In altre parole la disabilitazione della “Condivisione file e stampanti per reti Microsoft” non impedisce di condividere file o stampanti, né va a rimuovere le condivisioni esistenti, ma semplicemente impedisce l’accesso alle risorse condivise sulla connessione di rete su cui è stata configurata la condivisione.

E’ possibile utilizzare uno script powershell con il seguente comando per disabilitare l’elemento Condivisione file e stampanti per reti Microsoft su una specifica connessione di rete:

Disable-NetAdapterBinding -Name “<Network Adapter Name>” -ComponentID ms_server

oppure con il seguente comando powershell per disabilitare l’elemento Condivisione file e stampanti per reti Microsoft su tutte le connessioni di rete:

Get-NetAdapterBinding -ComponentID ms_server | Disable-NetAdapterBinding

Blocco dell’accesso allo spooler tramite le regole di entrata del firewall

Una terza misura di protezione è quella di bloccare tramite il firewall di Windows l’accesso allo spooler disabilitando le regole in ingresso specifiche per il servizio Spooler su tutti i profili (Dominio, Privato e Pubblico):

  • Condivisione file e stampanti (servizio spooler – RPC)
    Regola in entrata per Condivisione file e stampanti per consentire al servizio spooler di stampa di comunicare mediante TCP/RPC.
  • Condivisione file e stampanti (servizio spooler – RPC-EPMAP)
    consentire la trasmissione e la ricezione di datagrammi NetBIOS. [UDP 138] il servizio RPCSS per consentire il traffico RPC/TCP per il servizio spooler.

Nel caso invece si desideri disabilitare comunicazioni in ingresso relative alla condivisioni di file e stampanti è possibile le seguente regola in ingresso su tutti i profili:

  • Condivisione file e stampanti (SMB-In)
    Regola in entrata per Condivisione file e stampanti per consentire la trasmissione e la ricezione di SMB (Server Message Block) tramite named pipe. [TCP 445]

E’ possibile gestire la configurazione di tali regole tramite le group policy configurando le policy in:

Computer Configuration / Policies / Windows Settings / Security Settings / Windows Firewall with Advanced Security / Windows Firewall with Advanced Security / Inbound Rules

Quindi creare una nuova policy selezionando Predefined e quindi File and Pinter Sharing nel tipo di regola.

Nell’elenco delle regole firewall predefinite selezionare poi le regole che si vuole disabilitare, di seguito un esempio di creazione delle group policy in lingua italiana: