深入理解Aireplay-ng各种攻击及其原理 (二)

2014-11-24 02:42:14 · 作者: · 浏览: 3
在假设我们要发送的数据明文为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细节想深入了解的朋友,强烈推荐论文


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