Mais informações sobre o modo de impressão protegida do Windows para empresas

Para ler sobre as noções básicas do modo de impressão protegido do Windows para empresas e desenvolvedores, consulte Modo de impressão protegida do Windows para empresas e desenvolvedores.

O sistema de impressão do Windows tem sido historicamente um alvo frequente de ataques e os bugs de impressão foram responsáveis por 9% de todos os casos relatados ao Microsoft Security Response Center (MSRC) nos últimos três anos. O serviço Spooler, que lida com o gerenciamento de impressoras, conversão de dados e muitas outras tarefas, é o núcleo do sistema de impressão do Windows. Esse processo é executado como SYSTEM, que é um dos níveis de privilégio mais altos do Windows, e é por isso que é um alvo tão atraente. O Spooler também é amplamente acessível a usuários padrão e carrega código de terceiros sob demanda. Esses drivers foram historicamente necessários para oferecer suporte a uma ampla gama de impressoras durante uma época em que a indústria carecia de padrões uniformes para manuseio de documentos e comunicação da impressora. Esse vasto ecossistema de drivers de vários fabricantes permite que o Windows ofereça suporte a uma ampla variedade de impressoras mais antigas e suas mais de 40 linguagens de descrição de página (PDL). No entanto, essa complexidade dificulta a existência de um conjunto comum de critérios. Essa complexidade apresenta muitos desafios de segurança que limitam a capacidade da Microsoft de fornecer opções mais seguras para os usuários. Este artigo discute os desafios relacionados à proteção da pilha de impressão e compartilha algumas informações que podem ajudar os usuários hoje. Ele também fornece uma prévia de uma colaboração entre as equipes Microsoft Offensive Research & Security Engineering (MORSE) de Impressão do Windows sobre o que achamos que será o futuro da Impressão do Windows, uma revisão baseada em IPP para a pilha de impressão que não carrega mais drivers de terceiros e é executada com superfície de ataque reduzida.

O problema do driver

O modelo de segurança para drivers de impressão depende de um modelo de responsabilidade compartilhada em que a pilha de impressão do Windows e os drivers de terceiros devem desempenhar um papel no fornecimento de funcionalidade e na imposição de promessas de segurança, evitando a introdução de vulnerabilidades. Isso é como outros subsistemas no Windows, mas a impressão é um cenário desafiador porque os clientes desejam que o processo seja sem atrito ao carregar código remoto em um processo de sistema altamente privilegiado.

O carregamento de código de terceiros apresenta vários desafios do ponto de vista da segurança. Você não apenas deve garantir que está carregando o código que pretendia carregar, mas esse código pode alterar o comportamento do seu aplicativo de maneiras inesperadas. Por exemplo, os drivers dão suporte à lógica de análise complexa que pode levar a bugs, permitindo o controle total do Spooler ou do processo de impressão relacionado. Caso uma vulnerabilidade seja descoberta em um driver, a Microsoft depende de terceiros para atualizar o driver. Quando os editores não existem mais ou consideram os produtos mais antigos sem suporte, não há uma maneira clara de resolver a vulnerabilidade.

A dependência de drivers de terceiros em um modelo de responsabilidade compartilhada limita a agilidade e as opções da Microsoft para proteger os clientes. Muitas vezes, estamos na vanguarda das novas proteções de segurança, mas não podemos implantá-las uniformemente ao carregar código de terceiros.

Compatibilidade

Um desafio com os drivers de impressão é a idade. Muitos drivers de impressão têm décadas e são incompatíveis com mitigações de segurança modernas, como CFG (Control Flow Guard), CET (Control Flow Enforcement Technology), ACG (Arbitrary Code Guard) e muitas outras proteções que a Microsoft implementou ao longo dos anos. Essas proteções geralmente são "tudo ou nada", o que significa que todos os binários participantes devem tomar medidas para serem compatíveis para que a proteção seja eficaz. Como nem todos os fabricantes de impressão tomaram as medidas necessárias para atualizar esses drivers, o serviço de impressão atualmente não se beneficia dessas mitigações de exploração modernas. Se uma vulnerabilidade for descoberta, é mais provável que os invasores tenham sucesso em explorá-la.

