调整 Hydra 线程数

HydraHydraBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,我们将探究线程数量对 Hydra 性能的影响。实验首先会使用 OpenSSH 在 LabEx 虚拟机上搭建一个基本的 SSH 服务器,并确保其正常运行且可访问。

接下来,我们将以默认的 16 个线程数运行 Hydra,然后将线程数增加到 32,随后再减少到 4,比较攻击速度,并观察不同线程数对 Hydra 攻击整体性能的影响。最后,我们将分析线程数对 Hydra 性能的影响。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/installation("Installation and Setup") hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/single_password("Single Password Attack") hydra/HydraGroup -.-> hydra/target_ip("Target IP Specification") hydra/HydraGroup -.-> hydra/ssh_attack("SSH Brute Force") hydra/HydraGroup -.-> hydra/rate_control("Rate Limiting Control") subgraph Lab Skills hydra/installation -.-> lab-550758{{"调整 Hydra 线程数"}} hydra/single_username -.-> lab-550758{{"调整 Hydra 线程数"}} hydra/single_password -.-> lab-550758{{"调整 Hydra 线程数"}} hydra/target_ip -.-> lab-550758{{"调整 Hydra 线程数"}} hydra/ssh_attack -.-> lab-550758{{"调整 Hydra 线程数"}} hydra/rate_control -.-> lab-550758{{"调整 Hydra 线程数"}} end

设置 SSH 服务器

在这一步中,我们将在 LabEx 虚拟机上设置一个基本的 SSH 服务器。SSH(Secure Shell,安全外壳协议)是一种加密网络协议,用于在不安全的网络上安全地运行网络服务。它通常用于远程命令行登录和远程命令执行。

首先,我们需要安装 OpenSSH 服务器。OpenSSH 是一套基于安全外壳协议的安全相关网络级工具,它在客户端/服务器架构中通过不安全的网络提供安全通道。

执行以下命令来安装 OpenSSH 服务器:

sudo apt update
sudo apt install -y openssh-server

此命令首先更新软件包列表以进行升级和新安装,然后安装 openssh-server 软件包。-y 标志会自动对安装过程中的任何提示回答“yes”。

安装完成后,SSH 服务器应该会自动启动。你可以使用以下命令检查其状态:

sudo systemctl status ssh

你应该会看到类似以下的输出:

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-10-24 10:00:00 UTC; 10s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 1234 (sshd)
      Tasks: 1 (limit: 4621)
     Memory: 1.2M
        CPU: 10ms
     CGroup: /system.slice/ssh.service
             └─1234 sshd: /usr/sbin/sshd -D

Oct 24 10:00:00 labex systemd[1]: Started OpenBSD Secure Shell server.

如果 SSH 服务未运行,你可以使用以下命令启动它:

sudo systemctl start ssh

现在 SSH 服务器已运行,你可以使用 SSH 客户端从另一台机器连接到它。要进行连接,你需要 LabEx 虚拟机的 IP 地址。你可以使用 ifconfig 命令来查找该地址。不过,由于 ifconfig 可能不是默认安装的,更可靠的命令是 ip addr

ip addr

查找与网络接口(通常是 eth0enp0s3)关联的 inet 地址,它看起来可能像 192.168.1.100

例如,输出可能如下所示:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

在这种情况下,IP 地址是 172.17.0.2

然后,你可以使用此 IP 地址,通过命令 ssh labex@<IP_ADDRESS> 从另一台机器连接到 SSH 服务器。你现在不需要这样做,因为我们将在同一台机器上使用 Hydra。

最后,让我们配置 SSH 服务器以允许密码认证。默认情况下,SSH 通常更倾向于使用基于密钥的认证,这种方式更安全。但是,为了简化本次实验,我们将启用密码认证。

使用 nano 编辑 SSH 服务器配置文件:

sudo nano /etc/ssh/sshd_config

找到 #PasswordAuthentication no 这一行,取消注释(删除 #)并将 no 改为 yes

PasswordAuthentication yes

Ctrl+X,然后按 Y,再按 Enter 保存文件。

重启 SSH 服务器以使更改生效:

sudo systemctl restart ssh

