5.4 ARP欺骗

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

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

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

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

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

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

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

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

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

在进一步“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接口上。

现在,假设我们的Linux操作系统主机就是如上所说地使用那个MAC地址,那么这个主机又会做什么呢?对于接收到任何类型的数据包,一般的计算机处理办法都是一样的。首先,在防火墙(firewall)这一关会应用所有的规则对这个数据包进行审核,能通过则继续,不能通过则扔掉。其次,尽管这个数据包到达的是wlan0无线接口,但其最终目的是8.8.8.8这个IP地址,要知道,这个IP地址可不是我们自己。如果我们的客户端上允许“IP转发”(IP forwarding),那么作为攻击者的系统就可以像一个正常的路由器一样,越俎代庖,将这个IP地址转发到互联网上去。这就是说我们首先会查找自己的“路由表”,然后发现要连接外网的8.8.8.8,必须先与10.0.1.1这个网关联系,然后我们的攻击系统就会询问我们的“ARP表”那个10.0.1.1这个网关的MAC地址,这时查到该MAC地址是00:fe:ed:40:95:b6 [5] ,最后,我们的攻击者会将数据再回到wlan0接口并发送出去。

提示

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

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

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

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

提示

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

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

在Linux内核之外修改数据包

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

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

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

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

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

5.4.1 使用Etterfilter程序编译过滤器

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

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

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

这个脚本中,下一个修改的部分,是把网页代码中的“<BODY>”(或“<body>” [8] )标签用一个JavaScript脚本片段代替,将我们要攻击的客户端重定向到任意我们想要的位置。通常情况下会修改这个重定向,让它指向一个事先运行好的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使用ARP“中间人攻击”(Man-in-the-Middle,MitM)技术进行攻击。Ettercap程序将会扫描所有wlan0接口所关系的子网上所有的客户端。在前面的例子中,子网使用的是10.1.0.0/24这样的子网,而这样的子网共有255种IP可能,所以程序会在wlan0这个无线接口上,生成255种不同ARP“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表”看起来如下所示:

一旦扫描工作完成,“被攻击的那个工作站就会转发自己的数据包到实施攻击的黑客主机上。Ettercap就开始显示网络上来来往往的数据包,在你屏幕上显示的速度肯定会远快于你的阅读速度。你可以通过“空格键”(SPACEBAR)暂停屏幕的快速滚动。

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

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

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

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

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

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

在这个例子中,我们说192.168.2.1是你的默认网关,并且你也坚信这个默认网关当前没有被黑客攻击。那么如果你想把这个默认网关的“IP地址-MAC地址”映射静态关系手工地添加到自己的“ARP表”中,进而避免攻击者的“ARP欺骗”攻击,那么你可输入以下命令:

提示

在Windows操作系统中,使用arp命令时,在表示MAC地址的时候,要用半角破折号(即“减号”)代替半角“冒号”来分隔各个数字。 [9]

当然,最迷惑的地方就是你在“ARP表”中做这样的“IP地址-MAC地址”映射关系有什么用?在基于802.11无线网络中,你的这个映射关系其实就等于你无线网络的“基本服务集标识”,或者是当“基本服务集标识”有多个的时候,它是其中的一个。而在基于以太网络中,通过这样的“IP地址-MAC地址”映射关系可以做任何事情。所以,无论是无线网络,还是有线以太网络,“ARP表”都是很重要的安全因素。通过真实的“上游路由器”进行二者的转换固然是好,但如果没有前面的所说的背景知识,我们又该怎样避免“ARP欺骗”攻击呢?最好的办法,就是先找到那个我们想知道MAC地址的主机IP地址,然后随便通过什么办法,与这台主机的IP地址“连接”一下,检查一下你的“ARP表”,你就会发现这台客户端主机的“IP地址-MAC地址”映射关系就会加入到我们的“ARP表”,并且是“静态”的状态。但在做这种事情的时候,必须先保证你所连接的那台客户端主机没有被“ARP攻击”过。否则,即使你连接成功,拿到的也是假的MAC地址。

通过hostapd-wpe(KARMA)动态生成“骗子”AP接入点

