频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
深入理解Aireplay-ng各种攻击及其原理
2013-04-28 08:09:31           
收藏   我要投稿

 
[cpp]
 //--------------------------------------------------------------------    
//                 深入理解Aireplay-ng各种攻击及其原理    
//                   作者:GaA.Ra(zhoufan#yahoo.cn)    
//                   随意转载,但请保留此部分信息,谢谢    
//-------------------------------------------------------------------- 


 

    这里主要讲常用的攻击模式(对于-6,-7攻击并不涉及),深入原理的集中在-2,-4,-5这三种攻击


[cpp]
/*-------------------------------------------------------------------
  Attack modes (numbers can still be used): //攻击模式(数字仍然可以使用)
      --deauth      count : deauthenticate 1 or all stations (-0)   //解除一个或者全部站的连接
      --fakeauth    delay : fake authentication with AP (-1)        //对AP进行伪连接攻击
      --interactive       : interactive frame selection (-2)        //交互注入攻击
      --arpreplay         : standard ARP-request replay (-3)        //标准Arp请求包重放攻击
      --chopchop          : decrypt/chopchop WEP packet (-4)        //解码或断续WEP数据包攻击
      --fragment          : generates valid keystream   (-5)        //产生合法密钥流
-------------------------------------------------------------------*/ 


 

一.-0攻击

    -0攻击主要是伪造一个disassocate包,让ap断开与客户端的链接,此时客户端会重新连接ap,那么我们从中可能得到的东西有:1,假如AP不广播ESSID,那么我们可以得到这个ESSID;2.如果使用的是WPA/WPA2的加密方式,通过这样做强迫客户端重新验证,我们就能够获得握手包;3.再重新连接过程中我们可以获取到ARP数据包,为-3攻击做准备.

 

二.-1攻击

    之前我一直也没弄明白为什么能够进行伪连接,既然我们并不知道WEP密码,那么如何进行连接?伪连接的伪主要体现在什么地方?这个应该是和AP的工作机制有关.我自己的理解是,在客户端与AP通信的时候,客户端需要在AP那里登记自己的MAC地址,这样AP才会接受这个MAC地址的网卡产生的数据包进行下一步的工作.一般WEP验证过程为:1.客户端发给AP认证请求 2.AP发回挑战字串 3.客户端利用WEP密码加密字串返回给AP 4.AP对返回结果进行本地匹配判断是否通过认证. 伪连接实际上就是进行了第1步,此后AP就登记了客户端的MAC地址,此时AP等待的是客户端返回挑战字串的加密包,对于攻击者,此时AP已经能够接受各种伪装生成的数据包并对其作出反应了.这一步对于无客户端的-2,-4,-5攻击相当重要.很明显,这样伪连接并不产生任何ARP包,同时也不会获得正确的WPA/WPA2握手包.

 

三.-2攻击

    -2攻击实际上是对特定的数据包进行重放,当AP收到这个数据包的时候对这个数据包进行广播,进而我们能够获得更多的iv以达到破解的要求.这个特定的数据包需要满足什么要求,我们需要了解一些相关的IEEE802.1帧控制的知识.如图

 

\

     图中是一个ARP包,可以看到在数据包的开始位置就是帧控制的数据结构,长度是2字节.第一个字节的结构是{Version:4bit,Type:2bit,Subtype:2bit}对于这部分,我们需要的是一个Type为2,也即是Data frame(数据帧),因为只有是数据帧,那么才有iv,才会用到WEP加密数据.对于flag字节,也就是第二个字节,我们需要设置To DS域为1(图中设置了From DS域为1),To DS域表示To Distribution System的标志,因为数据使用了WEP加密,所以Protected flag也被置为1,此时加上一个FF:FF:FF:FF:FF:FF的目标地址(广播地址)则这个就是我们可以重放的数据包.当AP收到这个数据包时,会对他使用新的IV加密后广播.我们不断的重放这个数据包以达到收集IV的目的.

    这里产生的疑问是,是否我们没有抓到这样的一个数据包我们就不能进行交互注入?答案是否定的.我们常用的是0841注入,通过对一个合法的数据帧进行修改,让他符合上面的条件从而使AP接收并重新广播.我们看一下为什么叫0841,0841的二进制位0000 1000 0100 0001,从刚才的分析看到,1000中的10是Type域,0100中1是Protected flag,0001中的1是To DS,这样合起来便是0841的含义.等待一个AP自然产生的满足条件的数据帧有时候需要等待很久,如果我们对于一个合法的数据帧的帧控制进行修改,改成0841,同时修改目标地址为广播地址(注意帧控制和目标地址等都是以明文形式发送),由于AP并不检查数据内容,只是从控制字段判断,所以AP会对收到的这个我们修改过的数据包进行广播,从而我们也就达到我们的目的--收集IV.当然我们修改的数据帧的长度最好不要太长.

    另外,-2攻击可以配合packetforge-ng产生的伪造数据包进行重放.

 

 

四,-3攻击

    ARP请求重放攻击,当抓取到一个ARP请求包的时候对它进行重放,WEP体系允许IV的重复使用因此AP会对重放的ARP请求包进行应答,从而能够收集到足够数量的IV.利用arp请求包的重放效率是最高的.后面的-4,-5攻击在获得XOR文件也即是密钥流之后,也是利用packetforge-ng生成一个arp请求包用以重放.

 

 