现在,SSH 服务器已设置并配置为允许密码认证。

使用默认的 -t 16 线程运行

在这一步中,我们将使用 Hydra 的默认设置运行它,默认设置包含使用 16 个线程。Hydra 是一个并行化的登录破解工具,支持对多种协议进行攻击。我们将使用它来尝试破解上一步中搭建的 SSH 服务器上 labex 用户的密码。

首先,让我们创建一个简单的密码列表。这将是一个文本文件,包含 Hydra 要尝试的潜在密码列表。

使用 nano 在你的 ~/project 目录下创建一个名为 password.txt 的文件:

nano ~/project/password.txt

将以下密码添加到文件中,每行一个密码:

password
123456
qwerty
labex
test

Ctrl+X,然后按 Y,再按 Enter 保存文件。

现在,我们将使用默认的线程数(-t 16)运行 Hydra。-l 选项指定要攻击的用户名,-P 指定密码列表,ssh://localhost 指定目标 SSH 服务器。由于我们在与 SSH 服务器相同的机器上运行 Hydra,所以使用 localhost

执行以下命令:

hydra -l labex -P ~/project/password.txt ssh://localhost

Hydra 现在将开始使用 password.txt 中的密码尝试登录 SSH 服务器。输出将显示攻击的进度。

你应该会看到类似以下的输出(具体输出可能会有所不同):

Hydra v9.1 (c) 2020 by van Hauser/THC - Use freely but only for legal purposes.

Hydra starting at 2023-10-27 10:00:00
[DATA] 1 task/thread started, 0 tasks total
[DATA] attacking ssh://localhost:22/
[ATTEMPT] target: localhost - login: labex - pass: password
[ATTEMPT] target: localhost - login: labex - pass: 123456
[ATTEMPT] target: localhost - login: labex - pass: qwerty
[ATTEMPT] target: localhost - login: labex - pass: labex
[22][ssh] host: localhost   login: labex   password: labex
[DATA] 1 of 1 target successfully completed, 0 failed
Hydra is finished.

如果密码“labex”是 labex 用户的正确密码,Hydra 将找到它并显示登录凭据。如果列表中的密码都不正确,Hydra 将报告破解密码失败。

在这种情况下,我们假设 labex 用户的密码是 labex

-t 选项控制 Hydra 使用的线程数。默认情况下,如果你不指定 -t 选项,Hydra 将使用 16 个线程。这意味着它将同时尝试 16 个密码。

增加到 -t 32 并比较速度

在这一步中,我们将把 Hydra 使用的线程数增加到 32,并将其速度与之前使用默认 16 个线程的运行情况进行比较。增加线程数有可能加快破解过程,但这也取决于系统资源和目标服务。

执行以下命令,使用 32 个线程运行 Hydra:

hydra -t 32 -l labex -P ~/project/password.txt ssh://localhost

这个命令与之前的命令类似,但我们添加了 -t 32 选项,以指定 Hydra 应使用 32 个线程。

观察输出,你应该会看到 Hydra 启动了 32 个任务/线程。

Hydra v9.1 (c) 2020 by van Hauser/THC - Use freely but only for legal purposes.

Hydra starting at 2023-10-27 10:05:00
[DATA] 32 tasks/threads started, 0 tasks total
[DATA] attacking ssh://localhost:22/
[ATTEMPT] target: localhost - login: labex - pass: password
[ATTEMPT] target: localhost - login: labex - pass: 123456
[ATTEMPT] target: localhost - login: labex - pass: qwerty
[ATTEMPT] target: localhost - login: labex - pass: labex
[22][ssh] host: localhost   login: labex   password: labex
[DATA] 1 of 1 target successfully completed, 0 failed
Hydra is finished.

比较速度:

在实验环境中,如果没有精确的计时工具,很难准确测量速度差异。不过,你可以主观观察使用 32 个线程的破解过程是否比使用 16 个线程时更快。一般来说,增加线程数可能会提高速度,尤其是在密码列表较小时。然而,收益会逐渐递减,而且如果线程数增加过多,由于资源竞争,实际上可能会减慢破解过程。

在下一步中,我们将把线程数减少到 4 并观察效果。