在前面的例子中,我们总是通过手工的方式,先把网络的“服务集标识”设置成我们要冒充的那个网络的“服务集标识”,然后静等“认识”那个网络“服务集标识”的客户端来连,但如果被冒充的无线网络“服务集标识”是隐藏的,就至少得等到其“服务集标识”暴露出来,才能冒充。实际上,有一些客户端,当它们在查找某个“服务集标识”网络的时候,会使用“探测请求”数据包进行扫描,在所发送的数据包中包含有这个“服务集标识”,利用这一原理,我们还可以实施一些“骗子”AP接入点,“以动制静”地吸引他们的加入。首先,有客户端在网络中发送寻找AP接入点的数据包,实际上等同于有人在人群中大喊一声“喂,X网络,你在我周围吗?”,似设有个“服务集标识”为“Y”的攻击者看到这些请求以后,就会马上把自己的“服务集标识”由“Y”改为“X”,并回复道“是的,我就是X,我在这儿!”,接到回复后的客户端就会遵照协议进行连接,然后攻击者就可以想尽办法诱惑被攻击的客户端来上我们安排的“骗子”网络了。

第一个实现这种攻击方式的工具,叫作KARMA。这个软件是由Dino Dai Zovi和Shane Macaulay(外号“K2”)于2004年共同完成的。此后,这项技术已经被越来越多的互相迭代引用,最近的软件版本是hostapd-wpe(Hostapd Wireless Pwnage Edition)。有关hostapd-wpe软件详细的获取方式,以及编译过程,可以参见前面相关章节的内容 [10]

在下面的示例中,我们在部署hostapd-wpe软件的时候,故意起一个很具诱惑力的名字“免费Wi-Fi”作为我们无线网络上的“服务集标识”。现在有个Windows客户端还没有被我们的这个无线网络“钓到”,该客户端目前也没有连接到我们这个不明无线网络的念头,所以面对这样的“柳下惠”式客户端,我们还真没有好的办法。不过,现在这个客户端的“偏爱网络列表”(Preferred Network List,PNL)中,有一个隐藏网络的“服务集标识”。当这个客户端想连接这个隐藏“服务集标识”网络时,它会发送一个“探测请求”数据包到这个网络的AP接入点。这就像人群中的这个人大喊一声“隐藏网络,虽然你隐藏了,但我知道你的服务集标识,现在我想连接你”。hostapd-wpe听到有人这样喊,它马上就修改自己的“服务集标识”,并将其改为所听到的这个“服务集标识”,然后回复这个客户端说自己就是他要找的那个网络。那么这个客户端就会认为这个客户端就会认为hostapd-wpe正是它想要找的那个无线网络AP接入点。

提示

Windows客户端出于安全的原因,在发出“探测请求”后,对于网络中的回复,如果在“偏爱网络列表”中的,就会拒绝接受。但在任何开放的网络环境中,比如一个支持客人无密码连接的无线网络中(guest network)、在咖啡店、旅馆等的无线网络中,Windows客户端都仍然容易受到“模拟攻击”式的攻击(impersonation attack)。

对动态生成“骗子”AP接入点的应对措施

现代无线客户端,要想防范动态生成“骗子”AP接入点,就需要像上面所说的那样,避免发送直接的“探测请求”数据包,除非它不得不发这样的数据包。具体来说,在Windows操作系统和Mac OS X操作系统中,除非在“偏爱网络列表”中有隐藏的网络中,否则这些操作系统的客户端是不会主动发送这种“探测请求”数据包的。这样做的原因是:在隐藏网络中,AP接入点不会广播该网络的“服务集标识”,所以需要客户端通过发送直接的“探测请求”数据包,才能发现该AP接入点是不是“活”着的。但即使是发送这样的“探测请求”数据包,在数据包中还是包含有“服务集标识”,黑客仍然可以通过嗅探的方式捕获到这个间接拿到的“服务集标识”。所以作为一个用户,避免这种攻击方式的最好办法就是不连接到这个隐藏的网络上。如果你是一个无线网络的管理员,那么你应该确保你所有的无线网络的配置都是非隐藏的,也就是通过广播发送“服务集标识”的网络。

