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 四次握手的主要目的包括:
- 身份验证:确保客户端和路由器共享相同的预共享密钥(PSK),即WiFi密码。
- 加密密钥生成:在握手过程中生成一个用于加密通信数据的会话密钥,使数据传输更加安全。
- 防止中间人攻击:通过独特的加密方式防止会话密钥的泄露,确保数据在传输中不会被篡改或伪造。
四次握手的具体过程:以下是四次握手的详细步骤,涉及客户端设备(如手机、笔记本电脑等)和WiFi路由器:
- 第一步:路由器发送Anonce
- 路由器生成一个随机数(称为
Anonce
,即Authenticator Nonce)并发送给客户端。 - 目的:这一随机数是用来生成会话密钥的独特输入。它保证每次连接都具有不同的加密密钥,即使WiFi密码相同,也会有新的会话密钥。
- 路由器生成一个随机数(称为
- 第二步:客户端生成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用于验证会话密钥的正确性和数据的完整性。
- 客户端接收到Anonce后,生成自己的随机数(称为
第三步:路由器验证并发送GTK
- 路由器验证PTK:路由器收到客户端的Snonce后,计算出相同的PTK,并用该PTK校验MIC,确保客户端使用了正确的PSK。
- 生成组密钥(GTK):在某些多用户场景中,路由器还会生成一个组密钥(GTK,Group Temporal Key)用于管理多个设备的广播通信。
- 发送GTK:路由器将GTK和一个新的MIC发送给客户端,以便客户端能够解密广播数据。
第四步:客户端确认
- 客户端确认握手成功:客户端验证路由器的MIC,确认GTK是否正确。
- 握手完成:客户端向路由器发送确认消息,表示四次握手完成。此时,客户端和路由器均已生成相同的PTK,用于加密数据传输。
握手的关键点
- PTK的生成:PTK是通信中最核心的会话密钥,生成过程中使用了Anonce、Snonce、双方MAC地址和PSK。这确保即使攻击者知道了握手包,若不知道PSK,也无法解密通信。
- MIC校验:MIC用来确保数据的完整性和身份验证。在握手过程中,如果MIC验证失败,说明PSK不一致,握手会终止。即密码错误只会握手两次。
四次握手过程的简化图解
- 路由器 -> 客户端:发送Anonce。
- 客户端 -> 路由器:生成Snonce,计算PTK,发送Snonce和MIC。
- 路由器 -> 客户端:验证PTK,生成GTK,发送GTK和新的MIC。
- 客户端 -> 路由器:验证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(高级密码破解工具)
数据包注入在渗透测试中的常见应用包括:
- 强制断开连接(Deauthentication):
- 通过发送断开连接的数据包,可以让客户端设备(如手机、笔记本电脑)临时断开WiFi网络连接。客户端通常会自动尝试重新连接,此时会触发握手过程。
- 渗透测试人员可以利用这一过程捕获WiFi的握手包,以便后续破解WiFi密码。
- 欺骗攻击:
- 网卡可以发送伪造的数据包,模拟合法客户端或路由器的身份,以便在无线网络中实施中间人攻击(MITM)。
- 通过数据包注入,攻击者可以假装是接入点,诱导设备连接,从而拦截、查看或篡改传输的数据。
- 网络故障测试:
- 数据包注入也可用于测试网络的稳定性和响应能力。例如,通过发送大量伪造的数据包,可以测试网络是否能够有效应对流量峰值或抗拒恶意攻击。
破解原理
WiFi密码破解的关键在于抓取握手包(handshake)数据包,利用该数据包的加密信息对密码进行推算。握手包的破解原理如下:
- 握手包的获取:WiFi握手包是客户端设备与WiFi路由器建立连接时所传输的加密信息。握手包通常包含四次数据交换(称为“四次握手”),确保连接双方共享正确的加密密钥,并验证其一致性。
- 当设备尝试连接到加密的WiFi网络时,它会通过加密协议(如WPA2)与路由器进行身份验证,交换经过加密的身份和密钥信息。
- 监听者可以在设备连接到WiFi时抓取这个握手过程的数据包,并保存其中的加密信息,用于后续破解。
- 破解过程:握手包本身不会直接包含WiFi密码的明文,而是含有密码的hash信息。破解的目标是在已捕获的握手包中,找到一个与正确密码对应的加密值。
- 工具生成的哈希值将与握手包中的加密值逐一比对。当发现匹配的哈希值时,即找到与该握手包匹配的密码,从而破解出WiFi的访问密码。
原理:通过监听目标WiFi网络,捕获客户端与路由器连接时产生的握手包。之后,使用破解工具从密码字典中逐一尝试密码,通过加密算法计算每个密码的哈希值,并与握手包中的加密信息进行比对。如果某个候选密码的哈希值与握手包中的加密信息匹配,说明该密码是目标WiFi的正确密码。
抓包流程
1、使用装有kali系统的电脑或在VMware Workstation虚拟机中安装kali系统
2、将无线网卡插入电脑,并确保它被系统识别,可以使用ifconfig
命令检查,无线网卡的接口通常为wlan0
,也可能为其他名称。
有时候可能有BUG,看不到也没事,只要后面的命令不报错即可。
3、开启监控模式 使用airmon-ng
工具将无线网卡置于监控模式:
1 | airmon-ng start wlan0 |
此时,通过ifconfig
命令可以看到wlan0
变为wlan0mon
,表示已进入监控模式。
4、扫描WiFi网络 使用airodump-ng
扫描当前信号范围内的WiFi网络,获得目标WiFi的BSSID和信道(CH):
1 | airodump-ng wlan0mon |
上半部分是扫描到的WiFi信息,下半部分是路由器和客户端连接信息。
5、监听并捕获握手包 通过指定目标WiFi的BSSID和信道,使用以下命令进行监听并捕获握手包:
1 | airodump-ng --bssid <BSSID> -c <Channel> -w <output file name> wlan0mon |
需要一直等待有客户端连接WiFi才可捕获握手包。从上图中可以看出有3个客户端已连接该WiFi,还可以通过对目标设备进行断开连接来加速握手包的捕获,使用以下命令强制客户端重新连接WiFi,从而产生握手包,新开终端:输入以下任意一条命令
1 | aireplay-ng --deauth 0 -a <BSSID> wlan0mon |
等待上图中的位置出现WPA handshake: [BSSID]
字样,即表示成功捕获握手包。记得CTRL+C关闭攻击。
6、关闭监控模式:airmon-ng stop wlan0
捕获成功可以看到这些文件,握手包是.cap文件
破解密码
成功抓取握手包后,使用软件对握手包密码破解。如:EWSA,WIFIPR,hashcat。我推荐使用hashcat破解。
Hashcat支持多种攻击方式,包括字典攻击、掩码攻击等,其中字典攻击是最常见的方法。
1、将握手包.cap转换为Hashcat可识别格式.hc22000,使用hcxpcaptool
工具将.cap
格式的抓包文件转换为.hc22000
格式
1 | hcxpcapngtool xxx.cap -o xxx.hc22000 |
或者在线转换地址: https://hashcat.net/cap2hashcat/
2、安装hashcat:sudo apt install hashcat
,hashcat官网
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会尝试从字典中找到匹配的密码,如果找到了则会在输出中显示。
如果破解过程太长需要暂停,这是就需要保存进度:
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 | === CL_PROGRAM_BUILD_LOG === |
缺少依赖,解决方法:安装 OpenCL&POCL1
2
3sudo apt-get update
sudo apt-get install pocl-opencl-icd
sudo apt-get install ocl-icd-opencl-dev
2、windows下运行hashcat报错:
1 | * Device #1: WARNING! Kernel exec timeout is not disabled. |
解决方法:创建一个名为wddm_timeout_patch.reg的注册表文件,内容如下:
1 | Windows Registry Editor Version 5.00 |
运行注册表文件:以管理员身份运行这个注册表文件,并重启计算机。
想恢复原样从注册表里删除新增的这项即可,且这个问题忽略也不影响使用。
钓鱼WiFi—待续
hostapd是一个运行在Linux系统上的守护进程,它的主要功能是将无线网卡配置为无线接入点(Access Point, AP)模式,并作为控制身份验证的后端组件。
hostapd通过读取用户的配置文件,接收用户的管理信息,并可以通过nl80211来控制底层的无线状态。它连接了上层用户配置模块和底层无线内核,作为中间件起到了向下set和向上get的功能。
1 | #open.conf |
interface表示无线网卡接口名称,ssid 表示热点名称,channel 表示信道,hw_mode 用于指定无线模式,g代表 IEEE 802.11g
dnsmasq 是一款可同时提供 DNS 和 DHCP 服务功能、较易配置的轻量工具。
1 | #/etc/dnsmasq.conf |
1 | nmcli radio wifi off |