有关适用于企业的受 Windows 保护的打印模式的详细信息

若要了解面向企业和开发人员的受 Windows 保护的打印模式的基础知识,请参阅面向企业和开发人员的受 Windows 保护的打印模式

Windows 打印系统历来是攻击的频繁目标;在过去三年中,Microsoft 安全响应中心 (MSRC) 收到的所有报告中,打印错误占 9%。 后台处理程序服务是 Windows 打印系统的核心,它处理打印机管理、数据转换和许多其他任务。 此进程以 SYSTEM 的身份运行,这是 Windows 中最高权限级别之一,这就是为什么它是一个如此有吸引力的目标。 标准用户也可以广泛访问后台处理程序,并按需加载第三方代码。 在行业缺乏统一的文档处理和打印机通信标准的时候,这些驱动程序历来需要支持各种打印机。 来自各种制造商的众多驱动程序生态系统使 Windows 能够支持各种旧打印机及其 40 多种页面描述语言 (PDL)。 然而,这种复杂性使得很难有一套共同的标准。 这种复杂性带来了许多安全挑战,限制了 Microsoft 为用户提供更安全选项的能力。 本文讨论与保护打印堆栈相关的挑战,并分享了一些可以帮助当今用户的信息。 其中还展望了 Microsoft 攻击研究与安全工程 (MORSE) 团队与 Windows 打印团队之间的协作,了解我们认为 Windows 打印的未来,这是一个基于 IPP 的打印堆栈版本,该版本不再加载第三方驱动程序,并且运行受攻击面减少。

驱动程序问题

打印驱动程序的安全模型依赖于共担责任模型,其中 Windows 打印堆栈和第三方驱动程序必须各自在提供功能和执行安全承诺方面发挥作用,同时避免引入漏洞。 这与 Windows 中的其他子系统类似,但打印是一个具有挑战性的方案,因为客户希望在将远程代码加载到高度特权的系统进程中时,该过程能够顺畅。

从安全角度来看,从第三方加载代码带来了几个挑战。 不仅必须确保加载了要加载的代码,而且这些代码可能会以意想不到的方式改变应用程序的行为。 例如,驱动程序支持复杂的分析逻辑,这可能会导致允许完全控制后台处理程序或相关打印过程的错误。 如果在驱动程序中发现漏洞,Microsoft 将依赖第三方来更新驱动程序。 当发布者不再存在或考虑旧产品不再支持时,就没有明确的方法来解决这个漏洞。

在共担责任模型中对第三方驱动程序的依赖限制了 Microsoft 保护客户的敏捷性和选择。 我们经常处于新安全保护的最前沿,但在加载第三方代码时却无法统一部署它们。

兼容性

打印驱动程序面临的一个挑战是他们的新旧程度。 许多打印驱动程序已有几十年的历史,与现代安全缓解措施不兼容,如控制流保护 (CFG)、控制流强制技术 (CET)、任意代码防护 (ACG) 和多年来实施的许多其他 Microsoft 保护措施。 这些保护通常是“全有或全无”的,这意味着所有参与的二进制文件都必须采取措施来兼容才能使保护有效。 由于并非每个打印制造商都采取了必要的措施来更新这些驱动程序,因此打印服务目前无法从这些新式攻击缓解措施中受益。 如果发现漏洞,攻击者更有可能成功利用漏洞。

权限过多

Windows 打印堆栈保留了其二十多年前的原始设计的许多方面。 打印后台处理程序以 SYSTEM 身份运行,具有特殊权限,使其比 Windows 上的标准管理员帐户更强大。 加载到后台处理程序的驱动程序(包括第三方驱动程序)以此权限级别运行,用于基本文档打印和处理用户请求。 对于接收到的每个用户请求,后台处理程序必须确定该任务的正确访问级别,这可能被证明是困难的。

后台处理程序保持这些权限的一个原因是向后兼容性问题。 在 30 年的时间里,Windows 中使用了数千个驱动程序,很难识别用户可能面临的所有风险。

理想的解决方案是完全删除驱动程序,并将后台处理程序移动到最低权限安全模型。 某些操作可能需要系统级权限,但绝大多数情况下都不需要。 我们在 Microsoft 经常面临的挑战是,任何解决方案都必须考虑客户的兼容性要求。 平衡这一需求与提高安全性的愿望是一项艰巨的任务。 幸运的是,我们认为我们有一个解决方案。

IPP 基础知识

IPP 是一种基于 HTTP 的协议,支持 HTTP 中预期的许多身份验证方法。 每个 IPP 请求都是一条 HTTP POST 消息,打印机使用 URI 进行标识,例如 ipps://printer.example.com/ipp/print。 IPP 支持打印机的所有常见操作,例如:

  • Create-Job:创建新的打印作业

  • Send-Document:将文档添加到打印作业

  • Print-Job:使用单个文档创建新的打印作业

  • Get-Printer-Attributes:获取打印机状态和功能

  • Get-Jobs:获取排队作业的列表

  • Get-Job-Attributes:获取作业状态和选项

  • Cancel-Job:取消排队作业

