背景&初衷
WPA/WPA2协议曾经被认为是保护无线通信安全的坚实壁垒,然而随着时间推移和技术进步,这些协议中的漏洞逐渐被发掘出来,特别是针对四次握手过程中捕获的握手包的攻击日益增多。在这种背景下,密码破解工具如aircrack-ng成为了测试和评估无线网络安全性的常用手段。尽管aircrack-ng凭借其开源性和易用性,在无线安全社区中占据了一席之地,但使用CPU进行密码破解的过程往往耗时较长,尤其是在面对复杂或长度较大的密码时,这极大地限制了其实用性。
近年来,随着硬件技术的发展,尤其是GPU(图形处理单元)计算能力的飞速提升,使得利用GPU进行大规模并行计算成为可能。这一技术革新催生了一系列高性能的密码破解工具,其中hashcat因其强大的GPU加速能力和对多种算法的支持而脱颖而出。相较于传统的仅依赖CPU的aircrack-ng,hashcat能够显著提高密码恢复的速度,有时甚至可以将破解时间从数周缩短至数小时,极大地提高了效率。因此,本文将探讨如何利用GPU加速技术优化握手包的破解流程,以及hashcat在实际应用中的优势和实现方法。
1. 捕获 Wi-Fi 握手包
首先,你需要使用 airodump-ng
捕获 Wi-Fi 握手包。假设你已经完成了这一步,并获得了一个 .cap
文件。
2. 安装 Hashcat 和 hcxtools
你需要确保你的系统中已经安装了 Hashcat 和 hcxtools。以下是在 Linux 系统上的安装步骤:
sudo apt-get update
sudo apt-get install hashcat hcxtools
3. 将握手包转换为 Hashcat 支持的格式
Hashcat 需要特定的文件格式来处理握手包。你需要使用 hcxpcaptool
将 .cap
文件转换为 Hashcat 支持的 .hccapx
文件格式。
hcxpcapngtool -o handshake.hccapx capture.cap
其中:
capture.cap
是你使用airodump-ng
捕获的握手包文件。handshake.hccapx
是生成的 Hashcat 可用的文件。
4. 开始破解
4.1 制定密码文件破解
Hashcat 使用字典攻击来破解密码。你需要一个包含常用密码的字典文件。例如,你可以使用 RockYou 字典。
现在你可以使用 Hashcat 来破解握手包了。执行以下命令:
hashcat -m 2500 handshake.hccapx rockyou.txt
其中:
-m 2500
指定了 WPA/WPA2 的破解模式。handshake.hccapx
是你生成的握手包文件。rockyou.txt
是密码字典。
4.2 掩码攻击
要使用 Hashcat
制定所有 8 位密码组合(包括小写字母、大写字母、数字和特殊字符),你可以使用 掩码攻击 来实现。这种方法比生成一个完整的密码字典更加高效,因为它动态生成密码组合进行尝试,而不是提前生成并存储整个字典。
掩码攻击基础
掩码攻击允许你定义每个字符的位置可以使用的字符集。Hashcat
提供了一些预定义的字符集表示法:
?l
:小写字母 (a-z
)?u
:大写字母 (A-Z
)?d
:数字 (0-9
)?s
:特殊字符 (!@#$%^&*()_+-=[]{}|;:'",.<>?/~
)?a
:所有字符的集合(?l?u?d?s
)?b
:8-bit 字符集(包含所有可能的 ASCII 字符)
生成 8 位所有密码组合
要生成所有由 8 位字符组成的密码组合(包括小写字母、大写字母、数字和特殊字符),你可以使用以下 Hashcat
命令:
hashcat -m <hash_type> -a 3 hashfile ?a?a?a?a?a?a?a?a
命令说明:
-m <hash_type>
:指定你要破解的哈希类型。常见的 Wi-Fi WPA/WPA2 握手包使用-m 22000
(注意使用的是.hccapx
或.22000
文件)。-a 3
:表示掩码攻击(攻击模式 3)。hashfile
:包含哈希的文件(例如 Wi-Fi 握手包的.hccapx
文件)。?a?a?a?a?a?a?a?a
:表示生成 8 位长度的密码组合,?a
代表所有字符集(小写字母、大写字母、数字和特殊字符)。
示例
假设你有一个 .hccapx
文件并想破解它,你可以执行以下命令:
hashcat -m 22000 -a 3 "F:\wifi-handshakes\44DF65C9313A_202409011029.hccapx" ?a?a?a?a?a?a?a?a
如上图所示核显(Intel UHD Graphics 770)和独显(RTX4090)的负载都达到了100%. 其余Hashcat的参数解释如下:
Session
Session:当前
Hashcat
会话的名称。在这个例子中,默认会话名称是hashcat
。这个名称可以通过命令行参数--session
指定。
Status
Status:当前破解的状态。在这个例子中,状态是 "Running",表示
Hashcat
正在进行中。
Hash.Mode
Hash.Mode:哈希算法的模式编号。在这个例子中,
22000
是用于破解 WPA-PBKDF2-PMKID+EAPOL(即 Wi-Fi WPA/WPA2)的模式。
Hash.Target
Hash.Target:目标文件,包含要破解的哈希值。在这个例子中,文件名是
44DF65C9313A_202409011029.hccapx
。
Time.Started
Time.Started:破解开始的时间。在这个例子中,破解开始于 2024 年 9 月 2 日 13:41:27。
Time.Estimated
Time.Estimated:预计破解完成的时间。这个时间是基于当前速度估算的。在这个例子中,预计完成时间是 2114 年 7 月 18 日(显然这个时间过长,表示当前配置下的破解任务过于庞大,可能需要调整策略)。
Speed.# (Speed.#1, Speed.#3)*
Speed.#1 : 设备1(RTX 4090)上的CUDA核心 的破解计算速度. 其值为2336.1 kH/s
Speed.#3: 设备3(Intel UHD Graphics 770) 上的hash计算速度. 其值为23291 H/s
Speed.#*: 是所有设备的总破解速度的汇总。也就是说,它代表你系统中所有参与破解的设备的综合速度。
kH/s
和H/s
是速度单位:kH/s
:千哈希每秒(表示每秒处理的哈希数量,1 kH/s = 1,000 H/s)。H/s
:哈希每秒。
(1.67ms) 和 (10.66ms)
这是计算每次哈希所需的时间,以毫秒为单位。它表示设备计算每组哈希所用的平均时间:
对于设备
#1
,每组哈希计算的平均时间是 1.67 毫秒。对于设备
#3
,每组哈希计算的平均时间是 10.66 毫秒。
时间越短,设备执行哈希计算的速度就越快。
@ Accel:8 Loops:64 Thr:256 Vec:1
这是每个设备执行任务时的具体配置参数:
Accel(加速):表示工作负载分配的程度。
Accel
是将工作划分为更大块的部分,使得 GPU 能够更高效地处理数据。在这个例子中,设备#1
的加速因子是 8,设备#3
的加速因子是 64。Loops(循环):表示在一个计算周期内执行的哈希循环次数。循环次数越多,可能会有更高的吞吐量,但同时也会增加延迟。设备
#1
的循环次数是 64,设备#3
是 32。Thr(线程):表示分配给每个计算单元(如 GPU 核心)的线程数量。设备
#1
的线程数是 256,设备#3
是 16。Vec(矢量宽度):用于描述 SIMD(Single Instruction, Multiple Data)操作的宽度。
Vec:1
表示没有使用 SIMD 矢量化或每次只处理一个数据元素。
Kernel.Feature
Kernel.Feature:当前使用的内核特性。在这个例子中,
Pure Kernel
表示Hashcat
使用了纯内核来进行计算,没有使用优化的自定义内核。
Guess.Mask
Guess.Mask:当前使用的猜测掩码。在这个例子中,掩码是
?a?a?a?a?a?a?a?a
,表示Hashcat
正在尝试所有由 8 个字符组成的密码组合,其中每个字符可以是字母、数字或特殊字符。
Guess.Queue
Guess.Queue:当前掩码队列中的进度。在这个例子中,只有 1 个掩码,并且已经完成了 100.00% 的进度。
Recovered
Recovered:当前已成功破解的哈希数量。格式是
已破解数量/总哈希数量
。在这个例子中,还没有任何哈希被破解 (0/1
,即 0.00%)。
Progress
Progress:当前任务的进度。表示已经处理的密码组合数与总密码组合数的比率。在这个例子中,已经尝试了
13,647,446,016
个组合,但总共需要尝试6,634,204,312,890,625
个组合,因此进度为0.00%
。
Rejected
Rejected:被拒绝的密码数量。一般表示与掩码或哈希模式不匹配的密码。在这个例子中,没有拒绝任何密码 (
0/13,647,446,016
)。
Restore.Point
Restore.Point:当前的恢复点,表示任务从何处恢复。恢复点是指已经完成的猜测组合的数量,可以在暂停后恢复任务。在这个例子中,恢复点是
138,510,336
。
Restore.Sub.#1 and Restore.Sub.#3
Restore.Sub.#1 和 Restore.Sub.#3:每个设备的详细恢复点,包括 Salt(盐)、Amplifier(放大器)和 Iteration(迭代次数)。这些参数与哈希算法的特定实现有关。
Candidate.Engine
Candidate.Engine:密码候选生成的方式。在这个例子中,是通过设备生成器生成的候选密码。
Candidates.#1 and Candidates.#3
Candidates.#1 和 Candidates.#3:表示当前设备正在尝试的具体密码组合。在这个例子中,设备
#1
正在尝试组合Ew"'INAN -> EF?x'tan
,而设备#3
正在尝试YN>]RINA -> Yf+yWANA
。
Hardware.Mon.#1 and Hardware.Mon.#3
Hardware.Mon.#1 和 Hardware.Mon.#3:表示设备的硬件监控信息,如温度、风扇速度、利用率、核心频率和内存频率。在这个例子中:
设备
#1
的温度为 81°C,风扇速度为 95%,核心频率为 2640 MHz,内存频率为 10251 MHz。设备
#3
的硬件信息不可用(显示为N/A
)。
5. 优化选项
如果你发现破解速度较慢或有其他问题,可以使用以下优化选项:
使用 GPU:确保 Hashcat 能够利用你的 GPU 资源(通常它会自动检测 GPU)。
限制 GPU 超时:避免在长时间运行时遇到 GPU 内核超时问题:
--force
限制温度:设置一个温度上限,避免 GPU 过热:
--gpu-temp-abort=85
调整工作负载:通过调节工作负载增加 GPU 计算效率:
--optimized-kernel-enable
6. 考虑因素
性能要求:8 位密码组合可能生成 6.1 万亿个组合(
94^8
= 6,095,689,385,410,816),即使使用 GPU 进行加速,也需要相当长的时间来遍历所有密码。硬件:这种攻击方法非常依赖于硬件性能,特别是 GPU 的计算能力。
通过 Hashcat
的掩码攻击,你可以有效地针对所有 8 位的密码组合进行破解,避免生成巨大的字典文件。
评论区