1.3 硬件与驱动程序

你所要使用的软件工具,同这些支持软件运行的硬件一样重要,所以一提到硬件的选择,世界上最好的无线网卡和芯片组肯定是你的首选。不过,也有例外,那就是如果控制硬件的驱动程序根本就不知道你想要什么,然后把驱动程序做得一塌糊涂,那就另当别论了。

本节会介绍一些目前可用的驱动程序和它们所控制的芯片组,以及装有芯片组的网卡。这里着重强调Linux驱动程序是因为这将是当前绝大多数开发中会遇到的。

1.3.1 Linux内核简介

在对无线通信提供支持方面,Linux操作系统的内核常常招来相当坏的评价。事情是这样子的,一般来说,老一代芯片组都会为自己提供独立的驱动程序,每个驱动程序自成一体,形成“孤岛设计”,程序本身也不向其他驱动程序共享任何东西,也不需要将其他驱动程序作为自己的先决条件。可是,在Linux内核开发中,驱动程序几乎没有独立性,每个驱动程序都需要与其他的独立单元一起合作才能生效,因此对其的批评声遍布于整个内核开发中,每个人都希望会好起来。

这样做有很大的弊端,既然驱动程序间要相互协作,所以每次要统一编译,如此一来,每个驱动程序都携带约数千行代码,并且每个驱动程序中已实现的功能,又都被其他驱动程序重复实现。如果驱动程序编写者有某种标准化的“应用程序接口”(API) [1] 可供驱动程序调用来处理这些问题,那么他们的工作将变得更加容易,并且可以用更少的工作来维护这些核心代码。类似于驱动程序所用的代码,无非是诸如身份验证、系统配置,以及信道选择等几乎所有驱动程序都必然会用到的共同功能。

这种共享的代码库最终被设计出来,称为“802.11堆栈”。Linux开发人员认为实现两次是一个好主意,但也许三次更好,这取决于你想怎么来计算次数。无论如何,总有一段极度粗制滥造期,编写者希望他们的驱动程序被包括在主驱动树结构中,就写了又写。最后事情尘埃落定,大家也平静下来,在伟大的“802.11堆栈设计战” [2] (802.11 stack war)中,“mac80211驱动框架”脱颖而出,成为赢家,而其他竞争者(特别是ieee80211)被戏称为“折旧”而扔进了大垃圾堆中。

由于现在只有一个标准化的Linux 802.11堆栈,所以许多老掉牙的、与802.11堆栈没有依赖关系的独立驱动程序都被改写,合并到驱动树结构中。不过,为了保持兼容,并不是所有驱动程序都必须符合“802.11堆栈”的要求,这意味着,虽然仍有一些“老爷车”式的历史遗留式的驱动程序(包括那些为特定的无线攻击而进行优化的补丁类驱动程序),那些成绩平平的入侵类驱动程序仍然可以在不做任何修改的情况下,编译到你的内核中。

具体来说,本书中所有提到的攻击方式,都是以功能集驱动程序的方式在栈结构实现的,并且全部都添加在上面提到的“mac80211驱动框架”树状结构中。对于具有特征的攻击方式中,凡是在未打补丁的“mac80211驱动框架”的驱动程序找不到的,统统都会在本书中明确地告知,类似的驱动程序有ath9k和iwlwifi。这就是说,之后绝大多数的攻击技术,并不需要读者做深度挖掘和提供补丁程序之后才能使用,而是在最原始的Linux版本的内核上就可以使用。除非另有说明,否则本书中所有的攻击方式,都是运行在没做任何修改的,版本等于或高于3.3.8的内核中。

1.3.2 芯片组和Linux驱动程序

每个网卡都需要有芯片。虽然市场上有数百种形状各异的网卡,但其实这些网卡所用的芯片也只是少数的几个,所以大多数的网卡因为使用了同一芯片,而可以使用相同的驱动程序,它们通常情况下也都是这么做的。因为对于驱动程序软件来说,即使不同的网卡,只要使用的是相同芯片,那么软件所看到的都是一致的。唯一真正的区别在于网卡有什么样的功率输出,或天线插孔的类型和可用性。所以,对于从事无线攻击的人员来说,选择购买什么样的网卡,首先要做的是决定要什么样的芯片组。

提示

许多网卡广告宣称支持某些功能,例如支持802.11n和802.11ac。但请务必记住的是,使用这些功能,需要芯片组硬件和驱动程序软件的通力合作才能实现。许多Linux驱动程序在一些尖端技术上,是落后于最先进技术的,对于网络入侵,我们最需要关注的是802.11ac。如果你关心新功能的兼容性问题,一定要仔细检查驱动程序的支持程度。

1.驱动程序中想要的特定功能

任何无线驱动程序都有两个非常渴望的功能。显然,其中最重要的一个功能是“监测模式”(详见前面的1.2.2节)。另一个需要驱动程序一起实现的功能是“数据包注入”(packet injection)。数据包注入 是指在一个在线网络中,通过大量发送任意格式数据包,进而影响该网络原有功能的能力。这种能力允许重现网络上的数据通信,加快对“有线等效保密协议”的统计袭击;也允许注入“解除认证数据包”(deauthentication packet),然后借助该数据包,可以将某个在线用户从AP接入点上踢掉,使其与网络断开。接下来讨论数据包注入。

2.数据包注入

许多年前,借助于Abaddon公司发布的一个名为AirJack的工具,使“数据包注入”功能首次成为可能。AirJack是一个驱动程序,与Prism2芯片组和一套使用该芯片的应用程序一起工作。自AirJack发明以来的这几年,数据包注入的特性已被广泛添加到主流驱动程序中,所以随便找个网卡,基本上没有为了这个功能而去查找提供该功能的补丁程序的必要。

事实上,对“数据包注入”的技术支持已经发展得很好,现在,有两组不同的用户级“应用程序接口”编程库可以使用。应用程序可以通过“应用程序接口”,以一种跨驱动程序的方式完成无线网络中数据包的注入。第一组编写并发布的“应用程序接口”编程库被称为“无线连接的剪断器”(Loss Of Radio Connectivity,LORCON)。这组程序库目前已升级为LORCON2。