无驱动程序打印支持基于公共标准(如 PWG 光栅和 PDF)的有限数量的 PDL。 这限制了操作系统为转换而必须处理的唯一格式,并大大简化了代码。 客户端渲染用于生成发送到打印机的最终文档。

PSA 允许打印机 OEM 和 IHV 根据其特定需求扩展我们现有的 IPP 支持。 并非所有打印机都支持相同的功能和配置选项。 PSA 允许定制用户体验,而不会影响用户期望的体验。

指向和打印

指向和打印是一种允许用户在不提供驱动程序的情况下连接到远程打印机的功能,并且在客户端上安装了所有必要的驱动程序。 指向和打印仍与 IPP 一起使用,但它的工作方式不同。  我们不再需要安装驱动程序,但设置打印机需要一些基本配置。 此过程在 IPP 中的工作原理如下:

  1. Windows 客户端和服务器通过 RPC 建立连接

  2. 服务器和客户端都使用现成的 Microsoft IPP 驱动程序

  3. 服务器使用 IPP 与打印机通信

  4. 已安装 PSA(如果可用)

Windows 带来的新式安全打印新体验

安全性

如今,Windows 中基于 IPP 的打印消除了对第三方驱动程序的需求。 IPP 支持传输加密,并且由于支持的 PDL 数量有限,解析复杂性大大降低。 与需要使用驱动程序的模型相比,这是一个有意义的改进。

从安全角度来看,Windows 中的 IPP 打印已经向前迈出了一大步,我们鼓励用户在可能的情况下进行切换。 我们还鼓励管理员在整个设备队列中优先考虑此操作。

受 Windows 保护的打印模式下的后台处理程序安全性

受 Windows 保护的打印模式基于现有的 IPP 打印堆栈构建,其中仅支持经过 Mopria 认证的打印机,并禁用加载第三方驱动程序的功能。 通过这样做,我们可以对 Windows 中的打印安全性进行有意义的改进,否则这些改进是不可能发生的。 我们的目标是最终提供最安全的默认配置,并提供灵活性,以便在用户发现打印机不兼容时随时恢复到传统(基于驱动程序)打印。 若要使用受 Windows 保护的打印模式,请确保打印机已启用 IPP。

当用户启用受 Windows 保护的打印模式时,正常后台处理程序操作将推迟到实现受 Windows 保护的打印模式改进的新后台处理程序进程。 让我们来看看其中的一些变化。

有限且安全的打印配置

在受 Windows 保护的打印模式下,许多旧配置不再有效。 针对 Windows 的常见攻击会滥用打印机端口监视器可以是动态链接库 (DLL) 这一事实,攻击者会滥用这一事实来加载恶意代码。 攻击者还会使用符号链接来诱骗后台处理程序加载恶意代码,这已不再可能。 有许多旧 API 经过更新,将配置限制为只有在使用 IPP 时才有意义的值。 这限制了攻击者使用后台处理程序修改系统上的文件的机会。

模块阻止

允许加载模块的 API 将被修改,以防止加载新模块。 例如,AddPrintProviderW 和其他调用会导致加载可能恶意的模块。  我们还将实施一项限制,确保只加载 IPP 所需的 Microsoft 签名二进制文件。

每用户 XPS 渲染

XPS 渲染在受 Windows 保护的打印模式下以用户身份运行,而不是以 SYSTEM 身份运行。 当今 Windows 中的大多数打印作业都涉及一些 XPS 转换,处理此任务的进程 (PrintFilterPipelineSVC) 是许多内存损坏漏洞的来源。 与其他问题一样,通过以用户身份运行此过程,这些错误的影响被最小化。

降低常见后台处理程序任务的权限

删除驱动程序还允许我们将后台处理程序进程执行的常见任务移动到以用户身份运行的进程中。 如果这些进程存在内存损坏漏洞,那么这种影响仅限于用户可以执行的操作。

新的后台处理程序工作进程具有新的受限令牌,可删除许多特权,例如 SeTcbPrivilege、SeAssignPrimaryTokenPrivilege,,并且不再在 SYSTEM IL 上运行。

二进制缓解措施

通过删除第三方二进制文件,我们现在能够启用 Microsoft 多年来投资的许多二进制缓解措施。 在受 Windows 保护的打印模式下运行的进程具有许多新的二进制缓解措施。 以下是一些要点:

控制流强制技术 (CFGCET)- 基于硬件的缓解措施,有助于缓解基于面向返回的编程 (ROP) 的攻击。

已禁用子进程创建 – 子进程创建被阻止。 这可以防止攻击者在后台处理程序中执行代码时产生新进程。

重定向防护 – 防止经常针对打印后台处理程序的许多常见路径重定向攻击。

任意代码防护 – 防止在进程中生成动态代码。

这些保护措施使得在发现漏洞时更难滥用漏洞。

使用受 Windows 保护的打印模式进行指向和打印

如上所述,指向和打印通常允许加载驱动程序以及 IPP 打印机配置。 一些用户可能只有 IPP 打印机,但恶意攻击者可以假装是打印机,诱骗用户安装驱动程序。 受 Windows 保护的打印模式可防止指向和打印安装第三方驱动程序,从而缓解此风险。