使用 OpenCL 标志调优 GPU 性能

Kali LinuxBeginner
立即练习

引言

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,它非常适合哈希破解。

使用 -d 选择用于破解的特定 GPU

在此步骤中,你将学习如何指示 Hashcat 为破解任务使用特定设备。这在拥有多个 GPU 的系统中特别有用,或者当你希望避免使用 CPU 时(CPU 对于此类工作通常慢得多)。

-d(或 --devices)标志允许你指定要使用的设备 ID。你可以从上一步命令的输出中找到正确的 ID。

我们现在将运行一个针对 GPU 的简单破解任务。我们将使用在你 ~/project 目录中准备好的 hash.txtwordlist.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 与上一次进行比较。通过测试不同的值,你可以确定针对你的特定硬件和哈希组合的最佳向量宽度,从而最大化你的破解性能。对于本次实验,仅通过命令进行实验就足够了。

在攻击期间监控 GPU 温度和风扇速度

在此最后一步中,你将学习如何在 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第二个终端。你应该会看到 TempPwrGPU-Util 的值随着 GPU 在基准测试中努力工作而显著增加。这为你提供了硬件状态的实时视图。

观察完毕后,在第一个终端中按 Ctrl+C 停止 Hashcat 基准测试,然后在第二个终端中按 Ctrl+C 停止 watch 命令。

总结

在本次实验中,你获得了使用几个关键的 Hashcat 标志来管理和调优 GPU 性能的实践经验。

你学会了如何:

  • 使用 --opencl-devices 列出所有可用的 OpenCL 兼容设备。
  • 使用 -d 标志为特定 GPU 分配任务。
  • 使用 --gpu-temp-retain 设置温度限制,以保护你的硬件免受过热。
  • 在基准测试模式下使用 --opencl-vector-width 标志进行实验,以找到最佳性能设置。
  • 在繁重的工作负载期间,使用 nvidia-smiwatch 监控 GPU 的实时统计数据。

掌握这些命令可以让你从基础用户晋升为高级实践者,能够最大化破解速度,同时确保硬件的安全和稳定。