这些无线攻击方式都是黑客们最现实的选择。但在Linux操作系统上,要想高效地使用它们,还需要有一定的Linux使用技巧和工具使用经验。不过,这种困局在逐渐被打破,如一个叫作“Wi-Fi小菠萝”的工具,正在突破黑客最后的这些障碍。

“Wi-Fi小菠萝”针对客户端的攻击

正如在第3章中学到的那样,“Wi-Fi小菠萝”是一个由Hak5组织开发的专用设备,售价是99美元。设备网址是http://hakshop.com/ 。这个设备的目标是极大简化Wi-Fi攻击的复杂性,事实上,设备的发明者最终通过各种措施实现了这一目标。

第五代“Wi-Fi小菠萝”使用一个AR9331芯片组的片上系统(SoC),MIPS处理器,16MB的ROM,64MB的RAM,两个无线网络接口,一个以太网络接口,一个SD卡接口和一个USB接口。使用一个基于流行的OpenWRT项目的Linux分布式版本作为其操作系统。该“Wi-Fi小菠萝”还在Linux操作系统中预先配置了许多必要的黑客工具,通过这些工具,可以借助于无线网络中常见的漏洞实施攻击。更重要的是,“Wi-Fi小菠萝”中缺少的工具,可以很容易地通过访问“菠萝酒吧” [11] (Pineapple Bar)获得。

就像本章中其他的那些攻击技术一样,“Wi-Fi小菠萝”的配置十分简单。比如配置成冒充的一个开放型Wi-Fi的热点网络AP接入点,只需要寥寥几步,这种操作,只需要在“Wi-Fi小菠萝”上,将其默认的“服务集标识”修改成你所要冒充的那个“服务集标识”即可。在程序中完成这个操作,就是单击“网络(Network)|访问点(Access Point)”菜单就可以修改默认的“服务集标识”值。或者,通过使用集成在“Wi-Fi小菠萝”中的KARMA功能,也可以修改默认的“服务集标识”。在“Wi-Fi小菠萝”运行KARMA攻击非常简单,只需要按下面的步骤即可:

1)在登录“Wi-Fi小菠萝”后,单击界面上标为PineAP的“tile条”。 [12]

2)滚动鼠标,将光标移动到“客户端免攻击黑名单”(Client Blacklisting)区域,然后将你自己的所有攻击设备的MAC地址,加入到免攻击黑名单中,以避免在攻击中火拼,误伤自己。

3)关闭当前的“tile条”,返回到主窗口的“tile条”列表上,单击“开始”链接,跳转到MK5版的Karma软件的启动环节。

随着MK5版Karma攻击开始,“Wi-Fi小菠萝”回应了除了“免攻击黑名单”中的那些设备“探测请求”。如果某个客户端正在查找开放的网络,那么KARMA软件将会回复这个客户端,并引诱它到“骗子”网络上。

这个简单的机制,可以在无线网络上发起一次“中间人攻击”,但它对于攻击者的用处是有限的。不过,通过“菠萝网吧”,我们可以很容易地将“Wi-Fi小菠萝”的这个功能扩充成网关的形式,然后借助该网关,可以避开被攻击客户端采用“安全套接层”的通信,解析被攻击客户端的证书认证,以及读取被攻击客户端上的cookie数据。

首先,配置“Wi-Fi小菠萝”,以便它可以通过其以太网口连接到Internet上,或者通过另一个Wi-Fi无线网口连接到一个可用的网络地址上。其次,从系统的主菜单中打开“菠萝网吧”的“tile条”。

在“菠萝网吧”的“tile条”上,单击“菠萝网吧(Pineapple Bar)|可用(Available)”的链接,就可以安装sslstrip和trapcookies的“用户注入”(Infusion)功能。(这里的“用户注入”指的是攻击时所用的脚本,采用由“Wi-Fi小菠萝”提供的脚本。)下一步,关闭“菠萝网吧”的“tile条”,返回到主“tile条”列表上,这时,你会看到两个新的“tile条”窗口出现,整个界面类似于图5-5所示。

图5-5 “Wi-Fi小菠萝”整体界面图

