优化 John the Ripper 性能

Kali LinuxBeginner
立即练习

引言

在本实验中,你将探索优化 John the Ripper(一款强大的密码破解工具)性能的各种技术。高效的密码破解通常需要有效利用可用的硬件资源。你将学习如何配置 John the Ripper 以利用多个 CPU 核心,了解其 GPU 破解能力,调整基准测试设置以进行准确的性能测量,将其 GPU 性能与 Hashcat 进行比较,并在破解操作期间监控系统资源。这些技能对于任何从事网络安全、渗透测试或系统管理的人来说都至关重要,能够帮助他们最大限度地提高密码审计任务的效率。

利用多个 CPU 核心

在此步骤中,你将学习如何配置 John the Ripper 以利用多个 CPU 核心,这可以显著加快在多核处理器系统上的破解过程。默认情况下,John the Ripper 可能不会使用所有可用的核心。你可以使用 --fork 选项指定要使用的 CPU 核心数量。

首先,让我们运行一个简单的基准测试,不指定核心数量,以查看默认性能。

john --test=0

你将看到类似以下的输出,显示各种哈希类型的性能:

Benchmarking: Traditional DES [32/32 BS SSE2-i]... DONE
Many calculations will be done, please be patient.
Raw:    100000 c/s real, 100000 c/s virtual
Benchmarking: BSDI DES [32/32 BS SSE2-i]... DONE
Raw:    100000 c/s real, 100000 c/s virtual
...

现在,让我们再次运行基准测试,明确告诉 John the Ripper 使用多个 CPU 核心。要找出你系统上可用的 CPU 核心数量,你可以使用 nproc 命令。

nproc

此命令将输出可用的处理单元数量。例如,如果输出为 2,则表示你有 2 个 CPU 核心。

现在,使用 --fork 选项并指定要利用的核心数量。如果你愿意,可以将 $(nproc) 替换为实际的核心数量,但 $(nproc) 是动态的。

john --test=0 --fork=$(nproc)

比较两次基准测试的“Raw”性能数字。你应该会观察到在使用多核时破解速度有所提升,特别是对于 CPU 密集型的哈希类型。--fork 选项会创建独立的进程,每个进程处理破解任务的一部分,从而利用并行处理能力。

最后,让我们尝试使用多个核心破解一个密码文件。你的 ~/project 目录中有一个 passwords.txt 文件。

john --wordlist=~/project/wordlist.txt --fork=$(nproc) ~/project/passwords.txt

破解完成后,你可以查看已破解的密码:

john --show ~/project/passwords.txt

此命令将显示 John the Ripper 成功破解的任何密码。

配置 John the Ripper 以进行 GPU 破解(如果适用)

在此步骤中,我们将讨论如何配置 John the Ripper 以进行 GPU 破解。虽然 LabEx 环境通常不为通用实验提供专用的 GPU 资源,但理解这一概念对于在具有兼容 GPU 的系统上优化 John the Ripper 至关重要。John the Ripper 通过其 OpenCL 和 CUDA 实现支持 GPU 破解,对于某些哈希类型,这可以提供比 CPU 破解显著的速度提升。

要检查你的 John the Ripper 构建是否支持 OpenCL 或 CUDA,你可以运行以下命令:

john --list=opencl-devices

如果检测到 OpenCL 设备,你将看到类似以下的输出(尽管在此环境中可能为空):

No OpenCL devices found.

如果你在一个拥有兼容 GPU 和已安装 OpenCL 驱动程序的系统上,你将看到可用 GPU 设备的列表。例如:

Device #0: NVIDIA GeForce RTX 3080, 10240MB, 1710MHz, 68CU

要利用特定的 GPU 设备进行破解,你通常会使用 --format 选项配合支持 OpenCL 的格式(例如 raw-md5-opencl),并且如果存在多个 GPU,可能还会使用 --device 选项来选择特定的 GPU。

例如,在一个拥有 GPU 的系统上,你可能会运行:

john --format=raw-md5-opencl --wordlist=~/project/wordlist.txt ~/project/passwords.txt

注意: 由于此 LabEx 环境没有 GPU,上述命令很可能会失败,或者在可用时回退到 CPU 运行。此步骤的目的是说明命令和概念,而不是在此特定环境中执行实际的 GPU 破解。

要验证 John the Ripper 是否已配置为尝试 GPU 破解,你需要在运行带有 GPU 启用格式的破解命令时,查看指示 OpenCL 或 CUDA 初始化消息。

调整 John the Ripper 基准测试设置

在此步骤中,你将学习如何调整 John the Ripper 的基准测试设置,以获得更准确和相关的性能指标。默认的基准测试 (john --test=0) 会对各种哈希类型进行快速测试。但是,你可以指定特定的哈希类型或基准测试的特定持续时间。当你想要衡量特定破解场景的性能时,这会很有用。

首先,让我们列出 John the Ripper 支持的所有可用哈希格式。这可以帮助你识别要进行基准测试的特定格式。

john --list=formats

此命令将输出支持的哈希格式的长列表,例如:

raw-md5
raw-sha1
raw-sha256
...

现在,让我们对特定哈希格式进行基准测试,例如 raw-md5。你可以使用 --format 选项指定格式。

john --test=0 --format=raw-md5

你将看到专门针对 raw-md5 格式的基准测试结果。

为了获得更稳定和准确的基准测试结果,特别是用于性能比较,你可以使用 --max-run-time 选项来增加测试的持续时间。此选项以秒为单位指定基准测试运行的最大时间。

让我们对 raw-md5 进行 10 秒的基准测试:

john --test=0 --format=raw-md5 --max-run-time=10

观察“Raw”性能数字在更长的运行时间内如何稳定或提供更一致的平均值。这在比较不同的硬件配置或 John the Ripper 构建时尤其有用。

你还可以将其与步骤 1 中的 --fork 选项结合使用,以在设定的持续时间内对特定哈希类型的多核性能进行基准测试。

john --test=0 --format=raw-md5 --fork=$(nproc) --max-run-time=10

通过调整这些基准测试设置,你可以获得与你的特定破解需求相关的更精确的性能数据,从而帮助你做出关于硬件升级或配置更改的明智决策。

理解 GPU 破解的 Hashcat 与 John the Ripper 之别

在此步骤中,我们将讨论 Hashcat 和 John the Ripper 之间的区别,特别是关于它们的 GPU 破解能力。虽然两者都是强大的密码破解工具,但它们各有优劣,尤其是在利用 GPU 方面。

John the Ripper (JtR)

  • 优势:非常适合基于 CPU 的破解,具有许多内置格式,用途广泛,适合单用户系统,并且非常侧重于字典攻击和暴力破解。其 GPU 支持(OpenCL/CUDA)已集成,但对于原始 GPU 性能的优化,历史上不如 Hashcat。
  • 劣势:GPU 性能虽然存在,但对于某些哈希类型,可能始终无法与 Hashcat 的原始速度相媲美。GPU 的配置有时可能不那么直接。

Hashcat

  • 优势:被广泛认为是速度最快、效率最高的基于 GPU 的密码破解器。它针对 GPU(包括 NVIDIA CUDA 和 AMD OpenCL)上的并行处理进行了高度优化。支持种类繁多的哈希类型和攻击模式。
  • 劣势:主要专注于 GPU,因此 CPU 性能不是其主要优势。由于其广泛的选项和攻击模式,对初学者来说可能更难掌握。

GPU 破解的关键区别

  1. 优化:Hashcat 是专门为 GPU 加速而设计的,对于相同的哈希类型,在 GPU 上通常能达到比 John the Ripper 更高的每秒哈希数(H/s)速率。
  2. 易用性:John the Ripper 的 GPU 选项已集成到其现有的命令行界面中。Hashcat 有自己独特的语法和选项,对于 GPU 控制可能更精细。
  3. 社区焦点:Hashcat 的开发和社区高度集中于最大化 GPU 破解性能。

