LEAP

WiFi认证已经第三弹了。LEAP是企业版WiFi常用的认证方式,是EAP的一种,而且没有正式的协议。但是LEAP就像WEP一样不是很安全,ASLEAP就是一个攻击工具。LEAP基本要被PEAP代替。本来是想直接实验PEAP的,没想到我的系统默认用的是LEAP,索性就从简单的开始。

leap
图片来自etutorials

由上图可以看出LEAP的基本认证过程。认证服务器RADIUS通过AP发送给用户一个Challenge,就是一个随机字符串。用户使用特定算法(密码+MD4+DES)处理字符串,返回给RADIUS。同时用户也要对该RADIUS进行认证,步骤相同,但是加密算法不同。


Wireshark分析

通过Wireshark分析我的认证过程。(请不要尝试破解我的密码。。。如果你需要测试,可以联系我)。截图中显示前两步,一个是PC,8 bytes,一个是PR 24bytes。而且Cisco也提醒我这个协议是不安全的,牛!所以有了PC和PR之后就可以开始测试了。
LEAP
查看LEAP协议,有以下约定:

  • PC是RADIUS发送给用户的Challenge
  • PR是用户发送给RADIUS的Response
  • APC是用户发送给RADIUS的Challenge
  • APR是RADIUS发送给用户的Response

那么根据协议,得出:

我去,NtPasswordHash是个什么?搞了半天,这是Microsoft PPP CHAP Extensions,还有Version2.我看着蛋碎,其实就两句话。还有MPPEHASH,原理一样。

然后Challenge的构造是使用DES加密算法。因为出来的NtPW和MPPEHASH都是要补成21字节长,然后分成3段,分别使用这3段作为密钥加密Challenge,然后合并后产生24 bytes的Response。坑爹的是21/3 = 7 bytes。DES要8 bytes密钥,所以首先要扩展密钥。这实在说不清,而且补的那位是奇偶校验位,大多数时候被忽略,看代码。

完整代码和实验数据见github,我的测试结果就不放了。不要告诉我到这份上了,还不知道怎么破解LEAP密码。关于无线还有两部分,一个是PEAP,一个是Reaver。

链接:

  1. LEAP攻击
  2. Cisco官方文档
  3. PPTPKIT
  4. EAP各种代码

openssl heartbleed

      出了POC的时候,我还在上课,下课了大网站都打好了补丁。真是不逢时。有Heartbleed专门的一个网站。毕竟openssl是广泛部署在linux上的,这是影响范围非常大的漏洞。导致各大厂商躺枪。

openssl

     很多博客都已经对这个漏洞进行了分析,我水平还有限,不太看得懂。感觉这个博客才是正宗的。还有大概是翻译的中文博客freebufwooyun

      截至目前(2014.04.08,22:00)我使用ssltest.py(当然作者不是我,是jspenguin)成功测试了account.wandoujia.com,cefamilie.com,存在漏洞没有修复。下面是利用cookie登录豌豆荚的页面。

wandoujia

4.14补充,据说还能恢复密钥,我不是很清楚,看github

所以这件事给我的启示:

  • 协议实现是安全中最薄弱的一环。要Code Review
  • 不要老想着推翻数学理论。
  • 那个ssltest.py脚本为什么这么牛,我要好好修行!

WPA/WPA2-PSK认证过程

WEP是粗制滥造的临近Deadline的不合格品,而WPA则是设计精美的艺术品。以致目前没有真正可行的攻击方法。现行的WPS Pin法(针对路由器设置)和字典法(暴力,下面会讲到),都不算好的针对WPA攻击方法。

总感觉不自己试试就不知道WPA是否真的这么牛掰,所以我用python模拟了WPA的认证过程。这里说的WPA都是PSK(预共享密钥),不是Enterprise。主要区别是Enterprise是同时需要用户名和密码,然后要到RADIUS认证服务器上认证,是大学常里用的WiFi认证方法。而PSK是所有用户一个密码,就是家里用的那种。PSK的一个缺点就是Key固定,一旦被破解,整个家庭网络就跪了。


WPA 认证原理

首先是PSK产生方式。PSK不是我们输入的密码,而是以一个公式产生。我没认真看PBKDF2是怎么样的算法。反正是产生Key的标准。可以以一个命令产生: wpa_passphrase SSID PassPhrase 。当然也有python算法

然后还有个叫PMK的Key,在Personal模式下PSK就是PMK,就不详细说明了。这个PMK还不是实际中使用的,实际使用的是PTK(Pairwise Transient Key)。PTK计算方法也很奇特。 PTK = PRF (PMK + ANonce + SNonce + AA + SPA) 。参数从EAPOL四次握手过程中的前两次得到。而且PTK是有结构的,前16Bytes用来计算MIC,是我用到的。下面示意图和代码说明一切。抓包数据也在github上,有兴趣的可以自己实验。密码包含在代码里。

PTK
TKIP或CCMP的PTK结构,来自aircrack-ng

400px-4-way-handshake.svg
EAPOL四次握手过程,来自wikipedia


真实数据

我在自己的WiFi抓了流量,就是WireShark数据。因为WPA还有两种,一个是WPA一个是WPA2。主要区别是WPA用的是TKIP加密算法,WPA2是CCMP加密算法。下图是TKIP的认证过程。
WPA_TKIP
获取其中的数据,使用Python检验,能得到一致结果。检验的是用我产生的PTK对原始数据签名,看看获得的MIC是否与抓包得到的MIC一致。一致就说明我的模拟没有问题。

然后也有类似的WPA2的CCMP认证过程。认证过程主要区别是EAPOL的第三个帧是加密的,而且使用的是SHA1的hash签名,而TKIP是MD5的hash签名。为什么CCMP更安全,不止是认证过程,还有数据传输过程,我还没有搞清楚。先不管,只管认证过程。WireShark数据截图:具体代码和数据包见github.
WPA_CCMP

所以从上述步骤看,从始至终都没有交换密钥。要破解通信的话,必须捕获EAPOL中的ANouce和SNouce,这样就可以用字典暴力破解。可行性不大。因为一次测试要4096次HMAC,计算量还是可以的,还有PSK还加了盐,彩虹表也用处不大。貌似Linux的密码也是这样的方式。从认证过程来说,WPA还是很安全的。真实过程除了要生成PTK,还要生成GTK(Group Temporal Key)。过程类似,不赘述。

为了完整性,还有Enterprise的没搞。必需等我搞懂SSL/TLS再说。
有用链接:

  1. 非常详细的PPT
  2. 802.11 securityEAPOL细节计算PTKpython 计算PTK
  3. PSK产生方式
  4. 介绍WPA中各种key
  5. WPA攻击
  6. 论坛问题