CVE-2020-1048 以及 CVE-2021-1678的分析
字数 2294 2025-08-13 21:33:17

Windows 打印后台处理程序漏洞深度分析:CVE-2020-1048与CVE-2021-1678

1. 背景知识

1.1 Windows 认证机制概述

Windows 系统主要使用两种认证协议:

NTLM 认证流程

  1. NTLM 协商:客户端向服务器发送 NTLM 协商请求
  2. 挑战请求:服务器创建 nonce 并在挑战请求中发送
  3. 签名响应:客户端使用用户密码对 nonce 进行签名
  4. 验证请求:服务器通过 NETLOGON 通道发送 NTLM 身份验证消息到域控(DC)
  5. 批准/拒绝:DC 验证用户名和密码后决定批准或拒绝

Kerberos 认证流程

  1. AS-REQ:客户端用 NTLM-hash 加密时间戳,向认证服务(AS)请求 TGT 票据
  2. AS-REP:AS 验证客户端后返回用 krbtgt 用户 NTLM hash 加密的 TGT 票据(包含 PAC)
  3. TGS-REQ:客户端用 TGT 向票据授予服务(TGS)请求服务票据
  4. TGS-REP:TGS 验证后返回服务票据(TGS)
  5. AP-REQ:客户端用 TGS 票据请求服务
  6. AP-REP:服务端验证票据并检查 PAC 中的访问权限

1.2 NTLM 中继攻击原理

NTLM 中继攻击是 Windows 环境中常见的安全威胁:

  1. 客户端请求连接到服务器
  2. 攻击者将 Negotiate 消息中继到服务器和受害者机器
  3. 受害者机器发送随机数 Challenge
  4. 攻击者将 Challenge 中继回客户端
  5. 客户端用用户密码签名 nonce
  6. 攻击者中继 NTLM 认证消息
  7. 目标通过 NETLOGON 通道验证
  8. DC 批准认证(因为密码正确)

关键点:NTLM 中继仅在服务器未强制执行加密登录时有效

2. CVE-2020-1048 打印机漏洞分析

2.1 漏洞概述

漏洞类型:本地权限提升 (LPE)
影响范围:Windows Server 2008/2012/2016/2019,Windows 7/8.1/10
漏洞原理:利用访问检查缺失实现任意文件写入

2.2 技术细节

打印机驱动安装机制

  • 早期系统:需要 SeLoadDriverPrivilege 权限
  • Vista 及以后:标准用户可安装已存在的驱动程序
  • 漏洞利用点:任何用户可安装打印机驱动程序

打印机端口设置

Windows 支持多种打印机端口类型:

  • LPT1 端口
  • USB 端口
  • 网络端口
  • 文件端口(关键漏洞点)

攻击方法

  1. 安装通用/文本驱动程序(仅传输输入到端口)
  2. 设置打印机端口为文件
  3. 打印数据写入指定文件

漏洞成因

  • 访问检查在客户端运行而非服务端
  • 非特权用户可利用此路径写入任意文件

3. CVE-2021-1678 打印后台处理程序漏洞分析

3.1 漏洞概述

漏洞类型:远程代码执行 (RCE)
漏洞危害:通过 NTLM 中继在目标计算机上执行代码
攻击接口:打印机后台处理程序 MSRPC 接口

3.2 技术细节

RPC 安全机制问题

  • RPC 会话安全级别由身份验证级别决定
  • 某些服务需要加密(数据包隐私)
  • 其他仅需签名(数据包完整性)
  • 漏洞点:接口允许连接身份验证级别的数据包时易受中继攻击

漏洞利用流程

  1. 与攻击者控制的中继机器建立 NTLM 会话
  2. 绑定到目标上的 IRemoteWinspool 接口
  3. 设置身份验证级别为 RPC_C_AUTHN_LEVEL_CONNECT
  4. 中继 NTLM 认证通过 RPC 通道
  5. 执行一系列 RPC 命令:
    • RpcAsyncInstallPrinterDriverFromPackage (Opnum 62):安装"通用/文本"驱动
    • RpcAsyncOpenPrinter (Opnum 0)
    • RpcAsyncXcvData (Opnum 33):添加端口
    • RpcAsyncAddPrinter (Opnum 1):添加打印机
    • RpcAsyncStartDocPrinter (Opnum 10):开始新文档
    • RpcAsyncWritePrinter (Opnum 12):写入文档

4. 组合攻击:CVE-2020-1048 + CVE-2021-1678

4.1 攻击场景

  • 本地非特权用户 → 远程特权用户权限获取
  • 通过 NTLM 中继实现权限提升

4.2 详细攻击步骤

  1. 初始认证

    • 客户端认证请求传递到攻击者服务器
    • 攻击者创建与目标服务器的通道
    • 绑定到 Print Spooler 接口
  2. 认证中继

    • 中继认证请求
    • 获取 NTLM Challenge 并中继到客户端
    • 客户端响应 Challenge
    • 转发响应到 DC 完成认证
  3. 漏洞利用

    • 通过认证会话发送未加密命令
    • 安装打印机驱动程序
    • 添加打印机端口
    • 写入任意文件实现权限提升

5. 防御建议

  1. 针对 NTLM 中继

    • 启用 SMB 签名
    • 强制使用 Kerberos 认证
    • 限制 NTLM 使用范围
  2. 针对打印后台处理程序

    • 禁用不必要的打印后台处理程序服务
    • 应用最新安全补丁
    • 限制打印机驱动安装权限
  3. 通用防御

    • 实施网络分段
    • 监控异常打印活动
    • 启用 Windows 事件日志审核

6. 总结

