引言
Hashcat 是一个世界知名的密码恢复工具,它能够利用 GPU 的强大处理能力以惊人的速度破解哈希值。然而,要充分发挥硬件的性能,你需要了解如何正确配置和调优它。错误的设置可能导致性能不佳,甚至硬件不稳定。
在本实验中,你将学习如何使用 Hashcat 的几个 OpenCL 相关标志来管理和优化你的 GPU 性能。你将练习列出可用设备、为任务选择特定 GPU、实施散热保护措施以及尝试性能调优选项。这些技能对于任何希望有效且安全地使用 Hashcat 的人来说都至关重要。
Hashcat 是一个世界知名的密码恢复工具,它能够利用 GPU 的强大处理能力以惊人的速度破解哈希值。然而,要充分发挥硬件的性能,你需要了解如何正确配置和调优它。错误的设置可能导致性能不佳,甚至硬件不稳定。
在本实验中,你将学习如何使用 Hashcat 的几个 OpenCL 相关标志来管理和优化你的 GPU 性能。你将练习列出可用设备、为任务选择特定 GPU、实施散热保护措施以及尝试性能调优选项。这些技能对于任何希望有效且安全地使用 Hashcat 的人来说都至关重要。
--opencl-devices 列出可用的 OpenCL 设备在此步骤中,你将学习如何识别 Hashcat 可以使用的计算设备。在将任务分配给 GPU 或 CPU 之前,你需要了解系统如何识别它。Hashcat 为此目的提供了一个特定的标志。
--opencl-devices 标志会查询系统的 OpenCL (Open Computing Language) 框架,并列出所有兼容的设备,例如 GPU 和 CPU。每个设备都会被分配一个唯一的 ID,你将在后续步骤中使用它来专门定位该设备。
在你的终端中执行以下命令来列出所有可用的 OpenCL 设备:
hashcat --opencl-devices
你将看到类似以下的输出。确切的细节,特别是设备名称和平台信息,将取决于实验环境的硬件。
hashcat (v6.2.6) starting
OpenCL Info:
Platform ID #1
Vendor : The pocl project
Name : Portable Computing Language
Version : OpenCL 3.0 PoCL 3.1+g3a94695b, LLVM 14.0.0, RELOC, SLEEF, DISTRO, POCL_DEBUG
Device ID #1
Type : CPU
Vendor ID : 1024
Vendor : GenuineIntel
Name : 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
Version : OpenCL 3.0 PoCL 3.1+g3a94695b, LLVM 14.0.0, RELOC, SLEEF, DISTRO, POCL_DEBUG
Processor(s) : 8
Clock : 3000
...
Platform ID #2
Vendor : NVIDIA Corporation
Name : NVIDIA CUDA
Version : OpenCL 3.0 CUDA 12.2.142
Device ID #2
Type : GPU
Vendor ID : 4318
Vendor : NVIDIA Corporation
Name : NVIDIA T4
Version : OpenCL 3.0 CUDA
Processor(s) : 40
Clock : 1590
...
请记下每个条目的 Device ID。在此示例中,Device ID #2 是 NVIDIA T4 GPU,它非常适合哈希破解。
在此步骤中,你将学习如何指示 Hashcat 为破解任务使用特定设备。这在拥有多个 GPU 的系统中特别有用,或者当你希望避免使用 CPU 时(CPU 对于此类工作通常慢得多)。
-d(或 --devices)标志允许你指定要使用的设备 ID。你可以从上一步命令的输出中找到正确的 ID。
我们现在将运行一个针对 GPU 的简单破解任务。我们将使用在你 ~/project 目录中准备好的 hash.txt 和 wordlist.txt 文件。该命令指定了哈希类型(-m 0 表示 MD5)、攻击模式(-a 0 表示字典攻击)以及目标设备。假设 GPU 是我们先前示例中的 Device ID #2,命令将是:
hashcat -m 0 -a 0 ~/project/hash.txt ~/project/wordlist.txt -d 2
如果你的 GPU 有不同的 ID,请相应地调整 -d 后面的数字。
运行命令后,Hashcat 将仅在指定的设备上启动攻击,并应快速找到密码。
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 5d41402abc4b2a76b9719d911017c592
Time.Started.....: ...
Time.Estimated...: ...
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#2.........: 104.6 kH/s (0.00ms) @ Accel:128 Loops:128 Thr:1024 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 2/2 (100.00%)
Rejected.........: 0/2 (0.00%)
Restore.Point....: 1/2 (50.00%)
Restore.Sub.#2...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#2....: wrongpass -> password
Hardware.Mon.#2..: Temp: 40c Fan: 30% Util: 13% Core:1410MHz Mem:5000MHz Bus:16
5d41402abc4b2a76b9719d911017c592:password
Started: ...
Stopped: ...
输出确认哈希已被破解,密码是 password。
--gpu-temp-retain 标志在此步骤中,你将了解一项保护硬件的关键安全功能。长时间以 100% 的利用率运行 GPU 会产生大量的热量。如果不加以管理,高温可能导致热节流(GPU 降速以冷却)甚至永久性损坏。
--gpu-temp-retain 标志会告诉 Hashcat 监控 GPU 的温度,并自动调整工作负载,使其保持在指定的摄氏度值或以下。这是确保在长时间破解会话中硬件稳定性和延长寿命的绝佳方法。
让我们运行与之前相同的攻击,但这次我们将添加该标志,将 GPU 温度保持在 85°C 或以下。这对于大多数负载下的 GPU 来说通常是一个安全的温度。
hashcat -m 0 -a 0 ~/project/hash.txt ~/project/wordlist.txt -d 2 --gpu-temp-retain=85
由于我们的破解任务非常简短,你将看不到温度管理在起作用。但是,该命令将被接受,并且 Hashcat 将启用该功能。对于需要数小时或数天的破解任务,此标志将在后台积极工作,可能会略微降低速度以换取热安全。
输出将与上一步相同,因为密码几乎是瞬间找到的。关键是要知道如何应用此保护设置。
Session..........: hashcat
Status...........: Cracked
...
5d41402abc4b2a76b9719d911017c592:password
...
--opencl-vector-width 以找到最佳设置在此步骤中,你将探索一个性能调优选项。--opencl-vector-width 标志控制着在单个指令中捆绑多少个“线程”或工作项进行处理。这也被称为 SIMD(Single Instruction, Multiple Data)宽度。
此设置的最佳值高度依赖于特定的 GPU 架构和正在破解的哈希类型。找到最佳设置的唯一方法就是进行实验。允许的值通常是 2 的幂次方,例如 1、2、4、8 或 16。
为了测试此标志的效果,我们可以使用 Hashcat 内置的基准测试模式(-b)。让我们为 MD5(-m 0)运行一个基准测试,并将向量宽度设置为 4。
hashcat -m 0 -b --opencl-vector-width 4
Hashcat 将运行基准测试并显示每个设备的速度。请注意你 GPU 的 Speed 行。
...
Hashtype: MD5
Speed.#2.........: 480.3 MH/s (94.38ms) @ Accel:256 Loops:1024 Thr:256 Vec:4
...
现在,尝试使用不同的向量宽度再次运行基准测试,例如 8:
hashcat -m 0 -b --opencl-vector-width 8
将这次运行的 Speed 与上一次进行比较。通过测试不同的值,你可以确定针对你的特定硬件和哈希组合的最佳向量宽度,从而最大化你的破解性能。对于本次实验,仅通过命令进行实验就足够了。
在此最后一步中,你将学习如何在 Hashcat 运行时实时监控 GPU 的生命体征。这对于诊断性能问题和确保你的热管理设置按预期工作至关重要。
我们将使用 nvidia-smi(NVIDIA System Management Interface)实用程序,这是一个用于管理和监控 NVIDIA GPU 的强大命令行工具。要实时查看统计数据的更新,我们将使用 watch 命令来运行它。
首先,你需要打开一个第二个终端窗口。你可以通过点击屏幕底部终端标签栏中的“+”图标来完成此操作。
在你的新的(第二个)终端中,运行以下命令。它将每秒执行一次 nvidia-smi 并用最新数据刷新屏幕。
watch -n 1 nvidia-smi
你将看到一个仪表板,显示 GPU 的名称、温度、风扇速度、功耗和内存利用率。
现在,回到你的原始(第一个)终端。启动一个繁重的基准测试,使 GPU 承受显著的负载。我们将使用 -w 4(工作负载配置文件 4,“Insane”)标志来最大化负载。
hashcat -m 0 -b -w 4
将你的视图切换回运行 watch 的第二个终端。你应该会看到 Temp、Pwr 和 GPU-Util 的值随着 GPU 在基准测试中努力工作而显著增加。这为你提供了硬件状态的实时视图。
观察完毕后,在第一个终端中按 Ctrl+C 停止 Hashcat 基准测试,然后在第二个终端中按 Ctrl+C 停止 watch 命令。
在本次实验中,你获得了使用几个关键的 Hashcat 标志来管理和调优 GPU 性能的实践经验。
你学会了如何:
--opencl-devices 列出所有可用的 OpenCL 兼容设备。-d 标志为特定 GPU 分配任务。--gpu-temp-retain 设置温度限制,以保护你的硬件免受过热。--opencl-vector-width 标志进行实验,以找到最佳性能设置。nvidia-smi 和 watch 监控 GPU 的实时统计数据。掌握这些命令可以让你从基础用户晋升为高级实践者,能够最大化破解速度,同时确保硬件的安全和稳定。