这两天最火爆的莫过 “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. 反转单词顺序 VS 左旋转字符串

    题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标垫符号和普通字母一样处理.例如输入字符串“I am a student.”,则输出“student. a am I ...

  2. Jenkins自动化搭建测试环境(二)

    Fork项目 找到项目 单击Fork 这时,会发送一个邮件到你的git邮箱中,点击链接即可完成fork 这样,这个工程就已经fork到自己的git上了 然后就可以下载这个工程到本机了 这里我们需要使用 ...

  3. Oracle 10g Data Pump Expdp/Impdp 详解

    Data Pump 介绍 在第一部分看了2段官网的说明, 可以看出数据泵的工作流程如下: (1)在命令行执行命令 (2)expdp/impd 命令调用DBMS_DATAPUMP PL/SQL包. 这个 ...

  4. Leetcode 480.滑动窗口中位数

    滑动窗口中位数 中位数是有序序列最中间的那个数.如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...

  5. PHP 格式化显示时间 date()函数

    Y 4位数字年,y为2位数字,如99即1999年 m 数字月份,前面有前导0,如01.n 为无前导0数字月份 F 月份,完整的文本格式,例如 January 或者 March M 三个字母缩写表示的月 ...

  6. 使用jackson解析JSON数据

    本文介绍使用jackson来对json数据进行解析操作 首先,需要去官网下载jackson,本文使用的是(jackson-all-1.9.11.jar) 主要通过ObjectMapper对json进行 ...

  7. iOS学习笔记41-Swift(一)基础部分

    一.Swift语言介绍 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题. Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种 ...

  8. 【bzoj1002】[FJOI2007]轮状病毒 矩阵树定理+高精度

    题目描述 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病 ...

  9. jquery不同版本导致的checkbox设置了属性,但是没有选中效果

    由于本人好久不做B/S了,今天同学问我个问题才发现了jquery版本还是存在差异的,今天写的就是关于获取checkbox属性的方式(可能不应该叫属性了其实,后面就知道了). 看下面的代码截图吧 < ...

  10. JS对象直接量,数组直接量和函数直接量

    对象直接量创建一个对象: var obj = {x:[1,2],y:23}; 代码跟下面是一样的. var obj=new Object(); obj.x=new Array(1,2); obj.y= ...