802.11无线 络之客户端攻防

460500587

随着采用“Wi-Fi保护访问”WPA认证的 络日益增多,攻击802.11 络已变得更加困难。以前那种只要假以时日就可以攻破802.11 络的日子已经一去不复返了。这种攻击上的困难导致黑客将越来越多的兴趣,由原来的攻击802.11 络转到攻击802.11客户端上来。

客户端攻击是独特的,因为它们往往发生在“协议栈”(protocol stack)的多个层次中。在最上层是应用层(application-level)的攻击。吸引客户端攻击兴趣的是向攻击者提供操作客户端数据通信所需要的协议层的控制。对于恶意内容的传递,会向黑客提供机会,使他们可以以新的令人兴奋的方式攻击受害者。

一、browser_autopwn:服务器漏洞利用

这里所介绍的技术,都是在“被占领主机”(victim)上,通过“重定向”操作,利用客户端漏洞获得在客户端的主机上执行黑客代码的能力。我们可以看到形形色色的方法,可以在客户端上的用户毫不知情的情况下,被黑客实施了“重定向”操作,只是,在看到这些内容之前,让我们先看一下当手工通过浏览器(browser)去利用一个服务器的时候,我们可以看到什么样子。这种攻击发生在如图1所示的 络中,其总结如表1所示。

图1 我们“被占领 络”的布局

表1 图中 络配置总结

在一个典型的客户端攻击中,攻击者从应用层的中获得“代码执行”的权力。这些类型的的例子包括:CVE-2014-4114,这是Microsoft公司的Office软件中,一个OLE对象解析方面的缺陷;还有CVE-2014-4111,这是IE浏览器(Internet Explorer)中的一个“内存崩溃”(memory corruption)的缺陷。相对于这些特定的bug,通常需要转瞬即逝的条件,虽可重现,但较难捕获,与其把精力集中在这个上面,还不如通过展示怎么样使用中的browser_autopwn程序功能,借助于对这种的攻击,更能理解基于浏览器攻击的原理和使用方法。

使用browser_autopwn程序

工具包中的browser_autopwn程序是一个功能模块。该功能模块可以方便地检测许多种客户端的bug,这些漏洞根据它们的特点,以及相互间的历史传参关系,组成了一个“树”状的结构,并称为“Metasploit树”(Metasploit tree),凡是“Metasploit树”中的漏洞,browser_autopwn程序都可以检测到。首先,启动msfconsole程序,以便加载browser_autopwn模块。指定服务器的端口 (port number),注意要避免使用TCP方式下的80这个端口 ,因为我们将在随后不同的攻击中使用该端口。一个无害的URL用于攻击时传送数据使用,设置这个URL需要通过参数“/ads”,如下所示。

最后,在命令中指定一个攻击者可以访问的IP地址,当我们的“外壳”shell程序需要“回连”(connect-back)的时候,就会连接这个IP地址。

现在,我们就可以发动browser_autopwn的“引擎”,让它运转起来了。

正如您从输出看到的,这个版本的装了16个独特的客户端检测模块。如果“被占领主机”可以被定向到http://10.0.1.9:55550/ads,那么browser_autopwn模块将检测该客户端浏览器的类型和版本,并且向其传送一个相匹配的攻击。这里获得浏览器类型和版本的方式是通过“Java脚本”和“用户代理解析”(User-Agent parsing)实现的。

1、通过browser_autopwn检测OS X的浏览器漏洞

在下面的例子中,在OS X上使用Firefox浏览器,在浏览browser_autopwn以前的URL的时候,存在一个的“运行时”(runtime)。假设有一个用户在看到所有关于运行时Jave“超时”(out-of-date)的警告,在发生这种问题的时候,通常会有很多提示信息,图2只是显示了其中一个。如果该用户仍然单击通过的时候,就会在您的msfconsole窗口上,看到如下的信息提示输出出来。

图2 提示信息

如果检测成功,会得到一个新的连接会话(session),通过这个会话可以看到下面所列的内容。

也可以与“会话1”(session 1)通过“-i”参数进行交互操作。

2、通过browser_autopwn检测Windows 8的浏览器漏洞

和“通过browser_autopwn检测OS X的浏览器”相似,要通过browser_autopwn检测的浏览器时,如果我们运行了针对的检测工具,我们就可以得到如下结果。

如果程序工作正常,那么就可以以“会话2”(session 2)的方式给我们提供另一个“外壳”shell界面。

当然,为了browser_autopwn能“正常”工作,我们必须有一个程序,并且还的确存在。因为自动升级和及时的补丁更新等技术,所以,其实两者都挺难找到的。作为一种攻击技术的研究工作,我们只能通过创建一个无线“骗子”的,并且引诱“被占领主机”进入到这个 络中,这样,在这个 络中我们就可以主动地实施很多操作了。这样的操作正如下面将看到的一样。

