1.1 802.11标准简介

802.11标准定义的是一个数据链路层(link-layer)的无线协议,该标准由“美国电气和电子工程师协会”(Institute of Electrical and Electronics Engineers,IEEE)负责管理。许多人在听到802.11时,首先会想到Wi-Fi技术,实际上二者并不等同。Wi-Fi标准是802.11标准的一个子集,而且Wi-Fi标准是由“Wi-Fi联盟”(Wi-Fi Alliance)负责管理。因为802.11标准过于复杂,其标准的更新流程非常耗时间(具体的更新操作由IEEE下的一个委员会负责),所以几乎所有的主流无线设备制造商都觉得,他们需要一个小但灵活的组织来管理更合适,这样当他们通过市场的努力,需要进行技术推进时,该组织能在供应商之间进行维持、协调工作。Wi-Fi联盟由此产生。

在一个给定的功能集合上,Wi-Fi联盟可以确保所有具有Wi-Fi认证标志的产品都能一起工作。这样一来,如果802.11协议中出现任何两义性的概念时,Wi-Fi联盟会定义其中一项作为“正确的项”(right thing),然后要求所有Wi-Fi认证的产品按照“正确的项”去做。该联盟还允许供应商实现一些“草案标准”(指未经过批准的标准 [1] )的重要子集。草案标准中,最著名的例子就是“Wi-Fi保护访问”(Wi-Fi Protected Access,WPA)或叫作“802.11n草案标准”。

提示

网站

要想对上述内容有更多的了解,或者是想更细致入微地了解802.11标准,可参见本书的配套网站中的“Bonus Chapter 1”,网址是http://www.hackingexposedwireless.com/chapters/

1.1.1 基础知识

大多数人都知道,802.11是通过 AP接入点 [2] (AP,Access Point)将无线设备接入有线网络,但当设备处于ad-hoc [3] 模式或独立基本服务集 (Independent Basic Service Set,IBSS)模式时,802.11可以在没有接入点的前提下使用。因为ad-hoc网络本身就是一个开放的无线网络,所以一般我们并不关注无线安全,而当设备处于ad-hoc模式时,802.11协议中,各项技术细节改变很大,因而作为专讲无线安全的书,并不涉及ad-hoc模式。除非另有规定,否则这一节所包含内容都是指802.11运行在 无线接入点 ”模式 (Infrastructure Mode,即有AP的模式)。

802.11标准将所有的通信数据包分为三种类别:数据数据包、管理数据包、控制数据包,这些不同类别被统称为通信数据包类型 (packet type)。数据数据包的作用是负载更高层次的数据(如IP数据包)。管理数据包可能是攻击者最感兴趣的通信数据包,因为它控制网络的管理功能。控制数据包得名于“介质访问控制” (Media Access Control,MAC),用来干预访问共享介质。

任何给定通信数据包的类型都有许多不同的子类型。例如,信标帧 [4] (Beacons)和解除认证(Deauthentication)的通信数据包都是管理数据包的子类型,请求发送(Request to Send,RTS)和清除发送(Clear to Send,CTS)的通信数据包都是控制数据包的子类型。

1.1.2 802.11通信包的地址

与以太网的数据包有源地址、目的地址这两个地址不同的是,大多数802.11通信包有三个地址:源地址、目的地址和“基本服务集标识”(Basic Service Set ID,BSSID)。这个“基本服务集标识”项就是唯一标识某个AP接入点,以及该AP接入点所关联站点的集合,采用AP接入点的无线接口使用相同的MAC地址。这三个地址告诉通信数据包到哪去、谁发送的、经过哪个AP点。

然而,并不是所有的通信数据包都有三个地址。例如“确认帧” [5] (Acknowledgment frame)就不是这样,这是因为减少发送“控制帧”的开销非常重要,所以此类帧结构的bit位的个数也能减就减,一般保持最低的位数。另外,美国电气和电子工程师协会也使用不同的术语来描述“控制帧”的地址,如用“接收地址”(receiver address)来代替“目的地址”(destination address),用“发送地址”(transmitter address)来代替“源地址”(source address)。

图1-1显示的是通过Wireshark截包软件截获的一个典型的数据包。

图1-1 Wireshark软件截获的数据包