Permissões excessivas

A pilha de impressão do Windows mantém muitos aspectos de seu design original com mais de duas décadas. O Spooler de Impressão é executado como SYSTEM com privilégios especiais que o tornam mais poderoso do que as contas de administrador padrão no Windows. Os drivers carregados no Spooler (incluindo drivers de terceiros) são executados nesse nível de privilégio para impressão básica de documentos e tratamento de solicitações do usuário. Para cada solicitação de usuário que o Spooler recebe, ele deve determinar o nível certo de acesso para essa tarefa que pode ser difícil.

Um dos motivos pelos quais o Spooler mantém essas permissões é devido a preocupações com a compatibilidade com versões anteriores. Milhares de drivers, fabricados ao longo de 30 anos, estão em uso no Windows e é difícil identificar todos os riscos possíveis para os usuários.

A solução ideal seria remover totalmente os drivers e mover o Spooler para um modelo de segurança de privilégios mínimos. Algumas operações podem exigir privilégios de nível SYSTEM, mas certamente não. O desafio que muitas vezes enfrentamos na Microsoft é que qualquer solução deve considerar os requisitos de compatibilidade de nossos clientes. Equilibrar essa necessidade com o desejo de melhorar a segurança é uma tarefa difícil. Felizmente, achamos que temos uma solução.

Noções básicas do IPP

O IPP é um protocolo baseado em HTTP e suporta muitos dos métodos de autenticação que se esperaria do HTTP. Cada solicitação IPP é uma mensagem HTTP POST e as impressoras são identificadas usando URIs como ipps://printer.example.com/ipp/print. O IPP suporta todas as operações comuns que se esperaria de uma impressora, como:

  • Create-Job: Criar um novo trabalho de impressão

  • Send-Document: Adicionar um documento a um trabalho de impressão

  • Trabalho de impressão: Criar um novo trabalho de impressão com um único documento

  • Get-Printer-Attributes: Obter status e recursos da impressora

  • Get-Jobs: Obter uma lista de trabalhos em fila

  • Get-Job-Attributes: Obter status e opções de trabalho

  • Cancel-Job: Cancelar um trabalho na fila

A impressão sem driver suporta um número limitado de PDLs com base em padrões públicos, como PWG Raster e PDF. Isso limita o número exclusivo de formatos que o sistema operacional deve manipular para conversão e simplifica muito o código. A renderização do lado do cliente é usada para gerar o documento final enviado à impressora.

Os PSAs permitem que OEMs e IHVs de impressoras estendam nosso suporte IPP existente para suas necessidades específicas. Nem todas as impressoras suportam os mesmos recursos e opções de configuração. Os PSAs permitem experiências de usuário personalizadas sem comprometer a experiência que os usuários esperam.

Point and Print

Point and Print é um recurso que permite que os usuários se conectem a uma impressora remota sem fornecer drivers e tem todos os drivers necessários instalados no cliente. Point and Print permanece com IPP, mas funciona de forma diferente.  Não precisamos mais instalar drivers, mas algumas configurações básicas são necessárias para configurar a impressora. Esse processo funciona da seguinte forma com o IPP:

  1. O cliente e o servidor Windows fazem uma conexão por RPC

  2. Tanto o servidor quanto o cliente usam o driver IPP da Microsoft na caixa de entrada

  3. O servidor usa IPP para se comunicar com a impressora

  4. O PSA está instalado, se disponível

nova experiência de impressão moderna e segura a partir do Windows

Segurança

A impressão baseada em IPP no Windows hoje elimina a necessidade de drivers de terceiros. O IPP suporta criptografia de transporte e, com um número limitado de PDLs suportados, a complexidade da análise é substancialmente reduzida. Esta é uma melhoria significativa em relação ao modelo que requer o uso de drivers.

A impressão IPP no Windows hoje já é um grande passo à frente do ponto de vista da segurança, e incentivamos os usuários a mudar sempre que possível. Também incentivamos os administradores a priorizar essa ação em toda a sua frota.

Segurança do spooler no modo de impressão protegida do Windows

