KRACK密钥重装攻击

不新鲜的东西了,写这个是因为网络安全课老师让学的,那就顺便记在博客里吧!

无线通信过程

  1. STA连接到AP,先向所有信道发送probe帧发现AP,AP做response
  2. STA发送认证请求进行认证
  3. STA发送关联请求进行关联

WEP SKA

认证过程:

  1. STA 发起认证请求
  2. AP返回128字节的随机challenge
  3. STA使用预共享秘钥加密challenge并回传
  4. AP验证回传密文并返回结果

    当认证完成并建立关联关系,所有通信会使用RC4加密:

(加密)

(解密)
由于IV只有24位,很容易破解

WPA PSK

关联到同一AP的设备共享同一信道,STA与AP使用PTK(pairwise key)通信,AP之间组播使用GTK(group key)通信:

其中PTK由下面的方法生成:

其中PMK = hash(ESSID + PSK + 4096),Nonce1由AP生成,Nonce2由STA生成,MAC1与MAC2是STA与AP的MAC地址,生成的东西要么用来进行数据加密,要么用来进行完整性校验加密。
而GTK由AP生成定时刷新。
认证过程:

  1. AP生成Nonce1并明文发送给STA
  2. STA生成Nonce2,使用hash(PMK+Nonce1+Nonce2+MAC1+MAC2)生成PTK,哈希PTK并把哈希值连同明文Nonce2一起发送给AP
  3. AP接收Nonce2使用同样的方法生成PTK得MIC验证之,若通过则返回密文GTK与MIC
  4. STA收到GTK+MIC发送ACK,认证完成(整个过程都有数据包ID,可阻止重放攻击)

WPA

WPA1依然使用RC4这种序列密码加密,只是WPA1使用了128位的key和48位的初始向量,这是针对WEP初始向量位数过小漏洞设计的。
WPA2使用AES加密,工作模式是CTR计数器模式,WPA1与WPA都使用了帧计数器避免重放攻击。

WPA密码破解

看上面的过程,可以知道整个过程并不会传送预共享秘钥,传送的和秘钥有关的就是那个MIC,通过抓握手包可以得到Nonce1+Nonce2+MAC1+MAC2与MIC,于是通过公式可以通过正向匹配这种暴力运算得到PMK,而PMK是由ESSID + PSK + 4096生成,而我们最终要求得到的就是PSK,所以这就是普通的hash破解,只是由于essid这一因素不固定没有表可用!

KRACK


再次回顾4次握手过程,若第4次,AP未接收到STA发送的ACK包,则会认为第3步的数据包未发送成功等,反正就是会重新重第3步开始继续这个过程,发送GTK+MIC,此时STA收到AP发来的合法的数据包,会重新安装PTK,并且重置计数器与随机数,这样下次发送的数据包与之前同一时机发送的数据包将会使用相同的秘钥加密,这样是不安全的(但是怎么通过在这个破解处明文还是有点困难的)

这样似乎还没那么可怕,但是还有种更糟糕的情况,wifi标准中注释有写到PTK一旦安装后,就可从内存中清除加密密钥,即秘钥将全为0x00,这样就可以伪造同MAC+ESSID的fakeAP,秘钥为0x00,使受害者在不知情情况下连上伪造AP。

fakeAP攻击过程

  1. fakeAP复制realAP的MAC与ESSID,并处于不同信道
  2. 向目标STA发送deauth迫使其断开连接
  3. STA自动再次连接,在第4步前发送CSA beacon pairs使STA迁移到fakeAP所在信道,此时ACK响应将被拦截,而PTK以在STA上装载成功
  4. 获取AP重发的GTP+MIC数据包,通过fakeAP转发给STA,由于是真实有效的数据包,STA接受并重安装PTK,此时密钥已经清零所以fakeAP是已知秘钥于是可以成功与STA完成认证,进行通信

密文恢复

这是此协议漏洞的直接影响,我们知道WPA1采用RC4这种序列密码,它是由密钥序列生成器生成流密钥后将其与明文异或,它的安全性取决于密钥序列的安全性,因为RC4的密钥序列生成器有极大的周期序列所以不会遇到在一次加密中产生相同的秘钥序列,即使相同的明文在不同时刻也会加密生成不同的密文;同样,尽管WPA2采用的AES这种分组密码加密,但是它使用时也会转换成序列密码的形式,AES采用CTR模式生成流密钥,因为计数器一直在变化,生成的密钥也一直在变化:

然而当进行密钥重安装以后,计数器会重置,计数器重置就代表着新生成的流密钥和之前生成的流密钥一样,会出现如下情况:

C1 = K ^ M1
C2 = K ^ M2
C3 = K ^ M3
...........

C1,C2,Cn会在网络上传播,我们能够捕获到,现在未知K,M1,M2…Mn,而Mi其实部分位是固定的,当知道任意一个Mi时就可以通过运算得到其他的Mj,需要注意,这里的K是流密钥的一部分,也就意味着Mi之间要相互对应,于是,这会成为一种限制,对于一些设备来说,其攻击窗口很小,重复使用的密钥流比较短,因此可以解密的数据长度受限。比如,对于一些接受重传消息为密文的设备,可行的攻击如下图所示,图中红框中是重新安装key前后使用了相同密钥流的两条消息,由于在重新安装key之前只可能发出图中所示的一条消息,因此可恢复的数据长度最多与此消息长度相同。

此外,即使重复使用的密钥流较长,受解密原理的影响,能解密出的消息内容仍旧有很大不确定性。如上所述,解密消息依靠的是使用了重复的密钥流,也就是说攻击者看到的两段密文c1,c2都是由同一密钥流加密,那么就会有c1 xor c2 = p1 xor p2,在已知c1和c2的情况下,确定p1和p2各自准确的内容,还需要一些工作。上图中的情况属于较为简单的一类,p1(也就是Msg4(r+2))是可以确定其大部分内容的,这样就可以比较容易地得出p2(也就是客户端发送的Data)中相应长度的内容。而对于其他p1和p2都无已知信息的情况下,恢复p1和p2是比较困难的。而且,由于在这种攻击场景下,攻击者只能对client或者AP某一端(根据论文中提到的两种不同的攻击模型)发出的加密数据包产生威胁,而对没有产生key reuse的另一端是无法构成任何威胁的,这就限制了攻击者只能在通讯的最初阶段动一些手脚,而无法对稍微复杂的协议的后续数据进行攻击,例如一个HTTP通讯,还没有进入到TCP握手阶段,key reuse attack已经无法生效了,更不要提威胁后续的实质内容。-[1]

参考

[1]https://zhuanlan.zhihu.com/p/30281357
[2]http://www.freebuf.com/articles/wireless/153324.html
[3]http://www.freebuf.com/articles/wireless/150981.html
[4]http://www.freebuf.com/articles/wireless/150953.html