二、使用I-love-my-neighbors 络

我们将全面覆盖式讲解的第一技术是创建一个我们自己的“骗子”AP接入点,并操纵用户加入到这个中。一旦他们关联到我们的AP接入点,我们就可以很容易地将数据包注入到他们的浏览器中。虽然所有这些步骤都可以在一个标准的发布版本上实现,但是还是创建了一个小的虚拟机(virtual machine)。通过这个虚拟机,很多单调繁琐工作都可以自动完成,比如将一些必要的设置关联起来。这个虚拟机叫作“I-love-my-neighbors”(“我爱我的邻居们”)。

创建这个虚拟机的目的,就是为了回应那些“蹭”“Wi-Fi不安全测试 络”的邻居们。

一旦我们下载并开始运行这个虚拟机,就可以以root身份登录到这台虚拟机上,登录时的用户名是root,密码是sec617。您会很快看到下面的欢迎提示信息。

看来该软件的操作很容易。那我们就按他指的方向,首先连接一个USB 卡,并确保通过这个 卡的eth0接口可以访问互联 ,“欲先取之,必先予之”,毕竟我们这个虚拟机要以AP接入点的身份“骗”别的客户端连接后上互联 ,所以必要的服务还是要提供的。下面看看我们是否可以重定向一些数据流。

操作的确是很容易,让我们看看这“I-love-my-neighbors” 络是不是在顺利地工作了。使用一个客户端连接到该AP接入点所提供的默认“服务集标识”“victor-timko”上,然后开始浏览任意一个 站。如果一切正常,应该看到类似图3所示的画面。

图3 使用I-Love-my-neighbors 络

那只猫的图片是上下颠倒的,没关系,这是Wired 站的标志(logo)。至于为什么是颠倒的,下面我们就去看看neighbor.sh文件是怎么完成这个壮举的。

1、创建AP接入点

在neighbor.sh脚本中,我们创建了一个AP接入点,该接入点与用户提供的USB无线 卡相关联,并且需要在命令行中指定这个无线 卡使用接口wlan0,因为其他的配置就和一个普通的AP接入点一样,所以可以直接将某个AP接入点的配置模板与此合并,并创建一个类似下面的配置文件:

当neighbor.sh创建完这个AP接入点以后,只需要执行“hostapd/etc/hostapd/hostapd.conf”命令使AP接入点运行起来。

2、分配IP地址

当有一个客户端和我们的AP接入点建立关联以后,该客户端要做得第一件事是试图申请一个符合该 络规则的IP地址。在大多数的无线 络中,IP地址的发放使用“动态主机配置协议”(Dynamic Host Configuration Protocol,DHCP)。具有这样功能的程序很多,比如isc-dhcp-server就是一款,“I-love-my-neighbors”虚拟机也包含了一个该软件的模板配置文件(template configuration file),其文件名为dhcpd.conf。具体描述如下。

文件中,关键的值都以粗体显示。值得注意的是,当一个客户端通过DHCP申请IP地址时,DHCP可以同时将默认的路由IP地址和“域名解析服务”()的地址一并给客户端。

3、搭建路由

很多人一提起“路由”(routing),通常马上会想到那些安装在机架上,价格昂贵的Cisco或Juniper设备。事实上,任何具有两个或两个以上的 络接口,可以进行路由的计算机都可以称作“路由器”。在我们的例子中,虚拟机就是从一个 络无线接口wlan0的“进接口”(inbound)接收到本地客户端数据,通过一个 络有线接口eth0“出接口”(outbound)中将数据发送到互联 Internet上,然后再将互联 返回的数据按相反的路径传送给本地客户端。下面的例子中,假设 络无线接口wlan0使用的IP地址是10.0.0.1。

上,我们要完成这个功能,只需要两个命令即可。第一个命令就是设置无线 络接口wlan0的地址;第二个命令就是启用“IP转发”(IP forwarding),即启动路由功能。

我们可以通过使用netstat命令检测“路由表”(routing table),在这里,我们可以看到无线接口wlan0的IP地址是10.0.0/24,而有线以太 接口eth0的IP地址是10.0.1/24,默认的路由器地址是10.0.1.1,这是有线接口eth0提供互联 接入的路由地址。如果这种设置让您感觉到迷惑易混,那么记住一个原则:在地址中,“1”的数量越多,就离您越远,就越是属于更远一级的路由。

4、重定向HTTP的数据流向

为了理解我们的路由表看上去是什么样子,我们现在可以想象一下,如果我们修改了客户端的HTTP数据流向,那么对于客户端会发生什么情况。在考虑这个问题之前,我们得想象一下有一个客户端的浏览器用户要访问wired.com 站时会发生什么情况。首先,客户端解析wired.com这个地址时,需要访问我们为他提供的DNS会向该客户端的浏览器返回代表wired.com 站的IP地址。然后,这个客户端的浏览器又会与这个IP地址建立一个TCP连接,连接的端口是默认的80端口。连接成功以后,客户端的浏览器就会向这个IP地址发送“HTTP GET”请求。