O modo de impressão protegido do Windows baseia-se na pilha de impressão IPP existente, em que apenas impressoras certificadas pela Mopria são suportadas, e desativa a capacidade de carregar drivers de terceiros. Ao fazer isso, podemos fazer melhorias significativas na segurança de impressão no Windows que, de outra forma, não poderiam acontecer. Nosso objetivo é, em última análise, fornecer a configuração padrão mais segura e fornecer a flexibilidade de reverter para a impressão herdada (baseada em driver) a qualquer momento, se os usuários acharem que sua impressora não é compatível. Para usar o modo de impressão protegido do Windows, verifique se as impressoras têm o IPP habilitado.

Quando os usuários habilitam o modo de impressão protegido do Windows, as operações normais de spooler são adiadas para um novo processo de spooler que implementa as melhorias no modo de impressão protegido do Windows. Vejamos algumas dessas mudanças.

Configuração de impressão limitada e segura

No modo de impressão protegida do Windows, muitas configurações herdadas não são mais válidas. Um ataque comum ao Windows abusava do fato de que um monitor de porta de impressora pode ser uma DLL (Dynamic Link Library), e os invasores abusavam disso para carregar código mal-intencionado. Os invasores também usariam links simbólicos para induzir o Spooler a carregar código malicioso, e isso não é mais possível. Há muitas APIs herdadas que são atualizadas para restringir a configuração a valores que fazem sentido apenas ao usar o IPP. Isso limita a oportunidade de invasores usarem o Spooler para modificar arquivos no sistema.

Bloqueio de módulo

As APIs que permitem o carregamento de módulos serão modificadas para impedir o carregamento de novos módulos. Por exemplo, AddPrintProviderW e outras chamadas resultariam no carregamento de módulos que podem ser mal-intencionados.  Também aplicaremos uma restrição que garante que apenas os binários assinados pela Microsoft necessários para o IPP sejam carregados.

Renderização XPS por usuário

A renderização XPS é executada como o usuário em vez de SYSTEM no modo de impressão protegido do Windows. A maioria dos trabalhos de impressão no Windows hoje envolve alguma conversão XPS e o processo que lida com essa tarefa (PrintFilterPipelineSVC) é a fonte de muitas vulnerabilidades de corrupção de memória. Assim como acontece com os outros problemas, ao executar esse processo como usuário, o impacto desses bugs é minimizado.

Privilégios mais baixos para tarefas comuns de spooler

A remoção de drivers também nos permite pegar tarefas comuns executadas pelo processo Spooler e movê-las para um processo em execução como usuário. Se esses processos tiverem vulnerabilidades de corrupção de memória, esse impacto será limitado a ações que apenas o usuário pode executar.

O novo processo Spooler Worker tem um novo token restrito que remove muitos privilégios, como SeTcbPrivilege, SeAssignPrimaryTokenPrivilege, e não é mais executado em SYSTEM IL.

Mitigações binárias

Ao remover binários de terceiros, agora podemos habilitar muitas das mitigações binárias nas quais a Microsoft investiu ao longo dos anos. Os processos no modo de impressão protegida do Windows são executados com muitas novas mitigações binárias. Estes são alguns dos destaques:

Tecnologia de aplicação de fluxo de controle (CFG, CET) – Mitigação baseada em hardware que ajuda a mitigar ataques baseados em Programação Orientada a Retorno (ROP).

Criação de processo filho desabilitada – A criação de processo filho está bloqueada. Isso impede que os invasores gerem um novo processo se conseguirem obter a execução do código no Spooler.

Redirection Guard – evita muitos ataques comuns de redirecionamento de caminho que geralmente visam o Print Spooler.

Arbitrary Code Guard – impede a geração dinâmica de código dentro de um processo.

Essas proteções tornam mais difícil abusar de uma vulnerabilidade se ela for encontrada.

Aponte e imprima com o modo de impressão protegido do Windows

Como mencionado acima, o Point and Print normalmente permite o carregamento do driver, bem como a configuração da impressora IPP. Alguns usuários podem ter um ambiente apenas com impressoras IPP, mas invasores mal-intencionados podem fingir ser uma impressora e induzir os usuários a instalar drivers. O modo de impressão protegido do Windows impede que o Point and Print instale drivers de terceiros, reduzindo esse risco.