MITM6:通过IPv6来攻击IPv4网络

尽管互联网上的IPv6采用正在增加,但在内部使用IPv6的公司网络相当罕见。 然而,大多数公司并不知道,虽然IPv6可能没有被主动使用,但自Windows Vista以来的所有Windows版本(包括服务器版本)都启用了IPv6,并且优先于IPv4。 在本文中,提出了一个攻击:滥用Windows网络中的默认IPv6配置,通过充当恶意DNS服务器来欺骗DNS回复,并将流量重定向到攻击者指定的杰点。 在这次攻击的第二阶段,概述了一种新的方法来利用(臭名昭着的)Windows代理自动发现(WPAD)功能来传递证书并验证网络内的各种服务。 Fox-IT为此创建的工具称为mitm6,可从Fox-IT GitHub获取。

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脚本,几乎不需要配置设置,并在几秒钟内获得攻击运行。当攻击停止时,由于工具中设置的超时,网络会在几分钟内恢复到之前的状态。

mitm6攻击

攻击阶段1 - 主DNS接管

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

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攻击防护网络上执行此攻击。

攻击阶段2 - DNS欺骗

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

开发WPAD

WPAD滥用的历史

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

然而,在2016年,微软发布了安全公告MS16-077,通过增加两项重要的保护措施来缓解这一攻击:

WPAD文件的位置不再通过广播协议请求,而仅通过DNS。

即使服务器要求,认证也不会自动发生。

虽然在网络中遇到没有完全修补的机器并且仍然显示通过LLMNR请求WPAD并自动进行身份验证的旧行为是常见的,但是我们遇到越来越多的公司以老式的方式继续使用WPAD。

开发WPAD后MS16-077

WPAD仅通过DNS请求的第一个保护可以轻松绕过mitm6。一旦受害者机器将攻击者设置为IPv6 DNS服务器,它将开始查询网络的WPAD配置。由于这些DNS查询被发送给攻击者,它只能用自己的IP地址(根据受害者机器要求的IPv4或IPv6)进行回复。这也适用于组织已经使用WPAD文件(尽管在这种情况下,它将打破任何连接到达互联网)。

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

现在当受害者连接到我们可以通过使用CONNECT HTTP动词识别的“代理”服务器,或者在GET动词之后存在完整的URI时,我们回复HTTP 407代理验证。这与通常用于请求验证的HTTP代码HTTP 401不同。

IE / Edge和Chrome(使用IE设置)将自动向代理进行身份验证,即使在最新的Windows版本上也是如此。在Firefox中,可以配置此设置,但默认情况下启用。

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

充分的攻击

前面几节描述了袭击背后的全球理念。运行攻击本身非常简单。首先,我们启动mitm6,它将开始回复DHCPv6请求,然后开始向DNS请求内部网络中的请求名称。对于我们攻击的第二部分,我们使用我们最喜欢的中继工具ntlmrelayx。这个工具是Core Security的Python库的一部分,是对着名的smbrelayx工具的一个改进,支持几种协议转换。 Core Security和Fox-IT最近共同致力于改进ntlmrelayx,增加了几项新功能(其中包括)使其能够通过IPv6进行中继,提供WPAD文件,自动检测代理请求并提示受害者进行正确的身份验证。如果您想查看一些新功能,请查看relay-experimental分支。

要提供WPAD文件,我们需要添加到命令提示符中的是主机是-wh参数,并指定WPAD文件所在的主机。由于mitm6让我们可以控制DNS,受害网络中的任何不存在的主机名都可以。为了确保ntlmrelayx在IPv4和IPv6上侦听,请使用-6参数。以下屏幕截图显示了两个工具正在运行,mitm6有选择性地欺骗DNS回复,ntlmrelayx服务于WPAD文件,然后将身份验证转发到网络中的其他服务器。

如何防御和防范

对于我们目前所知道的这种攻击,唯一的防范是禁用IPv6,如果它没有在您的内部网络上使用的话。这将阻止Windows客户端查询DHCPv6服务器,并使用上述方法无法接管DNS服务器。

对于WPAD漏洞,最好的解决方案是通过组策略禁用代理自动检测。如果你的公司内部使用代理配置文件(PAC文件),建议显式配置PAC网址,而不是依靠WPAD自动检测。

在编写这个博客时,Google Project Zero也发现了WPAD中的漏洞,他们的博客文章提到禁用WinHttpAutoProxySvc是禁用WPAD的唯一可靠的方式。

最后,防止NTLM中继的唯一完整解决方案是完全禁用NTLM并切换到Kerberos。如果这是不可能的,我们上一次关于NTLM中继的博客文章提到了几个缓解措施,以最小化中继攻击的风险。

在哪里可以得到的工具

mitm6可以从Fox-IT GitHub(https://github.com/fox-it/mitm6)获得,ntlmrelayx(https://github.com/CoreSecurity/impacket/)的更新版本可从impacket repository获取。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180131G1HWJ900?refer=cp_1026

扫码关注云+社区