现在,我们可以很容易地看到这个客户端的浏览器发出了HTTP请求,数据是从接口wlan0上接收到,接口的IP地址是10.0.0.1。但是这个HTTP请求的目的地并不是发给我们,这些数据包只是从我们这里经过,换句话说,我们只是捕获到了这些数据包。我们可以尝试制作一个数据包,并将其回送给这个客户端的浏览器,希望通过这种方式“击败”真正的(就是wired.com 站的),不过,还是先把这种想法雪藏起来,以备奇效。相反,在这里我们要做的只是通过使用“IP表”(iptable)来改变客户端浏览器的数据流向。

我们要做的第一件事就是清理我们的中现有的规则,以避免以前的配置项会对现在的修改有“后遗症”。下面的命令中,前三个命令把我们的恢复到正常启动状态,最后一个命令是确保任何来自wlan0的数据包,都必须通过。

在内核初始化结束后,要拿到有用的默认值,我们只需要改变一个规则,那就是重定向上面这个客户的数据流向。下面的规则设置就是将所有来自于wlan0的、绑定为协议的80端口的所有数据包统统都转到本地主机的3128端口中去。该命令的转发是针对任意IP址的。

这个时候,我们还需要再添加一个规则,那就是让所有从有线 络接口eth0发出的数据,进行一个“ 络地址转换”(Network Address Translation,NAT)转换。从技术的角度来说,这个规则不是必需的,我们可以没有这个规则,之所以要做这一个规则的原因是:如果不这样做,那些通过我们的AP接入点的客户端,其向互联 发送的各种HTTP请求的数据包的IP地址就是这些客户端的IP地址,这时我们AP接入点只起到了HTTP请求的“代理”(proxy)的作用。而如果做了NAT转换,那么所有客户端向互联 发送的各种HTTP请求的数据包的IP地址都转换成了本AP接入点(或者说这个NAT转换)的IP地址,这样从外面看起来所有通信数据的IP地址很一致。

总之,作为这两个规则的结果,来自无线 络接口wlan0的数据,将被透明地重定向到10.0.0.1:3128这个地址上。而所有从有线 络接口eth0发出的数据,其源IP地址都将是10.0.1.1。

您可能注意到了这个计划的一个缺陷,那就是将客户端的数据重定向到我们的3128端口,可我们主机的这个端口上,根本也没有程序在监听,至于给客户端的请求进行回复,就更是缘木求鱼了。

5、用Squid软件提供HTTP内容服务

我们需要做的最后一件事情,就是在前面所说存在缺陷的这个地方放一个“东西”,这个“东西”将响应用户的“HTTP GET”请求,并且给这些客户端的浏览器他们想要的内容。比如说,他最初所请求的 页。这是一个“代理”服务器的工作职责,下面,我们选用现在世界上最流行的一款代理服务器软件,Squid。

在“I-love-my-neighbors”的虚拟机VM中就预装有Squid软件,并且该软件的配置中默认侦听的TCP端口是3128端口。下面我们就可以开始运行Squid软件以及启动它所需要的服务,要完成这样的操作,只需要运行脚本neighbor.sh即可。该脚本会让Squid运行正确的脚本,完成运行。

一旦Squid正常启动运行,并且通过我们AP接入点访问互联 的路是通的,那么Squid就可以“控制”(handle)这个客户端的所有访问互联 的通信数据包了。在上 方面,Squid程序也做了不少合法的优化,比如将客户端用户访问过的 页,在缓存(cache)中保存一份,当用户再次访问的时候,就直接给他缓存中的 页,以便通过使用本地的缓存将带宽(bandwidth)减到最小。再比如可以对客户端用户所下载的内容进行”防病毒”扫描(antivirus scan)。

不合法的方面也不少,而这恰恰是我们所感兴趣的。比如将某个客户端所申请的 站的所有图片都恶作剧地显示成上下倒置的效果,这个功能通过flipImages.pl这个脚本实现。或者,如果我们想稍显恶意地攻击一下用户,那么可以将这个客户端下载的任何可执行文件(executable file)直接替换成我们自己的可执行文件,这个功能通过replaceExes.pl这个脚本实现。

不要设置成静态的“服务集标识”,这样的好处是,一旦客户端通过“探测请求”式扫描器查找您的“服务集标识”,如果您设置为动态的“服务集标识”,那么就可以动态地响应对方!要做到这一点,需要运行hostapd-wpe(注意,不是“stock hostapd”),并且通过“-k”的参数将其设置为“KARMA模式”。

现在,我们了解了当有客户端通过AP接入点上互联 时,我们可以透明地修改他们上 的内容的所有步骤。后面要学习的是对于那些通过别人的AP接入点上 的客户端,我们应该如何应用上面的技术。

