一次性进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:460500587
微信公众号:计算机与网络安全
ID:Computer-network
随着采用“Wi-Fi保护访问”WPA认证的网络日益增多,攻击802.11网络已变得更加困难。以前那种只要假以时日就可以攻破802.11网络的日子已经一去不复返了。这种攻击上的困难导致黑客将越来越多的兴趣,由原来的攻击802.11网络转到攻击802.11客户端上来。
客户端攻击是独特的,因为它们往往发生在“协议栈”(protocol stack)的多个层次中。在最上层是应用层(application-level)的攻击。吸引客户端攻击兴趣的是向攻击者提供操作客户端数据通信所需要的协议层的控制。对于恶意内容的传递,会向黑客提供机会,使他们可以以新的令人兴奋的方式攻击受害者。
本文带您剖析了解一个客户端的攻击过程。在一般情况下,一个客户端攻击的目标是直接攻击软件脆弱的那一部分,而这一部分又常常是被黑客控制的漏洞部分。控制漏洞的目的是通过漏洞获得在远端“代码执行”(code execution)的能力。我们先由手工使用浏览器访问基于“Metasploit框架”(Metasploit Framework)的“自动化漏洞使用服务器”(automated exploitation server)开始,该服务器的名称是browser_autopwn。接下来,我们将利用由名为“I-Iove-my-neighbors”的作者开发的,一款叫VM的程序来对客户端进行透明地重定向(redirect)操作。最后,我们在Kali版Linux中,使用I-Iove-my-neighbors开发的VM程序,应用个人攻击技术。也包括一些其他直接注入技术(direct injection technique)。
一、browser_autopwn:服务器漏洞利用
这里所介绍的技术,都是在“被占领主机”(victim)上,通过“重定向”操作,利用客户端漏洞获得在客户端的主机上执行黑客代码的能力。我们可以看到形形色色的方法,可以在客户端上的用户毫不知情的情况下,被黑客实施了“重定向”操作,只是,在看到这些内容之前,让我们先看一下当手工通过浏览器(browser)去利用一个服务器漏洞的时候,我们可以看到什么样子。这种攻击发生在如图1所示的网络中,其总结如表1所示。
图1 我们“被占领网络”的布局
表1 图中网络配置总结
在一个典型的客户端攻击中,攻击者从应用层的漏洞中获得“代码执行”的权力。这些类型的漏洞的例子包括:CVE-2014-4114,这是Microsoft公司的Office软件中,一个OLE对象解析方面的缺陷;还有CVE-2014-4111,这是IE浏览器(Internet Explorer)中的一个“内存崩溃”(memory corruption)的缺陷。相对于这些特定的bug,通常需要转瞬即逝的条件,虽可重现,但较难捕获,与其把精力集中在这个上面,还不如通过展示怎么样使用Metasploit中的browser_autopwn程序漏洞功能,借助于对这种漏洞的攻击,更能理解基于浏览器攻击的原理和使用方法。
使用browser_autopwn程序
Metasploit工具包中的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的“引擎”,让它运转起来了。
正如您从输出看到的,这个版本的Metasploit装了16个独特的客户端漏洞检测模块。如果“被占领主机”可以被定向到http://10.0.1.9:55550/ads,那么browser_autopwn模块将检测该客户端浏览器的类型和版本,并且向其传送一个相匹配的漏洞攻击。这里获得浏览器类型和版本的方式是通过“JavaScript脚本”和“用户代理解析”(User-Agent parsing)实现的。
1、通过browser_autopwn检测OS X的浏览器漏洞
在下面的例子中,在OS X操作系统上使用Firefox浏览器,在浏览browser_autopwn以前的URL的时候,存在一个Java的“运行时”(runtime)漏洞。假设有一个用户在看到所有关于运行时Jave“超时”(out-of-date)的警告,在发生这种问题的时候,通常会有很多提示信息,图2只是显示了其中一个。如果该用户仍然单击通过的时候,就会在您的msfconsole窗口上,看到如下的信息提示输出出来。
图2 提示信息
如果检测成功,会得到一个新的连接会话(session),通过这个会话可以看到下面所列的内容。
也可以与“会话1”(session 1)通过“-i”参数进行交互操作。
2、通过browser_autopwn检测Windows 8的浏览器漏洞
和“通过browser_autopwn检测OS X的浏览器漏洞”相似,要通过browser_autopwn检测Windows的浏览器漏洞时,如果我们运行了针对Windows的漏洞检测工具,我们就可以得到如下结果。
如果程序工作正常,那么就可以以“会话2”(session 2)的方式给我们提供另一个“外壳”shell界面。
当然,为了browser_autopwn能“正常”工作,我们必须有一个Windows程序,并且还的确存在漏洞。因为Windows自动升级和及时的补丁更新等技术,所以,其实两者都挺难找到的。作为一种攻击技术的研究工作,我们只能通过创建一个无线“骗子”的无线网络,并且引诱“被占领主机”进入到这个网络中,这样,在这个网络中我们就可以主动地实施很多操作了。这样的操作正如下面将看到的一样。
二、使用I-love-my-neighbors网络
我们将全面覆盖式讲解的第一技术是创建一个我们自己的“骗子”AP接入点,并操纵用户加入到这个无线网络中。一旦他们关联到我们的AP接入点,我们就可以很容易地将数据包注入到他们的浏览器中。虽然所有这些步骤都可以在一个标准的Linux发布版本上实现,但是还是创建了一个小的虚拟机(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地址和“域名解析服务”(DNS)服务器的地址一并给客户端。
3、搭建路由
很多人一提起“路由”(routing),通常马上会想到那些安装在机架上,价格昂贵的Cisco或Juniper设备。事实上,任何具有两个或两个以上的网络接口,可以进行路由的计算机都可以称作“路由器”。在我们的例子中,虚拟机就是从一个网络无线接口wlan0的“进接口”(inbound)接收到本地客户端数据,通过一个网络有线接口eth0“出接口”(outbound)中将数据发送到互联网Internet上,然后再将互联网返回的数据按相反的路径传送给本地客户端。下面的例子中,假设网络无线接口wlan0使用的IP地址是10.0.0.1。
在Linux操作系统上,我们要完成这个功能,只需要两个命令即可。第一个命令就是设置无线网络接口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服务器,随后,DNS服务器会向该客户端的浏览器返回代表wired.com网站的IP地址。然后,这个客户端的浏览器又会与这个IP地址建立一个TCP连接,连接的端口是默认的80端口。连接成功以后,客户端的浏览器就会向这个IP地址发送“HTTP GET”请求。
现在,我们可以很容易地看到这个客户端的浏览器发出了HTTP请求,数据是从无线网络接口wlan0上接收到,无线网格接口的IP地址是10.0.0.1。但是这个HTTP请求的目的地并不是发给我们,这些TCP数据包只是从我们这里经过,换句话说,我们只是捕获到了这些数据包。我们可以尝试制作一个TCP数据包,并将其回送给这个客户端的浏览器,希望通过这种方式“击败”真正的服务器(就是wired.com网站的服务器),不过,还是先把这种想法雪藏起来,以备奇效。相反,在这里我们要做的只是通过使用“IP表”(iptable)来改变客户端浏览器的数据流向。
我们要做的第一件事就是清理我们的防火墙中现有的规则,以避免以前的配置项会对现在的修改有“后遗症”。下面的命令中,前三个命令把我们的防火墙恢复到正常启动状态,最后一个命令是确保任何来自wlan0的数据包,都必须通过防火墙。
在防火墙内核初始化结束后,要拿到有用的默认值,我们只需要改变一个规则,那就是重定向上面这个客户的数据流向。下面的规则设置就是将所有来自于wlan0的、绑定为TCP协议的80端口的所有TCP数据包统统都转到本地主机的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命令拿到一个公共的DNS服务器,然后通过这个DNS服务验证互联网上的连接可用性。
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):我们知道,在配置无线网络信息的时候,需要同时提供两个DNS服务器IP地址,如果配置了“主域名解析服务”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、定制网页显示广告商标等方面,有许多先进的功能。
当前模板重定向后会显示黑底白字的“载入中(Loading)”提示信息,如图4所示。如果您想换成别的内容,有两种方法,一种方法是通过编辑软件修改index.html文件,还有一种方法就是设置软件中“TEMPLATE(模板)”选项,将其修改指向别的页面文件。在AUTOPWN模块中的iframe项,其主要作用是在那个被我们黑掉的客户端浏览器上进行显示的同时,暗地里做一些其他的事,在“data/exploits/capture/http/”目录中,随后的这一系列iframe帧,可以绕过“HTTP Same Origin Policy”(简称为SOP)软件,在被黑浏览器上显示的同时,可以偷偷地将这个被黑主机上许多浏览器作为访问记录的cookie文件偷偷地拿到,回传到我们的AP接入点(就是我们那个Squid攻击服务器)上。
图4 载入中
对“骗子”DNS服务器的应对措施
要避免“骗子”DNS服务器式的攻击,最实际的办法是取消由DHCP服务器动态分配DNS服务器的IP地址,改为自己动手静态设置DNS服务器的IP地址。虽然这种技术不一定会阻止一个黑客进入网络,但它将使其攻击的速度慢下来。当对方意识到您的DNS请求是到一个固定IP的服务器时,对方也会相应地调整他的网络设置。关于静态DNS服务器的好处是:静态DNS服务器不像静态ARP的设置(它在很大程度上是不可行的)那样,这种设置通常不会引起很多麻烦。
四、ARP欺骗
另一种通过在捕获网上的数据包,以及发送给目标客户端,进而实施欺骗的技术,叫作“ARP欺骗”(ARP spoofing),其中的ARP指的是“地址解析协议”(Address Resolution Protocol),是一种用于在本地子网上,将第4版IP地址(即IPv4)转换为MAC地址的转换协议。早期的主机名和IP地址之间的映射关系是如表2所示的关系重建(re-create)的。
表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)将会回应这台主机。
上面数据包的意思很浅显,就是“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),那么,所有我们需要做的,只是在这台笔记本电脑上向外发送一个数据包,在数据包中“说”如下的内容:
那么我们可以按如下的命令格式发送命令:
在进一步“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,最后,我们的攻击者会将数据再回到wlan0接口并发送出去。
您可以通过运行“cat/proc/sys/net/ipv4/ip_forward”命令检查“IP转发”的项是不是设置为“允许”状态。
在这一点上,数据包将会按正常的路由线路传出网络,并最终到达8.8.8.8这个IP地址,也就是前面说的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欺骗”,以便可以看到双向完整的对话内容(有时称为“全双工”(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)攻击的方式入侵这个网络上的客户端设备。
1、在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图片,但是很显然这种说法缺少点东西。
ttercap不像以前的例子中还需要通过Linux操作系统的内核才能把数据包转发给我们要攻击的客户端上,相反,现在使用Ettercap时,禁止内核级(kernel-level)的数据包转发功能就可以让Ettercap代替内核,为我们提供数据包转发的功能了,因为Ettercap负责转发数据包的时候,我们有机会修改这些进进出出的数据包。要达到修改数据包的目的,我们只需要使用Ettercap软件中的“过滤功能”(filter feature)就行了。
使用Etterfilter程序编译过滤器
在Linux操作系统的主机上,安装Ettercap程序和安装该程序相关的工具,是件简单且直接的事。
在安装结束,运行之前,我们需要创建一个“过滤器”(filter),并将该“过滤器”编译到Ettercap的二进制文件中,格式如下所示。作为例子,我们假设这个“过滤器”文件名为lolcat.etter。
上面代码是修改的第一部分,其作用是将所有要攻击用户数据包中,HTTP头部的“Accept-Encoding”标识都换成“Accept-Rubbish!”标识。乍看这样做很愚蠢,但这样修改却可以阻止客户端得到的压缩格式数据,不过,这种修改有些不切实际。
这个脚本中,下一个修改的部分,是把网页代码中的“<BODY>”(或“<body>”)标签用一个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地址的时候,要用半角破折号(即“减号”)代替半角“冒号”来分隔各个数字。
当然,最迷惑的地方就是您在“ARP表”中做这样的“IP地址-MAC地址”映射关系有什么用?在基于802.11无线网络中,您的这个映射关系其实就等于您无线网络的“基本服务集标识”,或者是当“基本服务集标识”有多个的时候,它是其中的一个。而在基于以太网络中,通过这样的“IP地址-MAC地址”映射关系可以做任何事情。所以,无论是无线网络,还是有线以太网络,“ARP表”都是很重要的安全因素。通过真实的“上游路由器”进行二者的转换固然是好,但如果没有前面的所说的背景知识,我们又该怎样避免“ARP欺骗”攻击呢?最好的办法,就是先找到那个我们想知道MAC地址的主机IP地址,然后随便通过什么办法,与这台主机的IP地址“连接”一下,检查一下您的“ARP表”,您就会发现这台客户端主机的“IP地址-MAC地址”映射关系就会加入到我们的“ARP表”,并且是“静态”的状态。但在做这种事情的时候,必须先保证您所连接的那台客户端主机没有被“ARP攻击”过。否则,即使您连接成功,拿到的也是假的MAC地址。
2、通过hostapd-wpe(KARMA)动态生成“骗子”AP接入点
在前面的例子中,我们总是通过手工的方式,先把网络的“服务集标识”设置成我们要冒充的那个网络的“服务集标识”,然后静等“认识”那个网络“服务集标识”的客户端来连,但如果被冒充的无线网络“服务集标识”是隐藏的,就至少得等到其“服务集标识”暴露出来,才能冒充。实际上,有一些客户端,当它们在查找某个“服务集标识”网络的时候,会使用“探测请求”数据包进行扫描,在所发送的数据包中包含有这个“服务集标识”,利用这一原理,我们还可以实施一些“骗子”AP接入点,“以动制静”地吸引他们的加入。首先,有客户端在网络中发送寻找AP接入点的数据包,实际上等同于有人在人群中大喊一声“喂,X网络,你在我周围吗?”,似设有个“服务集标识”为“Y”的攻击者看到这些请求以后,就会马上把自己的“服务集标识”由“Y”改为“X”,并回复道“是的,我就是X,我在这儿!”,接到回复后的客户端就会遵照协议进行连接,然后攻击者就可以想尽办法诱惑被攻击的客户端来上我们安排的“骗子”网络了。
第一个实现这种攻击方式的工具,叫作KARMA。这个软件是由Dino Dai Zovi和Shane Macaulay(外号“K2”)于2004年共同完成的。此后,这项技术已经被越来越多的互相迭代引用。
在下面的示例中,我们在部署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小菠萝”的工具,正在突破黑客最后的这些障碍。
3、“Wi-Fi小菠萝”针对客户端的攻击
“Wi-Fi小菠萝”是一个由Hak5组织开发的专用设备,售价是99美元。这个设备的目标是极大简化Wi-Fi攻击的复杂性,事实上,设备的发明者最终通过各种措施实现了这一目标。
第五代“Wi-Fi小菠萝”使用一个AR9331芯片组的片上系统(SoC),MIPS处理器,16MB的ROM,64MB的RAM,两个无线网络接口,一个以太网络接口,一个SD卡接口和一个USB接口。使用一个基于流行的OpenWRT项目的Linux分布式版本作为其操作系统。该“Wi-Fi小菠萝”还在Linux操作系统中预先配置了许多必要的黑客工具,通过这些工具,可以借助于无线网络中常见的漏洞实施攻击。更重要的是,“Wi-Fi小菠萝”中缺少的工具,可以很容易地通过访问“菠萝酒吧”(Pineapple Bar)获得。
“Wi-Fi小菠萝”的配置十分简单。比如配置成冒充的一个开放型Wi-Fi的热点网络AP接入点,只需要寥寥几步,这种操作,只需要在“Wi-Fi小菠萝”上,将其默认的“服务集标识”修改成您所要冒充的那个“服务集标识”即可。在程序中完成这个操作,就是单击“网络(Network)|访问点(Access Point)”菜单就可以修改默认的“服务集标识”值。或者,通过使用集成在“Wi-Fi小菠萝”中的KARMA功能,也可以修改默认的“服务集标识”。在“Wi-Fi小菠萝”运行KARMA攻击非常简单,只需要按下面的步骤即可:
(1)在登录“Wi-Fi小菠萝”后,单击界面上标为PineAP的“tile条”。
(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“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小菠萝”(这个时候,它的角色就变成了攻击者)就会像上述所说的那样进行内容的“交换”,这里的“交换”除了协议格式的变换,当然中间也包括了证书的认证,以及数据内容的检索。其显示效果如图6所示。
图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服务器上,就有一款可以作为这款服务器的模块,这是一个开放源代码的模块,也可作为一个配置工具,换用到大多数基于UNIX和基于Linux改的Web服务器上,当用户试图以HTTP的方式访问某个安全网站时,“HTTP严格传输安全”可以防止攻击者执行类似于SSLStrip的攻击。
五、直接的客户端注入技术
当我们试图执行一次无线攻击时,一个常见的问题就是,网络上的AP接入点拒绝在攻击者和被攻击者之间互转他们之间的攻击数据包。这种拒绝担任“中继”(relay)角色,而避免网络客户端之间互相攻击的技术,被称为“客户端隔离”(client isolation)或“公共安全的分组转发”(Public Secure Packet Forwarding,PSPF)。这种类型的安装在一些商业热点和酒店是常见的,这也完全可以理解,网络上的不同身份和来源的客户,真的没有理由互相交谈。但对于“唯恐天下不乱”的黑客来说,这却成了他们实施攻击过程中必须面对的一个问题,解决这个问题的一个方法是完全绕过AP接和点。在Aircrack-ng套件中,就包含一款工具可以帮助您轻松地做到这一点。
通过airtun-ng实现直接客户端注入
从概念上讲,airtun-ng就是上面所说的那个工具。它的工作原理是:创建一个虚拟接口(假设其名称为“at0”),通过这个接口,各个应用程序都可以正常地从中进行太网数据帧的读取和写入操作,这很类似于Linux操作系统上大多数的两层“虚拟专用网络”的实现方式。然后airtun-ng先从虚拟的at0接口上接收到任意的“出接口”以太网数据包,然后将其“以太网的头部”换成“802.11无线网的头部”,然后将这个“802.11数据包”通过无线接口注入到对应的客户端,这时,我们惊奇地发现,整个过程完全绕过了AP接入点,并且这种修改可以为我们提供一个直传通道,该通道是当前黑客的攻击客户端与另一个被攻击客户端之间,一个“只提供传送功能”的直传通道。
假设我们想发送上述直传数据包的目标客户端,就在我们自己客户端的无线功率覆盖范围之内,那么受害者在接收到这个数据包以后,就会处理这个数据包,因为在它眼里,这个数据的发送源就是AP接入点,并且也会正常回复这个数据包。但是这个客户端会将这一帧数据回送给AP接入点,不过,这没关系,因为既然大家互在对方的功率覆盖范围内,所以作为攻击者的airtun-ng,只要在“监测模式”(monitor mode),就也可以在无线接口wlan0上,通过“嗅探”(sniffing),捕获到一个回复的复制器(copy)。这次通信的数据总源头是以太网上的某个应用程序。所以过程还需要继续,这时airtun-ng随后创建一个以太网数据包,在该数据包中,填上总源头所对应的地址,并将其发送到虚拟接口at0上的应用程序那里,就完成了整个取代AP接入点的工作。总之,通过监听通道和中继作为正常以太网通信中的数据包,airtun-ng程序提供了一种不需要AP接入点合作的“中继数据帧”(relay frame)的能力。
如果您能把这些技术融会贯通,组合运用,那您就可以对指定AP接入点上关联的任意客户端进行读取和写入的操作,并且在不需要做任何修改的前提下,您还可以使用任何您想用的网络攻击工具,做到“指哪打哪”。这些网络攻击工具包含nmap和Metasploit,因为前面所用的所有工具,都是针对数据包的内容实施攻击的,并不关心数据在两个无线传输中,数据的封装(encapsulation)和解封装(de-encapsulation),而这里的airtun-ng,处理的是数据中,对内容的封装与解封装,而不关心内容传的是什么。这个过程如图7所示。
图7 airtun-ng直接注入攻击示意图
假设您已在无线网络接口上,在所需信道上设置了“监测模式”,那么下面就让我们告诉airtun-ng来建立一个针对某客户端的网络接口:
在上面命令中,“基本服务集标识”是通过参数“-a”指定的,参数“-t 0”是用于将ToDS位设置为0,同时将FromDS位设置为1。然后创建虚拟接口at0将只能与客户端进行通信。
接下来,我们需要配置虚拟接口at0。因为这与以前用过的网络相似,所以我们知道这个网络的地址是10.1.0.0/24,所以我们配置相应的接口如下所示:
请注意,下面我们是如何以明确的方式将TAP接口的以太网IP地址,设置为我们真实无线网卡的MAC地址的。如果设置失败,最大可能的原因就是有些不连贯的地址被占用了。
现在,只要网络上,我们和任何一个客户端互在对方的无线信号覆盖范围内,我们就应该能够与它进行通信了。为了加深印象,下面我们对这种能力进行一次专项测试,在使用Nmap工具时,其测试结果如下:
airtun-ng所提供的接口给了我们足够的可靠性,以便我们进行端口扫描(port-scan),而且该软件还可以去掉Nmap软件的数字指纹(fingerprint)。
当然,这个“用户空间层所提供”(userspace-provided)的接口也不是完美无瑕的,对数据包的“重复发包”(duplicate packet)和“丢包”(dropped packet)现象也是常见的。从一个单一的用户空间层进程中,我们基本上是做一个完整的二层协议。事情不会顺利到如同我们真的是通过内核驱动程序进行通信的那种效果的。
当我们在使用airtun-ng并遇到问题时,务必要检查的是,您的数据在发送时所用的MAC地址是否正确。如果不能正确的显示,那就手动设置TAP接口上的以太网地址。
在所用的技术方面,airtun-ng软件最大的优势在于,该软件除了包含其他同类软件中都有的“中间人攻击”技术,还包含了其他软件所没有的特殊“中间人攻击”技术,这一技术即使在AP接入点上已实现了“客户端隔离”(client isolation)的状况下,仍然能够正常工作。另外一个大的优势在于,airtun-ng软件集成了几乎全部基于“骗子”AP接入点的攻击技术,这意味着使用airtun-ng软件的用户可以做到“自己动手,丰衣足食”,在攻击的过程中,使用自己的AP接入点就可以了。避免了传统方式下,使用无线网络合法AP接入点时,还要费尽心机去引诱其他的无线客户端来这个合法AP接入点上进行关联的麻烦事,同时也不会被合法的AP接入点将其各种动作记入日志中。这无疑避免了通过AP接入点日志查到入侵者的行踪的危险。
六、结语
本文向您呈现的,都是在基于IEEE 802.11的客户端上获得代码执行权力的许多来自于实践的无线网络攻击技术。从每种攻击技术的应对策略部分可以看出,对于无线网络安全,首要的问题有两点,第一,除非您确实需要通过无线网络上网,否则您应该马上从无线网络上退出来;第二,永远不要连接到一个开放的,或者是隐藏的无线网络中。相比于传统的有线以太网络,在无线网络中,您可以看到无线网络以“广播”的方式收发数据的特性,会使其变得非常容易受到“中间人攻击”方式的攻击。在使用攻击工具的例子中,主要介绍了Ettercap工具和“Wi-Fi小菠萝”工具等黑客工具在使用方便方面的特性,通过这些特性,即使一个入侵者不具备很强的攻击技巧,也可以成功利用被攻击系统的弱点,最终成功攻破其无线系统。
微信公众号:计算机与网络安全
ID:Computer-network
【推荐书籍】