减少到 -t 4 并观察

在这一步中,我们将把 Hydra 使用的线程数减少到 4,并观察其对性能的影响。当系统资源有限,或者目标服务设置了速率限制时,减少线程数会很有用。

执行以下命令,使用 4 个线程运行 Hydra:

hydra -t 4 -l labex -P ~/project/password.txt ssh://localhost

这个命令与之前的命令类似,但我们添加了 -t 4 选项,以指定 Hydra 应使用 4 个线程。

观察输出,你应该会看到 Hydra 启动了 4 个任务/线程。

Hydra v9.1 (c) 2020 by van Hauser/THC - Use freely but only for legal purposes.

Hydra starting at 2023-10-27 10:10:00
[DATA] 4 tasks/threads started, 0 tasks total
[DATA] attacking ssh://localhost:22/
[ATTEMPT] target: localhost - login: labex - pass: password
[ATTEMPT] target: localhost - login: labex - pass: 123456
[ATTEMPT] target: localhost - login: labex - pass: qwerty
[ATTEMPT] target: localhost - login: labex - pass: labex
[22][ssh] host: localhost   login: labex   password: labex
[DATA] 1 of 1 target successfully completed, 0 failed
Hydra is finished.

观察影响:

使用仅 4 个线程时,你应该会注意到,与使用 16 或 32 个线程相比,破解过程可能会更慢。这是因为 Hydra 现在同时尝试的密码更少了。完成任务的总时间将会增加。

在下一步中,我们将分析线程数对性能的影响。

分析线程对性能的影响

在这一步中,我们将分析线程数量对 Hydra 性能的影响。我们已经分别测试了 4、16(默认值)和 32 个线程的情况。现在,让我们来探讨一下其中的一般原则。

关键考虑因素:

  • 系统资源:你能有效使用的线程数量取决于系统的资源,包括 CPU 核心数、内存和网络带宽。如果你设置的线程数过高,系统可能会过载,导致性能下降。
  • 目标服务:目标服务(在本例中为 SSH)可能设置了速率限制或其他安全措施,这会影响 Hydra 的性能。如果服务限制了单位时间内的登录尝试次数,超过一定限度增加线程数不会提高性能,甚至可能触发安全机制,阻止攻击。
  • 密码列表:密码列表的大小和复杂度也会影响性能。无论线程数量多少,更大的密码列表破解所需的时间都会更长。
  • 网络延迟:较高的网络延迟也会限制增加线程数的效果。

观察结果和一般准则:

  • 4 个线程:使用 4 个线程时,Hydra 不太可能使系统过载或触发目标服务的速率限制。然而,与使用更多线程相比,破解过程会更慢。此设置适用于资源有限的系统,或攻击具有严格速率限制的服务时。
  • 16 个线程(默认值):对于许多系统和目标服务而言,默认的 16 个线程设置在性能和资源使用之间取得了良好的平衡。它允许 Hydra 同时尝试合理数量的密码,而不会使系统过载。
  • 32 个线程:将线程数增加到 32 可能会提高性能,特别是当系统有足够的资源且目标服务没有严格的速率限制时。不过,重要的是要监控系统的资源使用情况,以确保系统不会过载。

结论:

Hydra 的最佳线程数取决于多种因素。重要的是尝试不同的设置,并监控系统性能,以找到速度和资源使用之间的最佳平衡。在实际场景中,你还需要考虑使用 Hydra 尝试破解密码的法律和道德影响。

本实验展示了 -t 选项如何影响 Hydra 的性能。通过调整线程数量,你可以针对不同的环境和目标服务优化 Hydra。

总结

在本实验中,我们首先使用 OpenSSH 在 LabEx 虚拟机上搭建了一个基本的 SSH 服务器。这包括更新软件包列表、安装 openssh-server 软件包,以及使用 systemctl status ssh 命令验证 SSH 服务是否正在运行。如有必要,可以使用 systemctl start ssh 命令启动该服务。

初始设置为后续步骤奠定了基础,后续步骤可能会使用 Hydra 通过尝试以不同的线程数破解密码来测试 SSH 服务器的安全性。然后,本实验将分析不同线程数对 Hydra 性能的影响。