Altre informazioni sulla modalità di stampa protetta da Windows per le aziende
Per informazioni sulle nozioni di base della modalità di stampa protetta da Windows per aziende e sviluppatori, vedi Modalità di stampa protetta da Windows per aziende e sviluppatori.
Il sistema di stampa Windows è storicamente stato un bersaglio frequente per gli attacchi e i bug di stampa rappresentano il 9% di tutti i casi segnalati a Microsoft Security Response Center (MSRC) negli ultimi tre anni. Il servizio Spooler, che gestisce la gestione della stampante, la conversione dei dati e molte altre attività, è il nucleo del sistema Windows Print. Questo processo viene eseguito come SYSTEM, uno dei livelli di privilegi più elevati in Windows, motivo per cui è una destinazione così attraente. Lo Spooler è anche ampiamente accessibile agli utenti standard e carica codice di terze parti su richiesta. Questi driver erano storicamente necessari per supportare un'ampia gamma di stampanti durante un periodo in cui il settore non disponeva di standard uniformi per la gestione dei documenti e la comunicazione della stampante. Questo vasto ecosistema di driver di vari produttori consente a Windows di supportare un'ampia gamma di stampanti meno recenti e oltre 40 lingue di descrizione pagina (PDL). Tuttavia, tale complessità rende difficile avere un set comune di criteri. Questa complessità presenta molte problematiche di sicurezza che limitano la capacità di Microsoft di fornire opzioni più sicure per gli utenti. Questo articolo illustra le problematiche correlate alla protezione dello stack di stampa e condivide alcune informazioni che possono aiutare gli utenti oggi. Offre anche un'anteprima di una collaborazione tra il team di Microsoft Offensive Research & Security Engineering (MORSE) e il team di Windows Print su ciò che pensiamo sarà il futuro della stampa di Windows, una revisione basata su IPP per lo stack di stampa che non carica più driver di terze parti ed esegue con una superficie di attacco ridotta.
Problema del driver
Il modello di sicurezza per i driver di stampa si basa su un modello di responsabilità condivisa in cui lo stack di stampa di Windows e i driver di terze parti devono svolgere un ruolo nella fornitura di funzionalità e nell'applicazione di promesse di sicurezza evitando di introdurre vulnerabilità. Questo è come altri sottosistemi in Windows, ma la stampa è uno scenario complesso perché i clienti vogliono che il processo sia senza problemi durante il caricamento di codice remoto in un processo di sistema con privilegi elevati.
Il caricamento di codice da terze parti presenta diverse sfide dal punto di vista della sicurezza. Non solo è necessario assicurarsi di caricare il codice che si intende caricare, che il codice potrebbe modificare il comportamento dell'applicazione in modi imprevisti. Ad esempio, i driver supportano una logica di analisi complessa che può causare bug che consentono il controllo completo del Spooler o del processo di stampa correlato. Nel caso in cui venga individuata una vulnerabilità in un driver, Microsoft dipende dalla terza parte per aggiornare il driver. Quando gli editori non esistono più o considerano i prodotti meno recenti non supportati, non esiste un modo chiaro per risolvere la vulnerabilità.
La dipendenza da driver di terze parti in un modello di responsabilità condivisa limita l'agilità e le opzioni di Microsoft per proteggere i clienti. Spesso siamo all'avanguardia delle nuove protezioni di sicurezza, ma non possiamo distribuirle in modo uniforme durante il caricamento di codice di terze parti.
Compatibilità
Una sfida con i driver di stampa è la loro età. Molti driver di stampa hanno decenni di età e sono incompatibili con le moderne mitigazioni della sicurezza, ad esempio Control Flow Guard (CFG), Control Flow Enforcement Technology (CET), Arbitrario Code Guard (ACG) e molte altre protezioni implementate da Microsoft nel corso degli anni. Queste protezioni sono spesso "tutte o niente", vale a dire che tutti i file binari partecipanti devono adottare misure per essere compatibili per garantire l'efficacia della protezione. Poiché non tutti i produttori di stampa hanno eseguito i passaggi necessari per aggiornare questi driver, il servizio Stampa attualmente non trae vantaggio da queste mitigazioni di exploit moderne. Se viene individuata una vulnerabilità, è più probabile che gli utenti malintenzionati abbiano successo sfruttandolo.
Autorizzazioni eccessive
Lo stack di stampa di Windows mantiene molti aspetti del suo design originale che ha più di due decenni. Lo Spooler di stampa viene eseguito come SYSTEM con privilegi speciali che lo rendono più potente rispetto agli account amministratore standard in Windows. I driver caricati nel Spooler (inclusi i driver di terze parti) vengono eseguiti a questo livello di privilegio per la stampa di documenti di base e la gestione delle richieste utente. Per ogni richiesta dell'utente che riceve lo Spooler, deve determinare il livello di accesso corretto per tale attività che può risultare difficile.
Uno dei motivi per cui Spooler gestisce queste autorizzazioni è dovuto a problemi di compatibilità con le versioni precedenti. Migliaia di conducenti, realizzati nel corso di 30 anni, sono in uso in Windows e l'identificazione di tutti i possibili rischi per gli utenti è difficile.
La soluzione ideale consiste nel rimuovere completamente i driver e spostare lo Spooler in un modello di sicurezza con privilegi minimi. Alcune operazioni possono richiedere privilegi a livello di SISTEMA, ma la maggior parte non lo è. La sfida che spesso affrontiamo microsoft è che qualsiasi soluzione deve considerare i requisiti di compatibilità dei clienti. Bilanciare questa esigenza con il desiderio di migliorare la sicurezza è un compito difficile. Fortunatamente, pensiamo di avere una soluzione.
Nozioni di base su IPP
IPP è un protocollo basato su HTTP e supporta molti dei metodi di autenticazione previsti da HTTP. Ogni richiesta IPP è un messaggio HTTP POST e le stampanti vengono identificate usando URI come ipps://printer.example.com/ipp/print. IPP supporta tutte le operazioni comuni previste da una stampante, ad esempio:
Crea-processo: creare un nuovo processo di stampa
Invia documento: aggiungere un documento a un processo di stampa
Processo di stampa: creare un nuovo processo di stampa con un singolo documento
Get-Printer-Attributes: Ottenere lo stato e le funzionalità della stampante
Get-Jobs: ottenere un elenco di processi in coda
Get-Job-Attributes: Ottenere lo stato e le opzioni del processo
Cancel-Job: Annullare un processo in coda
La stampa senza driver supporta un numero limitato di PDF basati su standard pubblici, ad esempio PWG Raster e PDF. Questo limita il numero univoco di formati che il sistema operativo deve gestire per la conversione e semplifica notevolmente il codice. Il rendering lato client viene usato per generare il documento finale inviato alla stampante.
App di supporto di stampa (PSA)
Gli OEM e gli IHD della stampante consentono di estendere il supporto IPP esistente per le proprie esigenze specifiche. Non tutte le stampanti supportano le stesse funzionalità e le stesse opzioni di configurazione. Gli account del servizio app consentono esperienze utente personalizzate senza compromettere l'esperienza prevista dagli utenti.
Punto e stampa
Point and Print è una funzionalità che consente agli utenti di connettersi a una stampante remota senza fornire driver e dispone di tutti i driver necessari installati nel client. Il punto e la stampa rimangono con IPP, ma funziona in modo diverso. Non è più necessario installare i driver, ma è necessaria una configurazione di base per configurare la stampante. Questo processo funziona come segue con IPP:
Client e server Windows effettuano una connessione tramite RPC
Sia il server che il client usano il driver IPP Microsoft in arrivo
Il server usa IPP per comunicare con la stampante
PSA è installato, se disponibile
Sicurezza
La stampa basata su IPP in Windows oggi elimina la necessità di driver di terze parti. IPP supporta l'encyrption del trasporto e con un numero limitato di PL supportati, l'analisi della complessità è notevolmente diminuita. Si tratta di un miglioramento significativo del modello che richiede l'uso dei driver.
La stampa IPP in Windows oggi è già un grande passo avanti dal punto di vista della sicurezza e incoraggiamo gli utenti a passare quando possibile. Invitiamo anche gli amministratori a classificare in ordine di priorità questa azione in tutta la flotta.
Sicurezza dello Spooler in modalità di stampa protetta da Windows
La modalità di stampa protetta da Windows si basa sullo stack di stampa IPP esistente in cui sono supportate solo le stampanti certificate Mopria e disabilita la possibilità di caricare driver di terze parti. In questo modo, è possibile apportare miglioramenti significativi alla sicurezza di stampa in Windows che altrimenti non poteva accadere. L'obiettivo è fornire in definitiva la configurazione predefinita più sicura e offrire la flessibilità di ripristinare la stampa legacy (basata su driver) in qualsiasi momento, se gli utenti trovano che la stampante non è compatibile. Per usare la modalità di stampa protetta da Windows, verificare che le stampanti abbiano abilitato IPP.
Quando gli utenti abilitano la modalità di stampa protetta da Windows, le normali operazioni di spooler vengono posticipate a un nuovo processo di Spooler che implementa i miglioramenti della modalità di stampa protetta di Windows. Verranno ora esaminate alcune di queste modifiche.
Configurazione di stampa limitata e sicura
In modalità di stampa protetta da Windows molte configurazioni legacy non sono più valide. Un attacco comune a Windows abusa del fatto che un monitor porta della stampante può essere una DLL (Dynamic Link Library) e gli utenti malintenzionati potrebbero abusare di questo per caricare codice dannoso. Gli utenti malintenzionati userebbero anche collegamenti simbolici per ingannare lo Spooler nel caricamento di codice dannoso e ciò non è più possibile. Esistono molte API legacy che vengono aggiornate per limitare la configurazione ai valori che hanno senso solo quando si usa IPP. Ciò limita l'opportunità per gli utenti malintenzionati di usare lo Spooler per modificare i file nel sistema.
Blocco del modulo
Le API che consentono il caricamento dei moduli verranno modificate per impedire il caricamento di nuovi moduli. Ad esempio, AddPrintProviderW e altre chiamate, comportano il caricamento di moduli che potrebbero essere dannosi. Verrà inoltre applicata una restrizione che garantisce che vengano caricati solo i file binari firmati Microsoft necessari per IPP.
Rendering XPS per utente
Il rendering XPS viene eseguito come utente anziché SYSTEM in modalità di stampa protetta da Windows. La maggior parte dei processi di stampa in Windows include attualmente alcune conversioni XPS e il processo che gestisce questa attività (PrintFilterPipelineSVC) è l'origine di molte vulnerabilità di danneggiamento della memoria. Come per gli altri problemi, eseguendo questo processo come utente, l'impatto di questi bug è ridotto al minimo.
Privilegi inferiori per le attività comuni di Spooler
La rimozione dei driver consente anche di eseguire attività comuni eseguite dal processo Spooler e di spostarle in un processo in esecuzione come utente. Se questi processi presentano vulnerabilità di danneggiamento della memoria, tale impatto è limitato alle azioni che possono essere eseguite solo dall'utente.
Il nuovo processo di lavoro Spooler ha un nuovo token con restrizioni che rimuove molti privilegi, ad esempio SeTcbPrivilege, SeAssignPrimaryTokenPrivilege e non viene più eseguito in SYSTEM IL.
Mitigazioni binarie
Rimuovendo i file binari di terze parti, è ora possibile abilitare molte delle mitigazioni binarie che Microsoft ha investito nel corso degli anni. I processi in modalità di stampa protetta di Windows vengono eseguiti con molte nuove mitigazioni binarie. Ecco alcune delle principali:
Control Flow Enforcement Technology (CFG, CET) - Mitigazione basata su hardware che consente di attenuare gli attacchi basati su ROP (Return Oriented Programming).
Creazione processo figlio disabilitata: la creazione del processo figlio è bloccata. Ciò impedisce agli utenti malintenzionati di generare un nuovo processo se riescono a ottenere l'esecuzione del codice nello Spooler.
Redirection Guard: impedisce molti attacchi di reindirizzamento dei percorsi comuni che spesso usano lo Spooler di stampa.
Code Guard arbitrario: impedisce la generazione dinamica di codice all'interno di un processo.
Queste protezioni rendono più difficile abusare di una vulnerabilità se ne viene rilevata una.
Punto e stampa con la modalità di stampa protetta da Windows
Come accennato in precedenza, Point and Print normalmente consente il caricamento del driver e la configurazione della stampante IPP. Alcuni utenti possono avere un ambiente con solo stampanti IPP, ma gli utenti malintenzionati possono fingere di essere una stampante e ingannare gli utenti nell'installazione dei driver. La modalità di stampa protetta da Windows impedisce a Point e Print di installare driver di terze parti, riducendo questo rischio.