五,-4攻击

    KoreK的Chopchop攻击,这个攻击的理论是基于对CRC算法的数学分析的基础上,对于数学部分我们这里不深入探讨,只是用到KoreK提到的结论.WEP的核心加密算法是RC4(参考aspx"> RC4算法使用的是异或加密(我们用XOR表示异或操作),简单流程这样,我们提供一个40位的密钥,加上IV提供24位,总共64位作为种子,RC4根据这个通过PRGA(伪随机生成算法)产生密钥流,这个密钥流与我们要发送的数据进行异或操作即完成加密.为了保证数据传送过程中的完整性,WEP使用CRC算法在数据后加上4个字节的校验码(这4个校验码也要跟密钥流进行异或加密),我们称这4个字节为ICV(Integrity check value).现在假设我们要发送的数据明文为P,密钥流为KeyStream,那么,加密的数据M=(P + ICV(P)) XOR KeyStream,如果我们知道明文P,那么我们就能够得到KeyStream(=M XOR (P+ICV(P))),有了KeyStream我们就能伪造任意的数据包(如ARP请求包),发送给AP从而收集IV.关键在于如何得到明文P,KoreK的研究发现,当我们把抓取到的数据包M截去最后的一个字节的时候,此时数据包是无效的数据包(ICV错误),但是当与一个掩码进行XOR运算之后,这个数据包将会恢复为有效的数据包.而这个掩码的计算取决于我们截去的那个字节的明文(我们截去的字节已经经过加密),一个字节是8位,通过最多2^8=256次尝试,我们能够确定截去字节的明文.思路如下:

    1,我们抓取一个数据包,然后截去这个数据包加密部分的最后一个字节(注意,数据包包含有用RC4加密的部分和以明文传输的帧控制部分两部分,看上面-2攻击的图).

    2,我们产生256个掩码,每个掩码对应一个明文字节,然后进行异或操作.

    3,将这256个数据包的目标MAC地址改为组播地址,格式如01:00:5E:00:00:XX,XX和明文字节相同.

    4,发送这256个数据包,通过AP的返回的数据包目标地址最后一个字节判断明文是什么,记录下来.

    5,利用返回的数据包重复第1步直到获得所有明文.

    当获得所有明文之后,将其与原始数据包加密部分异或,得到密钥流KeyStream.Aireplay-ng将它保存为一个XOR文件.

 

六,-5攻击

    Fragment攻击,这个攻击我个人觉得是所有攻击里最具有艺术性的,他利用了IEEE8021机制和WEP算法两者的漏洞,最终能够得到最大1500字节的密钥流.对于Chopchop攻击,我们得到的密钥流的长度取决于我们能够抓取到的数据包加密部分的长度,并且随着数据包的长度增大,猜测的次数将会增加,使得获取密钥流的时间也变长,而Fragment不仅获取大长度的密钥流,同时需要用到的时间也大大减少.

    对于在无线局域网传送的数据中都被加入了LLC头部,而LLC头部字节是固定的.如图

 

\

    这部分就是WEP加密部分的头8个字节,对于ARP包,??为06,对于IP包,??为00,现在我们有了8个字节的明文,通过对数据包的异或操作,我们得到了8个字节的密钥流.利用8个字节以及802.1的分片机制,我们可以得到更大长度的密钥流.先说说分片,无线局域网中,数据包的最大分片数为16,利用8字节密钥流我们伪造16个加密部分8字节的数据包发送(4字节明文+4字节ICV,明文我们知道),当AP收到16个碎片包之后,AP将其组装成一个数据包,将其重发,我们抓取这个数据包,一个我们知道是4字节明文,16个就是64字节的明文,加上AP为64字节数据加上的ICV,我们得到了68字节的密钥流(明文与密文异或得到),重复伪造16个68字节的数据包发送(64字节明文+4字节ICV),最终得到1028字节的密钥流(64*16+4),再重复发两个包就能得到1500字节的密钥流.全部过程我们最少只需要发送34个数据包!!这样就大大缩短了获取密钥流的时间.或者在得到一定长度的密钥流之后比如36字节,刚好可以用来伪造一个arp包,进行重放,也缩短了收集IV的时间.由于ChopChop是从后向前猜测得到密钥流,所以ChopChop的效率不太可能提高.

    另外,Fragment攻击也可以用于猜测密钥.如果AP对分片数据不返回,那么可以从第9字节处(LLC头部之后)开始猜测密钥流,同样也是256种可能,过程类似Chopchop攻击,区别只是在于一个从前向后猜的是密钥流字节,一个从后往前猜的是明文字节.

    对于Fragment细节想深入了解的朋友,强烈推荐论文<The Final Nail in WEP's Coffin>


    写了一个下午,很多本来想写的东西最终发现涉及很多基础,不想面面俱到,我接触无线网络安全也不久,难免有些理解错误的地方,希望能和大家交流:)

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 原理
上一篇:HDOJ - 1586 更新下KMP的模板...
下一篇:nbut [1173] Birdlike Angry Pig 找出某个数使得等于其它所有数的&操作
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站