分析WiFi网络数据包
一次性付费进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:460500587
微信公众号:计算机与网络安全
ID:Computer-network
当捕获一定的包后,需要进行分析才能够获取到有用的信息。本文介绍使用Wireshark工具分析捕获的数据包。
一、Wireshark简介
Wireshark是一款非常不错的网络封包分析软件。该软件可以截取网络封包,并且可以尽可能显示出最为详细的网络封包资料。在Wireshark工具中,可以通过设置捕获过滤器、显示过滤器,以及导出数据包等方法,对包进行更细致的分析。在使用Wireshark之前,首先介绍它的使用方法。
1、捕获过滤器
使用Wireshark的默认设置捕获数据包时,将会产生大量的冗余信息,这样会导致用户很难找出对自己有用的部分。刚好在Wireshark中,提供了捕获过滤器功能。当用户在捕获数据包之前,可以根据自己的需求来设置捕获过滤器。下面介绍Wireshark捕获过滤器的使用方法。
在使用捕获过滤器之前,首先了解它的语法格式。如下所示。
Protocol Direction Host(s) Value Logical Operations Other expression
以上语法中各选项含义介绍如下。
● Protocol(协议):该选项用来指定协议。可使用的值有ether、fddi、ip、arp、rarp、decnet、lat、sca、moproc、mopdl、tcp和udp。如果没有特别指明是什么协议,则默认使用所有支持的协议。
● Direction(方向):该选项用来指定来源或目的地,默认使用src or dst作为关键字。该选项可使用的值有src、dst、src and dst和src or dst。
● Host(s):指定主机地址。如果没有指定,默认使用host关键字。可能使用的值有net、port、host和portrange。
● Logical Operations(逻辑运算):该选项用来指定逻辑运算符。可能使用的值有not、and和or。其中,not(否)具有最高的优先级;or(或)和and(与)具有相同的优先级,运算时从左至右进行。
了解Wireshark捕获过滤器的语法后,就可以指定捕获过滤器了。设置捕获过滤器的具体步骤如下所述。
(1)启动Wireshark。在图形界面依次选择“应用程序”|Kali Linux|Top 10 Security Tools|wireshark命令,将显示如图1所示的界面。
图1 Wireshark主界面
(2)该界面是Wireshark的主界面,在该界面选择捕获接口,即可开始捕获数据包。如果用户使用超级用户root启动Wireshark工具的话,将弹出如图2所示的界面。
图2 警告信息
如果使用的Wireshark工具不支持Lua扩展语言,将不会弹出该警告信息。
(3)该界面是一个警告信息,提示在init.lua文件中使用dofile函数禁用了使用超级用户运行Wireshark。这是因为Wireshark工具是使用Lua语言编写的,并且在Kali Linux中的init.lua文件中有一处语法错误,所以在该界面会提示Lua:Error during loading:。只需要将init.lua文件中倒数第二行修改一下就可以了,原文件的倒数两行内容如下:
root@kali:~# vi /usr/share/wireshark/init.lua
dofile(DATA_DIR.."console.lua")
--dofile(DATA_DIR.."dtd_gen.lua")
将以上第一行修改为如下内容:
--dofile(DATA_DIR.."console.lua")
--dofile(DATA_DIR.."dtd_gen.lua")
修改完该内容后,再次运行Wireshark将不会提示以上警告信息。但是,如果是以超级用户root运行的话,会出现如图3所示的界面。
图3 超级用户运行Wireshark
(4)该界面显示了当前系统使用超级root用户启动Wireshark工具,可能有一些危险。如果是普通用户运行的话,将不会出现该界面显示的信息。该提示信息是不会影响当前系统运行Wireshark工具的。这里单击“确定”按钮,将成功启动Wireshark工具,如图1所示。如果不想每次启动时都弹出该提示信息,可以勾选Don't show this again前面的复选框,然后再单击“确定”按钮。
(5)在该界面的工具栏中依次选择Capture|Options命令,将打开如图4所示的界面。
图4 添加过滤条件
(6)在该界面Capture Filter对应的文本框中添加捕获过滤条件,如捕获来自/到达主机192.168.6.102的数据包,其语法格式为host 192.168.6.102。在Capture下面的下拉框中选择捕获接口,在Capture Files下面文本框中可以指定捕获文件保存的位置及捕获文件名(host.pcapng),如图4所示。然后单击Start按钮,将开始捕获数据包,如图5所示。
图5 捕获的数据包
(7)从该界面捕获的数据包中,可以看到源或目标地址都是主机192.168.6.102的包。当捕获一定的数据包后,单击
当使用关键字作为值时,需使用反斜杠\。如ether proto \ ip(与关键字ip相同),这样将会以IP协议作为目标。也可以在ip后面使用multicast及broadcast关键字。想排除广播请求时,no broadcast非常有用。
在图4中只能添加Wireshark默认定义好的捕获过滤器。如果指定的捕获过滤器不存在的话,也可以手动添加。在Wireshark的工具栏中依次选择Capture|Capture Filters命令,将显示如图6所示的界面。
图6 自定义捕获过滤器
从该界面可以看到Wireshark默认定义的所有捕获过滤器。如果要新建捕获过滤器,在该界面单击“新建”按钮,默认的过滤器名称和过滤字符串都为new,如图6所示。此时可以修改默认的名称,然后单击“确定”按钮即可添加定义的过滤器。
2、显示过滤器
通常经过捕获过滤器过滤后的数据还是很复杂。此时可以使用显示过滤器进行过滤,并且可以更加细致地查找。它的功能比捕获过滤器更为强大,在想修改过滤器条件时,也不需要重新捕获一次。显示过滤器的语法格式如下所示。
Protocol String1 String2 Comparison operator Value Logical Operations Other expression
以上各选项的含义介绍如下。
● Protocol(协议):该选项用来指定协议。该选项可以使用位于OSI模型第2层~7层的协议。在Wireshark主界面的Filter文本框后面,单击Expression按钮,可以看到所有可用的协议,如图7所示。
图7 Wireshark支持的协议
或者在工具栏中依次选择Internals|Supported Protocols命令,将显示如图8所示的界面。
图8 支持的协议
● String1,String2(可选项):协议的子类。单击相关父类旁的+号,然后选择其子类,如图9所示。
图9 子类
● Comparison operators:指定比较运算符。可以使用6种比较运算符,如表1所示。
表1 比较运算符
● Logical expressions:指定逻辑运算符。可以使用4种逻辑运算符,如表2所示。
表2 逻辑运算符
现在就可以通过指定过滤条件,实现显示过滤器的作用。该过滤条件在Wireshark界面的Filter文本框中输入,如图10所示。
图10 指定过滤条件
从该界面可以看到,输入过滤条件后,表达式的背景颜色呈浅绿色。如果过滤器的语法错误,背景色则呈粉红色,如图11所示。
图11 表达式错误
使用显示过滤器可以分为以下几类。下面分别举几个例子,如下所述。
(1)IP过滤
IP过滤包括来源IP或者目标IP等于某个IP。
显示来源IP:ip.src addr == 192.168.5.9 or ip.src addr eq 192.168.5.9
显示目标IP:ip.dst addr == 192.168.5.9 or ip.dst addr eq 192.168.5.9
(2)端口过滤
显示来源或目标端口,tcp.port eq 80。
只显示TCP协议的目标端口80,tcp.dstport == 80。
只显示TCP协议的来源端口80,tcp.srcport == 80。
过滤端口范围,tcp.port >= 1 and tcp.port <= 80。
(3)协议过滤
udp、arp、icmp、http、smtp、ftp、dns、msnms、ip、ssl等。
排除ssl包,!ssl或者not ssl。
(4)包长度过滤
udp.length == 26:这个长度表示udp本身固定长度8加上udp下面那块数据包之和。
tcp.len >= 7:表示IP数据包(TCP下面那块数据),不包括TCP本身。
ip.len == 94:表示除了以太网头固定长度14,其他都是ip.len,即从IP本身到最后。
frame.len == 119:表示整个数据包长度,从eth开始到最后(eth -->ip or arp-->tcp or udp-->data)。
(5)http模式过滤
http模式包括GET、POST和响应包。
指定GET包,如下所示。
http.request.method == "GET" && http contains "Host:"
http.request.method == "GET" && http contains "User-Agent:"
指定POST包,如下所示。
http.request.method == "POST" && http contains "Host:"
http.request.method == "POST" && http contains "User-Agent:"
指定响应包,如下所示。
http contains "HTTP/1.1 200 OK" && http contains "Content-Type:"
http contains "HTTP/1.0 200 OK" && http contains "Content-Type:"
(6)连接符and/or
指定显示tcp和udp协议的数据包,如下所示。
tcp and udp
(7)表达式
指定源ARP不等于192.168.1.1,并且目标不等于192.168.1.243,如下所示。
!(arp.src==192.168.1.1) and !(arp.dst.proto_ipv4==192.168.1.243)
显示过滤器和捕获过滤器一样,也可以添加自定义的过滤条件。在Wireshark的工具栏中依次单击Analyze|Display Filters命令,将显示如图12所示的界面。
图12 Display Filter
该界面和添加捕获过滤器的界面类似。添加显示过滤器和添加捕捉过滤器的方法基本一样,唯一不同的是,在定义显示过滤器时,可以选择表达式。设置完后,单击“确定”按钮,自定义的过滤器将被添加。
3、数据包导出
数据包导出,就是将原捕获文件中的数据包导出到一个新捕获文件中。例如,对数据包进行过滤后,为方便下次直接分析,这时候就可以将过滤后的数据包导出到一个新的捕获文件中。在导出包时,可以选择保存捕获包、显示包、标记包或指定范围的包。下面介绍在Wireshark中,将数据包导出的方法。
在前面捕获了一个名为host.pcapng捕获文件,下面以该捕获文件为例,介绍如何将数据包导出。具体操作步骤如下所述。
(1)打开host.pcapng捕获文件,如图13所示。
图13 host.pcapng捕获文件
(2)该界面显示了host.pcapng捕获文件中的所有包。可以对这些包显示过滤、着色或标记等。例如,过滤ICMP协议的包,并将过滤的结果导出到一个新文件中,可以在显示过滤器文本框中输入icmp显示过滤器,然后单击Apply按钮,如图14所示。
图14 使用icmp显示过滤器
(3)在该界面单击Apply按钮,将显示如图15所示的界面。
图15 显示过滤后的包
(4)从该界面可以看到,在包列表面板中,Protocol列都显示的是ICMP协议的包,并且从状态栏中也可以看到仅过滤显示出了6个包。如果想对某个包进行着色或者标记的话,可以选择要操作的包,然后单击右键,将弹出一个菜单栏,如图16所示。
图16 菜单栏
(5)在该界面可以选择标记包、忽略包、添加包注释和着色等。例如对包进行着色,在该界面选择Colorize Conversation命令,在该命令后面将显示着色的协议及选择的颜色,如图17所示。
图17 选择着色颜色
(6)从该界面可以看到,Wireshark工具提供了10种颜色。用户可以选择任意一种,也可以自己定义颜色规则。例如这里选择使用Color4颜色,将显示如图18所示的界面。
图18 高亮着色
(7)从该界面可以看到,包的颜色被着色为紫色。接下来就可以实现将数据包导出了,如将显示过滤的ICMP包导出到一个新的捕获文件中,可以在该界面的工具栏中依次选择File|Export Specified Packets命令,将打开如图19所示的界面。
图19 导出指定的包
(8)在该界面可以选择导出所有显示(捕获)包、仅选择的显示(捕获)包、仅标记的显示(捕获)包、从第一个到最后一个标记的显示(捕获)包,以及指定一个显示(捕获)包范围。在该界面选择导出所有显示(Displayed)包,并设置新的捕获文件名为icmp.pcapng,然后单击Save按钮,显示过滤出的包将被导出到icmp.pcapng捕获文件。
(9)这时候如果想分析显示过滤出的所有ICMP包时,就可以直接打开icmp.pcapng捕获文件,如图20所示。
图20 icmp.pcapng捕获文件
(10)该界面显示的包就是导出的所有ICMP包,从该界面显示的包可以看到,导出包的编号都已重新排列。这就是导出包的详细过程。
4、在Packet List面板增加无线专用列
Wireshark通常在Packet List面板中,显示了7个不同的列。为了更好地分析无线数据包,在分析包前增加3个新列。如下所示。
● RSSI(for Received Signal Strength Indication)列,显示捕获数据包的射频信号强度。
● TX Rate(for Transmission Rate)列,显示捕获数据包的数据率。
● Frequency/Channel列,显示捕获数据包的频率和信道。
当处理无线连接时,这些提示信息将会非常有用。例如,即使无线客户端软件告诉您信号强度很棒,捕获数据包并检查这些列,也许会得到与之前结果不符的数字。下面介绍如何在Wireshark中添加这些列。
在Wireshark Packet List面板中添加列。具体操作步骤如下所述。
(1)在Wireshark主界面的工具栏中依次选择Edit|Preferences命令,将打开如图21所示的界面。
图21 首选项界面
(2)在该界面左侧栏中选择Columns选项,将看到如图22所示的界面。
图22 默认的列
(3)从该界面右侧栏中可以看到默认的列标题。在该界面单击“添加”按钮,将Title修改为RSSI,然后在字段类型下拉列表中选择IEEE 802.11 RSSI,如图23所示。
图23 添加RSSI列
(4)重复以上步骤,添加TX Rate和Frequency/Channel列。在添加时,为它们设置一个恰当的Title值,并在Field type下拉列表选择IEEE 802.11 TX Rage和Channel/Frequency。添加3列之后,Preferences窗口显示界面如图24所示。
图24 在Packet List面板增加的列
(5)在该界面依次单击“应用”|“确定”按钮,使添加的列生效。此时在Wireshark的Packet List面板中可以看到添加的列,如图25所示。
图25 新增的列
(6)从该界面可以看到,在Packet List面板中显示了前面添加的3列。如果没有看到新增加列的话,可能它们被隐藏了。可以再次打开首选项窗口,查看添加的列是否被显示,即isplayed列的复选框是否被勾选,如果没有勾选的话,说明该列是隐藏的。这时勾选此复选框,然后单击“确定”按钮即可。也可以单击Packet List面板中的列,在弹出的菜单栏中选择显示列,如图26所示。
图26 选择显示隐藏列
(7)在该界面选择Displayed Columns命令,将会显示所有列的一个菜单栏,如图26所示。其中,列名称前面有对勾的表示该列被显示,否则为隐藏列。本例中RSSI(IEEE 802.11 RSSI)列是隐藏的,这里选择上该列后,即可显示在Packet List面板的列中。
二、使用Wireshark
对Wireshark有一个简单的认识后,就可以使用它并发挥其功能。下面介绍使用Wireshark对一些特定的包进行过滤并分析。
1、802.11数据包结构
无线数据包与有线数据包的主要不同在于额外的802.11头部。这是一个第二层的头部,包含与数据包和传输介质有关的额外信息。802.11数据包有3种类型。
● 管理帧:这些数据包用于在主机之间建立第二层的连接。管理数据包还有些重要的子类型,常见的子类型如表3所示。
表3 管理帧
● 控制帧:控制数据包允许管理数据包和数据包的发送,并与拥塞管理有关。常见的子类型如表4所示。
表4 控制帧
● 数据帧:这些数据包含真正的数据,也是唯一可以从无线网络转发到有线网络的数据包。常见的子类型如表5所示。
表5 数据帧
一个无线数据包的类型和子类型决定了它的结构,因此各种可能的数据包结构不计其数。这里介绍其中一种结构,beacon的管理数据包的例子。
下面通过Wireshark工具捕获一个所有无线信号的捕获文件,其文件名为802.11beacon.pcapng。然后通过分析该捕获文件,介绍beacon的管理数据包。具体操作步骤如下所述。
(1)启动Wireshark工具。
(2)选择监听接口mon0开始捕获文件,捕获到的包如图27所示。
图27 捕获到的数据包
(3)该界面就是捕获到的所有数据包,这里捕获到的包文件名为802.11beacon.pcapng。这里以第一个数据包为例(该包包含一种叫beacon的管理数据包),分析802.11数据包结构,其中包详细信息如图28所示。
图28 第一个包的详细信息
(4)beacon是包括很多信息量的无线数据包之一。它作为一个广播数据包,由WAP发送,穿过无线信道通知所有无线客户端存在这个可用的WAP,并定义了连接它必须设置的一些参数。在图28中可以看到,该数据包在802.11头部的Type/Subtype域被定义为beacon(编号1)。在802.11管理帧头部发现了其他信息,包括以下内容。
● Timestamp:发送数据包的时间戳。
● Beacon Interval:beacon数据包重传间隔。
● Capabilities Information:WAP的硬件容量信息。
● SSID Parameter Set:WAP广播的SSID(网络名称)。
● Supported Rates:WAP支持的数据传输率。
● DS Parameter set:WAP广播使用的信道。
这个头部也包含了来源、目的地址,以及厂商信息。在这些知识的基础上,可以了解到本例中发送beacon的WAP的很多信息。例如,设备为TP-Link(编号2),使用802.11b标准B(编号3),工作在信道1上(编号4)。
虽然802.11管理数据包的具体内容和用途不一样,但总体结构与该例相差不大。
2、分析特定BSSID包
BSSID,一种特殊的Ad-hoc LAN的应用,也称为Basic Service Set(BSS,基本服务集)。实际上,BSSID就是AP的Mac地址。当使用Wireshark工具捕获数据包时,在捕获文件中可能会捕获到很多个BSSID的包。这时候就可以根据过滤BSSID来缩小分析包的范围,这样就可以具体分析一个AP的相关数据包。下面介绍分析特定BSSID包的方法。
从捕获文件中过滤特定BSSID包,并进行分析。具体操作步骤如下所述。
(1)在分析包之前,需要先有一个捕获文件供分析。所以,这里首先捕获一个捕获文件,其名称为802.11.pcapng,如图29所示。
图29 802.11.pcapng捕获文件
(2)该界面显示了802.11.pcapng捕获文件中捕获到的所有数据包。在该界面可以看到,捕获的数据包中源地址都不同。这里选择过滤Mac地址为8c:21:0a:44:09:f8的AP,输入的显示过滤器表达式为wlan.bssid eq 8c:21:0a:44:09:f8。然后单击Apply按钮,将显示如图30所示的界面。
图30 匹配过滤器的数据包
(3)从该界面可以看到,显示的包都是地址为8c:21:0a:44:09:f8(源或目标)的包。接下来就可以分析每个包的详细信息,进而从中获取到重要的信息,如信道、SSID和频率等。
3、分析特定的包类型
802.11协议的类型有很多,通常根据这些类型和子类型可以过滤特定类型的包。对于特定类型,可以用过滤器wlan.fc.type来实现。对于特定类型或子类型的组合,可以用过滤器wc.fc.type_subtype来实现。下面介绍如何分析特定的包类型。
802.11数据包类型和子类型,常用的语法格式如表6所示。
表6 无线类型/子类型及相关过滤器语法
在表6中列出了常用的一些帧类型/子类型的语法。了解各种类型的过滤语法格式后,就可以对特定的包类型进行过滤了。例如,过滤802.11.pcapng捕获文件中认证类型的数据包,使用的显示过滤器语法为wlan.fc.type_subtype eq 0x0B。在802.11.pcapng捕获文件中使用该显示过滤器后,将显示如图31所示的界面。
图31 过滤出的认证包
从Wireshark的状态栏中可以看到,有两个包匹配wlan.fc.type_subtype eq 0x0B过滤器。
4、分析特定频率的包
每个信道工作的中心频率是不同的。可以使用显示过滤器过滤特定频率的包。过滤特定频率的包,可以使用radiotap.channel.freq语法来实现。下面介绍如何分析特定频率的包。
为了方便查找每个信道对应的中心频率值,下面以表格的形式列出,如表7所示。
表7 802.11无线信道和频率
从802.11.pcapng捕获文件中,过滤工作在信道6上的流量,使用的过滤器语法为radiotap.channel.freq==2437。输入该显示过滤器后,单击Apply按钮,将显示如图32所示的界面。
图32 工作在信道6上的数据
从Wireshark的状态栏中,可以看到有3个包工作在信道6上。
三、分析无线AP认证包
在AP中通常使用的加密方式有两种,分别是WEP和WPA。WEP是最早使用的一种加密方式,由于该加密方法存在弱点,所以产生了WPA加密方式。不管是WEP加密还是WPA,如果要和AP建立一个连接,就必须要经过认证(Authentic)和关联(Association)的过程。下面介绍如何分析无线AP认证包。
1、分析WEP认证包
WEP(Wired Equivalent Privacy,有线等效保密)协议,该协议是对两台设备间无线传输的数据进行加密的方式,用以防止非法用户窃听或侵入无线网络。下面分别分析WEP认证成功和失败的包信息。
(1)成功的WEP认证
在分析成功的WEP认证之前,首先要配置一个使用WEP加密的AP,并且捕获该AP的相关数据包。下面以TP-LINK路由器为例来配置AP,其ESSID名称为Test。具体配置方法如下所述。
1)登录TP-LINK路由器。在浏览器中输入路由器的IP地址,然后将弹出一个对话框,要求输入登录路由器的用户名和密码。
2)登录成功后,将显示如图33所示的界面。
图33 路由器的主界面
3)在该界面的左侧栏中依次选择“无线设置”|“无线安全设置”命令,将显示如图34所示的界面。
图34 设置加密方式
4)在该界面选择WEP加密方式,然后设置认证类型及密钥,如图34所示。使用WEP加密时,有两种认证类型,分别是“开放系统”和“共享密钥”。其中,“开放系统”表示即使客户端输入的密码是错误的,也能连接上AP,但是无法传输数据;“共享密钥”表示如果要想和AP建立连接,必须要经过四次握手(认证)的过程。所以,本例中设置认证类型为“共享密钥”。
5)将以上信息配置完成后,单击“保存”按钮。此时,将会提示需要重新启动路由器,如图35所示。这里必须重新启动路由器,才会使修改的配置生效。
图35 重启路由器
6)在该界面单击“重启”命令,将会自动重新启动路由器。重新启动路由器后,所有的设置即可生效。接下来,就可以使用客户端连接该AP。
通过以上步骤的详细介绍,一个使用WEP加密的AP就配置好了。下面使用Wireshark工具指定捕获过滤器,仅捕获与该AP(Mac地址为8C-21-0A-44-09-F8)相关的数据包。具体操作步骤如下所述。
1)启动Wireshark工具。
2)在Wireshark主界面的工具栏中依次选择Capture|Options命令,将显示如图36所示的界面。
图36 设置捕获过滤器
3)在该界面选择捕获接口mon0(监听模式),并使用ether host设置了捕获过滤器。这里将捕获的数据包保存到WEPauth.pcapng捕获文件中,然后单击Start按钮将开始捕获数据包,如图37所示。
图37 捕获的数据包
4)从该界面可以看到,所有包的都是发送/到达地址为8C-21-0A-44-09-F8主机的。在该界面显示的这些包,是AP向整个无线网络中广播自己的ESSID的包。此时,如果要捕获到WEP认证相关的包,则需要有客户端连接该AP。这里使用一个移动设备连接该AP,其Mac地址为00-13-EF-90-35-20。
5)当移动设备成功连接到该AP后,返回到Wireshark捕获包界面,将会在Info列看到有Authentication的相关信息。如果捕获到的包过多时,可以使用显示过滤器仅过滤认证类型的包。显示过滤结果如图38所示。
图38 认证的包
6)在该界面显示了52~55帧就是客户端与AP建立连接的过程(四次握手)。下面分别详细分析每一个包。如下所述。
第一次握手:客户端发送认证请求给AP,详细信息如下所示。
Frame 52: 48 bytes on wire (384 bits), 48 bytes captured (384 bits) on interface 0
Radiotap Header v0, Length 18
IEEE 802.11 Authentication, Flags: ........ #帧类型
Type/Subtype: Authentication (0x0b) #帧类型为Authentication
Frame Control Field: 0xb000 #帧控制字段
.000 0001 0011 1010 = Duration: 314 microseconds #时间戳
Receiver address: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #接收者地址(RA)
Destination address: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #目标地址(DA)
Transmitter address: KingjonD_90:35:20 (00:13:ef:90:35:20) #发送者地址(TA)
Source address: KingjonD_90:35:20 (00:13:ef:90:35:20) #源地址(SA)
BSS Id: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #AP的MAC地址
Fragment number: 0 #片段号
Sequence number: 56 #序列号
IEEE 802.11 wireless LAN management frame #802.11管理帧
Fixed parameters (6 bytes) #固定的参数,其大小为6个字节
Authentication Algorithm: Shared key (1) #认证类型,这里是共享密钥(1)
Authentication SEQ: 0x0001 #认证序列号
Status code: Successful (0x0000) #状态码
根据对以上信息的详细分析可以看到,是客户端(00:13:ef:90:35:20)发送给AP(8c:21:0a:44:09:f8)的请求包,AP使用的认证类型为“共享密钥”,认证序列号为0x0001(第一次握手)。
第二次握手:AP收到请求后,发送一个认证响应帧,里面包含一个128字节的随机数列。具体详细信息如下所示。
Frame 53: 178 bytes on wire (1424 bits), 178 bytes captured (1424 bits) on interface 0
Radiotap Header v0, Length 18
IEEE 802.11 Authentication, Flags: ........ #帧类型
Type/Subtype: Authentication (0x0b) #帧类型为Authentication
Frame Control Field: 0xb000 #帧控制字段
.000 0001 0011 1010 = Duration: 314 microseconds #时间戳
Receiver address: KingjonD_90:35:20 (00:13:ef:90:35:20) #接收者地址(RA)
Destination address: KingjonD_90:35:20 (00:13:ef:90:35:20) #目的地址(DA)
Transmitter address: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #发送者地址(TA)
Source address: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #源地址(SA)
BSS Id: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #BSSID的MAC地址
Fragment number: 0 #片段号
Sequence number: 0 #序列号
IEEE 802.11 wireless LAN management frame #IEEE 802.11管理帧
Fixed parameters (6 bytes) #固定参数
Authentication Algorithm: Shared key (1) #认证类型为“共享密钥(1)”
Authentication SEQ: 0x0002 #认证序列号
Status code: Successful (0x0000) #状态码
Tagged parameters (130 bytes) #标记参数
Tag: Challenge text #标记
Tag Number: Challenge text (16) #标记编号
Tag length: 128 #标记
Challenge Text: 5f4946221e0f14f10aaf7e5b7764631e93e14a59b89b8302... #随机数列
从以上详细信息中可以看到,认证编号已经变成2了,状态也是成功的;在帧的最后,是一个128字节的随机数列。
第三次握手:客户端收到AP的响应后,用自己的密钥加3个字节的IV,并用RC4算法产生加密流,然后用异或操作加密128字节的随机数列,并发送给AP。具体详细信息如下所示。
Frame 54: 186 bytes on wire (1488 bits), 186 bytes captured (1488 bits) on interface 0
Radiotap Header v0, Length 18
IEEE 802.11 Authentication, Flags: .p...... #帧类型
Type/Subtype: Authentication (0x0b) #帧类型为Authentication
Frame Control Field: 0xb040 #帧控制字段
.000 0001 0011 1010 = Duration: 314 microseconds #时间戳
Receiver address: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #接收者地址(RA)
Destination address: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #目的地址(DA)
Transmitter address: KingjonD_90:35:20 (00:13:ef:90:35:20) #发送者地址(TA)
Source address: KingjonD_90:35:20 (00:13:ef:90:35:20) #源地址(SA)
BSS Id: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #BSSID的MAC地址
Fragment number: 0 #片段号
Sequence number: 57 #序列号
WEP parameters #WEP参数
Initialization Vector: 0x5b0000 #IV
Key Index: 0 #键索引
WEP ICV: 0xffb619a2 (not verified) #WEP完整性校验值
Data (136 bytes)
Data: 6fcb185580d074148458616a126102d10156c924554b9596... #加密后的随机序列
[Length: 136] #随机序列的长度
根据以上信息的详细介绍可以发现,多了一个Initialization Vector(初始向量)字段,但是看不到认证序列号。该字段就是人们经常说的IV(明文的),最后data中的内容就是加密后的随机序列。
第四次握手:AP用自己的密钥加客户端发过来的IV,用RC4算法产生加密流,然后用异或操作加密那段随机数列(challenge text)。如果客户端的密钥和AP的密钥相同,则说明加密后的数据应用是相同的。详细信息如下所示。
Frame 55: 48 bytes on wire (384 bits), 48 bytes captured (384 bits) on interface 0
Radiotap Header v0, Length 18
IEEE 802.11 Authentication, Flags: ........ #帧类型
Type/Subtype: Authentication (0x0b) #帧类型为Authentication
Frame Control Field: 0xb000 #帧控制字段
.000 0001 0011 1010 = Duration: 314 microseconds #时间戳
Receiver address: KingjonD_90:35:20 (00:13:ef:90:35:20) #接受者地址(RA)
Destination address: KingjonD_90:35:20 (00:13:ef:90:35:20) #目标地址(DA)
Transmitter address: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #发送者地址(TA)
Source address: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #源地址(SA)
BSS Id: Tp-LinkT_44:09:f8 (8c:21:0a:44:09:f8) #BSSID的MAC地址
Fragment number: 0 #片段号
Sequence number: 1 #序列号
IEEE 802.11 wireless LAN management frame #802.11管理帧
Fixed parameters (6 bytes) #固定参数
Authentication Algorithm: Shared key (1) #认证类型为“共享密钥”
Authentication SEQ: 0x0004 #认证序列号
Status code: Successful (0x0000) #状态码
根据以上信息的详细描述可以知道,最后一次握手的序列号为4,状态是成功。至此,4次握手的过程就全部完成了。成功认证后,客户端可以发送关联(association)请求、接收确认,以及完成连接过程,如图39所示。
图39 关联请求和响应
通过对以上4个包的详细分析可以发现,在802.11帧控制头部中包括4个Mac地址。这4个Mac地址在不同帧中的含义不同,下面进行详细介绍。
● RA(receiver address):在无线网络中,表示该数据帧的接收者。
● TA(transmitter address):在无线网络中,表示该数据帧的发送者。
● DA(destine address):数据帧的目的Mac地址。
● SA(source address):数据帧的源Mac地址。
这里的DA和SA与普通以太网中的含义一样,在无线网络中用户可能需要通过AP把数据发送到其他网络内的某台主机中。但是有人会想,直接在RA中填这台主机的Mac地址不就可以了吗?但是要注意,RA的含义指的是无线网络中的接收者,不是网络中的接收者,也就是说这台目的主机不在无线网络范围内。在这种情况下,RA只是一个中转,所以需要多出一个DA字段来指明该帧的最终目的地。当然,如果有了DA,也必须有SA。因为若目的主机要回应的话,SA字段是必不可少的。
(2)失败的WEP认证
当一个用户在连接AP时,如果输入的密码不正确,几秒后无线客户端程序将报告无法连接到无线网络,但是没有给出原因。这时候也可以通过抓包来分析错误的原因。下面分析认证失败的WEP数据包。
下面捕获一个名为WEPauthfail.pcapng捕获文件,具体捕获方法如下所述。
1)启动Wireshark工具。
2)在Wireshark主界面的工具栏中依次选择Capture|Options命令,将显示如图40所示的界面。
图40 设置捕获选项
3)在该界面选择捕获接口,设置捕获过滤器。然后指定捕获文件的位置及名称,如图40所示。设置完成后,单击Start按钮将开始捕获数据包。
4)为了使Wireshark捕获到认证失败的包,这里手动地在客户端输入一个错误的密码,并连接SSID名为Test的AP。当客户端显示无法连接时,可以到Wireshark捕获包界面停止数据包捕获,将看到如图41所示的界面。
图41 WEPauthfail.pcapng捕获文件
5)该界面显示了WEPauthfail.pcapng捕获文件中的数据包。此时,就可以分析WEP认证失败的数据包。但是,如果要从所有的包中找出认证失败的包有点困难。所以,同样可以使用显示过滤器仅显示认证的包,然后进行分析。过滤仅显示WEP认证的包,如图42所示。
图42 认证的包
6)从该界面包的Info列可以看到,这些包都是认证包。仅从包列表中是无法确定哪个包中包含了认证失败信息,所以需要查看包的详细信息,并进行分析。认证失败与成功时一样,都需要经过4次握手。在图42中,101~104就是客户端与AP建立连接的过程。前3次握手(101~103帧)的状态都是成功,并且在第103帧中客户端用户向AP发送了WEP密码响应。最后一次握手就是104帧,如果输入密码正确的话,在该包详细信息中应该看到状态为成功。本例中显示的结果如图43所示。
图43 认证失败
7)从该界面可以看到状态码没有显示成功,而是显示了Responding STA does not support the specified authentication algorithm(0x000d)。这表明客户端的密码输错了,所以连接失败。
2、分析WPA认证包
WPA全名为Wi-Fi Protected Access,有WPA和WPA2两个标准,是一种保护无线电脑网络安全的系统。WPA是为了弥补WEP(有线等效加密)中的弱点而产生的。下面介绍分析WPA认证成功或失败的包。
(1)WPA认证成功
WPA使用了与WEP完全不同的认证机制,但它仍然依赖于用户在无线客户端输入的密码来连接到网络。由于需要输入密码后才可以连接的网络,所以,就会出现输入密码正确与错误两种情况。这里将分析正确输入密码后,连接到无线网络的数据包。
在分析包前,首先要确定连接的AP是使用WPA方式加密的,并且要捕获相应的包。下面介绍如何设置WPA加密方式,以及捕获对应的包。这里仍然以TP-LINK路由器为例来配置AP,其ESSID名称为Test。具体操作步骤如下所述。
1)登录TP-LINK路由器。在浏览器中输入路由器的IP地址,然后将弹出一个对话框,要求输入登录路由器的用户名和密码。
2)登录成功后,将显示如图44所示的界面。
图44 路由器的主界面
3)在该界面的左侧栏中依次选择“无线设置”|“无线安全设置”命令,将显示如图45所示的界面。
图45 无线网络安全设置
4)在该界面选择WPA-PSK/WPA2-PSK选项,然后设置认证类型、加密算法及密码。设置完成后,单击“保存”按钮,并重新启动路由器。
通过以上步骤将AP的加密方式设置为WPA方式后,就可以捕获相关的数据包了。具体捕获包的方法如下所述。
1)启动Wireshark工具。
2)在Wireshark主界面的工具栏中依次选择Capture|Options命令,将显示如图46所示的界面。
图46 捕获选项设置
3)在该界面选择捕获接口,设置捕获过滤器,并指定捕获文件的位置及名称。这里设置仅过滤AP(Test)的数据包,如图46所示。设置完成后,单击Start按钮,开始捕获数据包。
4)在客户端(00:13:ef:90:35:20)选择连接前面配置好的AP(Test),并输入正确的密码。当客户端成功连接到网络后,返回到Wireshark捕获包界面停止捕获,将看到如图47所示的界面。
图47 捕获到的数据包
5)在该界面显示了客户端成功连接到AP捕获到的所有数据包。在该界面显示的这些包,都是AP在向网络中广播自己SSID的包。当客户端收到该广播包后,就向接入点发送探测请求,进而进行连接。
下面将分析WPAauth.pcapng捕获文件中,客户端与AP建立连接的包。这里首先分析AP发送的beacon广播包(以第1帧为例),具体详细信息如下所示。
Frame 1: 271 bytes on wire (2168 bits), 271 bytes captured (2168 bits) on interface 0
Radiotap Header v0, Length 18
IEEE 802.11 Beacon frame, Flags: ........
IEEE 802.11 wireless LAN management frame #802.11管理帧信息
Fixed parameters (12 bytes) #固定的参数
Tagged parameters (217 bytes) #被标记参数
Tag: SSID parameter set: Test #SSID参数设置
Tag: Supported Rates 1(B), 2(B), 5.5(B), 11(B), 6, 9, 12, 18, [Mbit/sec] #支持的速率
Tag: DS Parameter set: Current Channel: 1 #数据集参数设置
Tag: Traffic Indication Map (TIM): DTIM 0 of 0 bitmap #传输指示映射
Tag: Country Information: Country Code CN, Environment Any #国家信息
Tag: ERP Information #增强速率物理层
Tag: RSN Information #安全网络信息
Tag: Extended Supported Rates 24, 36, 48, 54, [Mbit/sec] #扩展支持的速率
Tag: HT Capabilities (802.11n D1.10) #超线程性能
Tag: HT Information (802.11n D1.10) #超线程信息
Tag: Vendor Specific: Microsof: WPA Information Element #供应商及WPA信息元素
Tag Number: Vendor Specific (221) #供应商编号
Tag length: 22 #长度
OUI: 00-50-f2 (Microsof) #安装程序
Vendor Specific OUI Type: 1 #供应商指定的安装程序类型
Type: WPA Information Element (0x01) #类型为WPA
WPA Version: 1 #WPA版本为1
Multicast Cipher Suite: 00-50-f2 (Microsof) AES (CCM) #多播密码套件
Unicast Cipher Suite Count: 1 #单播密码套件数
Unicast Cipher Suite List 00-50-f2 (Microsof) AES (CCM) #单播密码套件列表
Auth Key Management (AKM) Suite Count: 1 #认证密钥管理套件数
Auth Key Management (AKM) List 00-50-f2 (Microsof) PSK #认证密钥管理列表
Tag: Vendor Specific: Microsof: WMM/WME: Parameter Element
Tag: Vendor Specific: AtherosC: Advanced Capability
Tag: Vendor Specific: Microsof: WPS
当客户端(00:13:ef:90:35:20)收到该广播后,将向AP(8c:21:0a:44:09:f8)发送一个探测请求,并得到响应。然后无线客户端和AP之间将会生成认证与关联的请求及响应包,如图48所示。
图48 认证与关联的包
在该界面中,第101帧是认证请求包,第102帧是AP响应了客户端的认证请求,第103帧是客户端向AP发送的关联请求包,第104帧是AP响应客户端的请求包。通过以上过程,客户端和AP建立了关联。接下来,客户端将会和AP通过四次握手过程建立连接。在使用WPA加密方式中,4次握手使用的协议是EAPOL。所以用户可以直接使用显示过滤器,过滤仅显示握手的包,避免受一些无关数据包的影响。这里将使用eapol显示过滤器过滤显示握手的包。显示结果如图49所示。
图49 握手的包
从该界面显示了WPA握手的过程。该过程也就是WPA质询响应的过程,在该界面中第113和115帧是AP对客户端的质询包,第114和116帧是客户端响应AP的数据包。这4个包分别代表两次质询和两次响应,包含4个完整的数据包。每个质询和响应在数据包内使用Replay Counter值来搭配。4个数据包的详细信息如下所述。
第一次握手:AP向客户端发送质询(113帧),其包详细信息如下所示。
Frame 113: 151 bytes on wire (1208 bits), 151 bytes captured (1208 bits) on interface 0
Radiotap Header v0, Length 18
IEEE 802.11 QoS Data, Flags: ......F. #802.11 QoS数据
Logical-Link Control
802.1X Authentication #802.1X认证信息
Version: 802.1X-2004 (2) #认证版本
Type: Key (3) #认证类型
Length: 95 #长度
Key Descriptor Type: EAPOL RSN Key (2) #密钥描述类型
Key Information: 0x008a #密钥信息
Key Length: 16 #密钥长度
Replay Counter: 1 #作为请求和响应配对值,该请求为1
WPA Key Nonce: cf59fffcacd102cdffa1f8ac6ffca5f6daf077a125e248f3... #随机数(SNonce)
Key IV: 00000000000000000000000000000000 #密钥IV(初始化向量,48位)
WPA Key RSC: 0000000000000000
WPA Key ID: 0000000000000000 #密钥ID
WPA Key MIC: 00000000000000000000000000000000 #消息完整性编码
WPA Key Data Length: 0 #密钥信息
从以上信息中可以看到,在第一次握手时,包里面包含一个64位字符的Hash值。
第二次握手:客户端响应AP的文本信息(114帧),其详细内容如下所示。
Frame 114: 173 bytes on wire (1384 bits), 173 bytes captured (1384 bits) on interface 0
Radiotap Header v0, Length 18
IEEE 802.11 QoS Data, Flags: .......T
Logical-Link Control
802.1X Authentication #802.1X认证信息
Version: 802.1X-2001 (1) #认证版本
Type: Key (3) #认证类型
Length: 117 #长度
Key Descriptor Type: EAPOL RSN Key (2) #密钥描述类型
Key Information: 0x010a #密钥信息
Key Length: 0 #密钥长度
Replay Counter: 1 #响应AP请求的配对值,此处为1,与上个包匹配
WPA Key Nonce: b657d66beb40b295c58ef1eab97e3f7156be727da0a6aa2e...#随机数(ANonce)
Key IV: 00000000000000000000000000000000 #密钥IV(初始化向量,48位)
WPA Key RSC: 0000000000000000
WPA Key ID: 0000000000000000
WPA Key MIC: b0a0ccb3090d8b5f4d03b34a38793490 #消息完整性编码
WPA Key Data Length: 22 #数据长度
WPA Key Data: 30140100000fac040100000fac040100000fac020000 #响应的文本内容
从以上信息中可以看到,在该包中同样包含一个64位字符的Hash值,并且还包含一个MIC值。
第三次握手:AP向客户端再次发送质询请求(115帧),其详细内容如下所示。
Frame 115: 231 bytes on wire (1848 bits), 231 bytes captured (1848 bits) on interface 0
Radiotap Header v0, Length 18
IEEE 802.11 QoS Data, Flags: ......F.
Logical-Link Control
802.1X Authentication #802.1X认证信息
Version: 802.1X-2004 (2) #认证版本
Type: Key (3) #认证类型
Length: 175 #长度
Key Descriptor Type: EAPOL RSN Key (2) #密钥描述类型
Key Information: 0x13ca #密钥信息
Key Length: 16 #密钥长度
Replay Counter: 2 #AP质询的匹配值
WPA Key Nonce: cf59fffcacd102cdffa1f8ac6ffca5f6daf077a125e248f3... #随机数(SNonce)
Key IV: 00000000000000000000000000000000 #密钥IV(初始化向量,48位)
WPA Key RSC: 6900000000000000
WPA Key ID: 0000000000000000
WPA Key MIC: e4060a803263bce29b06349261c28217 #消息完整性编码
WPA Key Data Length: 80 #密钥数据长度
WPA Key Data: c9de362a185cc6ccd27b203754d618d40e7245e7d43b4a4f... #密钥数据
从以上信息中可以看到,在该包中的WPA Key Nonce值(64位Hash值)和第一次握手包中的值相同,并且在该包中又生成一个新的MIC值。
第四次握手:客户端响应AP的详细信息(116帧),其详细内容如下所示。
Frame 116: 151 bytes on wire (1208 bits), 151 bytes captured (1208 bits) on interface 0
Radiotap Header v0, Length 18
IEEE 802.11 QoS Data, Flags: .......T
Logical-Link Control
802.1X Authentication #802.1X 认证信息
Version: 802.1X-2001 (1) #认证版本
Type: Key (3) #认证类型
Length: 95 #长度
Key Descriptor Type: EAPOL RSN Key (2) #密钥描述类型
Key Information: 0x030a #密钥信息
Key Length: 0 #密钥长度
Replay Counter: 2 #响应的匹配值
WPA Key Nonce: 000000000000000000000000000000000000000000000000... #随机数(ANonce)
Key IV: 00000000000000000000000000000000 #密钥IV(初始化向量,48位)
WPA Key RSC: 0000000000000000
WPA Key ID: 0000000000000000
WPA Key MIC: 6e3a4c5c4fb2533778baaf82dbb80938 #消息完整性编码
WPA Key Data Length: 0 #密钥数据长度
从以上信息中可以看到,该握手包中只包含一个MIC值。
根据以上对包的详细介绍,可以发现包里面有很多陌生的参数值。这时候用户可能不知道这些值是怎样算出来的,并且使用了什么算法。下面做一个简单介绍。
支持WPA的AP工作需要在开放系统认证方式下,客户端以WPA模式与AP建立关联之后。如果网络中有RADIUS服务器作为认证服务器,客户端就使用802.1X方式进行认证;如果网络中没有RADIUS服务器,则客户端与AP就会使用预共享密钥(PSK,Pre-Shared Key)的方式进行认证。在本例中AP是使用预共享密钥(PSK,Pre-Shared Key)方式认证的,WPA-PSK在认证之前会进行初始化工作。在该过程中,AP使用SSID和passphare(密码)使用特定算法产生PSK。
在WPA-PSK中PMK=PSK。PSK=PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)。
然后,将开始4次握手。
1)第一次握手
AP广播SSID(AP_MAC(AA)→STATION),客户端使用接收到的SSID,AP_MAC(AA)和passphrase使用同样算法产生PSK。
2)第二次握手
客户端发送一个SNonce到AP(STATION→AP_MAC(AA))。AP接收到SNonce,STATION_MAC(SA)后产生一个随机数ANonce。然后用户PMK,AP_MAC(AA),STATION_MAC(SA),SNonce,ANonce用以下算法产生PTK。最后,从PTK中提取前16个字节组成一个MIC KEY。
PTK=SHA1_PRF(PMK, Len(PMK),“Pairwise key expansion”,MIN(AA,SA) ||Max(AA,SA) || Min(ANonce,SNonce) || Max(ANonce,SNonce))
3)第三次握手
AP发送在第二次握手包中产生的ANonce到客户端,客户端接收到ANonce和以前产生的PMK,SNonce,AP_MAC(AA),STATION_MAC(SA)用同样的算法产生PTK。此时,提取这个PTK前16个字节组成一个MIC KEY。然后,使用MIC=HMAC_MD5(MIC Key,16,802.1X data)算法产生MIC值。最后,用这个MIC KEY和一个802.1X data数据帧使用同样的算法得到MIC值。
4)第四次握手
客户端发送802.1X data到AP。客户端用在第三次握手中准备好的802.1X数据帧在最后填充上MIC值和两个字节的0(十六进制),使后发送的数据帧到AP。AP端收到该数据帧后提取这个MIC值,并把这个数据帧的MIC捕获都填上0(十六进制)。这时用这个802.1X data数据帧和上面AP产生的MIC KEY使用同样的算法得到MIC。如果MIC等于客户端发送过来的MIC,则第四次握手成功,否则失败。
(2)WPA认证失败
WPA与WEP一样,当用户输入密码错误后,无线客户端程序显示无法连接到无线网络,但是没有提示问题出在哪里。所以,用户同样可以使用Wireshark工具通过捕获并分析包了解原因。下面分析WPA认证失败的数据包。
具体捕获包的方法和捕获WPAauth.pcapng捕获文件的方法一样。唯一不同的是,在客户端连接AP时,输入一个错误的密码。本例中将捕获的包保存到名为WPAauthfail.pcapng捕获文件中。
在WPAauthfail.pcapng捕获文件中捕获的包,与WPAauth.pcapng捕获文件类似。同样在捕获文件中包括探测、认证和关联请求及响应包。客户端无法成功认证时,出现错误的信息会在握手包中。所以,这里同样过滤WPAauthfail.pcapng捕获文件中的握手包进行分析,显示结果如图50所示。
图50 握手包
从该界面显示的结果中可以看到,这些包一直重复着第一次和第二次握手过程。通过返回包的信息,可以判断出客户端响应给AP的质询内容有误。握手过程重复三次后,通信终止了。如图51所示,第106帧表明无线客户端没有通过认证。
图51 认证失败
从该界面显示的信息中可以看到,认证类型为Deauthentication(解除认证),并且从管理帧详细信息中可以看到,返回的原因代码提示客户端没有被认证。
微信公众号:计算机与网络安全
ID:Computer-network
【推荐书籍】