CVE-2020-1048 以及 CVE-2021-1678的分析
字数 1766 2025-08-09 18:44:09

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

1. 背景知识

1.1 Active Directory认证协议

NTLM认证流程

  1. NTLM协商请求:客户端向服务器请求身份验证
  2. 挑战请求:服务器创建nonce并发送给客户端
  3. 响应生成:客户端使用用户密码对nonce进行签名
  4. 验证请求:服务器通过NETLOGON通道发送NTLM身份验证消息
  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验证TGT后返回TGS票据
  5. AP-REQ:客户端用TGS票据请求服务
  6. AP-REP:服务端解密TGS,验证PAC中的权限

1.2 NTLM中继攻击原理

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

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

2. CVE-2020-1048分析

漏洞原理

利用打印后台处理程序中访问检查的缺失,实现系统中任意文件写入

影响范围

  • Windows Server: 2008, 2012, 2016, 2019
  • Windows客户端: 7, 8.1, 10

技术细节

  1. 打印机驱动安装机制

    • 早期系统需要SeLoadDriverPrivilege权限
    • 从Vista开始,已存在的驱动无需特权即可安装
    • 漏洞允许任何用户安装打印机驱动程序
  2. 打印机端口设置

    • 支持LPT1、USB、网络端口和文件端口
    • 设置为文件端口时,打印数据写入指定文件
  3. 漏洞成因

    • 访问检查在客户端运行,服务端缺失
    • 非特权用户可指定任意文件路径进行写入

3. CVE-2021-1678分析

漏洞危害

允许攻击者:

  1. 将NTLM认证会话中继到目标计算机
  2. 通过MSRPC接口远程执行代码

利用流程

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

4. 组合攻击分析

漏洞结合利用

  1. CVE-2020-1048:任意文件写入
  2. CVE-2021-1678:NTLM中继+RCE

攻击步骤

  1. 客户端认证请求被传递到恶意服务器
  2. 攻击者创建与目标服务器的通道,绑定Print Spooler接口
  3. 中继身份验证
  4. 获取NTLM Challenge并中继到客户端
  5. 客户端响应Challenge,转发回DC
  6. 建立已验证会话后发送未加密命令:
    • 安装打印机驱动
    • 添加打印机端口
    • 写入任意文件

5. 防御建议

  1. 针对NTLM中继

    • 启用SMB签名
    • 限制NTLM使用,优先使用Kerberos
    • 实施EPA(Extended Protection for Authentication)
  2. 针对打印后台处理程序漏洞

    • 禁用不必要的打印后台处理程序服务
    • 应用微软发布的安全补丁
    • 限制非管理员用户的打印相关权限
  3. 通用防御

    • 实施网络分段,限制横向移动
    • 监控异常打印服务活动
    • 定期审计系统配置和权限

6. 参考资源

Windows打印后台处理程序漏洞分析:CVE-2020-1048与CVE-2021-1678 1. 背景知识 1.1 Active Directory认证协议 NTLM认证流程 NTLM协商请求 :客户端向服务器请求身份验证 挑战请求 :服务器创建nonce并发送给客户端 响应生成 :客户端使用用户密码对nonce进行签名 验证请求 :服务器通过NETLOGON通道发送NTLM身份验证消息 域控验证 :DC验证用户名和密码,批准或拒绝认证 Kerberos认证流程 AS-REQ :客户端用NTLM-hash加密时间戳,向AS请求TGT票据 AS-REP :AS验证后返回用krbtgt的NTLM hash加密的TGT票据(包含PAC) TGS-REQ :客户端用TGT请求特定服务的TGS票据 TGS-REP :TGS验证TGT后返回TGS票据 AP-REQ :客户端用TGS票据请求服务 AP-REP :服务端解密TGS,验证PAC中的权限 1.2 NTLM中继攻击原理 客户端请求连接到服务器 攻击者将Negotiate消息中继到服务器和受害者机器 受害者机器发送随机数Challenge Challenge被中继回客户端 客户端用用户密码签名nonce 攻击者中继NTLM认证消息 DC验证通过(因为是正确密码) 关键点 :NTLM中继仅在服务器未强制执行加密登录时有效 2. CVE-2020-1048分析 漏洞原理 利用打印后台处理程序中访问检查的缺失,实现系统中任意文件写入 影响范围 Windows Server: 2008, 2012, 2016, 2019 Windows客户端: 7, 8.1, 10 技术细节 打印机驱动安装机制 : 早期系统需要SeLoadDriverPrivilege权限 从Vista开始,已存在的驱动无需特权即可安装 漏洞允许任何用户安装打印机驱动程序 打印机端口设置 : 支持LPT1、USB、网络端口和文件端口 设置为文件端口时,打印数据写入指定文件 漏洞成因 : 访问检查在客户端运行,服务端缺失 非特权用户可指定任意文件路径进行写入 3. CVE-2021-1678分析 漏洞危害 允许攻击者: 将NTLM认证会话中继到目标计算机 通过MSRPC接口远程执行代码 利用流程 建立与攻击者控制的中继机器的NTLM会话 绑定到目标IRemoteWinspool接口,设置RPC_ C_ AUTHN_ LEVEL_ CONNECT认证级别 通过RPC通道中继NTLM认证 执行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 :NTLM中继+RCE 攻击步骤 客户端认证请求被传递到恶意服务器 攻击者创建与目标服务器的通道,绑定Print Spooler接口 中继身份验证 获取NTLM Challenge并中继到客户端 客户端响应Challenge,转发回DC 建立已验证会话后发送未加密命令: 安装打印机驱动 添加打印机端口 写入任意文件 5. 防御建议 针对NTLM中继 : 启用SMB签名 限制NTLM使用,优先使用Kerberos 实施EPA(Extended Protection for Authentication) 针对打印后台处理程序漏洞 : 禁用不必要的打印后台处理程序服务 应用微软发布的安全补丁 限制非管理员用户的打印相关权限 通用防御 : 实施网络分段,限制横向移动 监控异常打印服务活动 定期审计系统配置和权限 6. 参考资源 MS-RPCE协议文档 CrowdStrike安全公告