“陷阱Cookie攻击”(Trap Cookie)工具是通过在whistlemaster日志中注入所有观察到的cookie内容。这种信息对于“会话劫持攻击”(session hijacking attack)非常有用,比如,对“火狐插件Cookie管理+”(Firefox add-on Cookies Manager+)这个软件来说,“陷阱Cookie攻击”工具可以将某个被攻击的客户端浏览器中的cookie加载到攻击者浏览器中,那么攻击者的浏览器就可以访问原来只有被攻击的客户端浏览器才可以访问的网站了。运行“用户注入”功能非常简单,只需要在“陷阱Cookie”的“tile条”上单击Start链接即可。

“SSLStrip注入攻击”(SSLstrip Infusion)也是使用whistlemaster工具,利用“中间人攻击”操纵网络上在被攻击主机和其“上游服务器”(upstream server)之间的数据通信。这种攻击方式在Linux操作系统上,最早的程序是由Moxie Marlinspkie实现的。其原理是:SSLstrip工具在网络通信的过程中,一旦接到来自客户端的HTTP头中有“安全套接层”重定向信息,就可以知道这是一个HTTPS的连接(注意,这不是链接),这时SSLstrip就会停止转发这个客户端所发的信息,去掉HTTPS连接中的“s”,将其变为没有“安全套接层”的普通HTTP连接,继续保持着与该客户机的连接,然后从HTTP头中找到这个客户端原本要连接的“安全套接层”连接“上游”的合法服务器,并通过使用“安全套接层”的方式,以HTTPS的方式与“下游服务器”进行通信。这时作为攻击者的“中间人”,与服务器采用的是HTTPS的“安全套接层”通信,而与客户端采用的是HTTP的非“安全套接层”通信。所使用的内容是客户端提供的,所拿到的结果,又是服务器回复的。当一个用户在访问一个网页的时候,如果没有明确地指明“https://www... ”,SSLstrip工具就可以通过“中间人攻击”操纵双方的数据交换,而客户端也不会再使用加密的会话。

要使用“SSLStrip注入攻击”,只须打开程序的“tile条”接口,单击Install链接。然后单击Start链接以便启动SSLStrip攻击。每当有客户端设备连接到“Wi-Fi小菠萝”(这个时候,它的角色是AP接入点),并且通过它,采用HTTP的方式访问一个兼容支持“安全套接层”站点时,“Wi-Fi小菠萝”(这个时候,它的角色就变成了攻击者)就会像上述所说的那样进行内容的“交换”,这里的“交换”除了协议格式的变换,当然中间也包括了证书的认证,以及数据内容的检索。其显示效果如图5-6所示。

图5-6 SSLStrip攻击效果图

“Wi-Fi小菠萝”攻击的应对措施

对于99美元的价格,无论是对任何研究人员,或利用Wi-Fi进行攻击的黑客,“Wi-Fi小菠萝”都是一个明智的选择。从防御的角度来看,未来自己的网络发生无线攻击的可能性,“Wi-Fi小菠萝”的概率最大,原因只是这个工具真的太好用了。

在本章前面描述的许多防御技术都可以帮助你抵御“Wi-Fi小菠萝”客户端的攻击。特别是对于SSLStrip攻击,开发人员在设计程序的时候,应该避免在数据传送中,在功能上同时支持HTTP方式和HTTPS方式,对于安全要求较高的连接,支持采用对于所有连接都只支持HTTPS的方式。在Firefox的插件中,比如由Chris Wilper设计的“HTTP Nowhere”插件就是用于让客户端工作在“只要能用HTTPS方式下,就禁用HTTP方式”的模式下,这对于“Wi-Fi小菠萝”的上述攻击,无疑是一种好的防御方式。

系统管理员应该充分利用“HTTP严格传输安全”(HTTP Strict Transport Security,HSTS)的策略机制,在Web服务器上限制页面头部不安全格式的滥用。在“HTTP严格传输安全”策略机制的制约下,所有支持的Web浏览器以及服务器,在需要安全传输的场合中,都只接受采用“安全套接层”协议和“传输层安全”(Trassport Layer Security,TLS)协议的连接,而不接收二者的HTTP和HTTPS的混合兼容方式。在Microsoft公司的Web服务器Windows IIS服务器上,就有一款可以作为这款服务器的模块,这是一个开放源代码的模块,可以从http://hstsiis.codeplex.com 上下载。也可作为一个配置工具,换用到大多数基于UNIX和基于Linux改的Web服务器上,当用户试图以HTTP的方式访问某个安全网站时,“HTTP严格传输安全”可以防止攻击者执行类似于SSLStrip的攻击。

