[原创]看雪安全峰会—《从WPA2四次握手看KRACK密钥重装攻击》
发表于:
2018-7-24 21:32
6415
[原创]看雪安全峰会—《从WPA2四次握手看KRACK密钥重装攻击》
前言
上周六在看雪安全峰会分享了一个议题,简单整理了一下分享过程中的一些内容,做了一个简单记录,有些地方由于时长有限,可能过的比较快,感兴趣的朋友可以看一下文字的一些记录,另外议题的PPT和视频demo上传至百度云了,论坛里有需要的朋友可以下载下来,欢迎一起学习和交流。
链接:https://pan.baidu.com/s/12U08fy1gxRpeWWAUhO4iEg
密码:awbb
《从WPA2四次握手看KRACK密钥重装攻击》
关于wpa2协议的这个漏洞相信大家在去年年底应该或多或少的都有一些了解,因为当时各路新闻也是采用了很大的篇幅来报道这一漏洞,一度营造了一种Wi-Fi马上要完了的氛围。我当时看到这个消息之后其实只是简单了解了一下,因为我印象里WPA2协议是在数学上被证明过是安全的,而且都已经服役了这么长时间了,也没有出现过什么问题,这回直接爆出了协议层面的缺陷,那肯定得是很严重的漏洞了,但也只是去简单看了一下,并没有深入去了解。这个漏洞真正让我感兴趣是在细节公开的几个月之后,我有一次突然想起来既然漏洞这么严重,那怎么这还没过去多久就没动静了呢,然后我回过头来去找当时的一些报道,发现内容多半也是词不达意,不但漏洞的原理没说清楚,而且最后krack攻击能干什么也没说,这就让我觉得挺有意思,想进一步的去了解一下这次的事件到底是说了一些什么东西,于是也就有了后续的一些研究。
我们首先来看一下什么是krack,krack也就是我们所说的密钥重装攻击,它的本质还是属于一种重放攻击,这种攻击的作用范围很有限,因为后面我们会提到需要搞一些中间人攻击的东西,它主要利用的是WPA或WPA2协议在实现上的漏洞,这个漏洞在四次握手过程当中就出现了,当客户端试图连接wifi时,四次握手过程被触发,其中有一个AP向客户端传输Msg3的过程,攻击者可以反复重放这一过程,导致nouce被重置,继而导致传输的数据可以被攻击者解密,这个是krack的一个大致流程,至于krakc是如何做到这些的,这个就需要我们首先去搞清楚这次漏洞的原理了,因为我们说过问题是出在四次握手过程当中的,所有我们还是要回到四次握手协议本身,来看一看问题出在什么地方。
在看四次握手协议之前我们先来明确一些概念,我们说四次握手过程会产生一个叫做PTK的会话密钥,这个密钥我们在后面还会反复提到,所以我们先来看一下它,PTK实际上可以看做由5个部分组成,前两个部分分别是Anonce和Snonce,这里nonce的话就是我们密码学上随机数的一个意思,就是number used once,表示一个随机数,这里我们在客户端和AP通信的过程中,我们把AP这一方也叫做authenticator,就是认证方的意思,客户端这一方也叫做supplicant,表示请求方的意思,这里Anonce和Snonce就是分别表示AP和客户端产生的两个随机数,就是区分了一下产生的源头。然后接下来的两个部分Amac和Smac也是一样,分别表示了两端的MAC地址,最后一个部分是PMK,PMK这个东西又可以看做是由一个pre-shared key,预共享密钥来生的,也可以说是我们平时说的这个wifi密码,但是他不是只由这一部分来生成,他还包含了一些其他的参数,共同生成了这个PMK,然后PMK还不是用来加密数据的,他又和我们刚才提到的另外四个部分共同组成了PTK,这个PTK才是真正我们后面用来加密传输的数据的密钥,这个是我们首先需要明确的一个地方。
好明确了这些概念之后,我们再来看一下四次握手的过程,首先第一个报文Msg1是由AP发送给客户端的,这个报文里面主要包含两个东西,一个是这个Anonce,这个nonce的话就是AP这边,也就是authenticator这边产生的一个随机数,另一个就是这个r,r在这表示的就是replay cunter的意思,就是一个重放计数器,它会随着authenticator这边每发送一次自动加1,但是同一次发送的应答过程中使用的r不变,所以可以看到客户端回应的这个还是一个r,它主要就是用来检测一下重放的数据,没有什么别的用途。好那么我们之前说过,生成PTK需要5样东西,现在客户端这边4样都有,就缺一个Anonce,就等着这个Anonce传过来呢,现在收到了这个,它要准备的东西都全了,所以客户端这边就会生成一个PTK,这边生成PTK了但是那边还没有对吧,所以客户端这边就会回应一个Msg2,这个里面也是包含了2个东西,一个是这个SNonce,表示客户端也就是supplicant这边产生的一个随机数,另一个就是这个replay counter,跟传过来的这个保持一致也是一个r。然后AP这边也是就等着这个SNonce呢,现在他收到了这个东西,他这边也全了,所以这边也生产了一个PTK。现在两边用来秘密通信的PTK就都有了,也就是说,咱们四次握手的前两次握手,解决了这个PTK的产生问题。
然后接下来看这个第三次握手,AP这边生成这个PTK之后实际上还会验证一下,如果没问题了,那么就会发送第三个报文给客户端,这个报文也是主要包括2个东西,一个是这个GTK组密钥,另一个就是replay counter+1,因为这边是AP第二次向客户端发报文么所以这个r+1,然后客户端这边收到组密钥之后就会回复一个Msg4过去,这个Msg4实际上就是一个ACK的作用,所以说在这个地方,如果AP没有收到这个Msg4会怎么样,他就会认为我这个Msg3丢了,因为我发一个东西过去都没人理我,没人应答,那我肯定得重发一次,所以说只要AP这边没收到Msg4他就会重传Msg3。但是客户端这边不管这些,他会想我可不管你AP这边收没收到,反正我这边这个Msg4就是这个ACK只要是发出去了,你收没收到反正我这边的工作都完成了,四次握手以经结束了,所以我接下来就会使用这两个密钥,一个PTK一个GTK,如果发单播我就用PTK发组播我就用GTK,后面所有我客户端这边发送的东西都会经过加密了。但是AP这边的话,只有成功接收到Msg4之后,才会安装PTK,否则他就会重传Msg3,直到最后成功收到Msg4,他这边也就认为工作结束了,然后才会安装PTK,这个就是四次握手的一个主要流程。
好我们刚才说到接下来,客户端就会用这个PTK来进行加密了对吧,我们一直在说加密加密,那么到底是怎么加密的,我们详细来看一下。首先客户端这里想要发送一个明文的数据,然后呢,他会使用这个PTK,和我们另一样东西结合起来,这样东西就是Nonce,我们之前在说krack的原理的时候说他因为密钥重装倒置nonce被重置,说的就是这里的这个Nonce,而不是之前四次握手里面说的那个Anonce和Snonce,这里一定要区分清楚,很多人都当成了四次握手里的那个nonce,不是那个,nonce重置指的是加密的过程中用到的这个nonce,在这里。那么这个nonce的话在这里又叫做packet number,这是一个什么东西呢,就是所咱们这个客户端,每发送一个报文,这个packet number就会+1,发一个+1发一个+1,这样的话我们可以看到虽然它叫做nonce但是实际上它一点也不随机,因为它在这就是一个序列,或者说就是我们四次握手里的那个重放计数器,它有他自己的增长规律,那么这样做有什么好处呢,我们可以看一下他把这个PTK和nonce结合起来,做成了这么一个密钥流,然后有一个明文数据过来,我就用这么一个密钥流,来进行一个异或运算,就可以得到一个密文数据,这个时候你就会发现因为我们的nonce是一个变化的值,所以有一个包过来,我们就这么结合一下,生成一个密钥流,所以我们的这个密钥流也是一直在变的,对于每一个包它的密钥流都不一样,你发一个包,它这边nonce+1,下一个过来的包密钥流又不一样了,所以相当于每一个包都可以使用一个不同的钥匙,那么这有啥用呢。其实了解过密码学的一些人应该都知道,加密的人其实很怕一样东西,叫做数学统计,在这里就是说如果我们反复用同一个密钥去加密很多数据的话,那么存在通过数学统计,找出它的规律,继而解密数据的这种可能性。那么现在我每次使用的密钥都不一样,我就可以在一定程度上避免这种问题。好那这个的话就是我们加密的一个详细过程,我们用PTK,和一个并不随机的Nonce,生成一个密钥流,然后每一个明文数据,都采用不同的密钥流,进行异或运算,得到一个密文数据,这个就是加密的过程,这里我们还需要注意一点的是,我们刚才说krack攻击可以导致密钥被重装继而nonce被重置,现在我们看一下这个加密过程,因为我们的PTK是不变的,所以说如果nonce被重用的话,也就相当于我们的密钥流被重用了,就对于WPA2的这里面的几种加密方式来说,nonce被重用就等于密钥流被重用了,这个我们待会还会提到。
好现在我们清楚了四次握手的过程以后,就可以来看一下krack的攻击过程了,首先客户端试图连接WI-FI,比如说正常的连接到了AP的信道6,这一过程没有问题,然后攻击者首先要做的是什么呢,就是通过deauthtication洪水一类的无线儿攻击,断开客户端与AP的连接,被迫其下线,那么说这个怎么防呢,它没法防,因为这东西它不认证、也不加密,不讲道理,说掉线就掉线了,它防不胜防的这个东西。但是客户端它发现自己掉线了以后,他就会尝试重新去连接这个AP,这个时候呢,攻击者需要再次CSA一类的攻击,强制客户端连接上另一个信道,这个是什么意思呢,就是攻击者可以使用2块网卡,因为我们知道MAC地址很容易伪装,所以攻击者在这可以模拟成一个AP,它把信道6的东西克隆一份,这样再通过CSA攻击让客户端连接到另一个信道上,比如说假设连接上的是这个信道1,这样攻击者实际上就卡在了两个信道中间,扮演了一个中间人的角色,客户端和AP之间的流量都会经过这么一个中间人的传输,这是我们krack攻击的第一步,先卡上一个中间人的位置,但是它暂时还不进行任何的篡改,我们接下来看第二步:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-7-24 21:42
被roadicing编辑
,原因: