微软在本月的微软补丁日修复了一个 Windows NT LAN Manager ( NTLM ) 安全特征绕过漏洞。该漏洞 CVE 编号为 CVE-2021-1678,CVSS 评分为 4.3 分。攻击者利用该漏洞可以中继 NTLM 认证会话到攻击者的机器,使用 printer spooler MSRPC 接口来在被攻击的机器上远程执行代码。
NTLM 中继攻击是中间人攻击的一种,攻击者利用该攻击可以访问网络来拦截客户端和服务器之间合法的认证流量,并对经过验证的认证请求进行中继以访问相关的网络服务。
Print Spooler 权限提升
漏洞利用中,攻击者使用了来自特权用户账户的 NTLM 会话来执行一系列的 RPC 操作。整个漏洞利用的步骤如下所示:
· 建立于攻击者控制的中继机器的 NTLM 会话;
·攻击者绑定目标的 IRemoteWinspool 接口,选择 RPC_C_AUTHN_LEVEL_CONNECT 的认证级别;
·攻击者通过建立的 RPC 信道来中继 NTLM 认证;
·执行一系列的 RPC 命令:
· RpcAsyncInstallPrinterDriverFromPackage ( Opnum 62 ) — 安装 "Generic/Text" 打印机驱动;
· RpcAsyncOpenPrinter ( Opnum 0 )
· RpcAsyncXcvData ( Opnum 33 ) — 添加端口
· RpcAsyncAddPrinter ( Opnum 1 ) — 用前面提到的驱动添加打印机;
· RpcAsyncStartDocPrinter ( Opnum 10 ) — 打开新文档;
· RpcAsyncWritePrinter ( Opnum 12 ) — 在新文档中写入内容。
图 CVE-2021-1678 漏洞利用流图
补丁分析
微软在补丁中对定时任务服务使用的 IfCallback 加入了检查,同时对 RPC 运行时间没有太大的影响。研究人员逆行了 Spoolsv.exe 中 IRemoteWinspool 的实现,发现了一个名为 RpcManager::VerifyRpcValidProtocolSequence 的共享函数,该函数被多个不同的 RPC 接口所使用,其中就包括 IRemoteWinSpool。
本来该函数会验证 ncacn_ip_tcp 协议序列是否用于 IRemoteWinspool,以确保只有远程的 TCP/IP 客户端才会被接受。但是,在认证安全级中没有相关的检查。
在补丁中,二进制文件中加入了一个新的 IfCallback 函数,伪代码如下所示:
图 安装补丁后 IRemoteWinspool 使用的新的 RPC 验证流
从中可以看出,验证协议序列的调用被扩展了,如下所示:
图 安装补丁后安全级别验证
如上图所示,HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPrint key 中的 REG_DWORD value RpcAuthnLevelPrivacyEnabled 必须设置为 1,否则其他的检查就不会执行,系统仍然会受到攻击。
更多技术细节参见:https://www.crowdstrike.com/blog/cve-2021-1678-printer-spooler-relay-security-advisory/
如若转载,请注明出处:https://www.ozabc.com/keji/333974.html