另一个支持注入的编程库被称为osdep,由较新版本的Aircrack-ng软件使用。不幸的是,现在有两个库来完成同样的事情,然而,这也许仅仅是程序开源领域里成熟度的一个标志。否则就不会有GNOME和KDE,Alsa和OSS,Wayland、Mir和Xorg等这么多对优秀的开源程序供我们使用。开放源码给我们的最大自由是选择权 [3] 。如果你忙于选择哪款“窗口管理器”软件,或哪款“电子邮件提醒器”软件,或者想知道为什么某个程序的设计者不再积极地维护他们的某个程序,那么,只要你有时间发电子邮件,你只需要在邮件里问问RMS(Richard Stallman,自由软件基金会的创始人),作为这方面的行家,他会给你推荐你满意的开源软件的。

无论如何,LORCON和osdep都为应用程序开发人员提供了一组方便的“应用程序接口”,使他们的应用程序可以在不依赖特定驱动程序的前提下,发送自己定制的数据包。在mac80211得到广泛支持之前,想实现这样的注入功能是一件很困难的事。现在,大多数用户只须使用带LORCON支持库的“mac80211驱动框架”的驱动程序,即可轻松实现。下面汇总了在Linux操作系统上,支持的802.11数据包注入功能的应用程序中,使用这两个“应用程序接口”编程库的当前状态。另外,osdep和LORCON都分别为不同的驱动程序提供了类似的支持。

1.3.3 现代的芯片组和驱动程序

以下介绍的所有芯片组,都有积极地维护着的被合并到mainline版内核 [4] 的Linux驱动程序,它们也很容易在当今市场上找到。当然,这个无线芯片组和驱动程序的功能列表清单并非详尽无遗。相反,这里只是一组最常见的、对Linux提供相当好的支持的芯片组名单。而那些不提供现代“mac80211驱动框架”下驱动程序的芯片组,还有那些太陈旧,以至于不能完成有效的黑客攻击的芯片组,则都未在列表中列出。

喂,我的802.11ac呢?

对Linux无线网络来说,一般情况下,最大的讽刺是,Linux的内核对802.11n和802.11ac路由提供强大支持的同时,对802.11n和802.11ac客户端的支持程度,则似乎落后于其他平台。在写作至此时,就有两个内核驱动程序在限制对802.11ac的支持。这两个程序分别是athlOk驱动程序和Intel公司的iwlwifi驱动程序。不幸的是,基于athlOk驱动的外部设备目前非常有限。

1.Ralink(RT2X00)

Ralink公司(中文名叫“雷凌”)是规模较小的802.11芯片组制造商之一。Ralink公司的软件产品具有极好的程序开源支持,已经使用过的所有该品牌网卡都非常稳定。Ralink是在Linux上提供USB硬件接口的少数几个芯片组制造商之一,另一个制造商是Realtek公司的RTL8187芯片组。

像大多数芯片组一样,Ralink基本上已经有两个驱动程序系列。“历史遗留式”的驱动程序是独立的驱动程序,每个程序针对一个特定的芯片组。这些驱动程序在被广泛使用之前就提供了对黑客来说非常有用的功能,如数据包注入功能。Pedro Larbig收集保存了一组增强型的传统Ralink驱动程序,见http://homepages.tu-darmstadt.de/~p_larbig/wlan/ 。这些驱动程序可能都是最优化的独立驱动程序,并且都保留了专门针对802.11入侵而做的修改。不过,这些驱动程序也太陈旧了,就像前面所说的,连“历史遗留式”的独立式驱动程序都属于早期产物了,这些驱动程序当然也不例外,现在也当然不值得为要不要使用这些老的驱动程序而争论什么。

较新的Ralink驱动程序被统称为rt2x00。这种驱动程序现在根据“mac80211驱动框架”要求驻留在内核中。虽然这些位于“mac80211驱动框架”结构树中的rt2x00驱动程序并没有针对无线黑客入侵进行多少优化,但它的优点是可以在任何现代分布设备上使用。

2.Realtek(RTL8187)

虽然这里所说的大部分驱动程序支持许多种网卡和为数不多的芯片组,但是使用RTL8187驱动程序的用户通常记得一种单一的网卡——Alfa网卡(阿尔法)。Alfa卡是一块USB接口的无线网卡,内置Realtek(中文名叫“瑞昱”)公司的RTL8187芯片组。该驱动程序具有和芯片组相同的名称。此驱动程序已被合并到mainline版内核好多年了,并且成绩斐然,令人印象深刻。尽管基于RTL8187芯片组和驱动程序的Alfa网卡多年来一直都是一个简单的选择,但该网卡本身不支持802.11的a、n和ac版本,所以这一缺点限制了程序在新设备上抓取数据包的能力。也就是说,对于数据包注入方面,这款网卡也可以作为排名第二的板卡。同时,这也是能工作在OS X操作系统上最早出现的外置式网卡芯片组和驱动程序。

3.Atheros芯片组(AR5XXX,AR9XXX系列)

由于可扩展性和高质量开放源码的驱动程序,Atheros(中文名叫“钰硕” [5] )的芯片组多年来一直深受黑客社群的青睐。虽然所有Atheros的802.11芯片组都可以完美地支持Linux操作系统,但基于Atheros的大多数无线网卡都不支持USB接口,而是支持PCMCIA接口。这意味着,随着笔记本电脑逐渐放弃使用PCMCIA总线,对外置基于Atheros无线网卡的接受度已经变得越来越棘手。Atheros生产其大部分芯片都是为嵌入式迷你PCI网卡的,或者是直接将芯片逻辑做到进入SoC [6] 中。可悲的是,如果一个Linux驱动程序“同时支持”USB接口和一个不支持USB接口的Atheros无线网卡,那就会变得不伦不类。