不要被Wireshark所定义的“接收地址”(即图1-1的Receiver)和“发送地址”(即图1-1的Transmitter)所迷惑。所有的802.11数据包都有三个地址(目的地址、源地址、“基本服务集标识”),而不是五个(目的地址、源地址、接收地址、发送地址、“基本服务集标识”)。Wireshark最近也开始允许将“源地址”作为“发送地址”,“目的地址”作为“接收地址”。这样可以使在各个工作控制帧和数据帧之间的过滤器(filter)有一个兼容的层 [6]

1.1.3 802.11安全启蒙

如果你正在读本书,那么可能已经意识到,在保护802.11网络成员中,有两个非常不同的加密技术:“有线等效保密协议”(Wired Equivalency Protocol,WEP)和“Wi-Fi保护访问”(Wi-Fi Protected Access,WPA)。其中的“有线等效保密协议”是早期版本,是一个相当脆弱的标准;“Wi-Fi保护访问”则更现代和有弹性。“有线等效保密协议”的网络一般使用静态的40位或104位公开密钥,事先参加传输的每一个客户端都知道所使用的密钥。密钥用于初始化一个基于RC4加密算法的流密码,恰恰这个RC4加密方式吸引了很多攻击者的兴趣,并实施了对“有线等效保密协议”的攻击,这些攻击方式会在第3章涉及。而“Wi-Fi保护访问”协议可以配置两个差距迥异的模式,即“预共享密钥”(Pre-Shared Key,PSK)模式和企业模式。下面分别对二者进行简要说明。

1.WPA的预共享密钥模式

“Wi-Fi保护访问下的预共享密钥”(WPA Pre-Shared Key,WPA-PSK)的工作方法和“有线等效保密协议”相似,都需要连接方提供密钥才能访问无线网络,不过,二者的相似点也仅限于此。图1-2显示了“Wi-Fi保护访问下的预共享密钥”的认证过程,这一过程被称为“四次握手” (four-way handshake)。

图1-2 一次成功的“四次握手”过程

“预共享的密钥”PSK(即密码)可以是8~63之间任意长度的可打印的ASCII码字符。使用“Wi-Fi保护访问”的加密算法依赖于“成对主密钥” (Pairwise Master Key,PMK),该PMK是由“预共享密钥”和“服务集标识”计算生成的。一旦客户端获得了PMK,客户端就会与AP接入点开始协商一个新的、临时的密钥,该密钥称为“成对临时密钥”(Pairwise Transient Key,PTK)。这些成对临时密钥PTK在每次客户端进行连接的时候被动态创建,在之后每次连接的时候进行定期更换。从编程的角度来看,PTK的生成可以看成是由5个参数组成的函数,其参数有:“成对主密钥”,一个随机数字(由AP接入点提供,称为A-nonce [7] ),另一个随机数(由客户端提供,称为S-nonce),以及客户端与AP接入点各自的MAC地址。PTK的生成之所以需要这么多的变量,究其原因是为了使每次创建的PTK值都独一无二,不会重复。

AP接入点通过在认证交换时检查“信息完整性检查码”(Message Integrity Code,MIC)字段,来验证客户端是否真的有“成对主密钥”。“信息完整性检查码”是一个数据包的加密散列函数(hash function),该函数是由PTK和PMK混合而成,主要用于防止篡改和核实客户端具有这个主密钥。如果“信息完整性检查码”是不正确的,这就意味着“临时密钥”和“成对主密钥”是不正确的,因为“临时密钥”是从“成对主密钥”中推算出来的。

攻击“Wi-Fi保护访问”算法时,我们最感兴趣的当然是还原正确的“成对主密钥”。如果网络设置在“预共享密钥”模式下,则允许你“读取”所有其他客户端所传输的数据包中所包含的“成对主密钥”,并验证自己是否成功。当然,这里的“读取”实际上就是嗅探监听,要使用一些手段才行。

同传统的“有线等效保密协议”部署一样,“Wi-Fi保护访问下的预共享密钥”也有很多类似的使用案例,但即使如此,“Wi-Fi保护访问下的预共享密钥”仍然也仅能用于家庭或小型办公室环境中。由于“预共享密钥”的使用需要连接到网络,所以主密钥是一个全网共享的数据,这意味着在一个使用“Wi-Fi保护访问下的预共享密钥”加密网络的大公司中,有员工离开公司,或该公司的一个网络设备被盗,这就意味着“成对主密钥”被公开。要想系统不受攻击,则整个网络必须重新配置一个新的“成对主密钥”。在“Wi-Fi保护访问”的算法中,与上述预共享密钥模式相反,“WPA企业模式”并不需要全网使用同一个“成对主密钥”,而是可以提供多个单独认证,这意味着对可以连接到无线网络的客户端有更大的控制权,因此在大多数大型企业中被广泛使用。

