基于WPA的暴力破解(JAVA实现破解WIFI)

基于WPA的暴力破解

基于WPA四次握手协议的暴力破解

在KRACK漏洞发现前,已知的破解WPA方法只有字典攻击。对于WPA-PSK这套体系,如果没有密码几乎没法窃听他的通信,在有了密码的情况下 WPA 的窃听也不具有 WEP 中窃听的随意性,在 WPA 中 SNonce,ANonce(随机数) 也很好的起到了加密数据防止窃听的作用。基于WPA的暴力破解(JAVA实现破解WIFI)_第1张图片

基于四次握手的暴力破解

字典攻击作为一种常用的攻击手段要明白的是从哪里开始攻击, 要寻找和密码有有联系的信息元素。在WPA中和密码有联系的有 数据传输包和四次握手包。由于无法知道明文和 WPA的数据加密算法的复杂性,在数据传输包上要找到可以攻击的信息元素基本上很难实现,所以只能在握手包里寻找有密码有联系的信息。在上面的四次握手包的图片中很清楚的表明,在四川握手中主要传递的有如下数据:SSID,Amac,Smac,Snonce,Anonce,802.1x data(在图中没标出,这个数据帧用来生成MIC),MIC签名。前面 6 个元素很清楚,一般不会和密码有联系的。只有最后一个 MIC和密码有所联系。通过MIC的派生图我们知道,MIC是通过上面六个信息元素和密码通过三个主要的算法派生出来的。 实现方法如下:

  • 把字典里的密码作为PSK(预共享密钥),与SSID通过SHA1算法生成PMK,即:PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)(式 3.1-1)
    其中passphrase为PSK,4096表示函数迭代的次数。

  • 生成的PMK再与Amac和Smac,Anonce和Snonce生成PTK,即:
    PTK=SHA1_PRF(PMK, Len(PMK), “Pairwise key expansion”,MIN(Amac,Smac) || Max(Amac,Smac) || Min(Anonce,Snonce) || Max(Anonce,Snonce)) (式3.1-2)

  • 最后MIC KEY取值为PTK 的前16 个字节,然后和802.1x data生成MAC,即:
    MIC = HMAC_MD5(MIC Key,16,802.1x data) (式3.1-3)

  • 当在字典里找到一个密码他的 MIC’等于握手包中的 MIC,这时字典破解成功。这就是我们要的那个密码。如果把字典里的所有密码都找遍了还有没有符合上述条件的。那么破解失败。

常用WIFI破解工具

能否快速破解WiFi密码要看选用的破解工具,而能否破解WiFi密码最终要看字典是否足够强大。

  1. Aircrack是破解WEP/WPA/WPA2加密的主流工具之一,是 Kali Linux 里面最热门的 WiFi 破解领域的软件。Aircrack-ng套件包含的工具可用于捕获数据包、握手验证。可用来进行暴力破解和字典攻击。Aircrack-ng是一款多合一整合套件,该套件大致包含下列几种工具:
  • Aircrack-ng:无线密码破解
  • Aireplay:生成网络数据,去客户端验证
  • Airodump-ng:数据包捕捉
  • Airbase-ng:配置伪造的接入点
  1. Hashcat是自称世界上最快的密码恢复工具。它在2015年之前拥有专有代码库,但现在作为免费软件发布。适用于Linux,OS X和Windows的版本可以使用基于CPU或基于GPU的变体。支持hashcat的散列算法有Microsoft LM哈希,MD4,MD5,SHA系列,Unix加密格式,MySQL和Cisco PIX等。
    使用aricrack-ng暴力破解8位数密码需要50个小时, 但是使用Hashcat只要1个半小时不到。使用aircrac-ng破解密码的时候计算机会爆卡, 内存占用100%是常事, Hashcat不但支持CPU破解,还支持GPU破解,利用显卡的计算能力进行极速破解。即使使用普通的CPU或GPU,每秒也能够生成1.35亿个哈希值。

  2. WiFi万能钥匙[4]的基础功能并不是采用“密码库穷举(逐个尝试)暴力破解”的方式获得正确密码,而是通过用户上传分享的热点(主动或“被动”)到后台服务器的方式收集、积累数据。后台服务器维护一份热点数据库,其中包含着热点名称(或者用来唯一标识的MAC地址)以及与其对应的密码字符串。查询密码时,用户将周围扫描到的陌生热点信息上传,服务器后台查询到相对应的密码(如果分享过的话)后返回给APP供用户选择使用。不过WiFi共享钥匙有一个“深度解锁”的功能与“暴力破解”沾点边,但它也仅仅是使用几个常见的较为简单的密码来尝试连接热点,不能称得上算“密码库穷举”。现在WiFi万能钥匙充实密码库的方式主要是用户主动分享,毕竟用户基数变大了,但在以前可不是这样。早期的WiFi万能钥匙得到热点密码数据的手段并不高明,甚至可以说是不光彩的。

字典攻击代码实现

用JAVA实现了在windows系统暴力破解WIFI密钥的脚本。代码原理是生成对应WIFI的本地文件,然后使用调用控制台使用netsh命令进行网络连接,使用ping命令测试是否连接破解成功。
基于WPA的暴力破解(JAVA实现破解WIFI)_第2张图片
主机连接的WIFI都会在本地生成配置文件,内容包含了WIFI配置的关键信息。比如SSID信息:WIFI名name(划线处)以及对应的16进制hex,还有WIFI的加密方式以及预共享密钥。所以连接WIFI要生成本地的配置文件,让机器识别代码。

基于WPA的暴力破解(JAVA实现破解WIFI)_第3张图片
第一步就是连接本地字典,然后从字典读取密码作为PSK,第三步根据指定的格式以及PSK创建配置文件,第四步就是将配置文件添加到本地指定的位置。然后就是尝试连接网络。最后一步就是ping一个网站来测试是否连接成功。

实验结果以及总结

基于WPA的暴力破解(JAVA实现破解WIFI)_第4张图片
由于密码比较简单,所以尝试5次就破解了,但是上述代码中,每执行一次就要暂停3s,来等待连接结果,所以效率是很低的。

破解 WPA 是最好要在纯命令行下进行,在命令行模式下会执行的更快。他们的速度差异是:linux命令行最快398.24 k/s,windows下次之 264.93 key/s。这个也说明了像Aircarck类的无线破解软件都基于linux系统。所以破解 WPA在纯命令行模式下有更高效的优势。下面是在纯命令行模式下实测数据。 密码尝试数398.24key/s ,产生 PMK 的速度是193PMK/s PMK 库的增长数度是24.6kb/s ,直接PMK 库尝试密码的速度为57136.97key/s 。所以对于PMK的生成:
PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)
在这个函数里的输入值都很明了除了这个4096,这就是设计者加入的防范,他的意思让函数迭代 4096次,主要目的就是大大的降低字典攻击的效率,同时也增加了函数的复杂性。这个函数的消耗的时间占派生一个 MIC 的总时间的 99.3%,也就是WPA里其他算法消耗的时间只占不到总时间的 0.7%。所以建库破解就是先完成时间上99.3%的任务,产生一个 PMK 库。破解时只要完成时间上 0.7%的工作了。这也就解释了为什么建库比较慢。

源码

package wifi_crack;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader

你可能感兴趣的:(java,信息安全,网络协议,wpa)