如果你足够幸运,有一块内置Atheros芯片的设备(之所以说“设备”,是因为在笔记本电脑中,很少能看到内置Atheros芯片的无线网卡),或者你想将一块迷你PCI卡部署到笔记本电脑或其他嵌入式设备中,那么下面的内容给出了当前驱动程序支持能力的解释。

·MadWifi:MadWifi是一款“历史遗留式”的驱动程序,因其稳定性方面的不足而从未被合并到mainline版Linux内核中,如果你坚持想用Madwifi网卡,那么就像卡的名称一样,你就等着疯掉吧。这款芯片最好的替代品就是ath5k或ath9k。

·ath5k:这款驱动程序是MadWifi的合乎情理的继承者。性能很稳定,足以包含在vanilla版Linux内核中,并且像所有在Linux上的现代无线驱动程序一样,它使用“mac80211驱动框架”的堆栈结构。在许多使用AR5XXX系列芯片组的设备上,ath5k驱动程序都为其提供支持。不过,ath5k不提供对USB的支持,同时也不提供对802.11n标准的支持。

·ath9k:作为块头比ath5k大的兄弟,ath9k后来居上,在Linux下的这些芯片组,基于802.11n标准提供了稳定的支持。虽然最初的驱动程序是由Atheros开发的,但现在是开放源码社群在维护它。ath9k同时也为后来的AR54XX各版本芯片组提供支持,除此之外,对AR91XX系列的各个版本,ath9k也同样提供支持。不过,ath9k和ath5k存在相同的不足,那就是ath9k设备也不提供对USB接口的支持。

·ath10k:作为块头比ath9k大的兄弟,ath10k同样当仁不让。不过该版本除了增加对802.11ac标准的某种程度的支持之外,其他只是ath5k和ath9k的一个功能合集。

·ath9k_htc:ath9k_htc是少数支持基于USB接口的Atheros芯片组的驱动程序。这些芯片组包括AR9271和AR7010。

·carl9170:如果你有一个Ubiquiti SR71的USB设备,那么carl9170将是支持这个设备的第3款(注意这里的“第3”,意味着它的评价排名)驱动程序。曾经,carl9170源自并取代了ar9170usb驱动程序,而ar9170usb也曾经巧妙地取代过一款名为otus的驱动程序。如果你分不清它们这几代之间的关系,那你就难以想象到,同那个稳定的同行兼对手之间,这三代软件分别与ath5k、ath9k、ath10k之间存在一一对应的竞争关系。

4.Intel公司Pro无线驱动(iwlwifi)

Intel公司的802.11芯片组通常内置在笔记本电脑中,并且与PCIe总线 [7] 相关联。较新的Intel芯片组是由iwlwifi或iwlagn驱动程序支持的,这些驱动程序都被合并到了最新的Linux内核中。

Intel公司的芯片组通常都有很好的优势,那就是供应商基本上都是买主的坚实后盾。然而,事情都有两面性,在各外置网卡中几乎看不到基于Intel芯片的好卡,究其原因,就是对于Intel公司来说,没有令人信服的理由为了更方便破解支持802.11的驱动程序而加入任何需求。那么,如果你的笔记本电脑上,本来就带有一个集成Intel芯片组的无线网卡总可以吧?事实上,如果你有这样的笔记本电脑,出于测试目的使用这个网卡练练手也许没有问题,但要想当一个资深的黑客,你就只能自己想办法,为这个内置的无线网卡接一个外置的天线了。

为什么我在监测模式下,看不到基于802.11n或802.11ac标准的数据包呢?

在从事无线入侵黑客的眼里,在监测模式下,看不到基于802.11n或802.11ac标准的数据包,其最大的问题是这两个标准都使用了“多输入多输出”(MIMO)技术。一言以蔽之,就是MIMO允许单个适配器同时发送多个数据包流,这就是为什么你能在界面上同时看到802.11n和802.llac所有小天线图标都处于连接状态的主要原因。这就意味着,攻击者要想看到无线网卡所捕获到的全部通信数据包,就也得具备同时接收和重组两路,甚至是三路独立传送的数据包流。对于任何一个流,即使是有一个字节未成功收到,那么你也不得不扔掉与这个字节相关的完整数据包。

1.3.4 网卡

既然芯片组和驱动程序已经考虑好了,下面该决定用什么网卡了。记住,内置的无线网卡将提供基本的监测模式和数据包注入支持,这是赔率很高的方案,因为你可能不需要再购买任何其他东西,只需要试一下就知道结果了。本节的目标是编制一张列表,在表格中列出各网卡的重要特征,最后,你会看到一张“推荐网卡”的列表,供读者根据列表购买一款自己感兴趣的网卡。

购买无线网卡的过程中,最令人丧气的事,就是做完了所有的调查,也从中找到恰到好处的那一款并购买回家时,你发现其实你拿到的是一个硬件版本稍有不同,但芯片组却完全迥异的无线网卡。事实上,包装盒里的网卡和你花钱想买的网卡,唯一的相似之处,就是长得都跟包装盒里的网卡的形状一样。

不幸的是,这种情况经常发生,并且你束手无策,除非你所购买无线网卡的这家店里有无条件退货的规定。一个提供了最全面描述的列表,包括从产品到芯片,以及驱动程序的网站名叫“Linux无线产品”(Linux Wireless),其网址是http://linuxwireless.org/en/users/Devices

提示

你对哪种芯片组出现在新近发布的网卡里感到好奇吗?如果你能拿到网卡的“FCC ID” [8] ,就可以直接从FCC网站中搜集大量信息,最有用的信息是该网卡所使用的芯片组。除此之外,还有一些通过高分辨率的内部相机,在拍照后又发到网络上的在线照片,从这些照片中,通常也可以读到很多信息。如果你对卡的内部结构感到好奇,但不想自己动手打开它,那么我强烈建议你访问“http://www.fcc.gov/oet/ea/fccid/ ”网站,在界面中输入“FCC ID”,然后你就可以查到与设备相关的内部照片记录了。