一花多名:WPA,WPA2,802.11i和802.11-2007 [8]

聪明的读者可能已经注意到,我们前面已提出了“Wi-Fi保护访问”WPA。如前所述,WPA是Wi-Fi的通信标准,而Wi-Fi属于“Wi-Fi联盟”,802.11属于“美国电气和电子工程师协会”,所以,“Wi-Fi保护访问”是802.11i的子集,但在802.11i未被批准前,WPA也还只是一个由Wi-Fi联盟创造的临时解决办法。在802.11i被批准以后,“Wi-Fi保护访问”就被合并到最新的802.11标准中了。从技术上讲,大多数路由器和客户端,除了实现802.11i的功能之外,还实现了802.11-2007标准中增强的安全性功能,因此,如果我们不拘泥于版本之间的细节差异,可以把802.11-2007啰嗦地解释为“对于以前称为“Wi-Fi保护访问”或称为802.11i的加密标准,802.11-2007是其改进版”,在本书中,我们将继续使用“Wi-Fi保护访问”WPA这一术语。

2.WPA的企业模式

在一个基于WPA认证的网络中,一旦我们证实了该网络是运行在“WPA企业模式”下,那么网络中每个用户每次主动连接时,“成对主密钥”都会被动态地创建。也就是说,即使我们拿到了该用户的PMK,也只能模仿这一个用户的指定连接。

在“WPA企业模式”中,“成对主密钥”是在“认证服务器”(authentication server)上产生,然后下发到客户端的。AP接入点和认证服务器是通过一个称为RADIUS的协议(Remote Authentication Dial In User Service,远程用户拨号认证协议)进行对话的 [9] 。认证服务器和客户端的信息交流使用AP接入点作为其中继节点。当认证服务器做出最终决定接受或拒绝客户端用户时,AP接入点则会忠实地听从认证服务器的决定,实施同样的接受或拒绝操作。因为AP接入点只是充当一个中继节点,所以在客户端通过认证服务器的认证之前,它只是认真地将客户端的认证传给认证服务器,而只有客户端通过认证后,AP接入点才开始传送客户端正常的数据包。

如果认证成功,客户端和认证服务器都将获得相同的“成对主密钥”。“成对主密钥”如何创建的细节根据验证类型的不同而有所不同,但重要的是,它是一个加密的强随机数,两端都可以计算。然后,验证服务器就告诉AP接入点,可以允许用户建立连接了,但同时让用户在向AP接入点建立连接的时候发送该“成对主密钥”,以便AP接入点识别。因为这时的“成对主密钥”是动态创建的,每个用户的“成对主密钥”一般是不同的,所以AP接入点必须记住哪个“成对主密钥”对应哪个客户端用户。一旦所有AP接入点和所有客户端都有“成对主密钥”,那么各AP接入点和各客户端之间就可以像图1-2中所显示的一样,进行连接时所需的“四次握手”操作。这一过程用于确认客户端用户和AP接入点都有正确的“成对主密钥”,并能正常通信。图1-3显示了基于企业模式的整个认证过程。

3.EAP和802.1X

你可能注意到图1-3中许多通信的数据包前有EAP标识。EAP表示“扩展认证协议” (Extensible Authentication Protocol)。EAP基本上是一种携带任意其他认证协议的协议,所以可以说是一种认证的“元协议”(meta-protocol)。EAP允许设备(如AP接入点)忽略具体的认证协议细节。

图1-3 基于企业模式的“Wi-Fi保护访问”认证

IEEE 802.1x协议的设计本来是为了在有线局域网上认证用户的。借助EAP,802.1X就可以实现认证,而“Wi-Fi保护访问”又使用802.1X。当客户端向AP发送认证包时,双方使用了“局域网上的EAP协议”(EAP over LAN,简称EAPOL),该协议也是802.1X协议组中规定的一个标准协议。当AP和认证服务器进行通信时,又会在RADIUS协议的数据包外再包上一个EAP的认证数据包。

在“WPA企业模式”下,所有的AP接入点所做的事情,就是在客户端和认证服务器(例如RADIUS服务器)之间来回传送EAP信息。并且,AP接入点其实所期待的,也就是RADIUS服务器及时地让它知道是否允许某个用户进入本系统中。而是否允许进入,是通过寻找“EAP成功”的消息,或者是“EAP失败”的消息来判断的。

