这两天最火爆的莫过 “WPA2被破解” 这一条大新闻了。我对其原理非常感兴趣,苦于没有找到的文献,所以就整理这么一篇,方便自己和大家理解。主要是根据目前发布的文章以及一些相关资料。

壹、WPA2的机制

无线通信协议有很多,例如WEP,WPA等都已经被证明不安全,还有TKIP机制也有大量文献说明其缺陷。WPA2协议是WIFI联盟一直力推的协议,被广泛运用在现在的无线互联网络当中;CCMP(Counter Mode CBC-MAC Protocol  )我之前也被推行过很长一段时间,现在有新的GCMP,不过都是基于计数器CTR的,都类似。我下面会以WPA2和CCMP为例解释此次事件。

在WPA2中运用了丰富的密码手段,原因是无线信道的开放性必须有加密措施来保证传输过程的安全。握手协议则是通信双方互相进行一个身份确认的过程。WPA2的四次握手协议是EAPOL(EAP on LAN,即 Extensible Authentication Protocol on LAN)的四次握手协议的落地,,所有的数据包都是使用EAPOL帧进行封装的,EAPOL数据帧的格式可以参考下图:

图1:EAPOL帧结构,来源Mathy Vanhoef团队论文(https://papers.mathyvanhoef.com/ccs2017.pdf)

关于EAP协议:之前在西电上课刚接触到的时候就理解了好一会,因为它不像TCP/IP一样是直接落地的协议。它是一个密码协议,用到相同的密码手段的地方都可以使用它,然后再在不同场景转化为落地的东西,所以一定意义上可以理解成是“指导协议的协议”。所以我看来,这次四次握手出现的问题,也很有可能在其他用到类似密码手段的地方重新出现。这里涉及到很多密码学通用的概念,因此尊重作者,下文将AP(wifi接入点)称为认证方(Authenticator),待接入的STATION称为请求方(Supplicant)。

该帧中关键的点有如下几个

header部分标志了该帧的用途。

replay-counter是一个计数器,用于防止重放攻击:认证方下发认证请求时,设置该值,请求方在回应认证要求时,使用相同的值;在一系列会话中,该计数器递增。

nonce 部分存放之后生成密钥要使用到的值。注意,这里的nonce不是我们后面会话中的nonce。

MIC 作为完整性校验部分,可选。

KeyData 部分未来存放group key用,这里不展开。

那么接下来还是看一下WPA2的4次握手的过程:

图2:来源wikipedia

握手之前会有一些无线发现的过程;WPA2 的4次握手,目标是完成身份认证,建立会话密钥;握手之后是组密钥协商过程,此次事件在这里也发现有问题。

这里很重要,我阐述一遍四次握手的过程。

①、由认证方发起,下发一个握手请求,并且发送了认证方随机生成的nonce值ANonce。

②、申请方收到ANonce之后,也随机生成一个SNonce发还给认证方,同时附加MIC值。

双方在具备两个nonce之后,就可以开始分别计算PTK(Pairwise Transient Key)了。PTK的计算方法可以看作是计算(PMK,ANonce,SNonce,认证方的MAC地址 ,请求方的MAC地址)这样一个5元组的哈希值。这里的PMK(Pairwise Master Key)则可以看作是ssid和口令(就是平常的wifi密码,不过这里实际是先又口令生成PSK,再到这里)的哈希值。

MIC值是PTK的前16个字节。这里如果双方的MIC一致,说明PMK生成的一致,则说明双方拥有的口令一致(即输对了wifi密码),那么认证方就认可请求方的身份了。

③、认证方生成并发放组会话密钥,同时下发另一个MIC。

④、最后请求方回应一个Ack完成会话。

之后通信双方就可以使用PTK中的各种密钥进行安全的通信了。

贰、问题所在

佩服他们的想法,他们意识到一点,在收到握手包③之后,请求方就会认为生成的PTK是正确的,而不清楚也没有办法验证认证方是否收到了握手包④,安装PTK并开始进行使用其派生的密钥作为CCMP的会话密钥,通过802.1x进行通信了。

而且,在协议的实现上有规定:1、每次生成PTK之后,都要重设CCMP的计数器的值。(有关计数器后面再说)2、处在已经安装PTK状态下的请求方要处理重传的握手包①和③

而对于认证方而言,则不会安装PTK。如果认证方收不到握手包④就会重传握手包③,同时递增其中的replay-counter值来使其有效。这样就出现问题了,一个显而易见的攻击方法是:

攻击者可以事先在申请者和认证者之间占据一个中间人的位置。然后通过阻断握手包④到达认证方来时认证方发送新的握手包③。这样就导致申请方会重新安装PTK,这样,就能够重设CCMP中的计数器。而且基于不同的会话加密协议,可以实现如重放、解密、伪造等能力略有不同。

如何实现中间人:不能简单做中继因为PTK的计算使用到了双方的MAC地址。Mathy Vanhoef团队的方案是使用基于信道不同的AP克隆,同时也保持MAC地址一致

一个基础的攻击模型如下:

在第一阶段,阻断了回传的握手包④。然后截获了加密的数据报文。然后再下一次认证方发起重传时,再转发之,实现密钥重安装,之后又得到一份计数器被重用之后的密文。如下图,CTR模式下面,密钥流和计数器是关联的,计数器重用就相当于密钥流复用了,在密码学上就标志这短明文沦陷了。而且可以通过重复握手过程来多次实施该攻击。

图4、CTR模式的加密图解(来源wikipedia

虽然计数器重用以后离恢复明文还有一些密码学上面的路要走,但是该团队还发现了很多有意思的协议实现上面的BUG,导致这个攻击能够相当有威力。就比如视频中演示到的,linux和Android重安装之后的加密密钥变为了空;还有对重传replay字段校验不严格等等也导致了有意思的错误。

叁、最后说两句

至此,基本这个漏洞如何产生的已经基本解释清楚。但是本人其实还有不少问题:

例如视频中,STATION实现上有bug使用的是空加密密钥,AP能够承认并接受这些数据包?

AP未收到握手包④时,STATION发过来的正常通信的数据包是否丢弃,是否会造成网络质量下降或者STATION断网的假像?

……

落笔就发现很多问题Mathy Vanhoef团队披露还不够清楚,也可能是之前对这个协议了解与实现不够,这些模糊的地方也正是研究人员他们花费心力研究的地方。

感觉这个漏洞不全是路由器等认证方一方的问题,请求方也有实现上的缺陷。

个人学习的结果,有什么不对的大家及时指出来。

这次事件还是告诉我,很多以前信任的底层组件,密码协议实现上也许并没有那么健壮。

最后给一些身边非安全相关朋友的建议:

跟紧更新

这个不是蹭网用的,所以不要屯8187啦。

改密码也没有用,控制自家wifi功率,减小一点覆盖范围倒是不错的选择。

WPA2密钥重装攻击原理分析的更多相关文章

  1. 148.CSRF攻击原理分析、防御、装饰器、中间件、IFrame以及js实现csrf攻击

    CSRF攻击概述: CSRF(Cross Site Request Forgery 跨站域请求伪造)是一种网站攻击的方式,它在2007年曾被列为互联网20大安全隐患之一.其他的安全隐患,比如SQL脚本 ...

  2. 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  3. PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

    我们都知道,只要合理正确使用PDO(PDO一是PHP数据对象(PHP Data Object)的缩写),可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_ ...

  4. JavaScript实现DDoS攻击原理,以及保护措施。

    DDos介绍 最普遍的攻击是对网站进行分布式拒绝服务(DDoS)攻击.在一个典型的DDoS攻击中,攻击者通过发送大量的数据到服务器,占用服务资源.从而达到阻止其他用户的访问. 如果黑客使用JavaSc ...

  5. XSS (跨站脚本攻击) 的原理分析,测试 && 应对措施

    1 1 1 XSS (跨站脚本攻击) 的原理分析,测试 1 demo: <!DOCTYPE html> <html lang="en"> <head& ...

  6. OAuth认证协议原理分析及同步消息到Twitter和Facebook使用方法

    OAuth有什么用?为什么要使用OAuth? twitter或豆瓣用户一定会发现,有时候,在别的网站,点登录后转到 twitter登录,之后转回原网站,你会发现你已经登录此网站了,这种网站就是这个效果 ...

  7. DDOS的攻击原理和防护指南(转)

    DDOS的攻击原理和防护指南 作者:冰盾防火墙 网站:www.bingdun.com 日期:2008-01-07   我们现在来分析DDOS的攻击原理.     首先,DDOS是英文Distribut ...

  8. DDOS攻击原理及防护方法论

      从 07年的爱沙尼亚DDOS信息战,到今年广西南宁30个网吧遭受到DDOS勒索,再到新浪网遭受DDOS攻击无法提供对外服务500多分钟. DDOS愈演愈烈,攻击事件明显增多,攻击流量也明显增大,形 ...

  9. DDOS的攻击原理和防护指南

    我们现在来分析DDOS的攻击原理. 首先,DDOS是英文Distributed Denial of Service的缩写,意思是分布式拒绝服务.拒绝服务又是什么意思呢?就是采取一些垃圾数据包来阻塞网站 ...

随机推荐

  1. OpenSSL SNI

    网站ssl检测工具 https://www.ssllabs.com/ssltest/analyze.html?d=gggl.houseoflux.com.cn https://myssl.com/  ...

  2. webdriver高级应用- 精确比较页面截图图片

    判断两张图是否完全一致,如果存在任何不一致,会认为图片不匹配,代码如下: #encoding=utf-8 from selenium import webdriver import unittest, ...

  3. linux内核代码注释 赵炯 第三章引导启动程序

    linux内核代码注释 第三章引导启动程序 boot目录中的三个汇编代码文件   bootsect.s和setup.s采用近似intel的汇编语法,需要8086汇编器连接器as86和ld86 head ...

  4. x86 保护模式 十 分页管理机制

    x86   保护模式  十  分页管理机制 8.386开始支持分页管理机制 段机制实现虚拟地址到线性地址的转换,分页机制实现线性地址到物理地址的转换.如果不启用分页,那么线性就是物理地址 一  分页管 ...

  5. 聊聊、Nginx 初始化日志文件

    我们接着上一篇文章继续来看看 ngx_regex_init()函数.搜索 ngx_regex_init 得到位置为src/core/ngx_regex.c:ngx_regex_init(void). ...

  6. 九度oj 题目1358:陈博的平均主义

    题目描述: 在JOBDU团队里,陈博是最讲平均主义的人了,但并不是像梁山好汉那样能够做到有钱同花,有肉同吃,毕竟,他还是被家里的领导管着的……陈博的平均主义,就只能体现在他对数字的喜好了.陈博特别喜欢 ...

  7. java.net.ConnectException: Connection timed out: no further information

    ping IP 地址 检查是否连上 重启虚拟机 检查主机

  8. Git 应用问题(一) —— failed to push some refs to git

    今天在本地创建了一个新的 repository,想关联到 Github 上的时候出现问题,如下: Gerrard@LAPTOP-79570TK2 MINGW64 /g/github-workspace ...

  9. HDU——1405The Last Practice(试手map)

    The Last Practice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  10. 第一次使用HTML

    1.第一次使用HTML <title>第一次使用HTML</title></head><body>hello,HTML2.文本处理 <title& ...