三、攻击连到AP接入点上的客户端

作为一个AP接入点,由于向客户端提供 络服务,这个时候,如果您要攻击客户端,似乎也不是很难的事。换个角度,如果您加入到一个 络中,您的身份和其他的客户端一样,您也只是一个普通的客户端,那么这个时候难度就大很多了。然而事实上,有很多技术都可以仅仅是通过应用,就达到在 络上攻击其他的客户端的效果。这些技术比如设置DHCP,再比如透明地通过iptable作为代理等等。所以在这种情况下,应用这些技术,您可以滥用权力,与合法的服务提供者争夺资源。还可以针对您的目标主机发动各种类型的攻击,以使和您处于竞争地位的处于“拒绝服务”(denial of service)的状态。

我们将在基于Ubuntu的上,使用wlan0接口,攻击那些连接到“all you base” 络上,那些使用WPA密钥认证的客户端计算机。

首先,我们要将我们的无线 卡连接到目标 络上。完成这样的操作,我们可以使用图形化的“ 络管理”(NetworkManager)工具进行连接,也可以从命令行配置 络接口。我们可以把所有可能会干扰我们连接 络过程的程序都停掉,这包括“ 络管理”程序本身、dhclient程序和wpa_supplicant程序:

下一步,我们创建一个小的配置文件,该配置文件可以让wpa_supplicant程序运行连接到缺乏抵抗力的 络上。该配置文件在最小配置内容的情况下,如下所示。

下一步,运行wpa_supplicant程序,该程序将关联并认证我们的无线 卡。

现在,作为该 络上一个正常的客户端,我们也得到了一个由使用DHCP授予客户端的客户租约(lease)。虽然这个操作方便,但这会在DHCP的日志文件中留下一个访问记录,通过这个记录, 络的管理员就知道曾有光临过。要避免这种情况发生,我们可以手工地设置我们的IP地址以及默认的路由,并且通过ping命令拿到一个公共的,然后通过这个服务验证互联 上的连接可用性。

1、“骗子”DHCP服务器

在同一个局域 中,如果您试图入侵一个客户端,那么最好做的事情莫过于建立您自己的DHCP服务器。虽然每个人都知道DHCP服务器可以通过输出指派客户端的IP地址,但并不是每个人都会意识到,DHCP服务器还可以做另一件隐密的事情,那就是以“推送”(push)的方式主动指派客户端的默认路由器的IP地址和DNS的IP地址。从表面看,这对我们来说是件方便的好事情,但问题在于这种“推送”出来的数据是没有经过认证的(unauthenticated),并且客户端都会无条件地接受。这意味着,如果您在合法的DHCP服务器旁边,再搭建一个DHCP服务器,那么对于客户端来说,通常哪一个DHCP服务器首先对它的申请进行了响应,那么客户端就采纳该DHCP服务器作为自己的配置。

鉴于上面的说法,我们就在Kali版的Linux上,通过再搭建一个相同的ISC DHCP服务器。这里的ISC指的是“互联 系统协会”(Internet Systems Consortium),搭建这一系统的工具是“I-heart-my-neighbors”工具包中的“虚拟机”VM程序。由于这是一个新程序,所以在使用之前需要先安装。

在搭建您的“骗子”DHCP服务器之前,在有关 络的背景常识中,至少需要知道4个关键的信息。

子 (subnet):您需要选择的子 ,必须得和下面您要攻击的那个客户端的子 匹配。这样,任何新的客户端,只要是通过这个DHCP服务器分配到的IP地址信息,都可以与这个已配置好的客户端主机进行通信。

关(gateway):您要掌控这个 络上所有用户在数据通信上的路由吗?这样做的好处很明显,那就是您会看到 上所有客户端与互联 的数据通信,并且可以基于iptable完成很多种透明代理(transparent proxying)和数据修改等操作。这一点和前面所说的功能和过程一样。但是这样做也是有风险的,如果您突然有急事必须要立刻断开这个 络,比如您的电池突然停止供电,再比如安全警卫突然向您追来,那么您配置的所有客户端都将被临时地踢下 络,稍加怀疑,他们就会发现这中间有人在捣鬼。

域名服务器(domain server):我们知道,在配置无线 络信息的时候,需要同时提供两个DNSIP地址,如果配置了“主域名解析服务”DNS(primary DNS server)指向的是您的攻击系统,这样您就可以完成上述掌控和修改的各种操作,但同时也应该配置“备域名解析服务”DNS(secondary DNS server)指向的是一个有效的DNS地址。这样,万一您遇上上述所说的那种需要立刻断开这个 络的时候,连在这个 络上的客户端仍然还可以继续与互联 进行通信。