这两个漏洞展示了 Windows 打印后台处理程序中的严重安全问题:

  • CVE-2020-1048:本地权限提升通过任意文件写入
  • CVE-2021-1678:远程代码执行通过 NTLM 中继
  • 组合利用可实现从非特权用户到系统完全控制的权限提升

理解这些漏洞的底层机制对于有效防御类似攻击至关重要。

Windows 打印后台处理程序漏洞深度分析:CVE-2020-1048与CVE-2021-1678 1. 背景知识 1.1 Windows 认证机制概述 Windows 系统主要使用两种认证协议: NTLM 认证流程 NTLM 协商 :客户端向服务器发送 NTLM 协商请求 挑战请求 :服务器创建 nonce 并在挑战请求中发送 签名响应 :客户端使用用户密码对 nonce 进行签名 验证请求 :服务器通过 NETLOGON 通道发送 NTLM 身份验证消息到域控(DC) 批准/拒绝 :DC 验证用户名和密码后决定批准或拒绝 Kerberos 认证流程 AS-REQ :客户端用 NTLM-hash 加密时间戳,向认证服务(AS)请求 TGT 票据 AS-REP :AS 验证客户端后返回用 krbtgt 用户 NTLM hash 加密的 TGT 票据(包含 PAC) TGS-REQ :客户端用 TGT 向票据授予服务(TGS)请求服务票据 TGS-REP :TGS 验证后返回服务票据(TGS) AP-REQ :客户端用 TGS 票据请求服务 AP-REP :服务端验证票据并检查 PAC 中的访问权限 1.2 NTLM 中继攻击原理 NTLM 中继攻击是 Windows 环境中常见的安全威胁: 客户端请求连接到服务器 攻击者将 Negotiate 消息中继到服务器和受害者机器 受害者机器发送随机数 Challenge 攻击者将 Challenge 中继回客户端 客户端用用户密码签名 nonce 攻击者中继 NTLM 认证消息 目标通过 NETLOGON 通道验证 DC 批准认证(因为密码正确) 关键点 :NTLM 中继仅在服务器未强制执行加密登录时有效 2. CVE-2020-1048 打印机漏洞分析 2.1 漏洞概述 漏洞类型 :本地权限提升 (LPE) 影响范围 :Windows Server 2008/2012/2016/2019,Windows 7/8.1/10 漏洞原理 :利用访问检查缺失实现任意文件写入 2.2 技术细节 打印机驱动安装机制 早期系统:需要 SeLoadDriverPrivilege 权限 Vista 及以后:标准用户可安装已存在的驱动程序 漏洞利用点 :任何用户可安装打印机驱动程序 打印机端口设置 Windows 支持多种打印机端口类型: LPT1 端口 USB 端口 网络端口 文件端口 (关键漏洞点) 攻击方法 : 安装通用/文本驱动程序(仅传输输入到端口) 设置打印机端口为文件 打印数据写入指定文件 漏洞成因 访问检查在客户端运行而非服务端 非特权用户可利用此路径写入任意文件 3. CVE-2021-1678 打印后台处理程序漏洞分析 3.1 漏洞概述 漏洞类型 :远程代码执行 (RCE) 漏洞危害 :通过 NTLM 中继在目标计算机上执行代码 攻击接口 :打印机后台处理程序 MSRPC 接口 3.2 技术细节 RPC 安全机制问题 RPC 会话安全级别由身份验证级别决定 某些服务需要加密(数据包隐私) 其他仅需签名(数据包完整性) 漏洞点 :接口允许连接身份验证级别的数据包时易受中继攻击 漏洞利用流程 与攻击者控制的中继机器建立 NTLM 会话 绑定到目标上的 IRemoteWinspool 接口 设置身份验证级别为 RPC_ C_ AUTHN_ LEVEL_ CONNECT 中继 NTLM 认证通过 RPC 通道 执行一系列 RPC 命令: RpcAsyncInstallPrinterDriverFromPackage (Opnum 62):安装"通用/文本"驱动 RpcAsyncOpenPrinter (Opnum 0) RpcAsyncXcvData (Opnum 33):添加端口 RpcAsyncAddPrinter (Opnum 1):添加打印机 RpcAsyncStartDocPrinter (Opnum 10):开始新文档 RpcAsyncWritePrinter (Opnum 12):写入文档 4. 组合攻击:CVE-2020-1048 + CVE-2021-1678 4.1 攻击场景 本地非特权用户 → 远程特权用户权限获取 通过 NTLM 中继实现权限提升 4.2 详细攻击步骤 初始认证 : 客户端认证请求传递到攻击者服务器 攻击者创建与目标服务器的通道 绑定到 Print Spooler 接口 认证中继 : 中继认证请求 获取 NTLM Challenge 并中继到客户端 客户端响应 Challenge 转发响应到 DC 完成认证 漏洞利用 : 通过认证会话发送未加密命令 安装打印机驱动程序 添加打印机端口 写入任意文件实现权限提升 5. 防御建议 针对 NTLM 中继 : 启用 SMB 签名 强制使用 Kerberos 认证 限制 NTLM 使用范围 针对打印后台处理程序 : 禁用不必要的打印后台处理程序服务 应用最新安全补丁 限制打印机驱动安装权限 通用防御 : 实施网络分段 监控异常打印活动 启用 Windows 事件日志审核 6. 总结 这两个漏洞展示了 Windows 打印后台处理程序中的严重安全问题: CVE-2020-1048:本地权限提升通过任意文件写入 CVE-2021-1678:远程代码执行通过 NTLM 中继 组合利用可实现从非特权用户到系统完全控制的权限提升 理解这些漏洞的底层机制对于有效防御类似攻击至关重要。