[1] 如果是反向,将MAC地址转换为第4版IP地址的转换协议,则称为“反向地址转换协议”RARP(Reverse Address Resolution Protocol)。不过,很多书(包括本书)将二者统称为ARP协议。——译者注

[2] 不知道本书原作者这句话的本意和用处。早期(还没有使用DNS服务器)的主机各和IP地址之间,是通过映射文件体现的,但是映射文件中,主机名不能像表5-2这样随意(比如不能有空格)。映射文件的方式至今在很多操作系统中仍然保留着,比如Windows XP/7/8中,默认安装时“C:\Windows\System32\drivers\etc”目录下的hosts文件(注意该文件没有扩展名)中就允许用户设置和保存主机名和IP地址的映射关系。——译者注

[3] 确切地说,回复ARP信息的应该是交换机(switch),而不是路由器。只是现在这两种设备的界限越来越模糊,所以常常混用。另外,也只有交换机会回应ARP协议,其他的主机,即使在自己的ARP表中知道这样的映射关系,也不会做出回应。——译者注

[4] 下面内容中括号内的文字是“注意,这个地址是我们故意写的一个假地址”。——译者注

[5] 这是正确的网关MAC地址,被改的是那个被攻击的客户端,除此之外的客户端并没有出错。──译者注

[6] 其实这不是“全双工”,“全双工”是指通信的双方,在通信的过程中可以随时向对方发送数据包,也可以接收对方随时发送来的数据包。而这里指的是被攻击的客户端发出的数据包在到达对方后,仍然能沿相反的方向按原路返回,有点接近于“栈结构”中“先全压栈,后全弹栈”的“回溯”流程。——译者注

[7] 通过浏览器上网,HTTP头部的“Accept-Encoding”标识表明的是浏览器发给WWW服务器,告诉服务器自己的浏览器所支持的编码类型。该标识之后冒号的后面跟的就是类型,比如“*”号表示所有类型。HTTP头部,并没有“Accept-Rubbish”这个标识,这是黑客故意开的一个玩笑。浏览器在接到无法识别的标识的时候,会过滤掉,但同时因为。“Accept-Encoding”标识被替换掉了,所以没有“Accept-Encoding”标识后,服务器会使用默认的编码类型进行发送,压缩数据不是默认类型,所以服务器就不会再发送压缩数据了,因此上面说“客户端也得不到压缩格式的数据”。——译者注

[8] HTML语言对大小写不敏感,所以这里的“<BODY>”其实包含各种大小写的组合方式,比如除了上例,还包括“<Body>”、“<bOdy>”等各种形式。实际中的“<BODY>”还带有参数,比如“<BODY bgcolor=red>”表示背景色为红色,但一个共同的特点是前5个符号都是“<BODY”,所以下面的代码中,替换的都是“<BODY”,而不是“<BODY>”。——译者注

[9] 其实除了该命令,Windows所有表示MAC地址的场合,几乎都是用减号分隔的。而在Linux中,则都是用冒号分隔的。──译者注

[10] 主要分布在4.1.7节中的内容。──译者注

[11] “菠萝酒吧”是“Wi-Fi小菠萝”中的一个程序,从用户使用的角度来说,这更像是程序中的一个界面。在连网的状态下,该程序会自动连接Hak5的网站,并将所有的工具都列出来,供用户选择下载使用。目前国内很多程序也具有这样的功能,不过,一般叫作“插件下载”或“组件下载”等。——译者注

[12] tile,又写作tally,是电视行业的专用术语,电视台一般俗称“tile条”(发音近似于“台里条”)。是指独立于视频画面之外的各种形式的提示信息。可以是字幕,也可以是走马灯的新闻提示,也可以是鼠标放上去才显示的提示信息,也可以是节目的节目名称、电视台的名称等各种形式的提示信息。在这里,可以简单地理解为某个“窗口”上面的标题栏,或理解为这个窗口。——译者注