lP地址的范围:这里的“范围”指的是您要分发给客户端的一组IP地址。理想情况下,这个范围应该与您所要“附着”的 络所使用的子 具有一样的范围,但您所“附着”的 络有自己正常的,有正常的子 ,所以如果您的也采用同样的配置,就会因为冲突而无法使用。不过,事实上还是有章可循的,比如,许多家庭 络IP地址分配的范围是X.Y.Z.100~X.Y.Z.200,给我们留下了足够剩余IP地址分配空间,则我们可以使用X.Y.Z.20~X.Y.Z.50的范围。

在下面的例子中,我们假设在10.0.1/24子 范围内。 络原来真正的路由器IP地址是10.0.1.1,我们引导这个无线 络中所有客户端的“主域名解析服务”DNS指向自己的IP地址为10.0.1.9的计算机上。

创建一个合适的配置文件,并保存为“./dhcp_pwn.conf”。操作完成后,打开一个新的终端,然后按如下的命令方式启动DHCP服务器:

在使用DHCP服务的 络中,无论是无线客户端向DHCP服务器申请关联,还是有线客户端在开机连 的时候,都会向DHCP服务器提出“DHCP租约”(DHCP lease)申请的操作。现在,如果一个客户端请求子 的“DHCP租约”,那么您的DHCP服务器和原来这个 络中合法的DHCP服务器就会产生竞争。经验表明,相比其他操作系统来说,Linux相对会更强劲,并最终赢得这场比赛。这可能是因为大多数以小型办公室或家庭式办公室为主的SOHO(Small Office and Home Office)路由器电源的功率相对较低,或者在广域 WAN的连接中,这些路由器在与DHCP服务器进行通信时,数据在二者之间往返的时间(roundtrip time)较长。所以,如果有朝一日您发现在这场比赛中总是败北,那就优化DHCP服务器、减少快速响应时间,总之,您这些在时间上的投资,都将是有价值的。

对“骗子”DHCP服务器的应对措施

对于一个 络管理员来说,像DHCP和“引导程序协议”(Bootstrap Protocol,BOOTP)这样的协议,其数据通信都不需要认证,否则拒绝针对这些协议的攻击就不会束手无策了。唯一真正有效的对策是时刻监视恶意DHCP,一旦发现有就快速做出反应。对于勇猛无比的 络管理员,可能还需要将整个 络系统基于IPv4的IP方案向基于IPv6的IP方案做迁移操作,因为在IPv6的方案中,DHCP所担任的角色已明显不再是一个举足轻重的重要成员了。

2、用Metasploit运行“骗子”DNS服务器

既然我们已经配置好了DHCP服务器,下面就需要配置一个DNS。在使用哪款DNS上,您有许多选择,最简单的一款就是Metasploit软件中的fakedns模块。

下面的命令可以将fakedns配置成查询模式。对于每一个不在程序中标为“TARGETDOMAINS(目标域名)”列表中的查询,该都可以返回正确的答案。

现在,我们需要做的是等待客户端续订一个DHCP租约。一旦有客户端续订DHCP租约,我们就可以在DHCP服务器窗口中看到和下面内容类似的信息显示。

如果随后再看这些内容时,那么我们就可以看到一些DNS的查询,就像下面显示的一样。

到目前为止,所有的结果看起来都还不错。但当用户浏览到www.wired.com 站时,会发生什么呢?不幸的是,这里的查询戛然而止,内容一下子变少了。为了分析原因,我们理一下思路,当通过DNS查询www.wired.com 络的IP地址时,查询的数据被重定向到我们预设的攻击系统Squid所在的IP地址10.0.1.9上。这是一件好事,因为我们的攻击系统就在那里,但放在这里的攻击系统并没在从80端口上监听到任何东西,这又成了一件坏事。找找原因,原来部署在这里的Squid监听的是3128端口,而现在要监听的却是80端口。由于Metasploit已经处于运行中了,如果不想停掉Metasploit,我们还可以使用其中的http_capture模块,下面我们就展示如何在Metasploit中开启http_capture模块,并在模块中指定攻击系统的IP地址。

如果您已经开始了一个msfconsole程序新的会话(session),那就像前面所说的那样,可以启动一个autopwn模块,这个模块也可以与hup_capture模块一起使用。

现在,当客户端用户用浏览器浏览到目标列表中的某个域名时,该浏览器的所有数据包都将被重定向到攻击者的系统中,http_capture模块将回送这个客户端浏览器一个页面,该页面包括以下内容:

一个定位到data/exploits/capture/http/index.html文件的模板;

一个指向AUTOPWN模块的HTML语言的<iframe>页面帧数据;

一系列<iframe>形式的表单提交页面。

这个http_capture模块在窃取用户的cookie、定制 页显示广告商标等方面,有许多先进的功能。

图4 载入中

对“骗子”DNS服务器的应对措施