1.发射功率

发射(Transmit,TX)功率当然是指你的网卡可以把数据传送到多远的距离,单位通常是毫瓦(mW)。大多数“客户级”(consumer-level)的无线网卡的发射功率是30毫瓦(+14.8 dBm,单位全称是decibel milliwatts)。“专业级”(professional-grade)的基于Atheros的无线网卡,在UbiquiLi系统中的发射功率是300毫瓦(+24.8dBm)。Alfa的AWUS306H无线网络,目前握有十足的发射功率金牌,据称提供1000毫瓦(+30dBm)的功率。虽然发射功率很重要,但随便指定一张无线网卡,不要忘记它是与灵敏度参数息息相关的。

2.灵敏度

很多人判断一张无线网卡的优劣,往往只重点关注发射功率,而忽视网卡的灵敏度,这种看法是很肤浅的。假如有一张发射功率很大,但灵敏度很小的网卡,虽然能够将数据发送到很远的距离,但由于发射功率和灵敏度明显不匹配,最终这块网卡有可能无法接收对方的回复。人们经常会忽略灵敏度,是因为无线网卡的广告中,较少会强调这个参数的重要性。如果你能找到一个网卡的产品性能参数表,表上应该会列出灵敏度,该值通常也是以dBm为单位的。不过该值一般是负值,并且在测量灵敏度的时候,除去负号后的数字越大,灵敏度越好 [9] (如灵敏度为-90dBm的就比灵敏度为-86dBm的要好)。

·一般“客户级”的无线网卡的灵敏度的标准值是-80~-90dBm。“专业级”的高端网卡则可能到达-93~-97dBm的灵敏度。

·每增加3dBm的变化代表灵敏度加倍,比如信号源和测量的一方正在相向移动;每减少3dBm的变化代表灵敏度减半,比如信号源和测量的一方正在背向移动。

·如果你发现需要把mW毫瓦转换成dBm,不要害怕。dBm功率恰巧是以10为底的毫瓦功率的对数的10倍。公式是:10×log10 (mW)=dBm,或mW=10dBm/10

注:例如上面的10×log10 30(mW)=14.8dBm,以及30mW=1014.8dBm/10 。——译者注

3.天线的支持

决定购买哪种网卡,最后要考虑的一项就是天线对网卡的支持。什么样的天线能够支持你的网卡?你需要先由天线开始考虑吗?如果你的工作职责就是确保公司的无线网络安全,或者是对公司的无线网络安全进行审计,那你一定得想有一个或两个相当好的天线,这样才能精确地测量到你公司的信号泄漏到外边有多远。

目前,你的无线网卡上,通常会有0个、1个或2个天线插孔。如前所述,802.11n卡由于支持“多输入多输出”(MIMO)模式,所以你的网卡至少需要再安装两个外置天线(即使你的笔记本电脑中已经内置了一个无线网卡)。无线网卡与天线卡之间起连接作用的缆线连接器 [10] ,被称为“小辫子” (pigtail)。在这里,小辫子的作用仅仅是在卡上的任意插孔和连接天线上的任意插孔之间起到连接的作用。使用USB接口的外置无线网卡的好处之一,就是几乎所有的插座都无一例外地使用了相同的接口,该接口称为“反极性SMA”接口(reverse polarity SubMiniature version A,RP-SMA)。

幸运的是,大多数天线与一个特定的连接器相连。这个连接器称为“N型连接器”(N-type connector)。特别需要说明的是,天线端通常是母头的“N型连接器”。这种标准的连接器接口意味着朋友间可以互借天线,而不用担心因为线缆接口和天线接口不是同一类型而无法使用。其他天线连接器类型也不是没有,所以在你假定天线有一个N型连接器之前一定要检查一下。表1-1详细列出不同连接器的类型,以及其生产商的名称。

表1-1 不同连接器的类型及其生产商

注:MMCX(Miniature Microax rf Coaxial Connectors),微小型射频同轴连接器,主要用于在对系统体积、重量都有要求的小型通信、网络设备之间连接射频同轴电缆。——译者注

4.推荐的网卡

作者强烈推荐以下三种网卡。它们有高于平均水平的灵敏度和发射功率,Linux下的稳固支持,以及外接天线连接器。它们大多也支持OS X和Windows系统上的数据包注入和监测模式。

Alfa无线网卡(详见表1-2),逐渐开始为众人所知,在最近的一段时间以来,已经是802.11狂热爱好者的主要选择。从支持802.11g标准以来,这种网卡的缺点主要是对跨平台系统的支持较少,以及价格较高。因为Alfa的产品线一直处于拓展状态,为了与新产品进行区分,我们习惯上称早期原始的Alfa中的无线网卡为“银色Alfa”,其型号为AWUS036H,之所以这样称呼,是因为该款网卡的颜色就是银色的,如图1-8所示。

表1-2 AlfaAlfa AWUS036H无线网卡的参数

虽然“银色Alfa”无线网卡在很长的时间里我们都感觉挺好,但是它已被更新的型号所取代。使用“银色Alfa”网卡的读者们,是时候认真地考虑一下,将其升级为一块更现代的无线网卡了。

型号为AWUS036NEH的“黑色Alfa”(见图1-9),是Alfa系列中一款支持802.11n的基本版无线网卡,也是“银色Alfa”网卡的缩减版本,其性能指标详见表1-3。与其他支持802.lln的网卡相比,它最大的变化就是体形明显较小。不过可悲的是,这款Alfa无线网卡并不支持OS X操作系统上的KisMAC软件。其实,自“银色Alfa”以后所有其他版本的无线网卡都不支持KisMAC软件。

图1-8 银色Alfa无线网卡

图1-9 黑色Alfa

表1-3 Alfa AWUS036NEH

型号为AWUS051NH的“金色Alfa”无线网卡(如图1-10所示)是Alfa系列中一款支持5GHz频率的无线网卡(详见表1-4),不幸的是,这款无线网卡并不支持OS X操作系统。