正如你可能已经猜到的那样,还真有几个不同的认证技术是基于EAP实现的。比如其中最受欢迎的:“基于传输层安全的扩展认证协议”EAP-TLS(certificate-based authentication,基于证书的认证协议)和“受保护的扩展认证协议”(Protected Extensible Authentication Protocol,PEAP)。有关这两个协议的细节,以及怎么样攻击它们等内容,具体参见第4章。

一般而言,理解802.1X在哪里结束,EAP/EAPOL在哪里开始,以及RADIUS服务器在哪里开始起作用并不重要。重要的是必须知道,当使用企业模式进行认证时,客户端和认证服务器互相传送特定格式的认证数据包。所以,AP接入点必须来回地代理双方互通的信息,直到认证服务器告诉AP接入点是停止还是允许客户端访问。图1-4显示了各个数据包的协议栈,如前所述,由于每次认证数据包都由多层协议共同完成,各层协议各司其职,完成所负责的功能。对于在以太网中实施802.1X端口安全管理的网络管理员来说,这个图看起来应该很熟悉。如果将一个基于802.1x的软硬件交换机替换掉图中的AP接入点,效果是完全相同的。

图1-4 各数据包的协议栈

[1] 802.11n标准在2009年获得IEEE的正式批准,而Wi-Fi联盟在2007年就发布了《802.11n技术白皮书》,所以Wi-Fi的很多早于IEEE的标准,在当时只能称为“草案”。——译者注

[2] 对于AP接入点,大家可以将其简单地理解为家里或单位里的无线路由器,这样有助于理解后面的内容。——译者注

[3] ad-hoc模式是一种无线自组模式,每一个设备节点除了具有通信功能之外,还具有路由功能,所以在这种模式下,任何两个节点间可直接通信或通过第三方节点进行通信,而不需要固定的路由设置,也叫作“点对点模式”,主要应用于军队或地下、野外等不能或不值得架固定通信设施的特殊环境施工环境。在本书第13、14两章中频繁出现的mesh网,是ad-hoc网络的一个升级版。在这两种网络中,数据在两个相邻设备之间传输的动作称为“跳”(hop)。——译者注

[4] 无线设备中,定时依次按指定间隔发送的有规律的无线信号,主要用于定位和同步使用。——译者注

[5] 帧在本书,乃至于整个计算机领域,都有两层意思,一个是数据链路层上一个完整的数据包的单位,这一帧数据到了网络层原则上会变成一个数据包,但没有绝对关系。还有一层是应用层的,比如一个浏览器浏览的页面或一整屏幕的数据,也称为一帧数据,这个通常都是由一个或多个数据包组成。另外,在很多不使用IP进行传输的网络里,只有“帧”,没有“包”的概述。在本书中混用了两种帧,将帧与数据包等同并混用,所以这里也沿用了这种混用的风格,将三个概念混用,基本上不会影响对内容的理解。——译者注

[6] Wireshark中,每一个对包操作的对象都叫“过滤器”。对于控制命令,通常有一个发送的,一个接收(并执行的)的,故习惯使用“发送地址”和“接收地址”;而数据,则是由一个地方到另一个地方,所以常用“源地址”和“目的地址”。——译者注

[7] 凡是以nonce命名的随机数,一般都表示一个与时间有关的随机数,其作用一般有两种:一种是由于该值一直处于变化状态,所以引用该机制的随机数也一直处于变化状态,接收方如果连续收到很多该数不变的包,则可以认为自己受到了“重播攻击”;二是在时钟同步的系统中,发送方在某一时刻发送一个带有该时刻值的数据包,该数据包经过网络到达接收方以后,接收方可以将该包中的时刻与自己本地的时刻进行比较,如果发送方的时间靠前,且相差不多,则为正常,否则也可以认定对方是在用随机数攻击自己。——译者注

[8] 除了原书作者所提的各点之外,还有WPA和WPA2除了是无线通信标准之外,还是该标准的一种实现。另外,文中没有提WPA2,WPA2很显然是WPA的升级版。IEEE的标准格式中,带年代的标准通常是几个标准的合集,所以确切地说802.11-2007中,与802.11i的对应部分才与802.11i是一花多名。——译者注

[9] 所以后面也称认证服务器为RADIUS服务器。——译者注