要避免“骗子”DNS式的攻击,最实际的办法是取消由DHCP服务器动态分配DNS的IP地址,改为自己动手静态设置DNS的IP地址。虽然这种技术不一定会阻止一个黑客进入 络,但它将使其攻击的速度慢下来。当对方意识到您的DNS请求是到一个固定IP的服务器时,对方也会相应地调整他的 络设置。关于静态DNS的好处是:静态DNS不像静态ARP的设置(它在很大程度上是不可行的)那样,这种设置通常不会引起很多麻烦。

四、ARP欺骗

另一种通过在捕获 上的数据包,以及发送给目标客户端,进而实施欺骗的技术,叫作“欺骗”(ARP spoofing),其中的指的是“地址解析协议”(Address Resolution Protocol),是一种用于在本地子 上,将第4版IP地址(即IPv4)转换为MAC地址的转换协议。早期的主机名和IP地址之间的映射关系是如表2所示的关系重建(re-create)的。

表2 被攻击者和攻击者的地址映射表

我们来想象一下,笔记本电脑在刚刚开机的时候,就像从睡梦中醒来的人脑子一片空白一样,它有一个空的“地址解析协议”地址列表(简称“表”。顺带说一句,表中的项通常每一分钟或两分钟就会刷新一次)。现在它需要与Internet进行通信,可它知道自己的默认 关是在10.0.1.1,却不知道它的MAC地址,现在的问题是,在广域 中,要访问Internet,就必须先连接到中 关的IP地址;而在中,要与某台主机进行通信,使用的是其MAC地址。那么现在这个笔记本电脑要做的第一件事就是发送一个数据包,这个数据包的形式如下:

上面的“who-has”数据包中,是假设有一个IP地址为10.0.1.104的主机以广播(broadcast)的方式发出一个“地址解析协议”数据包,数据包的内容解读为“谁有10.0.1.1这个IP的MAC地址,请告诉10.0.1.104这台主机”。正如您想象的那样,在接收到这样的这个广播信息以后,(router)将会回应这台主机。

上面数据包的意思很浅显,就是“10.0.1.1这台主机的MAC地址是“00:fe:ed:40:95:b6”。我们其实可以通过笔记本电脑的角度来看这整个过程。在上面操作结束后等上一小会儿,我们就可以通过“arp–a”的命令来检查表的最新状态,这时,您会看到一个非常小的缓存。

现在,如果我们做一些事情,只要该动作可以导致一些数据流向 关,那么上面的ARP表就会因为笔记本电脑向 关发送了ARP“who-has”数据包而发生改变。例如,我们可以ping一下Google的公共DNS的IP地址,虽然我们ping的是外 的地址,但由于ping的数据包经过 关,所以等同于数据流向 关,因而,很快,Google的公共DNS的IP地址就会被加入到ARP表中。

同样的,如果我们如法炮制地把上的“表”也都列出来,我们就会看到在列表中,对于我们自己的这台笔记本电脑,有下面的一项。

所谓“攻击”( poisoning),就是修改客户端主机上的“表”,以及尽可能地修改 络上的中的“表”。例如,如果我们想让某台笔记本电脑相信,其实“我”就是它的“上游”(upstream router),那么,所有我们需要做的,只是在这台笔记本电脑上向外发送一个数据包,在数据包中“说”如下的内容:

那么我们可以按如下的命令格式发送命令:

在进一步“ARP攻击”之前,让我们先设想一下,如果从Windows中通过ping命令测试8.8.8.8这个IP地址,那么将发生什么事。首先,我们的客户端主机会检查它的“路由表”(routing table)怎么做才能连接到8.8.8.8这台主机,随后,我们的客户端发现,要想完成这样的操作,首先得发送数据包到其IP地址为10.0.1.1的上游路由器。然后,为了与10.0.1.1通信,我们的客户端会检查“ARP表”,以便查找IP地址为10.0.1.1的主机的MAC地址。由于在上面的命令中,我们已将10.0,1.1这个IP所对应的MAC地址改成了一个假的00:c0:ca:52:dd:45地址,所以这时我们的客户端会误将这个地址认为是默认 关的MAC地址。最终,上面我们的客户端本来是想通过ping命令向IP地址为8.8.8.8的地方发送“Internet控制 文协议回声查询”(ICMP Echo Request)数据包,结果到了MAC地址为00:c0:ca:52:dd:45的地址上。如果我们恰好有一台Linux主机的MAC地址就是这个,那么这个数据包就会到达我们这台Linux的wlan0接口上。

您可以通过运行“cat/proc/sys/net/ipv4/ip_forward”命令检查“IP转发”的项是不是设置为“允许”状态。

在这一点上,数据包将会按正常的路由线路传出 络,并最终到达8.8.8.8这个IP地址,也就是前面说的Google 络地址。当这个地方回复以后,那么回复的数据包又会以相反的路由线路,再次回到这个的合法默认 关10.0.1.1这里。现在的问题是,这个回复数据包从 关出来后的线路会是什么样的?是直接送到我们攻击过的那个客户端上?还是回到我们自己这个负责攻击别人的客户端上?

