MITM6:用IPv6攻陷IPv4网络的工具

随着IPv6概念的提出,互联网上针对IPv6协议的使用也日渐增多,但即便如此IPv6在公司内部却并不受欢迎,很少会有公司使用IPv6。然而,大多数公司可能都忽略了一个问题,虽然IPv6可能没有被我们主动启用,但自Windows Vista以来的所有Windows版本(包括服务器版本)都默认启用了IPv6,并且优先级高于IPv4。

在本篇博文中,我将为大家介绍一种针对IPv6的攻击:即利用Windows网络中的默认IPv6配置,伪装DNS服务器来欺骗DNS reply,并将流量重定向到攻击者指定的端点。接着,我还会为大家提供一种新的利用(臭名昭着的)Windows代理自动发现(WPAD)功能,来传递凭证并对网络中的各种服务进行身份验证的 方法。Fox-IT在GitHub上创建了该工具并命名为mitm6,大家可以在这里下载到。

IPv6攻击

与IPv6的发展速度缓慢一样,网上关于针对IPv6渗透测试的资料也少的可怜。尽管市面上有不少相关书籍也都或多或少的提到了诸如ARP欺骗之类的东西,但却很少涉及IPv6,而可用于测试或利用IPv6配置的工具则更稀缺。这里我要提及的一款工具是THC IPV6攻击套件,这也是mitm6灵感的来源。本文中描述的攻击是SLAAC攻击其中的一个版本,最早是由Infosec研究所的Alex Waters在2011年提出的。SLAAC攻击通过建立一个流氓IPv6路由器,并设置各种服务对网络中的所有流量实施中间人攻击。之后,Neohapsis为这种攻击开发了一个自动化工具名为suddensix。

对于SLAAC攻击也有其弊端,由于SLAAC攻击会尝试在现有的IPv4网络为当前所有设备创建一个覆盖网络。而在这渗透测试中并不是一个理想的情况,因为这么做会导致网络稳定性受到明显的影响。此外,攻击者还需借助相当多外部的软件包和服务才能正常执行攻击操作。mitm6专注于更快更好的解决方案,测试人员可以根据需求选择攻击主机和欺骗DNS reply,同时能最大限度的减少对网络正常运行带来的影响。而且mitm6使用起来也非常简单,几乎不需要进行配置,并可在几秒内执行攻击。当攻击任务完成后,则会根据工具中默认设置的超时时间,在较短时间内将网络恢复到之前的状态。

mitm6攻击

攻击阶段1 – 主DNS接管

首先让mitm6开始在攻击者机器的主接口上侦听,并通过DHCPv6向 Windows客户端请求IPv6配置。默认情况下,自Windows Vista之后,每台Windows计算机都会定期向该配置发起请求。我们可以通过Wireshark抓包来进行查看:

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

以下截图显示了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并自动进行认证,但我们也发现越来越多的公司开始开始注意到了这点并进行了很好的改善。

MS16-077之WPAD的利用

针对微软的第一个安全措施仅通过DNS,mitm6可以帮助我们轻松绕过。一旦受害者机器将攻击者设置为IPv6 DNS服务器,它将开始查询网络的WPAD配置。由于这些DNS查询被发送给了攻击者,它只能用自己的IP地址(是IPv4或IPv6取决于受害者机器请求的是什么)进行回复。

要想绕过第二个防护,我们需要做一些更复杂的操作。当受害者请求一个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 challenge/response发送给攻击者,攻击者可以将其转发给不同的服务。通过这种中继攻击,攻击者可以对服务进行身份验证,访问网站和共享信息,如果受害者的权限足够大,攻击者甚至可以在计算机上执行代码,并接管整个Windows域。关于NTLM中继的相关内容,在我之前的博文中有过介,点击这里查看。

完整的攻击

在前面的几节内容我对该类攻击做了一个大致的描述和解释。执行此攻击本身非常简单。首先我们启动mitm6,它将开始中继DHCPv6请求,然后开始在内部网络中向DNS查询请求名称。在攻击的第二部分,我们将使用到中继工具ntlmrelayx。这个工具是Core Security impacket 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的唯一可靠方式。

本文来自企鹅号 - 黑白之道媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Sorrower的专栏

Mac下安装配置Android Studio并让多版本共存以及配置使用adb

2353
来自专栏炉边夜话

对中断的一点思考

    对于X86的单处理器机器,一般采用可编程中断控制器8259A做为中断控制电路。传统的PIC(Programmable Interrupt Contr...

1312
来自专栏Java成神之路

Java程序员常用工具集

我发现很多人没办法高效地解决问题的关键原因是不熟悉工具,不熟悉工具也还罢了,甚至还不知道怎么去找工具,这个问题就大条了。我想列下我能想到的一个Java程序员会用...

1473
来自专栏java达人

web安全简易规范123

web安全,大公司往往有专门的安全开发流程去保证,有专门的安全团队去维护,而对于中小网络公司,本身体量小,开发同时兼带运维工作,时间精力有限,但是,同样需要做一...

1060
来自专栏QQ音乐技术团队的专栏

全民K歌后台编译优化:从40分钟到30秒

编者注 :全民K歌上线1年半的从0发展到1.5亿,用户越来越多,后台代码库越来越大,编译速度也与日俱慢,编译一下整个工程需要30-40分钟,如何实现秒编至关重要...

3987
来自专栏惨绿少年

HTTP服务简介

第1章 HTTP服务介绍 1.1 简述用户访网站流程 a 进行域名信息的DNS解析 dig +trace 获得www.oldboyedu.com  ip地址信息...

3060
来自专栏恰童鞋骚年

NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装

  随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露了...

1212
来自专栏lgp20151222

傻瓜式的go modules的讲解和代码

国内关于gomod的文章,哪怕是使用了百度 -csdn,依然全是理论,虽然golang的使用者大多是大神但是也有像我这样的的弱鸡是不是?

5182
来自专栏Java后端技术栈

记一次解决业务系统生产环境宕机问题!

Zabbix告警生产环境应用shutdown,通过堡垒机登入生产环境,查看应用容器进程,并发现没有该业务应用的相应进程,第一感觉进程在某些条件下被系统杀死了,然...

941
来自专栏Laoqi's Linux运维专列

mariadb galera集群配置

3584

扫码关注云+社区

领取腾讯云代金券