0x00 前言
通过Fox-IT我们可以让客户了解其企业组织中出现的常见安全风险。当攻击者可以利用NT LAN Manager身份验证协议(以下简称:NTLM身份验证)时,凭据重用就有这样的风险,即这种协议通常在Microsoft Active Directory中保持启用状态。NTLM认证中的不安全性已有超过15年。该协议可能被滥用,是通过一个被称为“中继”的过程劫持受害者的会话,该过程通过将受害者的凭据转发到与预期不同的服务来滥用受害者的凭据。在许多情况下,默认情况仍然支持和启用NTLM身份验证,即使它已被更安全的Kerberos替换为默认身份验证方法。
在本文中,我们将演示如何使用NtlmRelayx将凭证中继到LDAP、IMAP和MSSQL,NtlmRelayx是著名的smbrelayx工具的FOX IT扩展。要防御此类攻击:
- 如果可能,请完全禁用企业组织内的NTLM并切换到Kerberos。
- 如果无法禁用NTLM,请参阅此文中讨论的设置和指南,以降低凭据重用的风险。
0x01 NTLM中继简要说明
NTLM身份验证是一种基于挑战 - 响应的协议。挑战- 响应协议使用一个通用的共享秘密(在本例中是用户密码)来验证客户端。服务器发送一个质询,客户端回复此质询的响应。如果质询与服务器计算的质询相匹配,则接受身份验证。NTLM身份验证是一种复杂的协议,这里只是简单的阐述。可以在http://davenport.sourceforge.net/ntlm.html中找到非常详细的描述。
1.NTLM身份验证流程
NTLM身份验证协议有3个步骤:
- 协商身份验证:NTLM身份验证的第一步是协议协商,以及客户端支持的功能。在此阶段,客户端将身份验证请求发送到服务器,包括客户端接受的NTLM版本。
- 服务器挑战:服务器响应自己的消息,指示它接受的NTLM版本以及要使用的功能。此消息还包括“质询”值,这在身份验证中很重要。
- 身份验证响应:客户端根据质询返回响应,并包含所属的用户名和域的密码
交互3条消息后,服务器将回复一条消息,表明身份验证成功,或者身份验证失败。根据使用的协议,客户端与服务器之间的会话现在已经过身份验证。此过程如下图所示:
2.滥用NTLM
作为攻击者,如果客户端能够被劫持连接到攻击者,那么这个过程可能会被滥用。如何做到这一点将在下一节中阐述。一旦攻击者拥有一个进行身份验证的连接客户端,他们就可以轻松地将3条消息转发到客户端和服务器之间的服务器,直到质询 - 响应周期完成。
在连接通过身份验证时,攻击者可以简单地向客户端发送错误消息,或者断开连接。之后,攻击者可以使用该会话从中继身份验证的用户中与服务器进行交互。
3.跨协议(cross)中继
NTLM身份验证被封装在其他协议中,但无论上层协议如何,消息都是相同的。这允许在其他协议中使用NTLM消息。例如,使用HTTP进行身份验证的客户端会在“授权”标头中发送NTLM身份验证消息。攻击者可以从HTTP标头中取出这些消息,并在其他协议(如SMB)中使用它们。
NTLM在多种协议中被支持,例如SMB,HTTP(S),LDAP,IMAP,SMTP,POP3和MSSQL。
4.获得中继流量
还有一点尚未解释,那就是如何让客户端与攻击者连接,而不是与真正的服务器连接。有几种方法可以获得可中继的流量:
- 以不安全的方式向以其解析IP的主机的流量
- 滥用AutoDiscovery协议导致的流量
- 通过中间人攻击获得的流量
4.不安全的名称解析协议
在Fox-IT中经常遇到使用不安全协议的名称解析流量。工作站或服务器通常被配置为网络中不再存在的主机或无法使用DNS解析其主机名的主机。当这种情况发生时,Windows工作站会退回到名称解析协议,如NBNS和LLMNR,它们依赖广播流量来请求同一网络中的主机将主机名解析为IP地址。由于同一网段中的所有主机都可以查看此流量(取决于防火墙配置),因此任何主机都可以回复请求。这使攻击者有机会伪造所请求名称的地址。该过程如下所示。
5.自动发现(WPAD)协议
也许过去几年黑客中最臭名昭著的功能是Windows代理自动检测(WPAD)功能。此功能基本上会通过DNS查找名为WPAD的主机名,如果不成功,则可以通过上面描述的llmnr和nbns进行攻击,然后连接到它能找到的第一个主机。滥用此功能变得更加容易,因为当提示进行身份验证时,工作站将自动尝试使用NTLM身份验证进行验证,然后攻击者可能会中继该身份验证。微软在2016年6月修补了这方面的一些问题,但有时Fox-IT仍在网络中遇到这种情况。
6.中间人攻击
攻击者接管受害者流量的中间人攻击通常在企业网络中具有很大的破坏性,尤其是在使用诸如ARP欺骗之类的技术时。但是,当企业设备连接到不受信任的网络(例如公共WiFi网络)时,攻击者可以攻击受害者并拦截不受TLS保护的流量,将其重定向到受害者工作站信任的位置。然后,如果启用了自动内部网检测(这是默认设置),受害者将自动进行身份验证。
7.使用Ntlmrelayx在任何地方中继NTLM
有几种工具可以滥用NTLM身份验证。其中一个是smbrelayx,它是Core Security的impacket 库的一部分。Ntlmrelayx是由Fox-IT开发的smbrelayx工具的扩展和部分重写。它具有适用于各种协议的中继功能。该工具接受多个目标,在每个目标之间循环,以找到要进行身份验证的系统。该工具具有一个SMB和HTTP服务器,从中它可以将NTLM身份验证中继到SMB、HTTP(S)、IMAP、LDAP和MSSQL。
8.中继到SMB
中继到smb是一种经典攻击,它已经是smbrelayx的一部分。如果您不熟悉此攻击,中继到SMB允许攻击者在禁用了SMB签名的主机上执行文件,前提是被中继的用户在设备上具有管理权限。对于非管理用户,ntlmrelayx添加了启动smbclient shell的选项,允许攻击者与共享进行交互,例如下载或上传文件。可以使用交互式标志(-i)完成此攻击,该标志将生成本地TCP shell,该shell可以与例如netcat连接。
9.中继到LDAP
中继到LDAP是Ntlmrelayx中的一个新增功能。LDAP是一个有趣的协议,因为它用于直接查询目录,该目录包含了许多攻击者感兴趣的信息。更有趣的是,在默认情况下,域中的所有帐户(包括计算机帐户)都可以读取这些信息的大部分。这就是Ntlmrelayx与另一个Fox IT开发工具ldapdomaindump集成的地方。此工具尝试从域中收集尽可能更多的信息,包括用户,其组成员身份,域计算机和域策略。
除了收集信息之外,还可以通过LDAP写入目录。如果ntlmrelayx遇到具有域管理员权限的用户,它将创建一个新的域管理员帐户,该帐户立即使攻击者可以完全控制域:
10. 中继到IMAP
虽然在当前版本的Exchange中默认情况下未启用,但许多企业组织在其Exchange服务器上通过IMAP进行NTLM身份验证。这允许中继到IMAP,使攻击者可以直接访问受害者的电子邮件。当中继到IMAP时,ntlmrelayx可以选择在电子邮件中搜索关键字,或者只在用户的指定收件箱中下载所有最新的电子邮件。
11.中继到MSSQL
中继到MSSQL目前仅作为理论证明存在,但可以在命令行上指定查询,这些查询将在数据库的受害者上中被执行
0x02 缓解措施
那么,在企业组织可以做些什么来抵御这些攻击呢?上述所有攻击都滥用了NLTM身份验证协议,因此唯一完整的解决方案是完全禁用NTLM并切换到Kerberos。但是,许多企业组织都有不支持Kerberos身份验证的旧产品或操作系统,因此禁用NTLM将对业务产生相当大的影响。作为缓解措施,那么可以启用多种设置以减少最小化的中间人攻击风险。
- 启用SMB签名:SMB签名将通过要求对所有流量进行签名来阻止中继到SMB。签名要求用户密码对消息进行身份验证,因此中继连接的攻击者无法发送服务器接受的任何通信,因为攻击者没有拥有受害者的密码。
- 启用LDAP签名:与SMB签名类似,LDAP签名可防止与LDAP的未签名连接。应该注意的是,通过TLS到LDAP的连接被认为是签名的,因此此设置不会阻止通过TLS到LDAP的中继攻击。
- 启用身份验证扩展保护:身份验证的扩展保护有助于防止某些中继攻击,方法是确保用于连接到服务器的TLS通道与客户端进行身份验证时使用的通道相同。此设置主要适用于IIS。
- 启用SPN目标名称验证:SPN目标名称验证是另一种缓解措施,它可以通过验证客户端认为正在进行身份验证的目标名称来阻止中间人攻击到SMB。如果名称与服务器不匹配,则拒绝身份验证。
- 确保内部网站使用HTTPS:当通过不安全的HTTP协议访问内部网站时,用户无法验证连接的真实性。通过强制所有内部网站仅通过HTTPS方法,中间人攻击变得不那么有效。
一般强化以防止中间人攻击
除了这些特定的服务器端设置之外,以下一般强化可以防止NTLM中继:
- 禁用自动Intranet检测:如果域中需要NTLM身份验证,请确保浏览器(主要是Internet Explorer)仅自动对受信任的网站进行身份验证。通过组策略,可以禁用自动Intranet检测,并且只能自动对应应用自动身份验证的内部网站白名单进行身份验证。如上所述,强烈建议仅在此处使用HTTPS网站。
- 禁用Windows代理自动检测:虽然WPAD的安全问题主要由Microsoft MS16-077安全更新解决,但仍然建议通过组策略禁用WPAD。
- 禁用LLMNR / NBNS:在配置良好的网络中通常不需要这些不安全的名称解析协议。禁用它们会减少攻击者进行名称解析欺骗的可能性,从而使攻击者更难以欺骗受害者身份连接到攻击者服务器。
0x03 获取Ntlmrelayx
Ntlmrelayx已经提交到Impacket存储库中,可以在Impacket 示例目录中找到。
0x04 更多资源
我们在尝试理解NTLM方面的大部分研究都是在以下资源的帮助下完成的:
- http://davenport.sourceforge.net/ntlm.html(清楚的解释,但有些部分已过时,基于在Microsoft开源之前对协议进行逆向)
- http://ubiqx.org/cifs/SMB.html#SMB.8.5(与上面的类似)
- https://msdn.microsoft.com/en-us/library/cc236621.aspx(官方协议文档,非常技术性)
- https://technet.microsoft.com/en-us/library/2006.08.securitywatch.aspx(LMCompatibilityLevel说明)