如果您的答案是“直接送到我们攻击过的那个客户端上!”,那就自己表扬一下自己吧,恭喜你,答对了!这个“-Reply 10.0.1.1 is-at 00:C0:CA:52:DD:45”的命令所对应的数据包送到那个客户端上的原因是:我们只是修改了客户端上的“表”,而没有改变上的“表”。

除了上面的“”,如果我们想使用“欺骗”,以便可以看到双向完整的对话内容(有时称为“全双工”(full-duplex)),这时,我们需要传送数据包给“上游”。在这种情况下,需要发送“ARP-Reply 10.0.1.104 is-at 00:C0:CA:52:DD:45”命令,以便再次“欺骗” 关,那个本应给被攻击客户端的数据,先发到发动攻击主机这里。完成上述操作,我们可以通过运行一个名叫arpspoof的程序来自动完成,并且在需要使用最后一项功能的时候,在命令行中使用“-r”参数告知程序。

当我们能够控制别人“表”的时候,会看到您的会生成“Internet控制 文协议重定向”信息的数据包。在上,当这个数据包从一个接口进去,然后“返程”(goes back),又从这个相同的接口又发送出来,那么就说明这是客户端配置错误所导致的结果。这里的“Internet控制 文协议重定向”数据包是一种文雅的方式,是告诉那个被攻击的客户端在读取客户端的“表”时,要按表中的顺序进行读取。如果您想禁用掉“Internet控制 文协议重定向”功能,可以使用命令“echo 1>/proc/sys/net/ipv4/conf/all/send_redirects”,在这个命令实例中,“1”表示关闭内核中所有的“Internet控制 文协议重定向”,而只接收和发给“默认 关列表”中, 关的ICMP重定向消息。

使用“ARP欺骗”,通过控制 络的能力,我们可以进一步通过“修改数据包”(packet modification attack)攻击的方式入侵这个 络上的客户端设备。

1、在Linux内核之外修改数据包

在部署好“ARP欺骗”的 络中,要完成一个攻击,从攻击者这里发送出去,并发向预谋攻击的客户端的数据包,是由Linux内核完成的。这个结论我们可以很容易验证出来,因为我们禁掉内核中的“IP转发”功能(可以通过echo命令echo”0″>/proc/sys/net/ipv 4/ip_forward实现),那么IP地址为10.0.1.104的Windows的客户端就会丢掉所有的 络连接;如果我们恢复内核中的“IP转发”功能,那么那台Windows的客户端又会开始重建 络连接。

内核转发某个被您攻占过主机的IP数据包有几个好处,不但性能稳定,而且速度很快,并且还很少占用CPU资源。但这样做,也有一个特别明显的坏处,那就是您使用内核转发数据包的时候,直到这些数据包被转发出去,您都无法修改这些数据包。

现在,如果我们有一个程序,不是通过Linux的内核进行数据包转发的,那会怎么样呢?作为一种好的替代方式,这个程序先从一个接口上读取到数据包,然后检查一下数据包的内容,还可能修改一下数据包内容,达到我们想要的效果,然后参考我们的路由表,再将这个数据通过它原来要用的正确的接口发送出来。

Ettercap程序就是一款具有这样功能的程序。这个程序具备作为一个“欺骗”攻击工具的主要特点。不过,如果我们把Ettercap称为“欺骗”工具,那就像我们把IE浏览器称作“一款可以看JPEG图片的程序”一样。是的,Ettercap可以用作“欺骗”,IE浏览器也肯定可以看JPEG图片,但是很显然这种说法缺少点东西。

ttercap不像以前的例子中还需要通过Linux的内核才能把数据包转发给我们要攻击的客户端上,相反,现在使用Ettercap时,禁止内核级(kernel-level)的数据包转发功能就可以让Ettercap代替内核,为我们提供数据包转发的功能了,因为Ettercap负责转发数据包的时候,我们有机会修改这些进进出出的数据包。要达到修改数据包的目的,我们只需要使用Ettercap软件中的“过滤功能”(filter feature)就行了。

使用Etterfilter程序编译过滤器

的主机上,安装Ettercap程序和安装该程序相关的工具,是件简单且直接的事。

在安装结束,运行之前,我们需要创建一个“过滤器”(filter),并将该“过滤器”编译到Ettercap的二进制文件中,格式如下所示。作为例子,我们假设这个“过滤器”文件名为lolcat.etter。

上面代码是修改的第一部分,其作用是将所有要攻击用户数据包中,HTTP头部的“Accept-Encoding”标识都换成“Accept-Rubbish!”标识。乍看这样做很愚蠢,但这样修改却可以阻止客户端得到的压缩格式数据,不过,这种修改有些不切实际。

