结合NTLM中继和Kerberos委派攻击AD

0x00 前言

在上个月我深入演讲了无约束委派后,本文将讨论一种不同类型的Kerberos委派:基于资源的约束委派。本文的内容基于Elad Shamir的Kerberos研究,并结合我自己的NTLM研究,提出了一种新的攻击方法,如果您在同一网段中,可以在没有任何凭证的情况下在Active Directory中的任何Windows计算机上将代码执行提升为SYSTEM权限。这是不安全的Active Directory默认滥用的另一个例子,而不是任何新的利用

0x01 攻击TL; DR

如果攻击者在本地网络上,无论是物理上还是通过受感染的主机,都可以使用mitm6(https://github.com/fox-it/mitm6)执行DNS接管,前提是IPv6尚未在网络中使用。执当执行此攻击时,还可以通过HTTP欺骗WPAD位置并请求身份验证以使用我们的恶意代理,使计算机帐户和用户通过HTTP对我们进行身份验证。这个攻击在去年关于这个主题的博客文章中有详细描述。

我们可以使用ntlmrelayx将此NTLM身份验证中继到LDAP并将其作为受害者计算机帐户进行身份验证。计算机帐户可以通过LDAP修改它们自己的一些属性,其中包括msds allowedtototototototherIdentity属性。此属性通过使用Kerberos进行模拟,控制哪些用户可以像在AD中的任何帐户一样向计算机进行身份验证。这个概念称为基于资源的约束委派,并由Elad Shamirharmj0y详细发布说明。因此,当我们转发计算机帐户时,我们可以修改Active Directory中的帐户,并授予自己在该计算机上模拟用户的权限。然后,我们可以使用高权限用户连接到计算机并执行代码,转储哈希等。这种攻击的好处在于,它在默认情况下运行,不需要任何AD凭据即可执行。

0x02 没有任何问题的凭证

如果您已经阅读了Elad的博客,您可能已经注意到需要对计算机帐户(或具有服务主体名称的任何其他帐户)进行控制才能执行S4U2 代理攻击。默认情况下,Active Directory中的任何用户最多可以创建10个计算机帐户。有趣的是,这不仅限于用户帐户,也可以通过现有的计算机帐户来完成!如果我们可以让任何用户或计算机连接到我们的NTLM中继,我们可以使用ntlmrelayx创建一个计算机帐户:

创建计算机帐户

此处需要通过TLS中继到LDAP,因为不允许通过未加密的连接创建帐户。这些计算机帐户凭证可用于AD中的各种执行,例如查询域信息甚至运行BloodHound:

跑血猎犬

0x03 中继和配置委派

 

让我们进行全面攻击。首先,我们开始mitm6接管目标上的DNS,在这种情况下icorp-w10(完全修补的默认Windows 10安装),我将攻击限制在此主机:

sudo mitm6 -hw icorp-w10 -d internal.corp --ignore-nofqnd

现在,主机可能需要一段时间才能通过DHCPv6请求IPv6地址,或者开始请求WPAD配置。你最好的时机是受害者重新启动主机或重新插入他们的网线时,因此,如果你想长期执行运行任务,那么可以选择从早上开始,可能是进行这种攻击的最佳时间段。无论哪种情况,你都必须有耐心(或者只是攻击更多的主机,但这并不那么顺利)。同时,我们还使用--delegate access参数启动ntlmrelayx以启用委派攻击,并使用-wh attacker-wpad参数启用wpad欺骗和身份验证请求:

ntlmrelayx.py -t ldaps://icorp-dc.internal.corp -wh attacker-wpad --delegate-access

一段时间后,mitm6应该显示我们的受害者作为我们设置的wpad主机的DNS服务器连接到我们主机的信息:

wpad和mitm6

我们可以看到Ntlmrelayx正在接收连接,创建一个新的计算机帐户,并授予它对受害者计算机的委派权限:

ntlmrelayx添加委托

接下来,我们可以使用impacket中的getst.py,它将为我们实现所有的 S4U2Self和S4U2Proxy magic。您将需要从git中获取最新版本的impacket,以包含基于资源的约束委派支持。在本例中,我们将模拟用户admin,该用户admin是域管理员组的成员,因此具有对ICORP-W10的管理权限:

获取管理员用户的服务票证

我们现在为用户admin获得了一个kerberos服务票据,它对cifs/icorp-w10.internal.corp有效。这只允许我们将此用户模拟到特定的主机中,而不是模拟网络中的其他主机。使用此票据,我们可以在目标主机上执行所需的任何操作,例如使用secretsdump转储哈希值:

使用secretsdump转储哈希值

攻击者现在可以完全控制受害者的主机。

0x04 其他滥用方式

本博客重点介绍了如何在完全没有凭证的情况下使用mitm6和wpad来执行中继攻击。通过HTTP连接到被Windows视为Intranet区域一部分的主机的任何连接都可以在相同的问题中使用(前提是启用了自动Intranet检测)。Elad的原博客描述了如何使用WebDAV在主机上利用它。另一个攻击方式是(再次)PrivExchange,它使Exchange作为SYSTEM进行身份验证,除非安装了最新的补丁。

0x05 工具

Ntlmrelayx的更新版本在我的Impacket分支上中可用。一旦这个分支合并到主库中,我将更新这编文章。

0x06 缓解措施

由于此攻击由几个部门组成,因此可以应用多种缓解措施。

0x07 缓解mitm6攻击

Mitm6滥用的一个情况:当Windows查询IPv6地址时,即使在仅使用IPv4的环境中也是如此。如果您不在内部使用ipv6,则防止mitm6的最安全方法是通过组策略阻止dhcpv6流量以及Windows防火墙中的入站的路由通告。完全禁用IPv6可能会产生不必要的其他问题。将以下预定义规则设置为“阻止”而不是“允许”可防止攻击工作:

  • (入站)核心网络 - IPv6动态主机配置协议(DHCPV6-In)
  • (入站)核心网络 - 路由器通告(ICMPv6-In)
  • (出站)核心网络 - IPv6的动态主机配置协议(DHCPV6-Out)

1.缓解WPAD滥用

如果wpad未在内部使用,请通过组策略和禁用winhttpautoproxysvc服务来禁用它。在原mitm6博客中讨论了缓解和检测措施。

2.缓解LDAP的中继

只有同时启用LDAP签名和LDAP隧道绑定,才能缓解对LDAP和LDAP的中继。

3.缓解基于资源的约束委派滥用

很难缓解,因为它是一个合法的Kerberos凭证。通过将管理用户添加到受保护的用户组或将其标记为敏感且无法委派的帐户,可以减少攻击面,这将防止通过委派对该用户进行任何模拟。此处提供了进一步的缓解和检测方法

0x08 mitm6工具的介绍

mitm6是一款测试工具,它利用Windows的默认配置来接管默认的DNS服务器。通过响应DHCPv6消息,为受害者提供链路本地IPv6地址,并将攻击者主机设置为默认DNS服务器来实现此目的。作为DNS服务器,mitm6将有选择地响应攻击者选择的DNS查询,并将受害者流量重定向到攻击者主机,而不是合法服务器。有关攻击的完整说明,请参考关于mitm6博客。MITM6项目用于与来自impacketntlmrelayx一起运行的整合,用于WPAD欺骗和凭证中继。

依赖性和安装

mitm6与python 2.7和3.x都兼容。您可以使用pip install-r requirements.txt来安装。在这两种情况下,MITM6都使用以下包:

  • Scapy
  • Twisted
  • netifaces

对于python 2.7,它使用ipaddress backport模块。克隆此Git存储库后,可以使用pip install mitm6从pypi安装最新版本,也可以使用python setup.py install从源代码安装最新版本。

用法

安装完成后,mitm6将作为命令行程序调用mitm6。由于它使用Scapy进行原始数据包捕获,因此应该以root身份运行。mitm6应默认检测您的网络设置,并并使用主接口进行欺骗。 您可能需要指定的唯一选项是您正在欺骗的AD域 。对于高级使用,可以使用以下选项:

usage: mitm6.py [-h] [-i INTERFACE] [-l LOCALDOMAIN] [-4 ADDRESS] [-6 ADDRESS]
                [-m ADDRESS] [-a] [-v] [--debug] [-d DOMAIN] [-b DOMAIN]
                [-hw DOMAIN] [-hb DOMAIN] [--ignore-nofqnd]

mitm6 - pwning IPv4 via IPv6
For help or reporting issues, visit https://github.com/fox-it/mitm6

optional arguments:
  -h, --help            show this help message and exit
  -i INTERFACE, --interface INTERFACE
                        Interface to use (default: autodetect)
  -l LOCALDOMAIN, --localdomain LOCALDOMAIN
                        Domain name to use as DNS search domain (default: use
                        first DNS domain)
  -4 ADDRESS, --ipv4 ADDRESS
                        IPv4 address to send packets from (default:
                        autodetect)
  -6 ADDRESS, --ipv6 ADDRESS
                        IPv6 link-local address to send packets from (default:
                        autodetect)
  -m ADDRESS, --mac ADDRESS
                        Custom mac address - probably breaks stuff (default:
                        mac of selected interface)
  -a, --no-ra           Do not advertise ourselves (useful for networks which
                        detect rogue Router Advertisements)
  -v, --verbose         Show verbose information
  --debug               Show debug information

Filtering options:
  -d DOMAIN, --domain DOMAIN
                        Domain name to filter DNS queries on (Whitelist
                        principle, multiple can be specified.)
  -b DOMAIN, --blacklist DOMAIN
                        Domain name to filter DNS queries on (Blacklist
                        principle, multiple can be specified.)
  -hw DOMAIN, --host-whitelist DOMAIN
                        Hostname (FQDN) to filter DHCPv6 queries on (Whitelist
                        principle, multiple can be specified.)
  -hb DOMAIN, --host-blacklist DOMAIN
                        Hostname (FQDN) to filter DHCPv6 queries on (Blacklist
                        principle, multiple can be specified.)
  --ignore-nofqnd       Ignore DHCPv6 queries that do not contain the Fully
                        Qualified Domain Name (FQDN) option.

您可以手动覆盖大多数自动检测选项(尽管覆盖MAC地址会影响这些选项)。如果网络中有某些设备阻止或检测到恶意路由通告信息,则可以添加该--no-ra标识以不广播这些消息。mitm6不需要路器通告,因为它主要依赖于DHCPv6消息。

过滤选项

有几个过滤选项可用于选择要攻击和欺骗的主机。首先有--host-blacklist和--host-whitelist和选项(简称-hw和-hb),它们以一个(部分)域作为参数。传入的DHCPV6请求将根据此列表进行筛选。选中的属性是dhcpv6 fqnd选项,其客户端在其中提供其主机名。同样的情况也适用于DNS请求,为此,--domain选项(或-d)可用,您可以在其中提供要欺骗的域。黑名单也可以通过--blacklist/  -b实现。

 

对于主机和DNS过滤,执行简单的字符串匹配。因此,如果您选择响应wpad,它也将响应wpad.corpdomain.com的查询。如果需要更具体的过滤,请同时使用白名单和黑名单选项,因为黑名单优先于白名单。默认情况下,指定的第一个域将用作DNS搜索域,如果您明确想要自己指定此域,请使用该--localdomain选项。

关于网络影响和恢复网络

MITM6被设计为一种渗透测试工具,因此应尽量减少对网络的影响。这就是Mitm6目前没有实现中间人攻击的主要原因,应就像我们在SLAAC攻击中看到的那样。为了进一步减少影响,分配的IP地址具有较低的存活时间(TTL)值。当mitm6停止时,租约将在5分钟内到期,这将从受害者配置中删除DNS服务器。为了防止缓存DNS响应,所有响应都以100秒的TTL发送,这样可确保在工具退出后几分钟内清除缓存。

用于ntlmrelayx

mitm6旨在与ntlmrelayx一起使用。您应该彼此顺序地运行工具,在这种情况下,mitm6将欺骗DNS,导致受害者连接到ntlmrelayx以进行HTTP和SMB连接。为此,您必须确保使用该-6选项运行ntlmrelayx ,这将使它同时监听IPv4和IPv6。要获取WPAD的凭据,请使用选项 -wh hostname将WPAD主机名指定为spoof(本地域中任何不存在的主机名都将起作用,因为mitm6是DNS服务器)。(可选)您还可以使用该-wa N参数进行多次尝试,以便在您怀疑受害者对系统进行MS16-077修补程序安装时而提示对WPAD文件本身进行身份验证。

发现

Fox-IT安全研究团队已发布Snort和Suricata签名,以检测恶意DHCPv6流量和WPAD对IPv6的响应。可在此处获取:https://gist.github.com/fox-srt/98f29051fe56a1695de8e914c4a2373f

0x09 mitm6 - 通过IPv6攻击IPv4网络

虽然在互联网上越来越多地使用ipv6,但在内网使用ipv6的公司却很少见。然而,大多数公司都没有意识到虽然IPv6可能没有被主动使用,但是所有的Windows版本(包括服务器版本)都启用了ipv6,而不是基于IPv4。在本文中,提出了一种攻击,该攻击滥用Windows网络中的默认IPv6配置,通过充当恶意DNS服务器并将流量重定向到攻击者指定的端点来欺骗DNS响应。在此攻击的第二阶段,概述了一种新方法,以利用(臭名昭着的)Windows代理自动发现(WPAD)功能,以便中继凭据并对网络中的各种服务进行身份验证。Fox-IT为此创建的工具名为mitm6,可从Fox-IT GitHub获得

1.IPv6攻击

与IPv6采用速度慢相似,滥用IPv6的资源比描述IPv4测试技术的资源要少得多。虽然每本书和课程都提到了ARP欺骗等内容,但很少涉及到IPv6,并且可用于测试或滥用IPv6配置的工具也很有限。THC IPV6攻击工具包是可用的工具之一,也是MITM6的灵感来源本文中描述的攻击是SLAAC攻击的部分版本,2011年由Infosec研究所的 Alex Waters首次发行slaac攻击通过设置一个恶意的ipv6路由,为网络中的所有流量提供各种服务此攻击的设置后来被Neohapsis的工具称为suddensix自动化

SLAAC攻击的缺点是,它试图在现有的IPv4网络上为所有存在的设备创建IPv6覆盖网络。在渗透测试中,这几乎不是理想的情况,因为这会迅速影响网络的稳定性。此外,攻击需要相当多的外部包和服务才能运行。mitm6是一个专注于易于设置的解决方案的工具,该解决方案有选择地攻击主机并欺骗DNS响应,同时最大限度地减少对网络常规操作的影响。结果是一个python脚本,它几乎不需要设置任何配置并且可以在几秒钟内完成攻击当攻击停止时,由于工具中设置的调整超时,网络会在几分钟内恢复到之前的状态。

2.mitm6攻击

(1).攻击阶段1 - 主DNS接管

对于通过DHCPv6请求IPv6配置的Windows客户端,mitm6首先监听攻击者计算机的主要接口。默认情况下,自Windows Vista以来,每台Windows计算机都会定期请求此配置。这可以从Wireshark的数据包捕获中看到:

dhcpv6_cropped

mitm6将响应这些DHCPv6请求在链路本地范围内为受害者分配一个IPv6地址在实际的IPv6网络中,这些地址由主机本身自动分配,不需要由DHCP服务器配置,这使我们有机会将攻击者IP设置为受害者的默认IPv6 DNS服务器。应该注意的是,mitm6目前仅针对基于Windows的操作系统,因为其他操作系统(如macOS和Linux)不使用DHCPv6进行DNS服务器分配。

Mitm6不通告自己是网关,因此主机实际上不会尝试在其本地网段或VLAN之外与IPv6主机通信。这限制了对网络的影响,因为mitm6不会尝试在中间处理网络中的所有流量,而是选择性地欺骗主机(运行mitm6时可以指定筛选的域

下面的截图显示了mitm6的运行情况。该工具会自动检测攻击者计算机的IP配置,并通过包含攻击者IP作为DNS服务器的DHCPv6响应网络中客户端发送的DHCPv6请求或者,它会定期发送路由通告(RA)消息,以警告客户端存在IPv6网络,并且客户端应该通过DHCPV6请求一个IPv6地址在某些情况下,这将加快攻击速度,但攻击不需要这样做,因此可以在具有防御SLAAC攻击的网络上执行此攻击,并具有RA Guard等功能

mitm6_cropped

(2).攻击阶段2 - DNS欺骗

在受害者计算机上,我们看到我们的服务器配置为DNS服务器。由于Windows对IP协议的偏好,IPv6 DNS服务器将优先于IPv4 DNS服务器。IPv6 DNS服务器将用于查询A(IPv4)和AAAA(IPv6)记录。

ipconfig_fixed

现在我们的下一步是让客户机连接到攻击者主机,而不是合法的服务器。我们的最终目标是让用户或浏览器自动对攻击者主机进行身份验证,这就是我们在内部域testsgment.local中欺骗URL的原因。在步骤1的截图中,您可以看到客户端在分配了一个ipv6地址后立即开始请求有关wpad.teststergment.local的信息。这是我们在这次攻击中将要利用的部分。

3.利用WPAD

(1).WPAD滥用的介绍

Windows代理自动检测功能一直是一个备受争议的功能,而且它多年来一直被渗透测试人员滥用。它的合法用途是在公司环境中自动检测用于连接到Internet的网络代理。历史上,提供wpad.dat文件(提供此信息)的服务器的地址将使用DNS解析,如果没有返回任何条目,则地址将通过不安全的广播协议(如链接本地多播名称解析(llmnr))解析。攻击者可以回复这些广播名称解析协议,假装wpad文件位于攻击者服务器上,然后提示进行身份验证以访问wpad文件。Windows默认提供此身份验证,无需用户交互。这可能向攻击者提供登录该计算机的用户的NTLM凭据,该凭据可用于在称为NTLM中继的过程中对服务进行身份验证。

然而,在2016年,微软发布了一份安全公告MS16-077,通过添加两项重要保护措施来缓解这种攻击:
- 不再通过广播协议请求WPAD文件的位置,而是仅通过DNS。
- 即使服务器请求了身份验证,也不会再自动进行身份验证。

虽然在网络中经常遇到未完全修补的主机,并且仍然显示通过llmnr请求wpad和自动认证的旧行为,但是我们遇到了越来越多的公司,在这些公司中,使用wpad这种老式的方式在任何时候都不起作用。

(2).利用WPAD post MS16-077

第一个保护(wpad仅通过DNS请求)可以通过mitm6轻松绕过。一旦受害者机器将攻击者设置为IPv6 DNS服务器,它将开始查询网络的WPAD配置。由于这些DNS查询被发送给攻击者,因此攻击者只需使用自己的IP地址(IPv4或IPv6,具体取决于受害者计算机的请求)。如果企业组织已经在使用WPAD文件,这也会起作用(不过在这种情况下,它会中断任何连接,使其无法连接到Internet)。

要绕过第二个保护,默认情况下不再提供凭据,我们需要做更多的工作。当受害者请求一个WPAD文件时,我们不会请求身份验证,而是向其提供有效的WPAD文件,其中攻击者的计算机被设置为代理。当受害者现在运行使用Windows API连接到互联网的任何应用程序或只是开始浏览网页时,它将使用攻击者计算机作为代理。这适用于Edge,Internet Explorer,Firefox和Chrome,因为它们都默认遵守WPAD系统设置。

 

现在,当受害者连接到我们的“代理”服务器时,我们可以通过使用connect-http关键词来识别该服务器,或者在get之后存在完整的uri,我们将使用所需的HTTP 407代理身份验证进行回复。这与通常用于请求身份验证的HTTP代码HTTP 401不同。IE/EDGE和Chrome(使用IES设置)将自动对代理进行身份验证,即使在最新的Windows版本上也是如此。在Firefox中,可以配置此设置,但默认情况下会启用此设置。

 

AUTH-proxies_fixed

Windows现在可以轻松地向攻击者发送NTLM质询/响应,攻击者可以将其中继到不同的服务。通过此中继攻击,攻击者可以在服务上作为受害者进行身份验证,访问网站和共享上的信息,如果受害者拥有足够的权限,攻击者甚至可以在计算机上执行代码,甚至可以接管整个Windows域NTLM中继的一些可能性在我们之前的一篇博客中有介绍,可以在这里找到

4.全面的攻击

前面的部分描述了攻击背后的整体思想。运行攻击本身非常简单。首先,我们启动mitm6,它将开始响应dhcpv6请求然后启动在内部网络中请求名称的DNS查询在攻击的第二部分,我们使用我们最喜欢的中继工具ntlmrelayx这个工具是impacket的核心的Python库的一部分是对著名的smbrelayx工具的改进,支持几种中继协议。Core Security和Fox-IT最近共同致力于改进ntlmrelayx,添加了一些新功能使其能够通过IPv6进行中继,提供WPAD文件,自动检测代理请求并提示受害者进行正确的身份验证。如果您想查看一些新功能,请查看relay-experimental branch.

为了服务于wpad文件,我们需要添加到命令提示符中的只是主机选项-wh参数,并用它指定wpad文件所在的主机。由于mitm6允许我们控制DNS,所以受害者网络中任何不存在的主机名都可以。要确保NtlmRelayx同时侦听IPv4和IPv6,请使用-6参数。下面的截图显示了两个正在运行的工具:mitm6选择性地欺骗DNS响应和为WPAD文件提供服务的ntlmrelayx,然后将身份验证中继到网络中的其他服务器

ntlmrelay_final

mitm6_cropped

5.防御和缓解

我们目前知道的唯一防御此攻击的方法是在内部网络上未使用IPv6时禁用IPv6。这将阻止Windows客户端查询DHCPv6服务器,并且无法使用上述方法接管DNS服务器。

对于WPAD攻击,最好的解决方案是通过组策略禁用代理自动检测。如果您的公司在内部使用代理配置文件(pac文件),建议显式配置pac url,而不是依赖wpad自动检测它

在撰写这篇博客时,Google Project Zero还发现了WPAD中的漏洞,他们的博客文章提到禁用winhttpautoproxysvc是他们经验中禁用WPAD的唯一可靠方法。

最后,防止NTLM中继的唯一完整解决方案是完全禁用它并切换到Kerberos。如果无法做到这一点,我们上一篇关于NTLM中继的博客文章提到了一些缓解措施,以尽量减少中继攻击的风险。

Fox-IT安全研究团队发布了Snort和Suricata签名,以检测恶意DHCPv6流量和WPAD对IPv6的响应:

# Snort & Suricata signatures for:
# https://blog.fox-it.com/2018/01/11/mitm6-compromising-ipv4-networks-via-ipv6

alert udp fe80::/12 [546,547] -> fe80::/12 [546,547] (msg:"FOX-SRT - Policy - DHCPv6 advertise"; content:"|02|"; offset:48; depth:1; reference:url,blog.fox-it.com/2018/01/11/mitm6-compromising-ipv4-networks-via-ipv6/; threshold:type limit, track by_src, count 1, seconds 3600; classtype:policy-violation; sid:21002327; rev:2;)
alert udp ::/0 53 -> any any (msg:"FOX-SRT - Suspicious - WPAD DNS reponse over IPv6"; byte_test:1,&,0x7F,2; byte_test:2,>,0,6; content:"|00 04|wpad"; nocase; fast_pattern; threshold: type limit, track by_src, count 1, seconds 1800; reference:url,blog.fox-it.com/2018/01/11/mitm6-compromising-ipv4-networks-via-ipv6/; classtype:attempted-admin; priority:1; sid:21002330; rev:1;)

6.从哪里获得工具

mitm6可从Fox-IT GitHub获得ntlmrelayx的更新版本可从impacket 存储库获得

0x10 使用ntlmrelayx在任何地方中继凭据

 

在Fox-IT中,我们致力于让客户了解其企业组织中的常见安全风险。当攻击者可以利用NT LAN Manager身份验证协议(以下简称:NTLM身份验证)时,凭据重用就是这样的风险,这种协议通常在Microsoft Active Directory中保持启用状态。

NTLM认证中的不安全性已经知道了超过15年。该协议可以被滥用,通过一个称为“中继”的过程劫持受害者的会话,该过程通过将受害者的证书转发到与预期不同的服务来滥用受害者的凭据。在许多情况下,默认情况下仍然支持并启用NTLM身份验证,即使它已被更安全的Kerberos替换为默认身份验证方法。

本文中,我们将演示使用Ntlmrelayx向LDAP,IMAP和MSSQL传递凭据,这是著名的smbrelayx工具的Fox-IT扩展。为了抵御这种攻击:

  • 如果可能,请完全禁用企业组织内的NTLM并替换为Kerberos。
  • 如果无法禁用NTLM,请参阅此文中的设置和指南,以降低凭据重用的风险。

1.NTLM中继讲解

NTLM身份验证是一种基于挑战 - 响应的协议。挑战 - 响应协议使用共享秘密,在本例中是用户密码,以验证客户端。服务器发送挑战,客户端回复此咨询的响应。如果咨询与服务器计算的质询相匹配,则接受身份验证。NTLM身份验证是一种复杂的协议。可以在http://davenport.sourceforge.net/ntlm.html找到非常好的详细描述

2.NTLM身份验证流程

NTLM身份验证协议有3个步骤:

  1. 协商身份验证:NTLM身份验证的第一步是协议的协商,以及客户端支持的功能。在此阶段,客户端将身份验证请求发送到服务器,包括客户端接受的NTLM版本。
  2. 服务器挑战:服务器响应自己的消息,表明它接受哪些NTLM版本以及它想要使用哪些功能。此消息还包括“challenge”值,这在身份验证中很重要。  
  3. 身份验证响应:客户端根据质询发回响应,并包含密码所属的用户名和域。 

交换了3条消息后,服务器将回复一条消息,表明身份验证成功,或者身份验证失败。根据使用的协议,客户端与服务器之间的会话现在已经经过身份验证。此过程如下图所示:

1_ntlm_auth

3.滥用NTLM

作为攻击者,如果可以欺骗客户端连接到攻击者,那么这个过程可能会被滥用。如何做到这一点将在下一节中来说明。一旦攻击者连接了一个愿意进行身份验证的客户机,他们就可以轻松地将3条消息转发到客户端和服务器之间的服务器,直到质询 - 响应周期完成。

2_relay_ntlm

在连接通过身份验证时,攻击者可以简单地向客户端发送错误消息,或者断开连接。之后,攻击者可以使用该会话从中继身份验证的用户中与服务器进行交互。

4.交叉协议中继

NTLM身份验证被封装在其他协议中,但是不管覆盖的协议是什么,消息都是相同的。这允许在其他协议中使用NTLM消息。例如,使用HTTP进行身份验证的客户端会在“authorization”标头中发送NTLM身份验证消息。攻击者可以从HTTP标头中取出这些消息,并在其他协议(如SMB)中使用它们。

NTLM在多种协议中受支持,例如SMB,HTTP(S),LDAP,IMAP,SMTP,POP3和MSSQL。

5.获得流量

还有一点尚未解释,那就是如何让客户机与攻击者连接,而不是与真正的服务器连接。有几种方法可以获得可中继的流量:

  • 以不安全的方式向以其解析IP的主机的流量  
  • 滥用AutoDiscovery协议导致的流量
  • 通过中间人攻击获得的流量

6.不安全的名称解析协议

Fox-IT经常遇到使用不安全协议的名称解析流量。工作站或服务器通常被配置为网络中不再存在的主机或无法使用DNS解析其主机名的主机。发生这种情况时,Windows工作站会回退到名称解析协议,例如NBNS和LLMNR,它们依赖广播流量来请求同一网络中的主机将主机名解析为IP地址。由于同一网段中的所有主机都可以查看此流量(取决于防火墙配置),因此任何主机都可以回复请求。这使攻击者有机会欺骗所请求名称的地址。该过程如下所示。

3_NBNS_spoof

7.自动发现协议

也许过去几年黑客中最臭名昭著的功能是Windows代理自动检测(WPAD)功能。此功能基本上会通过DNS查找名为WPAD的主机名,如果不成功,则通过上面描述的llmnr和nbns,然后连接到它能找到的第一个主机。滥用此功能变得更加容易,因为当提示进行身份验证时,工作站会自动尝试使用NTLM身份验证进行验证,然后由攻击者进行中继。微软在2016年6月修补了这方面的一些问题,但有时Fox-IT仍在网络中遇到这种情况。

8.中间人攻击

中间人攻击(攻击者接管受害者的流量)通常在企业网络中具有相当的破坏性,尤其是在使用诸如ARP欺骗之类的技术时。但是,当公司设备连接到不受信任的网络(如公共WiFi网络)时,攻击者可以攻击受害者并拦截不受TLS保护的流量,将其重定向到受害者工作站信任的位置。然后,如果启用了自动内部网检测(这是默认设置),受害者将自动进行身份验证。

4_autologon

9.使用ntlmrelayx在任何地方中继NTLM

有几种工具滥用NTLM身份验证。其中一个是smbrelayx,它是Core Security的impacket 库的一部分。Ntlmrelayx是由Fox-IT开发的smbrelayx工具的扩展和部分重写。它具有适用于各种协议的功能。该工具接受多个目标,循环访问每个目标以查找要进行身份验证的系统。该工具具有SMB和HTTP服务器,可以从中将NTLM身份验证中继到SMB,HTTP(s),IMAP,LDAP和MSSQL。

10.中继到中小企业

转发到SMB是经典攻击,已经是smbrelayx的一部分。如果您不熟悉此攻击,则中继到SMB允许攻击者在禁用了SMB签名的主机上执行文件,前提是被中继的用户在设备上具有管理权限。对于非管理用户,ntlmrelayx添加了启动smbclient shell的选项,允许攻击者与共享进行交互,例如下载或上载文件。可以使用交互式标志(-i)完成此攻击,该标志将生成本地TCP shell,该shell可以与例如netcat连接。

5_interactive_smb6_interactive_smb_1

11.中继到LDAP

中继到LDAP是ntlmrelayx中的新增功能。LDAP是一个有趣的协议,因为它用于直接查询目录,该目录包含了许多攻击者感兴趣的信息。更有趣的是,在默认情况下,域中的所有帐户(包括计算机帐户)都可以读取这些信息的大部分。这是Ntlmrelayx与另一个Fox IT开发工具ldapdomaindump的集成。此工具尝试从域中收集尽可能多的信息,包括用户,其组成员身份,域计算机和域策略。

 

除了收集信息外,还可以通过LDAP写入目录。如果Ntlmrelayx遇到具有域管理员权限的用户,它将创建一个新的域管理员帐户,这将立即让攻击者完全控制域:


12.中继到IMAP

虽然在最新版本的Exchange中默认情况下未启用,但许多企业组织在其Exchange服务器上通过IMAP支持NTLM身份验证。这允许中继到IMAP,使攻击者可以直接访问受害者的电子邮件。在中继到IMAP时,ntlmrelayx可以选择在电子邮件中搜索关键字,或者只在用户的指定收件箱中下载所有最新的电子邮件。

imap_relay11_password

13.中继到MSSQL

中继到MSSQL目前仅作为基础验证存在,但可以在命令行上指定查询,这些查询将在数据库的受害者中执行

14.缓解措施

那么组织可以对抗这些攻击呢?上述所有攻击都滥用了NLTM身份验证协议,因此唯一完整的解决方案是完全禁用NTLM并切换到Kerberos。但是,许多组织都有不支持Kerberos身份验证的旧产品或操作系统,因此禁用NTLM会产生考虑周全的业务影响。作为缓解因素,可以启用多种设置以最小化中继风险。

那么,企业组织可以做些什么来抵御这些攻击呢?上述所有攻击都滥用了NLTM身份验证协议,因此唯一完整的解决方案是完全禁用NTLM并切换到Kerberos。但是,许多组织都有不支持Kerberos身份验证的旧产品或操作系统,因此禁用NTLM将对业务产生相当大的影响。作为一个缓解措施,可以启用多种设置以最小化避免中继攻击风险。

  • 启用SMB签名:SMB签名将通过要求对所有流量进行签名来阻止中继到SMB。签名要求用户密码对消息进行身份验证,因此中继连接的攻击者无法发送服务器将接受的任何流量,因为攻击者不拥有受害者的密码。
  • 启用LDAP签名:与SMB签名类似,LDAP签名防止与LDAP的未签名连接。应该注意的是,通过TLS发送到的LDAP连接被视为已签名,因此此设置不会阻止通过TLS对LDAP进行中继攻击。
  • 为身份验证启用扩展保护:身份验证的扩展保护有助于防止某些中继攻击,方法是确保用于连接到服务器的TLS通道与客户端进行身份验证时使用的通道相同。此设置主要适用于IIS。
  • 启用SPN目标名称验证:SPN目标名称验证是另一种措施,它可以通过验证客户端认为正在进行身份验证的目标名称来阻止中继到SMB。如果名称与服务器不匹配,则拒绝身份验证。
  • 确保内部网站使用HTTPS:当通过不安全的HTTP协议访问内部网站时,用户无法验证连接的真实性。通过强制所有内部网站仅通过HTTPS运行,中继攻击变得不那么有效。

15.一般强化设置以防止中继

除了这些特定的服务器端检查之外,以下一般性的强化设置可以防止NTLM中继:

  • 禁用自动Intranet检测:如果域中需要NTLM身份验证,请确保浏览器(主要是Internet Explorer)只自动对受信任的网站进行身份验证。通过组策略,可以禁用自动Intranet检测,并仅自动向应该应用自动身份验证的内部网站的白名单进行身份验证。如上所述,强烈建议仅在此处使用HTTPS网站。
  • 禁用Windows代理自动检测:虽然WPAD的安全问题主要由Microsoft MS16-077安全补丁解决,但仍建议通过组策略禁用WPAD。
  • 禁用LLMNR / NBNS:在配置良好的网络中,通常不需要这些不安全的名称解析协议。禁用它们会减少攻击者进行名称解析欺骗的可能性,从而使攻击者更难以欺骗受害者连接到攻击者服务器。

16.获得ntlmrelayx

Ntlmrelayx已经提交到Impacket存储库中,可以在Impacket 示例目录中找到

0x11 参考链接

https://blog.fox-it.com/2018/01/11/mitm6-compromising-ipv4-networks-via-ipv6

 
 
 
 
 
 
 

 

posted @ 2019-03-13 16:58 渗透测试中心 阅读(...) 评论(...) 编辑 收藏