图1-10 金色Alfa

表1-4 Alfa AWUS051NH

SR71-USB(见表1-5)是一款较好支持Windows操作系统的无线网卡(如图1-11所示)。如果你正在寻找一块既可以稳定地运行在Windows上,又能同时提供数据包注入功能,还能在监测模式下监测所有基于802.11标准的通信数据包的无线网卡,那么你就要考虑SR71了,配上“CommView for Wi-Fi”软件就可以完成上述所有需求。这种组合要比在CACE系统上,配上“AirPcap NX”软件的组合,便宜得不是一星半点。

表1-5 Ubiquiti公司的SR71-USB

图1-11 SR71-USB

Tamosoft软件公司是“CommView for Wi-Fi”软件的创造者,在加配一个小适配器装置后,也可以支持802.llac标准。如果读者比较关注这款网卡在Windows上监测无线通信数据包的功能,可以看一下该产品的兼容性列表。其网址是:http://www.tamos.com/products/commwifi/adapterlist.php

1.3.5 天线

市场上有不少各式各样的遵从802.11标准的天线。如果你之前从来没有购买或看到过一款,那么,与天线相关的术语可能就会让你找不着北。所以在开始之前,需要学习一些基本术语。“全向天线” (omnidirectional antenna)是一种在所有方向上都能够发送和接收无线信号的天线。“定向天线” (directional antenna)是一种可以将信号集中于某一个特定的方向进行发送和接收无线信号的天线。两种类型的天线在不同情况下各有各的用武之地。

如果你以前从未使用过天线,千万不要抱着“最贵、最大的就是最好”的思想,初次去买的时候,逢大个的就买,最后只能是“只买贵的,不买对的”收场。相反,一个便宜的“磁性底座天线”(magnetic-mount omnidirectional antenna)就可以收到相当不错的效果,而其售价只要20或30美元。如果可行,先从懂行的朋友那里借个天线试试手,也不失为一个好办法,至少你可以知道,当前借到的这个天线还需要再增加点什么功能就可以满足自己的需要了,借此你也可以估算一下你心目中的天线大概需要花多少钱了。

如果你有机械和电气方面的爱好,可以用一些易拉罐自助创建一个便宜的波导天线(waveguide antenna),造价仅为几美元。这些摇摇晃晃的自制土天线,其接收效果却并不见得差,互联网上随处可以看到这类故事,你的天线也可以达到很好的效果。这需要你在车库里花上数小时,造出一个什么也看不出来,但却有一个带洞的罐和一个带奇怪的辐射模式的1dBi或2dBi的增益的天线。当然,如果你感觉这个小爱好还算有趣,那么你不妨在网上找找,必定能找到很多这样的DIY指南。

天线好坏的判断指标是“天线灵敏度”,它的单位是dBi(decibel isotropic,各向同性上的功率对比)。最后是一个关于天线灵敏度比较的提示:“天线灵敏度”就是天线指标的一个对比值,但不要随意进行两个dBi数值大小的比较,因为这样可能会误导你对它们的直观印象。究其原因,是因为“天线灵敏度”每增加3dBi,天线的有效功率覆盖范围就会加倍。也就是说12dBi的天线的功率是9dBi的天线功率的两倍。

1.基本部件

有相当多不同类型的天线,甚至有些博士论文通篇都是论证如何用不同的技术改进其性能的。当然,本节不会讨论这类内容,本节的目的是为读者提供一些实用的知识,帮助读者选择正确的天线,最后完成手边所要做的工作。

天线既不是变戏法,也不会向你的信号中注入魔幻的力量,而是将无线网卡正在产生的信号集中起来,并准确地发出去,或者接收来自外部的信号。可以想象一下,你的网卡产生的信号覆盖范围,其形状像一个三维球体(确切地说不是球体,但是先这么假定)。首先我们想象一下一个细管的喷泉,当喷口垂直向上,水压适中时,水会经由喷口向四周散开,形成一个类似没柄的苹果把儿处的形状,如果下面也对称想象成这样的形状,那么现在无线网卡产生的信号覆盖范围就是这样的一个形状,基于这个三维模型的想象,全向天线的工作原理基本上就是在这样一个竖放的“苹果”,可以增大发射功能,这个苹果不是等比例地扩大,而是由于电磁力的相互作用,两极的磁力相互抵消改变不大,但四周的范围却被扩大,这时的“苹果”被压扁,变成一个圆形的矮胖“大南瓜” [11] 平放在地面上的形状,这时,原本属于“大南瓜”上面和下面的垂直方向的能量被“压”到“大南瓜”侧面水平方向上的范围内,从而增加了这一区域的功率,所以这样在水平方向上的信号传得更远,但垂直方向上却达不到原来那么远。更重要的是,全向天线的增益越高,这个“大南瓜”的形状就越扁平。定向天线以同样的方式工作,只不过它将信号集中在一个方向发送,而在另一个相反的方向上接收信号。要记住一个重要特点:无论是哪种天线,信号发射的功率值一直是保持不变的,但信号发出的功率范围却是可以变化的,而所能变化的,只是天线的功率覆盖范围的形状。如果仍使用上述比喻,那就是“大南瓜”内的发射器功率是个恒定的常量,但“大南瓜”的厚度是可以变的,越接近于原来的球体,水平方向上“大南瓜”能到达的区域越小;反之,“大南瓜”越扁,水平方向上能达到的区域越大。

