3.2 悄无声息地安全通过
今天的许多无线网络的“AP接入点”服务器[1]都有的“隐身”(hidden mode)或“非广播”模式(non-broadcasting mode)。运行在这种模式下,AP接入点发出的网络的信标数据包中不包括其“服务集标识”名称(Basic Service Set ID,SSID,通俗地讲,就是我们所连的网络名称),AP接入点也不回复客户端以广播方式发送的“探测请求”(probe request)数据包。这样配置的那些“网络管理员”之所以这样配置,是因为他们将“服务集标识”作为一种秘密手段,与此同时,他们也倾向于在AP接入点上将“MAC地址过滤”(MAC address filter)设置为“有效”。
其实,一个“服务集标识”根本就不是秘密。在无线网络中,很多数据包都包含有明文的“服务集标识”字段,而不仅仅是在信标数据包中。之所以说“服务集标识”是非常重要的,是因为你首先得知道有这么一个“服务集标识”,然后才谈得上向这个AP接入点发送连接的请求,这意味着每一个合法的客户端在尝试连接网络的时候,都要以明文的方式指明他们要发送“服务集标识”。
既然在很多类型数据包中都包含有明文的“服务集标识”,那么即使你关掉信标数据包,停止回复广播类的请示,但“被动式嗅探器”(passive sniffer)却可以很容易地从另外类型的数据包中获得“服务集标识”。如果你曾经看到过Kissmet或KisMAC所捕获的数据包中被填入一些奇怪的名称,这是因为这些名称就是隐藏网络的名称,而获得这一名称的原因,就是因为有合法用户的客户端在所有发送的数据包中,某一些数据包中,也包含这个名称。比如,用户在登录网络认证的时候,就必然会用到“服务集标识”,那么他的数据包中,也必然包含“服务集标识”,不过,想拿到这个“服务集标识”,就意味着你得等待别人上线。在你监听(sniff)某个AP接入点的某个信道的时候,只要你监听的时间足够长,你就肯定能捕获到有人上线的消息,然后从这个过程中的所有数据包中获得“服务集标识”。但其实,除了耐心等待之外,你还有很多捷径可以做,比如你可以强制地控制一下用户的“行为”。
⚡ 解除用户的认证
要获得你比较感兴趣的某个无线网络的“服务集标识”,最简单的方式是把一个合法的用户从这个无线网上“踢”下来,然后“观察”该用户重新连接网络的过程。如前所述,这个被踢用户的“关联要求”(association request),或者是“重新关联请求”(reassociation request)的数据包会以明文的方式带上“服务集标识”名称。也就是说,在一个AP接入点隐藏“服务集标识”的网络中,如果你没有耐心等待有人主动上网,那就踢掉一个正在上线的用户,这样强迫他发送一个重新关联请求,进而从中拿到“服务集标识”。这里所谓“踢”操作,其实就是“解除认证”(deauthenticate)操作。
之所以可以这样做,是因为802.11的管理帧(management frame)是不需要鉴定识别的,如果管理帧需要鉴定,那用户客户端就能够识别出来哪些管理帧是黑客发出的,哪些管理帧是由AP接入点发出的。所以你要做的就是给用户发送一个看起来像是来自AP接入点发出的数据包,用户客户端并不能分辨不出其中的区别,这时用户客户端的无线驱动程序就会立即发送重新连接的请求。从技术的角度,就是用户将随后发送一个带有“服务集标识”的“重新关联请求”到AP接入点,而这时,你的扫描器就可借机从“重新关联请求”数据包中知道这个网络的名称了。
⚠ 警告
IEEE 802.11-2012版本,最初是作为IEEE 802.11w修正案起草的,在后来的标准发布中,积累了一些这方面的改进内容。如包括在“解除认证帧”和“解除关联帧”中支持“密码散列”(cryptographic hash)算法。有时这一改进的协议也被称为“管理帧保护”协议(Management Frame Protection,MFP),这个增强版协议可以阻止常见“解除认证攻击”(deauthencicate attack),但对于阻止其他的,针对Wi-Fi部署的“拒绝服务攻击”(Denial of Service,DoS)作用微乎其微。所以到目前为止,很少有网络采用MFP这一安全控制措施。
在Linux中,为什么会有这么多的无线命令行程序?
任何用过Linux一段时间的人,都可能因为控制一个无线网卡需要不同的命令而变得沮丧。要完成同样的命令效果,那些行将就木的老掉牙MadWifi程序,习惯于使用wlanconfig命令,而那些最老的,以及当前的较新的驱动程序,则习惯于使用iwconfig命令,并且最尖端的用户,可能已经熟悉了最新版Linux中的一个称呼“iw”的无线工具命令。
然而,iwconfig命令可能还会再继续工作了一段时间,所有新的无线驱动功能都将可通过iw命令进行访问。你可能也需要手动将iw命令安装到你的Linux上(安全命令是“apt-get install iw”)。虽然上述所有命令完成的都是相同的事情,但是他们是通过调用不同的“应用程序接口”(API)实现的。iw命令不是一个单一的命令,而是一个命令的前缀,是一系列命令。所有“老”的iw命令(例如iwconfig、iwlist、iwpriv)都是调用“无线扩展的”应用程序接口,而那些“新”的iw命令,使用的是netlink/cfg80211的应用程序接口,这个协议在一段时间以后,将希望成为最新的Linux无线标准协议。
由于配置实用程序多种多样,所以对于某个具体的驱动程序,忘记准确的命令是常有的事。用户在记忆这些命令的详细格式而遇到麻烦时,就会被鼓励去使用airmon-ng。这是一款包含在aircrack-ng软件工具包中的一个实用工具,该工具是专门用来处理给定的驱动程序或内核,控制其“监测模式”中的各项详细信息。
对于那些想要手动配置接口的用户来说,或需要一个公共的命令行例子作为快速参考的用户,可以使用下面提供的命令:
·实施一次主动式扫描的命令:
·在指定的网卡接口上使“监测模式”:
·手动设置信道编号:
·手动启用802.11n的40MHz模式:
·其中的“+/-”号表示调到比指定值高于或低于20MHz的相邻信道。
·创建一个“监测模式”的接口(只针对“mac80211驱动框架”):.
·撤销一个虚拟接口(只针对“mac80211驱动框架”):
1.在Linux上加载一个解除认证的攻击下面的示例演示了如何在Linux上通过aireplay-ng程序完成一个简单的解除认证攻击。这里的aireplay-ng是一种包含在Aircrack-ng软件工具包中的一个应用工具。假设“被攻击站点(victim station)的MAC地址是00:23:6C:98:7C:7C,它目前是在信道1上与无线网络关联的,其“基本服务集标识”值是10:FE:ED:40:95:B5。
在下面的例子中,我们通过使用Kismet软件在信道1上检测到一个隐藏的网络,如图3-1。随后,通过Kismet软件的“Kismet|配置信道(Kismet|Config Channel)”菜单,我们已指示Kismet锁定到信道1上,并且准备好了解除这个所检测到的客户端的认证。因为Kismet为我们创建了一个“监测模式”接口,所以我们也可以使用这一相同的接口来实施解除对方认证的攻击操作。
命令行的参数有点混乱。参数“--deauth”是指示aireplay-ng执行解除认证的攻击。指定目标地址用的是参数“-c”,指定“基本服务集标识”用的是参数“-a”。
参数“--deautri”显示的是aireplay-ng在攻击的过程中,完成攻击的轮数。每一轮攻击都包含有64个从AP接入点到客户端的解除认证数据包,和64个从客户端到AP接入点的解除认证数据包。
在执行这种攻击期间,我们将发送128个解除认证的数据包,其中64个从AP接入点到客户端的解除认证数据包,和64个从客户端到AP接入点的解除认证数据包[2]。最终的结果是:客户端将看到在她的网络连接中有一个停顿,客户端然后重新关联AP接入点。当她这样做的时候,Kismet软件会在她的“探测请求”(probe request)数据包和“关联请求”(association request)数据包中看到“服务集标识”也在其中。比如,网络的名称是“linksys”。在此之后,如果网络使用“Wi-Fi保护访问”,用户将重新关联,我们会看到客户端完成了“四次握手”,又可以继续之前的在线状态。
♥ 提示
要想创建一个基于“解除认证的洪水拒绝服务”攻击(deauthenticace flood DoS atcack),只需要简单地将参数参数“--deautri”的数字由1变成0即可。这里的“0”其实表示的是“无限次”,所以这样的改变意味着之后由replay-ng软件所发出的解除认证操作会源源不断地发送,直到黑客主动停止这一操作,所表现出来的,就是这个用户将无法正常上网。作为可选项,如果使用“-c”参数,就意味着客户端的MAC地址指定为广播地址(broadcast address),那么这种解除认证的扫描服务攻击目前将是所有客户端,所表现出来的,就是全网用户都无法正常上网。
2.在OS X上加载一个解除认证攻击
目前,能在OS X操作系统上实现“数据包注入”功能的只有KisMAC软件。KisMAC当前支持注入功能的网卡都是有使用prism2、RT73、RT2570和RTL8187芯片组的网卡。但KisMAC却不支持OS X上使用最多的内置的AirPort机场卡,这也是许多Mac用户购买使用D-link DWL-G122s[3]或Alfa AWUS036H[4]网卡的主要原因。目前KisMAC所支持的所有无线网卡的列表,详见http://trac.kismac-ng.org/wiki/HardwareList。
假设你已有一个支持“数据包注入”的设备,并在KisMAC中加载正确的驱动程序,那么要开始攻击一个无线网络,只需要单击“网络(Network)|解除认证(Deauthenticate)”菜单就可以了。随后,KisMAC就会不断地发送解除认证数据包到广播地址,直到你让它停止这样做。如果你所使用的KisMAC并没有出现解除认证的菜单项,这说明驱动程序不对或配置不对,仔细检查并确认你的驱动程序是支持“数据包注入”的,并且确保在KisMAC的当前这个驱动程序的“偏爱窗口”(preferences window)中“作为主设备使用”(Use As Primary Device)的复选框一定要选中。
3.在Windows上加载一个解除认证攻击从Windows操作系统中发动一次“解除认证”攻击,最简单的方法是利用Wi-Fi版CommView。该软件可以从http://www.tamos.com/products/commwifi网站上下载到。Wi-Fi版CommView是一款针对Windows用户的商业化软件。一个无限制的授权版,费用是499美元,还可以买一年的授权版,售价为199美元/每年。
与别的工具相似的是,Wi-Fi版CommView需要一个支持“数据包注入”攻击的无线网卡,目前Wi-Fi版CommView所支持的无线网卡列表详见网站http://www.tamos.com/products/commwifi/adapterlist.php。使用列表中的一块无线网卡,单击“工具(Tools)|节点重新关联(Node Reassociation)”菜单,一旦出现成功,你会看到一个如图3-2所示类似的屏幕。默认情况下,CommView会向所有被选中的客户端主机直接发送解除认证的数据帧。
♥ 提示
在发动“解除认证”数据包,对用户实施攻击的方面,Aircrack-ng相比于CommView更具有威力,而CommView又比KisMAC更具具威力。Aircrack-ng发送定向解除认证数据包时,既给AP接入点发送,也给客户端发送。CommView则只会将解除认证数据包发送给客户端,而KisMAC的解除认证数据包的发送方式是只有广播方式。另外还有一个叫密码恶魔“Cain&Abel”的软件其实也有网络无线攻击的能力。但这一功能只支持在商业的机场网卡AirPcap上使用。
✔ 对“解除认证”攻击的应对措施
IEEE 802.11w修正案,就是后来被合并到IEEE 802.11-2012标准集中的那个网络协议,其实既包含了对“解除认证攻击”的抵御,也包含了对“解除关联帧”的抵御,识别伪造帧的方式是通过“消息完整性检查”(message integrity check)。但这种抵御方式只有在对方使用了“Wi-Fi保护访问版本2”认证方式的时候才管用,并且对于Windows 8的客户端来说,支持该功能是强制型的要求,这些Windows 8都是基于“网络驱动器接口标准”(Network Driver Interface Standard,NDIS)6.30及以后版本兼容的。
虽然许多Windows 8和8.1客户支持这一功能,但许多AP接入点并不支持这样的功能。而要使这一功能生效,需要双方都支持这一功能。那么如果想支持这一功能,那就需要你先检查你的AP固件生产厂商的升级版本,在确保该版本是支持“管理帧保护”(management frame protection)功能之后,才能抵御“解除认证”攻击和“断开关联”(disassociation)攻击。
在本书写作时,当前的各主流如Android系列、iOS系列、Windows Phone系列、黑莓BlackBerry系列的“移动无线终端”(通俗地讲,就是手机或Pad),以及Mac的OS X操作系统设备(通俗地讲,就是苹果笔记本电脑等)还没有通过管理帧保护技术,对设备进行管理。
⚡ 破解MAC地址过滤
大多数AP接入点允许你设立一个“信任的MAC地址列表”(trusted MAC addresses),那么当不是该表中的其他MAC地址发送过来的任何数据包都会被忽略。一度以来,我们都认为MAC地址几乎是非常靠谱的东西,一旦烧入硬件芯片中就永不再变。然而那些日子已经一去不复返了,一个新策略的出现,使无线网络上的“MAC地址过滤”(filter MAC addresses)功能马上变的黯然失色,毫无意义。
想要击败MAC过滤,你只需要简单地效用某个已经在网络上的其他MAC地址即可。要做到这一点,首先需要运行一个“被动式扫描器”,借助于扫描器,你可以拿到那些已经连接在AP接入点的客户端MAC地址。然后就有很多种作法了,最绅士的情况是,你静静地等待这个用户不想上网了,从网络上断开后,你再开始“偷梁换柱”;还有的选择是对这个用户加载一个拒绝服务的DoS攻击(例如一个“解除认证”攻击),强制这个用户连续掉线后无心上网,然后“反客为主”;还有折衷的办法,那就是二者共用一个同一个MAC地址,各用各的,虽然各自都会受一些影响,但还算能用,也算“浑水摸鱼”。一旦你选择了要使用的MAC地址,那么克隆这个地址则只需要少数的几个命令而已。
1.在Linux上破解MAC地址过滤
大多数无线网络接口,以及部分有线网络接口都允许你动态修改MAC地址。甚至MAC地址有时仅仅是作为ifconfig命令使用时的一个参数。例如,在Linux操作系统上,设置MAC地址为00:11:22:33:44:55,执行以下操作即可。
2.在Windows上破解MAC地址过滤要在Windows上修改你无线网卡的MAC地址,你可以手工地运行regedit命令进行修改。运行“regedit”命令,然后定位到节点“HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}”。一旦找到这个位置,就可以找到所有无线网卡的列表。其中的“主键”(key)包括了你的网卡描述,所以寻找应该不会太困难。一旦找到了你的网卡,就创建一个新的主键,并命名为“NetworkAddress”,其类型为“REG_SZ”。然后输入你想要的12位MAC地址[5]。
⊗ 注意
最新版本的Windows操作系统要求的第一个字节的第二个数字值必须是2、6、A、E几个数字或字母(不分大小写)其中之一。比如一般MAC地址的形式是“XY-XX-XX-XX-XX-XX”那么其中的X都可以是0~9或A~F中的任何值,但Y则必须是2、6、A、E其中之一。
图3-3展示了在Windows下,新的MAC地址被改成了00:CA:FE:BA:BE:00。
♥ 提示
有些驱动程序公开这一注册表主键值是通过“配置(Configure)|高级(Advanced)|网络适配器接口的地址(Network Address Interface for the adapter)”菜单实现的。
当修改完成后,你需要先禁用,然后马上再重新启用你的网卡,以便新MAC地址生效。不过,更多的情况下需要重启整个主机,这缘于Windows中对注册表的任何修改,需要重启主机才能生效的一个不成文规定。如果你想恢复到你原始的MAC地址,其实也是你网卡本来的MAC地址,只要到注册表相同的位置,删掉NetworkAddress主键,然后按上面的操作重启一下网卡或主机即可。
⚠ 警告
当你在Windows中,对你的MAC地址进行了修改,一定要通过在“命令提供符”窗口中运行“ipconfig/all”命令来确认你的驱动程序确实已改成了新的MAC地址值。
如果你感觉使用“regedit”命令过于繁琐和令人生畏,你可以通过一些独立的工具来协助你完成。两种常见工具分别是Tmac(Technitium MAC Address Changer,Technitium的MAC地址转换器)和MacMakeup。Tmac的下载网址是:http://www.technitium.com/tmac,另一个MacMakeup的下载网址是http://www.gorlani.com/portal/projects/macmakeup-for-vista-seven-2008-windows-8。这些程序提供了一个方便的图形用户界面,但它们似乎除了更改网络地址中“NetworkAddress”这个主键值之外,也没做更多的事。
3.在OS X上破解MAC地址过滤
在OS X操作系统的10.5版,Apple公司允许用户以一种类似于Linux操作系统下的操作方式修改MAC地址。要顺利地修改MAC地址,在修改前,你的网卡必须断开同任何网络的连接,然后可以通过“airport-z”命令完成这一操作。
ifconfig命令运行结束的时候,MAC地址也随之修改并生效。之后,你可以使用正常的机场卡AirPort的图形界面加入到这个网络了。
✔ 对破解MAC过滤的应对措施
如果你在AP接入点上使用了“MAC地址过滤”功能,你将无法阻止别人通过上述方法修改他的MAC地址的方式绕过你所设的这种机制。最好的事情是根本不使用这种机制,或者至少不把它当成是一种安全控制。唯一能把“MAC地址过滤”能当成是好处的,就是这个AP接入点上无人使用,因为黑客无法监听到“信任的MAC地址列表”中合法的MAC地址,因而无MAC地址,当然也就谈不上后面的数据包注入。不过,无论如何,都不要使用“有线等效保密协议”认证方式。在黑客眼里,“MAC地址过滤”实际上只是花拳绣腿,货不抵值,即使你同时使用无线入侵检测系统(wireless IDS)和“MAC地址过滤”,对于两个人在同一时间共用同一个MAC地址进行上网的入侵方式,你的入侵检测系统应当能够发现,但对于黑客等到某用户正常下线后,借助他的名义再上线的入侵者,那么入侵检测系统也是无能为力。
- 生活中,我们更多地称为“无线路由器”。将AP接入点理解为我们家庭或单位用的无线路由器将十分有助于很多术语的解释。——译者注
- 其实这种说法不严谨,确切地说是:攻击者假借AP接入点的名词,从自己的位置向客户端发送64个“AP接入点主动提出的”解除认证的数据包,同样再假借客户端的名词,向AP接入点发送64个“客户端主动提出的”解除认证的数据包。所有的128个数据包都是由攻击者发出的。——译者注
- 该设备使用RT73芯片。——译者注
- 该设备使用RTL8187芯片。——译者注
- 这里有几个方面要说明:1)新主键名称NetworkAddress属于关键字,必须完全一致;2)REG_SZ类型表示一种变长纯文本的字符串格式,SZ表示String Zero,指的是该字符串最终以一个’
本书评论