随着网络的迅速发展,无线网络已逐渐发展成为一种非常重要的网络连接方式。然而,无线网络给人们的生活带来便捷的同时,也会给人们带来安全上面的问题。因此,无线网络中的安全性问题一直是人们研究的热点。本实验中,作者就目前比较普遍使用的两种无线网络加密方法WEP和WPA进行破解实验。
WEP(Wired Equivalent Privacy)加密技术是一种针对无线网络的加密方法,在1999年9月引入到802.11标准中,至今为止仍然十分活跃。目前绝大多数无线路由器上都支持WEP加密。图1是作者在其宿舍做的一个实验,利用airodump-ng工具可以看到周围AP 的加密方式分布情况。
图1 加密方式分布情况
从图1中我们可以看到,在监测到的6个AP中,有4个采用WEP加密方式,1个是OPN方式,还有一个是WPA2加密方式,选择WEP加密方式的比例达到了66.7%,由此可见WEP加密方式的普及度之高。
下面分别介绍WEP加密原理以及WEP破解过程。
WEP采用了RC4加密方法。在64-bit WEP中,用一个40bit(5*8)的密码和一个24bit的IV作为RC4的密钥流。同理,在128-bit WEP中,用一个104 bit(13*8)的密码和一个24bit的IV作为RC4的密钥流。因此我们经常可以看到使用WEP加密时对密码的长度有限制,要么5个ASCII码,要么13个ASCII码。WEP的加密过程如下:
a).计算校验和。
设信息为M,首先通过CRC算法计算出完整的校验和c<M>,然后将M与c<M>级联起来得到明文数据P=<M,c<M>>。
b).加密
用共享密钥k和一个初始化向量v作为RC4算法的输入,产生一个密钥流,即RC4(v,k)。然后将这个密钥流与明文P进行异或,得到最后的密文C。因此它们之间的关系为
C = P ⊕RC4(v,k)
其中P = <M,c<M>>
c).传输
随后,将初始向量v和密文C级联发送到无线链路中,即
<v,P⊕RC4(v,k)>,其中P = <M,c<M>>
WEP的加密过程如图2所示
图2 WEP加密过程
RC4加密算法中又分为2个子算法:KSA(初始化算法)和PRGA(伪随机子密码生成算法)。KSA算法生成一个256长度的数组S[],经过KSA算法后,S[]数组中每一个数都是一个0~255之间的数。PRGA每一步从S[]中随机选出一个字节的Output,并将Output与明文P中的一个字节进行异或。也就是说,P中有多少个字节,PRGA就有多少次循环。这两个函数的代码如下:
KsA(Key-scheduling algorithm)
1. Assume N = 256 2. K[] = Secrete Key array 3. Initialization: 4. For i = 0 to N – 1 5. S[i] = i 6. j = 0 7. Scrambling: 8. For i = 0 … N – 1 9. j = j + S[i] + K[i] 10. Swap(S[i], S[j]) |
PRGA(pseudo-random generation algorithm)
1. Initialization: 2. i = 0 3. j = 0 4. Generation Loop: 5. i = i + 1 6. j = j + S[i] 7. Swap(S[i], S[j]) 8. Output z = S[S[i] + S[j]] 9. Output XORed with data |
与其说是RC4算法有一些缺陷导致WEP可以被破解,不如说是WEP对RC4的使用不当,导致RC4算法的某些特性可以被利用过来进行WEP破解。首先,iv作为明文传输,也就是所有监听报文的人都可以知道这3个字节的iv。因此,RC4的输入中,前3个字节是已知的。在KSA和PRGA算法中,都有将i和j初始化的过程,也就是在KSA和PRGA算法的第一轮迭代中,i和j的值是确定的,例如i=1,j=s[1],在一定概率下,前几轮迭代过程几乎可以重构出来。2001年,Scott Fluhrer, Itsik Mantin, 和Adi Shamir三人发表了一篇具有重要意义的文章[2],对RC4算法的一些特性进行分析并为WEP破解提供了理论依据,这基本就代表了WEP加密算法的瓦解。根据Scott Fluhrer等人的研究[2],RC4算法密钥空间有大量的弱密钥,在使用这些弱密钥作为RC4算法的输入时,只需要进行迭代几次就可以推理出密钥的前几位。对于(A+3,N-1,X)形式的iv(A表示要破解的密钥的位置,N一般为256,X随意),当收集到60个具有这种形式且X不同的iv时,就有0.5的概率可以成功破解出K[A]。
目前已经有开源工具实现了WEP破解,一般只需要敲几行代码输入几条命令就可以在几分钟内顺利破解。以下是作者在宿舍内对使用WEP加密的AP进行破解的过程,实验环境为BT5,使用工具为AirCrack-NG,使用网卡为netcoreNW330(RTL8187b,支持注入)。
WEP破解的最终手段就是收集尽可能多的iv,因此不管在何种场景之下都要以此作为目标。下面是WEP破解一个最基本的过程,在任何场景之下都需要经过这些步骤:
a) 查看一下网卡信息
iwconfig
图3 iwconfig
这里我们看到wlan1是我们使用的netcore NW330(RTL6187b),由于它支持注入,所以我们下一步会选用这个。
b) 打开网卡的监控模式
airmon-ng start wlan1
图4 airmon-ng start
可以看到,开启监控模式后,网卡名为mon0,因此后面步骤中都使用mon0作为网卡的名称。
c) 查看周围ap信息
airodump-ng mon0
图5 airmon-ng mon0
可以看到有很多个AP,在这些AP中有很多都是以WEP方式加密的。从这些AP中选择尽量信号好的作为实验对象,因为这样收到的包更多更快。
d) 获取数据包(iv)
airodump-ng –c channel –bssid ap_mac –w file_name mon0
-c 表示channel,从c)中可以看到选择目标ap所在的channel。
-bssid 表示AP的mac
-w 表示抓取到的包存放的文件名,以用来最后进行破解
图6 airodump-ng
e) 破解
aircrack-ng –b ap_mac filename*.cap
这里的filename就是d)中写入的filename。注意,airodump-ng会自动在filename后面添上后缀.cap,并且重复几次d)步骤,每次生成的文件名中会自 动加上不同的数字以表示版本如filename-01.cap,filename-02,cap等,因此需要注意选择filename。
图7 aircrack-ng
以上5个步骤为破解WEP的一般过程,可以看到在图中所示的例子中,最后破解出的密码为whscd,事实也正是FAST无线路由器的密码。有时候在一些特殊情况下,还可以采用更主动的方法,使得获取iv的时间尽可能小,破解的过程尽可能快。以下描述了几个不同的场景下,如何利用aireplay-ng工具来更快的破解WEP。下面情景中描述的做法与以上5个步骤中的第4个步骤同时进行,即在获取数据包的同时另外运行命令。
有时候某个ap上连接着的客户端流量很小,如果要等到收集足够多的iv,需要花费很多时间等待,因此在一些特殊情况下还可以采用更主动的方法使得收集iv的过程变得更快。例如aireplay-ng就是向无线网络进行注入的工具。在用airodump-ng收集iv时,同时开启aireplay-ng的注入功能,可以主动获取到更多的iv包,大大缩短收集iv包的时间。
例如下图所示,用aireplay-ng的注入攻击模式(-3),即先抓取网络中的arp request包,然后分析重发以提高抓包数量:
aireplay-ng -3 –b ap_mac –h client_mac mon0
-3: arp-request注入攻击模式
-b设置ap的mac
-h设置client的mac
图8 aireplay-ng -3注入攻击模式
另外,如果用注入攻击模式收集不到ARP request。如下图所示
图9 aireplay-ng -3注入攻击模式无流量
可以看到,客户端没有流量,就算开启注入攻击模式也没有用,因为没有人上网来产生有效数据。此时,可以另外开启一个窗口使用aireplay-ng的deautenticate冲突模式,强制断开客户端与AP的连接,迫使其重新连接,并在这个过程中获得验证数据包,从而产生有效的arp数据。
aireplay-ng -0 10 –a ap_mac –c client_mac mon0
-0 : deautenticate冲突模式
10 表示发送的次数(如果设置为0,则表示循环攻击)
-a设置ap的mac
-c设置client的mac
图10 aireplay -0 deautenticate冲突模式
运行该命令后,-3注入攻击模式窗口很快就可以看到收集到大量的arp request了。这样就可以迅速收集到大量iv进行破解。
破解结果如下
图11 破解结果
在没有客户端的情况下,先利用aireplay-ng的fakeauth count 伪装一个客户端和ap
进行连接.
aireplay-ng -1 0 –e ap_essid –a ap_mac –h my_mac mon0
-1: fakeauth count模式
0:表示延迟0秒后连接
-e设置ap的essid
-a设置ap的mac
-h设置伪装的客户端mac,这里一般自己网卡的mac地址
图12 aireplay-ng -1 fackauth伪装客户端
然后用interactive 交互模式或arp-request注入攻击模式来加速获取iv包。
aireplay-ng -2 –p 0841–c FF:FF:FF:FF:FF:FF –b ap_mac –h my_mac mon0
-2: interactive 交互模式
-p 设置控制帧中包含的信息,默认采用0841
-c:设置目标mac的地址
-b:设置ap的mac
-h: 设置伪装客户端网卡的mac(自己的mac地址)
图13 aireplay-ng -2交互模式
破解结果如下
图14 破解结果
由于WEP中存在严重的安全漏洞,WIFI联盟制定了WPA和WPA2以取代WEP。其中WPA实现了802.11i的主要部分,提供了对现有硬件的向下兼容,被用来作为WEP到802.11i的过渡。之后的则WPA2完整的实现了整个IEEE 802.1i标准。
WPA的根据应用场景的不同采用不同的认证方式,其中面对家庭或小型办公场所网络的WPA-PSK不需要专门的认证服务器,所有该网络中的设备通过使用同一个256-bit的密钥来进行认证。
WPA-PSK认证中的四次握手被设计用来在不安全的信道中,通过明文传输的方式来进行一定程度上的认证,并且在设备之间建立安全信道。首先,PSK会被转化为PMK,而PMK则在接下来被用于生成PTK。PTK则会被分为若干部分,其中一部分被称作MIC Key,用来生成每一个包的Hash值来用于验证。
WPA的安全问题与其认证过程所使用的算法关系不大,更多的是由于这一过程可以被轻易的重现,这就使得WPA-PSK可能遭受字典暴力攻击。
WPA-PSK攻击分为以下几个步骤:
1. 根据passphrase,SSID生成PMK,即PMK = pdkdf2_SHA1(passphrase, SSID, SSID length, 4096)
2. 捕获EAPOL四次握手的数据包,得到ANonce,SNonce等信息,用于计算PTK,即
PTK = PRF-X(PMK, Len(PMK), “Pairwise key expansion”, Min(AA,SA) || Max(AA,SA) || Min(ANonce, SNonce) || Max(ANonce, SNonce))
3. 使用MIC Key计算EAPOL报文的MIC,即MIC = HMAC_MD5(MIC Key, 16, 802.1x data)
4. 将计算得到的MIC值与捕获到的MIC值对比,如果相同则破解成功。
WPA-PSK攻击的主要难点在于大量计算PMK所需要的计算量。一台普通的计算机通常的计算能力在500pmks/s,想要对8位的纯小写字母组合密码进行暴力破解所需要的时间为14年,所以想要破解WPA-PSK只有两种可能:1.用户使用了常见的弱密码;2.堆砌计算资源,获得超级计算机量级的计算能力。
本实验针对用户使用基于字典的弱密码的情况进行了攻击实践,实验环境如下:
硬件:外接无线网卡,全向、定向天线
软件:BT5(VirtualBox),aircrack-ng套装, cowpatty及自己基于OpenCL编写的并行破解加速程序,程序源码见以下链接
https://github.com/shaofengniu/opencl
攻击实践步骤简要概括如下:
1. 使用airodump-ng选定攻击目标,并对齐通信信息进行监听
2. 使用aireplay-ng使某个客户端断开与AP的连接,在其重新发起连接的时候,捕获其四次握手的数据包
图15 WPA四次握手
3. 使用百家姓,生日,英语常用词汇,4级词汇,及其之间的组合来生成字典文件
4. 使用cowpatty对捕获到的包进行破解
图16 cpwpatty破解
5. 使用OpenCL程序利用GPU对破解进行加速
图17 用GPU进行并行计算加快破解速度
具体操作步骤见课堂展示视频,由于视频太大故不上传,有兴趣者可向我们索取。用GPU并行破解算法后,破解时间由原来的9分钟缩小到2分钟,破解速度的提升显而易见。
从WEP的破解过程可以看到,目前WEP十分不安全,用专有工具在几分钟之内就能轻松破解WEP。因此为了使用无线网络的安全性和防止别人蹭网,应该改用更安全的加密方式如WPA等。但是由于很多非专业人事对此并不了解,他们并不知道WEP和WPA的区别,很多人都不知道该选择什么加密方式,此时经常位于第一个选项的WEP就自然而然成为他们的选择。从实验中可以看到,在系别混杂的女生宿舍楼内,使用WEP加密方式的居多。但是在计算机系男生集中的宿舍楼内,使用WPA的却占绝大多数。由此可以看到,不同人群在使用网络时的不同特征。
在WPA-PSK攻击实践的过程中,对其认证过程有了更为深入的了解,并自行实现了其中的一部分。
经过本次实践,个人认为WPA的安全问题主要存在于弱密码的使用,除非拥有庞大的计算资源(如购买Amazon EC2的计算服务),想要对其进行纯粹的暴力破解还是不大可能的,更多的还是要依赖对弱密码的字典攻击。
所以我们只要稍微提高注意,使用不常见的SSID,加上一个稍微随机一点的passphrase,就能在很大程度上避免被攻击。
但是另一方面,随着云计算等技术的迅速发展,超级计算机级别的计算资源正变得越来越随手可及,只要花上几百美元,在Amazon EC2上租用一个Tesla集群,就可能在很短的时间内采用纯暴力方式,将我们上面认为牢不可破的密码攻破。
[1]http://en.wikipedia.org/wiki/Wired_Equivalent_Privacy
[2]Scott R. Fluhrer, Itsik Mantin and Adi Shamir, Weaknesses in the Key Scheduling Algorithm of RC4
[3]Adam Stubblefield, John Ioannidis, Aviel D. Rubin, Using the Fluhrer, Mantin, and Shamir Attackto Break WEP
[4]http://www.informit.com/articles/article.aspx?p=27666
[5]http://www.aircrack-ng.org/doku.php?id=simple_wep_crack&DokuWiki=9085254dab5ce40ca6472aea32f634f
[6]http://www.informit.com/articles/article.aspx?p=370636
[7]http://en.wikipedia.org/wiki/Wi-Fi_Protected_Access
[8]http://en.wikipedia.org/wiki/PBKDF2
[9]http://en.wikipedia.org/wiki/HMAC
[10]http://en.wikipedia.org/wiki/SHA1
[11]http://code.google.com/p/pyrit/