如前所述,全向天线的功率覆盖范围近似接近于“大南瓜”的形状,由于实施了变形,所以扩大了原来的功率发射范围。如果你想开着车,借助于天线在街上寻找无线网络,那么全向天线可能是该工作的最佳工具。不过,在某些情况下,如果你希望能够更精确地调整信号,那么换用一个定向天线则会非常方便。试想一下,如果将全向天线中的“大南瓜”进行垂直中轴的等分,那么分后的每一个“扇形饼”就是一个定向天线的功率覆盖范围的形状。其中“扇形饼”两个切边的夹角称为“波束宽度”(beamwidth),定向天线比普通定向天线的波束宽度要小。这一点不难理解,夹角内的总功率是一定的,夹角越小,则“扇形饼”向远处延伸的范围越大。如果夹角足够小,那么全向天线中将“大南瓜”进行“压扁”的操作也是多余的,进而定向天线就简化为一个“锥体”的形状(试想一下夜晚打开手电筒,光柱所形成的形状),这时,“波束宽度”越小,发射能量就越集中,发射的范围就越远(例如,我们在大声喊远处的人的时候,有时会用双手在嘴边形成一个喇叭状,以使声音能传得更远)。不过,“波束宽度”也有缺点,那就是很难瞄准对方。

2.天线特性

每一个无线黑客至少需要一个全向天线。全向天线基本上有两种类型:9~12dBi的“基站天线”(base-station antenna)和5~9dBi增益的“磁性底座天线”(magnetic-mount antenna)。“磁性底座天线”的设计原理是利用磁性直接吸附在汽车的顶部,“基站天线”的设计是可以直接插入到一个AP接入点设备中。

“基站天线”通常外套一个白色PVC管 [12] ,长度是30或48英寸。长度越长,增益越高,并且价格越贵。当“战争驾驶”时,从“可接收性”(reception)上来说,尽管增益较低,“磁性底座天线”一般比“基站天线”接收更好些,这一点不难理解,汽车本身就是一个大铁盒子,对无线信号具有很强的屏蔽作用,所以在汽车里边,接收效果无疑会差很多。不过,如果你想在办公楼里使用全向天线,12dBi增益的“基站天线”效果明显更好。

接下来说一下各种“定向天线”。到目前为止,最流行的是廉价的波导天线(有时称为Cantenna [13] ,不妨称为“手工易拉罐天线”)。一个典型的“手工易拉罐天线”可以获得12dBi的增益。相比波导天线的平均性能上有较大提升的是“八木天线”(Yagi)。增益为15和18dBi的“八木天线”很容易找到,但它们往往比波导天线明显贵很多。

3.全向天线

“全向天线”通常是用磁性底座将天线吸附在一辆汽车的车顶。这些天线一般配置比较低,不引人注目,增益通常是5~9dBi范围内,价格为20~40美元。对于喜欢“战争驾驶”的黑客来说,一个基本的“磁性底座全向天线”是必备的。

4.定向天线

波导天线 ,俗称“手工易拉罐天线”(Cantenna),一般都比其他的定向天线便宜,并且有大约30度左右的“波束宽度”(beamwidth)和15dBi的增益范围。虽然比起专业天线商品,这种天线在执行任务的时候并不完全理想,但这种形式的天线可以很容易地由成套的模块半成品或零配件制作手工组装完成。

板状天线 (panel antenna)通常有13~19dBi的增益,和35~17度的“波束宽度”。“波束宽度”越小,意味着增益值越大。这些天线一般售价都在30美元~50美元之间。对喜欢“渗透测试”攻击的黑客来说,板状天线是个不错的选择,究其原因,板状天线的面板是一个平板,相比于其他的定向天线,更容易隐藏。

八木天线 (yagi antenna)通常可以有30度的“波束宽度”和15~21dBi的增益。当大多数人想到“长相很吓人”的天线时,可能就会想到八木天线。

抛物面天线 (parabolic antenna)可以提供最大的增益和最窄的“波束宽度”。一个标准的抛物面天线具有24dBi的增益和5度的极窄的“波束宽度”。“波束宽度”这么窄,就意味着很难“瞄准”目标,换句话说,就是在安装这种天线的时候,为了进行两点间“点对点”(point-to-point)的回程线路(backhaul)测试,所以必须进行很专业的安装。

5.射频放大器

如果在你的系统里添加一个射频放大器(或双工放大器的发送模式),那么这将大大增加系统的发射范围。如果再增加一个接收放大器(或双工放大器的接收模式),也将同样大大提高天线的接收灵敏度。不过,缺点是,放大器(amplifier)在放大信号的同时,也放大了信号噪音。因此,我们会建议先使用“定向天线”收发信号,然后再使用放大器放大信号。如果还是觉得放大的效果不够,或者如果你已打算好不惜花上数百元来改进无线设备,那么下面就是要记住的基本思路。

任何在市面上能见到的802.11放大器都是双向收发的,这意味着系统可以在需要发送的时候自动切换到发射模式,而在有数据到达时自动切换到接收模式。在802.11的Wi-Fi无线网络通信中,一个只有发送功能或只有接收功能的放大器是没有用处的。放大器的另一个重要特征是它的增益控制(gain control),一般放大器具有固定增益型、可变增益型或自动控制增益型三种。可变增益型放大器因为增益效果可变,因而使用灵活;固定增益型放大器的成本更低;自动控制增益型放大器则有智能,可以将放大器的发射功率始终保持在一个设定的值上,也就是说,你不必担心输入端现在提供的是多大功率,因为放大器会“多增少降”,进而使之平衡在所需要的功率点上。如果你打算从上述三种型号中选择一种,那么建议使用一个自动控制型增益放大器。RFLinx 2400 SA是一个不错的自动控制型增益放大器,适合于那些从事802.11无线网络攻击的黑客们。

1.3.6 蜂窝数据卡

在通过“战争驾驶”模式采集无线信号的时候,蜂窝数据卡 [14] (cellular data card)是必不可少的。有了这些卡,你就可以在采集数据的同时,实时下载地图和Google Earth(谷歌地球)上的实时地理图像,还能从互联网上下载预先忘了下载的任何软件工具。令人惊讶的是,这些卡大部分都在Linux操作系统上有较好的表现。从操作系统的角度来看,系统会把这些卡作为一个串行设备(serial device),该设备与操作系统之间通过基本的AT指令集 [15] 进行通信。你几乎可以将该设备看作是一个拨号连接时使用的调制解调器。

