2021年1月12日,Microsoft发布了CVE-2021-1678的补丁,这是CrowdStrike®研究人员发现的漏洞。攻击者可以利用这个漏洞把NTLM身份验证会话中继到受攻击的计算机,用打印机后台处理程序MSRPC接口在受攻击的计算机上远程执行代码。
Compass Security的Sylvain Heiniger撰写的《通过RPC中继NTLM身份验证》(https://blog.compass-security.com/2020/05/relaying-ntlm-authentication-over-rpc/)首次出现了类似的MSRPC中继。Sylvain在他的博客里描述了他如何利用MSRPC接口上不安全的身份验证级别来通过NTLM中继实现远程代码执行。
在此博客文章中,我们展示了如何利用IRemoteWinSpool MSRPC接口,以及公司如何保护自己免受此漏洞的侵害。该漏洞利用技术类似于其他先前的打印机后台处理程序漏洞利用文章,例如《PrintDemon:打印后台处理程序权限提升,持久性和隐密性(CVE-2020-1048及更高版本)》(https://windows-internals.com/printdemon-cve-2020-1048/)。
以下是技术细节:
01
NTLM中继基础
NTLM身份验证协议容易受到中继攻击。NTLM中继是一种常见的攻击技术,其中,攻击一台计算机的攻击者可以用针对受感染服务器的NTLM身份验证,横向移动到其他计算机。
(图1. NTLM中继基本流程)
多年来,Microsoft开发出多种缓解措施来阻止NTLM中继攻击。有关NTLM中继的更详细的介绍,请查看CrowdStrike以前发布的博客(https://www.crowdstrike.com/blog/retrieve-session-key-authentication/)。
02
DCE / RPC中继
只要没有保护,就可以从协议到协议之间中继NTLM身份验证。以前的NTLM中继攻击包括攻击诸如服务器消息块(SMB)和LDAP / S的其他协议。本文主要讲如何攻击MSRPC。
SMB和LDAP防止NTLM中继主要可以通过数据包签名,即强制用GPO(“ Microsoft网络服务器:对数字通信(始终)进行数字签名”(Windows 10)-Windows安全性)。
MSRPC在执行中继和中间人攻击(MITM)数据包安全性方面的方式有所不同。MSRPC服务器定义其所需的身份验证级别,用来确定基础身份验证机制必须提供对这台服务器(接口)进行身份验证的功能:
(图2. MSRPC身份验证级别)
RPC_C_AUTHN_LEVEL_CONNECT的身份验证级别在初始请求(绑定请求)上对用户进行身份验证,但不对传输的命令进行任何加密或签名。允许这种身份验证级别的接口容易受到NTLM中继攻击。
所以多数人都希望服务器注册表项的MSRPC API在默认情况下选择安全选项,拒绝身份验证级别低于RPC_C_AUTHN_LEVEL_PKT_INTEGRITY的客户端。但是,在MSRPC情况下,它就是每个接口,因为每个RPC接口都可以通过检查回调的身份验证级别来手动执行身份验证级别(例如,RpcServerRegisterIfEx函数(rpcdce.h)中的IfCallback – Win32应用程序))。
由于疏忽和之前的设置不妥当,这种情况导致许多RPC服务器易受攻击。Compass Security的博客就利用了任务计划程序界面。
03
后台打印程序特权提升
缺乏数据包安全性的RPC接口易受攻击,在找这些接口时,我们发现了一个易受攻击的接口:IRemoteWinspool,用于远程打印机后台处理程序管理。
Alex Ionescu和Yarden Shafir的《PrintDemon: 后台打印程序特权提升,持久性和隐密性(CVE-2020-1048及更高版本)》(https://windows-internals.com/printdemon-cve-2020-1048/)展示了在如何利用打印机后台处理程序界面,即使启动用户没有足够的权限来写入任意文件,也可以将其作为SYSTEM执行此操作。
但我们的情况有所不同。由于我们用的是NTLM中继,需要在有特权的用户帐户中使用NTLM会话来执行一系列RPC操作,这样才会有成效。
将所有这些拼凑在一起,进行有效的利用,然后会产生以下序列:
用攻击者控制的中继计算机建立NTLM会话。
攻击者绑定目标上的IRemoteWinspool接口,然后选择RPC_C_AUTHN_LEVEL_CONNECT的身份验证级别。
攻击者通过建立起来的RPC通道中继NTLM身份验证。
执行一系列类似于PrinterDemon利用流程的RPC命令:
RpcAsyncInstallPrinterDriverFromPackage(Opnum 62)—安装“通用/文本”打印机驱动程序
RpcAsyncOpenPrinter(Opnum 0)
RpcAsyncXcvData(Opnum 33)— 添加端口
RpcAsyncAddPrinter(Opnum 1)— 使用提到的驱动程序添加打印机
RpcAsyncStartDocPrinter(Opnum 10)— 创建一个新文档
RpcAsyncWritePrinter(Opnum 12)— 写入新文档
我们执行了该攻击的POC。我们的代码是基于Compass Security(用IRemoteWinspool替换TSCH接口)所操作的MSRPC中继里的impacket(https://github.com/SecureAuthCorp/impacket),以及执行打印后台处理程序的升级流程。
(图3. CVE-2021-1678利用流程)
04
修复分析
修补Sylvain Heiniger最初提出的问题时,Microsoft在任务计划服务的IfCallback中添加检查,没有对RPC的运行时间进行大幅改动,也许是因为它的兼容性问。我们提交了类似的实例,不知道Microsoft是否会尝试其他有针对性的修复或大的改动。
我们对Spoolsv.exe的IRemoteWinspool执行进行了逆向工程,发现了一个叫RpcManager :: VerifyRpcValidProtocolSequence的共享函数,它可用于一些不同的RPC接口,包括IRemoteWinSpool。最初,这个函数是用来验证IRCATE_WINSpool有没有用ncacn_ip_tcp协议序列,确保仅接受远程TCP / IP客户端(拒绝SMB管道和/或本地ALPC客户端)。不出所料,身份验证安全级别没有受到任何检查。
修补后,把新的IfCallback函数添加到二进制文件中,然后显示以下伪代码:
(图4.修补后,在IRemoteWinspool中用的新的RPC验证流程)
如下所示,安全级别的验证扩展了仅用于验证协议序列的调用,如下所示:
(图5.修补程序强制使用RPC_C_AUTHN_LEVEL_PKT_PRIVACY或更高版本后的安全级别验证)
这是另一种战略性修复,类似于ITaskScheduler接口的修复,对照RPC_C_AUTHN_LEVEL_PKT_PRIVACY检查客户端的身份验证级别,如果没有这样设置,则无法调用RPC_S_ACCESS_DENIED。但我们注意到,只有设置了注册表值,才能采用此代码路径,即使打了补丁后也没有启用该值。
如图5中的代码所示,必须把HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Print密钥中的REG_DWORD值RpcAuthnLevelPrivacyEnabled设置为1,否则无法执行此附加检查,系统仍然易受到攻击。
现在已经发布了补丁程序,Microsoft在这篇文章(https://support.microsoft.com/en-us/topic/managing-deployment-of-printer-rpc-binding-changes-for-cve-2021-1678-12a69652-30b9-3d61-d9f7-7201623a8b25)中对此行为进行了说明,该文章表示,在默认情况下,RPC打印机绑定还是允许漏洞连接。6月份的更新将发布第二个补丁,把安全注册表项设置成为默认设置。
05
如何保护自己的网络?
以下的步骤有助于减少您的网络漏洞,防止其他类似的NTLM中继攻击:
**补丁程序:**尽快打上MS补丁程序,缓解已发现的攻击。但仅靠打补丁是不够的。除非按照Microsoft指南(https://support.microsoft.com/en-us/topic/managing-deployment-of-printer-rpc-binding-changes-for-cve-2021-1678-12a69652-30b9-3d61-d9f7-7201623a8b25)更改注册表项设置,否则你的网络还是容易受到此类攻击。对于紧急修补情况,请观看此视频(https://www.crowdstrike.com/blog/tech-center/emergency-patching/),了解Falcon Spotlight如何让你的网络处于安全状态。
**配置安全的NTLM设置:**在默认情况下,没有启用某些NTLM中继缓解措施,导致网络易受攻击。最值得注意的是SMB签名,LDAP签名和LDAPS通道绑定。查看这些安全设置,确保你的网络有完全受到保护。
**跟踪NTLM的使用:**在我看来,应该完全停止使用NTLM。这是基于我们过去发现并在博客中发布的各种NTLM安全问题。
**检测NTLM中继攻击:**保护和删除网络中的NTLM是一个漫长而复杂的IT项目。如果你的网络不是完全安全的,那我们建议你用安全产品来检测NTLM异常和NTLM中继攻击。
木星安全实验室(MxLab),由中国网安·广州三零卫士成立,汇聚国内多名安全专家和反间谍专家组建而成,深耕工控安全、IoT安全、红队评估、反间谍、数据保护、APT分析等高级安全领域,木星安全实验室坚持在反间谍和业务安全的领域进行探索和研究。