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 认证流程
- 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 中继
- 组合利用可实现从非特权用户到系统完全控制的权限提升
理解这些漏洞的底层机制对于有效防御类似攻击至关重要。