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认证流程
- 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)
-
针对打印后台处理程序漏洞:
- 禁用不必要的打印后台处理程序服务
- 应用微软发布的安全补丁
- 限制非管理员用户的打印相关权限
-
通用防御:
- 实施网络分段,限制横向移动
- 监控异常打印服务活动
- 定期审计系统配置和权限