这个脚本中,下一个修改的部分,是把 页代码中的“<BODY>”(或“<body>”)标签用一个Java脚本片段代替,将我们要攻击的客户端重定向到任意我们想要的位置。通常情况下会修改这个重定向,让它指向一个事先运行好的browser_autopwn的IP上,这样当被攻击的客户端拿到这个页面以后,会转而访问“自动化使用”browser_autopwn。不过,如果您感觉到这样做还不够“黑”,那就将这个重定向指向您所喜欢的任何地方。比如,您比较喜欢小猫的图片,那就把它重定向到一个以小猫为主要展示话题的 站上。

要让上面的源代码生效,被最终被Ettercap所实别,还需要通过Etterfilter程序对上面的代码进行编译。完成上面的操作,就可以用Etterfilter程序编译上面的这个过滤器了,其过程如下。

Etterfilter程序只是完成脚本的编译工作,而要使这些过滤生效,还需要运行Ettercap程序,并以参数的方式,将Etterfilter编译的结果“./lolcat.ef”读入并执行。所以,最后一步,我们运行Ettercap程序。

默认情况下,Ettercap程序正常运行时,需要禁用内核级的“IP转发”。如果不禁用,那么对于一个 络接口来说,每进入一个“进接口”的数据包,就会有两个“出接口”的数据包。一个数据包由内核转发,一个由Ettercap程序转发。

Ectercap的命令行各命令之间,以及该程序中很多术语之间,都有很多混乱现象,所以我们要详细地述说一遍。前三个参数指定的依次是:使用基于文本方式的用户交互方式(即“-T”参数)、使用wlan0无线 络接口、我们在前面编译时所用的过滤参数(即“-F./lolcat.ef”参数)。随后的两个参数是让这个被攻击的客户端最终指向哪里。

“-M arp”参数指的是让Ettercap使用“”(Man-in-the-Middle,MitM)技术进行攻击。Ettercap程序将会扫描所有wlan0接口所关系的子 上所有的客户端。在前面的例子中,子 使用的是10.1.0.0/24这样的子 ,而这样的子 共有255种IP可能,所以程序会在wlan0这个无线接口上,生成255种不同“who-has”查询数据包。

一旦Ettercap完成了对所有客户端主机的扫描工作,下面就会把所有的扫描结果告诉我们了。如前所述,子 地址是10.1.0.0,其中的10.1.0.104是我们自己。所以扫描器会告诉这个子 上的所有主机“10.1.0.104在扫描你们”,同样,扫描器也会告诉10.1.0.104“ 上所有被扫描的主机都在下面列着”。当Ettercap完成扫描过程以后,Ettercap所在的10.1.0.104主机上,“ARP表”看起来如下所示:

一旦上面的操作完成,您就可以通过“h”命令显示在线帮助信息。另外一个有用的命令是“l”(小写字母L),列出目前发现的主机,如下所示:

如果有一个客户端在上面的列表中显示出来,就表示这个客户端的过滤信息已被修改,加之前面脚本代码中,“下一个修改的部分”中,只要过滤完成,就会提示“过滤已执行”(即代码中的“msg(”Filter executed.n”);”)的信息。所以这时您就会看到一些“过滤已执行”的提示信息。

Ettercap程序在显示了几条这样的消息以后,客户端的用户就会看到一些可爱的小猫图片。当然,如果我们事情已部署了更坏的念头,那我们就可以直接用browser_autopwn服务器上的内容代替他本应收到的内容。

对“ARP欺骗”攻击的应对措施

要免受“欺骗”的攻击,有好几种保护自己的方法。有一些“防”(AntiVirus,AV)产品会监控您的“表”,如果这些“防”软件发现有任何可疑的东西,它们就会立即提醒您,有程序正在修改“表”,这是个好的开端。一个可以完全杜绝“欺骗”攻击的方法是设置一个静态的接口,并将这个接口设置为默认的 关地址。这个方法在会议上,会经常被推荐,但这种方法需要同时满足两个条件,其一就是必须成功地保护上游 络对客户端系统的各项活动;其二是对于客户端系统,没有再设置类似的静态映射作为默认 关。另一个可以完全杜绝“欺骗”攻击的方法是使用“虚拟专用 络”(Virtual Private Network,),在中,所有“出接口”的数据包收发行动都将被封装(encapsulate)和加密。

幸运的是,对于“地址解析协议”ARP的各项操作中,在Windows和OS X操作系统中,其命令格式都是相似的。比如,在上述所有这些主流操作系统平台上,您都可以使用“arp-a”命令查看当前的“ARP表”,也都可以显示“arp–s”命令手工设置一个静态的ARP“IP地址-MAC地址”映射关系(ARPentry)。下面的例子就展示了如果查询您的ARP表和如果输入静态的映射关系:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年2月27日
下一篇 2019年2月27日

相关推荐