首页
社区
课程
招聘
[翻译]预测,解码,滥用WPA/802.11 组秘钥(二)
发表于: 2017-12-1 13:30 4333

[翻译]预测,解码,滥用WPA/802.11 组秘钥(二)

2017-12-1 13:30
4333

在这一节,我们会展示一种使用降级攻击的方法来攻击4次握手。结果,RC4是用来在握手机制中加密敏感信息的算法。我们展示两种在握手机制中使用RC4加密的攻击方法,并说明它是如何允许攻击者获取组密钥的。我们也设计出了一种攻击方法,并提出了应对措施。

在监测图2 中4次握手机制时,我们可以看到在客户端验证AP的 Ies之前,AP会发送组秘钥(GTK)到客户端。回想一下,这些字段包含AP支持的密码套件,它们以明文信标进行通知。换句话说,在AP在第三次握手发送组秘钥之后,客户端才能检测到出现了一个降级攻击。这就产生了问题,因为如果多个加密算法可以用来保护握手机制,则攻击者可以尝试进行降级攻击,以使AP使用弱密码来加密和传输组密钥。

有趣的是,四次握手机制真的可以用多种加密机制来保护[21, x11.6.2],这就意味着降级攻击是可以实现的。更具体地说,握手机制中使用到的加密算法是由客户端关联请求中的两个设置决定(参见图2)。

表 1: 四路握手中用到的加密算法

尤其是,当请求支持快速网络传输时,四次握手机制会采用AES-CMAC 和 NIST AES加密算法。否则,用来加密握手机制的算法是根据成对秘钥来决定,在成功通过握手机制后,这个加密算法会被用来加密常用的数据帧。如果要使用CCMP,四次握手协议使用HMACSHA1

NIST密钥算法。更麻烦的是,如果采用TKIP协议,HMAC-MD5和RC4算法会分别用来认证和加密数据,这个选择过程的概述见表1。

我们现在打算搭建一个流氓AP,在公告的时候只支持TKIP加密。因此受害者如果想连接到AP上就会使用TKIP协议,反过来在四次握手传输密钥将使用RC4加密。这是因为客户端只在接收Msg3后才能检测到降级攻击。但是,要使AP发送Msg3,它必须首先接收并成功验证Msg2的完整性。如果无法通过协商的会话密钥验证其完整性,AP将无法继续握手。由于会话密钥与客户端和AP的MAC地址有关,这意味着我们必须创建一个与真实AP的MAC地址相同的流氓AP。

庆幸的是,通过执行一个基于频道的中间人攻击(46),这是有可能实现的。本质上,攻击者在不同的频带上克隆AP,并将包转发到真实AP。不修改转发帧中的MAC地址。这保证了站点和AP将生成相同的会话密钥,这意味着在AP中将成功地验证第二次握手的真实性。中间人这个位置允许攻击者能可靠的抓取数据包。尤其是,它会利用这一地位修改信标和探测响应,使AP看起来只支持(WPA-) TKIP加密 。因此,客户端将被迫选择TKIP,导致AP使用RC4加。            

         我们测试了一下用这个降级的方式攻击一个广播报文支持TKIP和CCMP协议的网络。.因为流氓AP只支持TKIP协议,受害者就会选选择TKIP协议。然后,我们就可以确保AP只会使用RC4加密组秘钥,客户端只有在第三次握手之后才会检测到已经受到攻击。

有趣的是,四次握手机制使用RC4加密的方式十分独特[22, x8.5.2j]。每个消息RC4密钥是16个字节的初始化向量(IV)的级联和16字节的密钥加密密钥(KEK)。此外,初始的256个密码流字节也减少了。这个结构和在WEP中的有点类似,假设IV再长一点,初始的密码流字节就会更少。使用更长的IV似乎会减弱每个消息的秘钥长度[28, 36],而减少的初始密码流字节恰恰是应该加强的东西。在接下来的两节中,我们分析了这种特殊组合的影响。

我们首先检查是否可以执行类似于那些WEP上的密钥恢复攻击[11, 42]。一般来说,这些攻击是适用于IV被附加到一个固定的秘钥上的情况。这个符合在四次握手机制中每个消息的秘钥K的数据结构,这个秘钥中公共16字节的IV是附在静态的16字节KEK秘钥上。每个秘钥的构造如下所示:

K = IV||KEK

虽然RC4的前256密码流字节被简化了,Mantin表示这并不能预防秘钥恢复攻击[28]。我们采用Mantin的方法攻击四次握手,研究在实际上这种攻击方法是否可行。

类似于原始的FMS攻击[11],Mantin使用了一个迭代的过程来恢复密钥K[28]。也就是说每次的迭代假设前x字节的K是已知的,并试图恢复下一个字节K[x]。Mantin新的迭代攻击方式第一步,是在SKSA条件下,收集IV

我们将这些称为可用的Ivs,这些可用的IVS会泄露秘钥的K[x]字节,通过下列关系[28]:

利用这些关系,通过一个简单的表决机制就可以恢复K[x]。每一个IV通过等式(1)都会生成一个确定的值。在所有的IVS通过计算,出现最多的那个数字就可以假定为K[x]的值。这样做不好的一个方面就是任何一个字节算错意味着整个K秘钥都算错了。为了减少这种情况,我们用C来代表每个字节最可能是的值,我们得出C16计算值作为K秘钥,每个计算值可以根据抓取到的Ivs和相关的密码流进行验证。我们模拟攻击四次握手机制,目标是看恢复KEK秘钥需要抓取多少可用的IVS。模拟的结果如图5所示。