如果你正在考虑购买一个蜂窝数据卡,那么在订购之前,你需要先核查一下所要购买的蜂窝数据卡是否支持你的无线网络系统所需要的那些特定模式。比如AT&T公司的蜂窝数据卡不支持Linux操作,所以你也别指望该公司的技术支持来帮助你解决因他们公司蜂窝数据卡而引起的Linux的问题。通常情况下,大多数中国华为公司的蜂窝数据卡(Huawei card)可以很好地运行在Linux操作系统上。

1.3.7 GPS

许多基于802.11协议的扫描工具都可以使用“全球定位系统”(Global Positioning System,GPS)接收器。这意味着,扫描软件可以把从GPS接收器读到的经度和纬度与一个给定的AP接入点关联起来。对于GPS接收器,一个可喜的地方在于几乎所有可以连接到计算机的接收器都使用统一的通信协议,这个通信协议被称为“美国国家海洋电子协会”(National Marine Electronics Association,NMEA)标准协议,简称“NMEA协议”。只要你有一个可以使用NMEA协议的GPS设备,那么它可能就会在你的操作系统上很好地工作。

1.鼠标式和手持式接收器的对比

GPS接收器有两个系列:一种是鼠标式,另一种是手持式。鼠标式GPS接收器是一种后面拖出长长连线的GPS接收器,因为像鼠标,所以有了这样的名称。鼠标式GPS接收器本身不能单独使用,只能跟别的设备联合起来使用。比如与笔记本电脑或PDA一起使用。有些鼠标式GPS接收器是防雨的,这种设计无疑是可以将它贴附到汽车的车顶上。其他的设计也有在车内使用的。通常情况下,鼠标式的GPS接收器都使用USB接口,不过,也有使用其他连接方式(比如蓝牙通信)的。不推荐使用蓝牙通信的GPS接收器,因为蓝牙也工作在2.4GHz的范围内,当你进行“战争驾驶”操作的同时,蓝牙的无线信号会干扰天线的工作。

如果你已经有了一个GPS接收器,先插到电脑上,看看你的操作系统是否能认出这个设备,只有认出设备才有继续的可能。在不同的操作系统上,完成这一识别动作的操作方式差别很大,下面分别说明。在Linux系统上,在计算机上插入该设备后,还应该通过dmesg命令检查一下输出信息,运气好的话,你会看到一个“/dev/ttyUSB0”列表项弹出,这就意味着Linux操作系统识别到这个设备了,否则的话,就说明该设备不支持Linux。在OS X操作系统上,用户几乎肯定需要安装一个“USB转串口”的转换器驱动程序,否则不能识别。在Windows操作系统上,即使用户拥有并安装好所有必需的驱动程序,可能还需要运行一款名为GPSGate的软件,然后应用程序才能从这款GPS接收器中实时接收GPS信息。GPSGate之所以可以帮助应用软件和设备进行交互操作,是因为程序的作用是创建一个虚拟串口,然后将该GPS接收器所用的USB口或蓝牙口数据转到这个虚拟串口上,这样使用GPS数据的应用程序只需要同这个虚拟的串口进行通信就行了。

如果你还没有GPS接收器,并且正在寻找合适的GPS接收器,以便满足你想购置一套精良“战争驾驶”行头的念头,那么推荐使用GlobalSat公司的BU-353。这款GPS接收器的“USB转串口”接口使用的是Prolific公司的p12303芯片组,具有可靠的跨平台的支持特性(注意:Windows 8除外)。这种鼠标式GPS接收器还支持“广域增强系统”(Wide Area Augmentation System,WAAS [16] ),从而可以显著提高GPS坐标的准确度,大约35美元就可以买到。本书后面与GPS坐标有关内容基本上都是使用BU-353作为例子的。

2.Linux上的GPS

在Linux操作系统上,GPS接收器基本上就是一个串行设备。如果你有一个Garmin公司的USB接口GPS接收器,那么你就需要使用garmin_gps驱动程序。如果你的GPS接收器采用的是Prolific公司的pl2303芯片组的BU-353设备,那么在Linux操作系统上,该设备的驱动程序使用相同的名称。

如果你的GPS接收器不能正常工作,那么你需要卸载并重新加载“USB转串口”转换器的内核模块(kernel module)。这个操作可以通过下面的命令来完成。

假设上面的编译操作完成,那么在“/dev”目录中,应该会看到有某种“字符设备”(character device)了(例如“/dev/ttyUSB0”),这意味着,驱动程序已安装成功,之后就可以从该设备上读取到GPS设备的信息。

这个时候,即使你已顺利完成驱动程序的加载操作,并且设备也开始正常工作,但是其实你也只是保证了设备正常地接入到Linux操作系统中,要读取GPS信息,还需要有两步操作步骤。第一步是运行gpsd程序,该程序是一个GPS读取的守护进程,其作用是将GPS信息读取到内存中,而当有应用程序向它提出请求时,它又会把GPS信息给这个应用程序。这样做的优点很明显,那就是多个不同的应用程序都可以按各自的节奏随意向它请求当前的GPS信息。出于调试目的,你只需要运行“gpsd–D 2–n–N/dev/ttyUSB0”命令即可。如果系统开始按“国家海洋电子协会”的NMEA协议的格式的GPS提示信息开始滚动(由于数据太多,所以只能滚动显示),说明当前gpsd正处于良好状态。如果你仅仅是拿到GPS信息即可,那么gpsd的滚动信息就可以直接读到,但要结合具体的应用,就还需要运行执行上面提到两个操作步骤中的第二步,第二步操作就是运行使用GPS信息的应用程序,由于gpsd的存在,这些程序都可以独立地,不受任何影响地,各自同时从gpsd处获得当前的GPS信息。一个方便的实用工具名叫“cgps”(即curses gps)。在Linux的命令行中,不需要带任何参数,只要运行cgps,该程序就会自动连接到上面提到的gpsd运行实例上,并开始显示当前的所有GPS信息。

