若要了解企业的 Windows 保护打印模式的基础知识,请参阅 适用于企业的 Windows 保护打印模式。
Windows 打印系统历来是攻击的频繁目标;在过去三年中,Microsoft 安全响应中心 (MSRC) 收到的所有报告中,打印错误占 9%。 Spooler 后台处理服务是 Windows 打印服务的核心,负责处理打印机管理、数据转换和其他许多任务。 此过程作为 SYSTEM 运行,这是 Windows 中最高特权级别之一,这就是为什么它是一个有吸引力的目标。 标准用户也可以广泛访问 Spooler,并按需加载第三方代码。 在行业缺乏文档处理和打印机通信的统一标准时,这些驱动程序在历史上需要支持广泛的打印机。 来自各种制造商的众多驱动程序生态系统允许 Windows 支持各种较旧的打印机及其超过 40 种页面说明语言(PDL)。 但是,这种复杂性使得很难有一组常见的标准。 这种复杂性带来了许多安全挑战,这些挑战限制了Microsoft为用户提供更安全的选项的能力。 本文讨论与保护打印堆栈相关的挑战,并共享一些有助于用户今天的信息。 它还展示了 Microsoft 进攻性研究和安全工程(MORSE) 团队与 Windows 打印团队的合作概况,揭示了我们认为 Windows 打印的未来,即一个基于 IPP 的打印堆栈修订版本,该版本不再加载第三方驱动程序,并具有减少的攻击面。
驱动程序问题
打印驱动程序的安全模型依赖于共同的责任模型,其中 Windows 打印堆栈和第三方驱动程序必须在提供功能和强制实施安全承诺方面发挥作用,同时避免引入漏洞。 这与 Windows 中的其他子系统类似,但打印是一个具有挑战性的方案,因为客户希望在将远程代码加载到高度特权的系统进程中时,该过程是无摩擦的。
从安全角度来看,从第三方加载代码会带来一些挑战。 不仅必须确保加载要加载的代码,该代码可能会以意外的方式更改应用程序的行为。 例如,驱动程序支持复杂的分析逻辑,这可能会导致允许完全控制后台处理程序或相关打印过程的错误。 如果驱动程序中发现漏洞,Microsoft依赖于第三方来更新驱动程序。 当发布者不再存在或考虑旧产品不受支持时,无法明确解决漏洞。
共享责任模型中对第三方驱动因素的依赖限制了Microsoft确保客户的敏捷性和选项。 我们经常处于新的安全保护措施的领先地位,但在加载第三方代码时无法统一实施这些措施。
兼容性
打印驱动程序面临的一个挑战是他们的年龄。 许多打印驱动程序已有几十年的历史,与现代安全缓解措施不兼容,如控制流防护(CFG)、控制流执行技术(CET)、任意代码防护(ACG)和多年来实施的许多其他 Microsoft保护。 这些保护通常是“全有或全无”的,这意味着所有参与的二进制文件都必须采取措施来兼容才能使保护有效。 由于并非每个打印制造商都采取了更新这些驱动程序的必要步骤,因此打印服务目前不会受益于这些新式攻击缓解措施。 如果发现漏洞,攻击者更有可能成功利用漏洞。
权限过多
Windows 打印堆栈保留了其原始设计中的许多方面,该设计已有超过 20 年的历史。 打印后台处理程序以 SYSTEM 身份运行,具有特殊权限,使其比 Windows 上的标准管理员帐户更强大。 加载到后台处理程序的驱动程序(包括第三方驱动程序)以此权限级别运行,用于基本文档打印和处理用户请求。 对于每个用户的请求,Spooler 必须在接收后确定正确的访问级别,这可能是颇具挑战性的。
后台处理程序保持这些权限的一个原因是向后兼容性问题。 在 30 年的时间里制造的数千款驱动程序正用于 Windows,识别用户可能面临的所有风险确实很困难。
理想的解决方案是完全删除驱动程序,并将后台处理程序移动到最低权限安全模型。 某些操作可能需要 SYSTEM 级别的权限,但大多数操作肯定不需要。 我们经常在Microsoft面临的挑战是,任何解决方案都必须考虑客户的兼容性要求。 通过提高安全性的愿望来平衡这一需求是一项艰巨的任务。 幸运的是,我们认为我们有一个解决方案。
IPP 基础知识
IPP 是一种基于 HTTP 的协议,支持 HTTP 中预期的许多身份验证方法。 每个 IPP 请求都是一条 HTTP POST 消息,使用 URI(如 ipps://printer.example.com/ipp/print)标识打印机。 IPP 支持打印机所期望的所有 常见操作,例如:
新建任务:创建新的打印任务
发送文档:将文档添加到打印任务中
打印作业:使用单个文档创建新的打印作业
Get-Printer-Attributes:获取打印机状态和功能
Get-Jobs:获取排队作业的列表
Get-Job-Attributes:获取作业状态和选项
Cancel-Job:取消排队作业
无驱动程序打印支持基于公共标准(如 PWG 光栅和 PDF)的有限数量的 PDL。 这限制了作系统为转换而必须处理的唯一格式,并大大简化了代码。 使用客户端呈现来生成发送到打印机的最终文档。
打印支持应用 (PSA)
PSA 允许打印机 OEM 和 IHV 扩展现有 IPP 支持以满足其特定需求。 并非所有打印机都支持相同的功能和配置选项。 PSA 允许定制用户体验,而不会影响用户期望的体验。
指向和打印
点和打印 是一项功能,允许用户在不提供驱动程序的情况下连接到远程打印机,并在客户端上安装所有必要的驱动程序。 指向和打印仍与 IPP 一起使用,但它的工作方式不同。 我们不再需要安装驱动程序,但设置打印机需要一些基本配置。 此过程在 IPP 中的工作原理如下:
Windows 客户端和服务器通过 RPC 建立连接
服务器和客户端都使用现成的 Microsoft IPP 驱动程序
服务器使用 IPP 与打印机通信
已安装 PSA(如果可用)
安全性
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 呈现
在 Windows 受保护的打印模式下,XPS 渲染作为用户身份运行,而不是以 SYSTEM 身份运行。 Windows 中的大多数打印作业都涉及一些 XPS 转换,处理此任务的过程(PrintFilterPipelineSVC)是许多内存损坏漏洞的来源。 与其他问题一样,通过以用户身份运行此过程,可以将这些 bug 的影响降到最低。
降低常见后台处理程序任务的权限
删除驱动程序还允许我们执行 Spooler 进程执行的常见任务,并将这些任务移动到以用户身份运行的进程。 如果这些进程存在内存损坏漏洞,其影响仅限于用户自己能够执行的操作。
新的后台处理程序工作进程具有新的受限令牌,可删除许多特权,例如 SeTcbPrivilege、SeAssignPrimaryTokenPrivilege,,并且不再在 SYSTEM IL 上运行。
二进制缓解措施
通过删除第三方二进制文件,我们现在能够启用多年来Microsoft投入的许多二进制缓解措施。 在受 Windows 保护的打印模式下运行的进程具有许多新的二进制缓解措施。 以下是一些要点:
控制流强制技术 (CFG, CET) - 基于硬件的缓解措施,有助于缓解基于返回的编程(ROP)攻击。
已禁用子进程创建 – 子进程创建被阻止。 这可以防止攻击者在后台处理程序中执行代码时产生新进程。
重定向防护 – 防止经常针对打印后台处理程序的许多常见路径重定向攻击。
任意代码防护 – 防止在进程中生成动态代码。
这些保护使得如果发现漏洞,更难滥用漏洞。
使用受 Windows 保护的打印模式进行指向和打印
如上所述,点对点打印通常允许驱动程序加载以及 IPP 打印机配置。 某些用户可能只有 IPP 打印机的使用环境,但恶意攻击者可以伪装成打印机,并诱骗用户安装驱动程序。 Windows 保护的打印模式可防止点和打印安装第三方驱动程序,从而缓解此风险。
相关文章
| 文章 | DESCRIPTION |
|---|---|
| Windows 保护打印模式概述 | 概述 Windows 保护的打印模式及其优点以及如何使用它。 |
| 适用于企业的 Windows 保护打印模式 | 提供有关使用 Windows 保护打印模式的企业的指导。 |
| 发现新式打印平台 | 概述现代打印平台及其在安全性、兼容性和可靠性方面相较于旧版打印机驱动程序的优势。 |
| Windows 上第三方打印机驱动程序的服务终止计划 | 提供有关旧版 v3 和 v4 Windows 打印驱动程序的服务计划的结束信息。 |
| “打印支持应用”设计指南 | 向在设备上实现打印支持应用 (PSA) 的打印机 OEM 和 IHV 提供相关指南和示例。 |
| 打印支持应用 v3 API 设计指南 | 为正在为其设备实施 v3 打印支持应用 (PSA) 的打印机 OEM 和 IHV 提供指南和示例。 |
| 打印支持应用 v4 API 设计指南 | 提供针对打印机 OEM 和 IHV 如何为其设备实现 v4 打印支持应用程序(PSA)的指南和示例。 |
| 打印支持虚拟打印机的 MSIX Manifest 规范 | 为正在实现打印支持虚拟打印机的打印机 OEM 和 IHV 提供 MSIX 清单指南和示例。 |
| 打印支持应用关联 | 提供有关将打印支持应用(PSA)与打印机相关联的指导和示例。 |