图5:找到16字节KEK的概率和给出可用IVs数量的关系

为了获得80%的成功几率,大概需要收集221组可用的Ivs .注意,执行这次攻击,我们必须确定z257的值。庆幸的是,这个值可以根据可预测的IEs确定,IES位于EAPOL秘钥中数据域的起始位置,这意味着我们可以从这些起始位置的秘钥流中导出。

我们先看看收集到需要的IVs需要多大的精力。首先我们注意到,SKSAx-1 [1]=x满足条件,最有可能的方式是当X的值和在KSA循环1的位置1交换(回顾表格4)。或者更准确地说,j1 = x。因为K[x]在第一次循环似乎没有修改。事实上,如果J=1其他15个循环只改变位置1。假设使用一个随意的初始IV,就不会出现(255/256)15= 0:94。在等式1,j1 = K[0]+1+K[1](我们假设K[0]≠1,出现这个值的概率很高)。因此,在概率很高的情况下,当k [ 0 ] +k [ 1 ]=x-1时,IV是适用的。

802.11标准规定,一个站点启动时必须生成一个初始的随机IV,并在消息中使用它后增加IV。换句话说,IV可以看成是一个计数器。然而,它并没有具体说明是否使用大端或者小端计数器。按照以往的经验,这里应该是将IV作为一个大端计数器。从一个防御者的角度,收集到足够数量的可用IV需要很长的时间。假设K[0]+K[1] = x ,也就是说为了满足N个可用IVS来迭代,需要抓取256*n个数据包。

然而可以通过强行中断客户端连接的方法就可获得许多次握手连接的数据包,新的握手连接将使用不同的KEK秘钥。因为我的攻击是假设KEK是固定的,所以这个方法不可用。为了让AP每次在握手机制中使用相同的KEK加密,我们找到唯一的方法是让AP重新发送直到KEK相同为止。

注意,每次发送都会使用新的IV。不幸的是,在AP放弃和终止握手之前,只发送了很少的信息。在下一节,我们会展示一种可以容忍KEK频繁变化的攻击方法。总之,802.11协议中的握手机制对于密码恢复攻击是十分脆弱的。然而,这样的攻击方法似乎也很难普及。

我们现在把注意力转向明文恢复攻击,攻击者的目标信息,多次在不同RC4密钥加密。先前对RC4的分析已经表明,对TLS和TKIP的攻击在实际应用中已经十分边缘化了,所以这些类型的攻击很容易成功。尤其是,Paterson et al. [37]攻击WPA-TKIP的方式和我们的很像。他们表明,wpa-tkip的RC4密钥中,每个消息的RC4秘钥中,公共的3个字节的前缀生成一个和前缀有关的重定向,并指向RC4秘钥流。  攻击者可以预先计算这些前缀相关的重定向,针对RC4加密的前几个字节准备一次有效的明文恢复攻击。这也促使我们研究一下,是否在四次握手机制中的公共16位IV是否也引用到了IV相关的重定向。因此,我们检查了EAPOL帧中的公共IV是否有重定向,然后,通过模拟演示看这些是否可用于恢复组密钥。

对每个可能有用的IV去计算是不可能实现的,因为这意味着需要计算2128个值。相反,我们根据随机抽取的四个IVS计算出一个详细的秘钥流。这就表明在秘钥流中有长的,与IV有关的重定向。根据这个结果,我们在初始化中将IV0都置0,然后观察IV中每个特定的位置,它们的值是怎么变的,并如何影响秘钥流的分配。我们将在X位置变化的值记成IV0[x] = y.生成所有的数据集需要13个CPU周期以上。

图6:RC4秘钥流中的重定向


图6A和6B分别展示了初始化向量IVa和IVB密钥分配

IVc 和 Ivd 的分配值看起来很像。它们的值是以Python形式随机生成的,如下:

IVa = 0x2fe931f824ef842bf262dbca357bb31c

IVb = 0x48d9859f9fa08bb1599744a20491dd49

IVc = 0x6c1924761b03faf8decc0dfc09dd3078

IVd = 0xe31257489cbe7d91e5365286c26f5023

这些秘钥流分配的每个IV使用245 RC4秘钥加密。为了对比图 6c 和图 9c展示了密钥流完全分配到随机16字节的秘钥中,大概使用了247 RC4生成的。我们观察到,初始化向量会生成许多重定向,可以从图中的直线看出来即使是在256位置之后。通过对比图6c分配到随机到16个字节的RC4秘钥中的重定向,我们可以确定重定向不是由特定的IV值引起的。相反,他们似乎与RC4同时生成的。

我们还生成了16个数据集,在每个数据集置0 的里特定位置的值都会发生变化。就是0 <x< 15在数据集中,我们设定IV0[x] = y ,y的范围是0-255之间。每个数据集是由243生成,产生了相当大的分配量。尽管如此,对这些数据集的检查证实了每一个IV都诱发了特定的重定向,在我们的图表中可以看到直线。关于这些偏见的更详细的讨论超出了范围,留给未来的工作。

现在,我们用与IV相关的重定向来恢复重复的明文,为了得到用恢复明文的攻击方式破解四次握手机制的效果。这是通过预先计算的密钥密文分布和抓取到的密文相结合,这是为了计算每个明文值出现的概率。真实的明文就应该是概率最高的那个值。因为我们的目标是评估


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//