3.Windows上的GPS

在Windows 7操作系统中,“设备管理器”(Device Manager)会自动检测硬件的变动,并加载正确的驱动程序,以及给该驱动程序分配合适的串口(COM port)。不幸的是,即使在Windows 7上运行很好的驱动程序,在过渡到Windows 8之后,驱动程序中也明文规定禁用BU-353芯片。这个时候,Windows 8的用户(也许叫“受害者”更合适)要想使用这个芯片,只能安装一个旧版本的驱动程序,以便作为一个替代方案。在Windows 8中,BU-353驱动程序的主文件有两个,其中ser2pl.sys用于32位Windows 8中,ser2pl64.sys用于64位的Windows 8中。替代方案详细的方法在网上可以找到。图1-12显示了一个在64位Windows 8.1操作系统中BU-353驱动的详细信息,注意其中ser2pl64.sys的版本是一个较早的版本号3.3.2.102。

图1-12  64位Windows 8.1操作系统中BU-353驱动的详细信息

4.Macs上的GPS

默认情况下,对基于p12303芯片组的“USB转串口”转换器的驱动程序,OS X操作系统并没有提供过滤产品。但是在该芯片生产商Prolific公司(“旺玖科技”)的主页(http://www.prolific.com.tw/ )上可以很容易找到这样一条信息,那就是在安装p12303的驱动程序以后,插入BU-353设备,系统会创建一个新设备“/dev:”。

KisMAC知道如何与此设备进行通信。该程序是一款运行在OS X操作系统上流行的被动式扫描器名称。

[1] API,应用程序接口,是一个或一组功能函数,所有用户的程序直接调用就可以使用,而不必再去亲自编写。在Windows中,有数千个这样的API。——译者注

[2] 称其为“伟大的战争”并不夸张,“mac80211驱动框架”是一个无线驱动的框架,它提供了大量的API和规范,在这个框架下编写驱动程序能和其他驱动程序具有良好的共享性、兼容性(类似于Windows下的NDIS框架的作用)。一般来说,各家芯片厂商都会提供配套的驱动程序并提供更新支持。——译者注

[3] 由于英文单词free本身同时有“自由”和“免费”两个意思,所以有人常认为自由软件是免费的无偿使用,这其实并不是自由软件的实际意思,这里free的实际意思是该软件大家都是可以获得并直接使用的,而不需要再获得授权。虽然绝大多数自由软件是免费的,但也不排除有些自由软件是收费的;与自由软件相对应的是闭源软件,而闭源软件中也不乏免费的软件。非自由软件经常要在软件显著位置显示“copyright”(版权)一词。有趣的是,英文单词right同时有“右边”和“权利”两个意思。于是自由软件的倡导者为了和非自由软件中的copyright相对应,故意“将错就错”,根据英文中left表示“左”的意思,设计出一个新的单词copyleft,以表示“放弃版权”。——译者注

[4] Linux内核目前的开发模式是Linus Torvalds制作的新版本的发布,也被称为“vanilla”或“mainline”的内核,这意味着它们包含了主要的、通用的开发分支。——译者注

[5] 美国硅谷一家从事无线芯片组生产的公司,2011初被Qualcomm并购。——译者注

[6] SoC即System on Chip的缩写,一般称为“片上系统”。如果某个系统的所有运算、控制、存储、输入输出都可以明确定义出来,并且改动小、用量大,那就可以将整个系统做到一个芯片中,形成芯片级系统。——译者注

[7] PCIe全称PCI-Express,是由Intel公司在2001年提出的最新的总线和接口标准。——译者注

[8] FCC:Federal Communications Commission,即美国联邦通信委员会,进入美国市场的电子电器产品必须经过FCC的认证,该认证具有强制性,电子电器产品需拿到FCC认证证书才能顺利进入美国市场。FCC ID是指某一类通过FCC认证的产品的一个唯一标识号。——译者注

[9] 对这一点的理解,可以简单地认为灵敏度就是“判断在多弱的信号下,我们对对方发出的无线信号仍然能够收到并进行识别”。随着距离增大,信号越弱,该值越小,那么当灵敏度差的(即除去负号后的数字小的)识别(且不说能不能收到)不到信号的时候,灵敏度好的仍然可以识别到。对于无线黑客,这意味着你能够在离目标更远的距离发起无线攻击。——译者注

[10] 缆线连接器的作用是通过缆线将两个接口连接起来,起到物理接口类型转换和延长线的作用,俗称“小辫子”。“正式的”名称众多且不统一,容易引起误会,而“小辫子”虽为口语,但普遍都理解,所以后文采用此术语。——译者注

[11] 有些书喜欢用轮胎或游泳圈来形容,译者认为这两样东西对于“压扁”的程度过于夸张,另外这两样东西都是“空心”的,所以不太合适。——译者注

[12] PVC,全名为Polyvinylchlorid,主要成份为聚氯乙烯,PVC管本身没有单独使用的,主要用于对线缆的包装保护,因其良好的耐热性、韧性、延展性等优点而广受欢迎。——译者注

[13] 这是一个由can(易拉罐)和antenna(这里应该理解为天线的接收模块)合成的新词,特指家里手工制造的,在天线的头端,由金属罐(如易拉罐)连接而成的定向波导天线,借以增加收发范围。这也是Wi-Fi爱好者最常做的事。——译者注

[14] 根据书中的介绍,应该就是我国流行的无线上网卡。——译者注

[15] AT即Attention,AT指令集是从数据终端设备(Data Terminal Equipment,DTE)向数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的一组指令的集合,早期主要用于对Modem的操作,可以进行呼叫、短信、电话本、数据业务、传真等方面的控制。——译者注

[16] WAAS(Wide Area Augmentation System)是由美国联邦航空局开发建立的用于空中导航的一个系统,该系统主要是通过解决广域差分GPS的数据通信问题来提高全球定位系统的精度和可用性。——译者注