何时使用哪一个

  • 当进行通用 CPU 破解时,当你需要一个功能齐全、内置功能丰富的工具时,或者当你正在没有强大 GPU 的系统上工作时,请使用 John the Ripper
  • 当你拥有强大的 GPU 并且需要针对广泛的哈希类型获得绝对最快的破解速度时,尤其是在专业的渗透测试或审计场景中,请使用 Hashcat

为了说明这一点,如果你安装了 Hashcat(在此环境中默认未安装),使用 GPU 破解 MD5 哈希的典型命令如下所示:

## 此命令仅用于说明,在未安装 Hashcat 的情况下将无法运行
## hashcat -m 0 -a 0 ~/project/passwords.txt ~/project/wordlist.txt

其中 -m 0 指定 MD5 哈希类型,-a 0 指定字典攻击。

理解这些区别有助于你选择合适的工具来完成任务,从而根据可用硬件最大化你在密码审计任务中的效率。

在破解过程中监控系统资源

在此步骤中,你将学习如何在 John the Ripper 执行破解操作时监控系统资源。监控 CPU 使用率、内存使用率和磁盘 I/O 可以帮助你识别瓶颈并确保你的系统得到有效利用。这对于优化性能和解决问题至关重要。

首先,让我们在后台启动一个 John the Ripper 破解进程。我们将对 passwords.txt 文件使用简单的字典攻击。

john --wordlist=~/project/wordlist.txt ~/project/passwords.txt &

末尾的 & 将进程发送到后台,允许你继续使用终端。记下显示的进程 ID (PID),例如:[1] 12345

现在,让我们使用 top 命令监控系统的 CPU 和内存使用情况。top 提供了一个运行系统的动态实时视图。

top

top 的输出中,查找 john 进程。你将看到它的 CPU 使用率(%CPU)和内存使用率(%MEM)。当 John the Ripper 正在积极破解时,你应该看到它的 %CPU 值很高,特别是如果你使用了多个核心(对于多核进程,它可能超过 100%)。按 q 退出 top

另一个用于监控进程的有用命令是 htop。如果未安装 htop,你可以安装它:

sudo apt install -y htop

安装后,运行 htop

htop

htop 提供比 top 更用户友好和交互式的视图,显示每个核心的 CPU 使用率、内存使用率和进程树。你可以轻松地按 CPU 或内存使用率对进程进行排序。查找 john 进程并观察其资源消耗。按 F10q 退出 htop

要监控磁盘 I/O,你可以使用 iotop 命令。如果你的字典文件或哈希文件非常大,这尤其有用,因为磁盘访问可能会成为瓶颈。如果未安装 iotop,请安装它:

sudo apt install -y iotop

然后运行 iotop

sudo iotop

iotop 显示实时的磁盘 I/O 活动。查找 john 或相关进程,以查看它们是否正在大量读取或写入磁盘。按 q 退出 iotop

最后,让我们将后台的 john 进程带回前台并停止它,或者如果它仍在运行,则直接将其杀死。

fg
## 按 Ctrl+C 停止进程

如果 fg 不起作用,或者你想通过 PID 杀死它:

killall john

通过定期监控系统资源,你可以识别 John the Ripper 是否充分利用了你的硬件,或者是否有其他进程占用了本可以分配给破解的资源。这有助于微调你的破解设置以获得最佳性能。

总结

在此次实验中,你获得了优化 John the Ripper 性能的实践经验。你学会了如何利用 --fork 选项来利用多个 CPU 核心以加速破解。我们讨论了使用 John the Ripper 进行 GPU 破解的原理,即使在没有专用 GPU 的环境中,也强调了 OpenCL/CUDA 支持的重要性。你还掌握了调整基准测试设置以获取特定哈希类型和持续时间的精确性能指标。此外,你理解了 John the Ripper 和 Hashcat 在 GPU 加速破解方面的关键区别,使你能够为各种场景选择最合适的工具。最后,你学会了在破解操作期间监控 CPU、内存和磁盘 I/O 等系统资源,这对于识别瓶颈和确保高效的硬件利用至关重要。这些技能对于任何希望最大化密码审计和安全测试效率的人来说都是基础。