简介
在本次实验中,我们将探究线程数量对 Hydra 性能的影响。实验首先会使用 OpenSSH 在 LabEx 虚拟机上搭建一个基本的 SSH 服务器,并确保其正常运行且可访问。
接下来,我们将以默认的 16 个线程数运行 Hydra,然后将线程数增加到 32,随后再减少到 4,比较攻击速度,并观察不同线程数对 Hydra 攻击整体性能的影响。最后,我们将分析线程数对 Hydra 性能的影响。
在本次实验中,我们将探究线程数量对 Hydra 性能的影响。实验首先会使用 OpenSSH 在 LabEx 虚拟机上搭建一个基本的 SSH 服务器,并确保其正常运行且可访问。
接下来,我们将以默认的 16 个线程数运行 Hydra,然后将线程数增加到 32,随后再减少到 4,比较攻击速度,并观察不同线程数对 Hydra 攻击整体性能的影响。最后,我们将分析线程数对 Hydra 性能的影响。
在这一步中,我们将在 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
查找与网络接口(通常是 eth0
或 enp0s3
)关联的 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 服务器已设置并配置为允许密码认证。
在这一步中,我们将使用 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 个密码。
在这一步中,我们将把 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 并观察效果。
在这一步中,我们将把 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 个线程的情况。现在,让我们来探讨一下其中的一般原则。
关键考虑因素:
观察结果和一般准则:
结论:
Hydra 的最佳线程数取决于多种因素。重要的是尝试不同的设置,并监控系统性能,以找到速度和资源使用之间的最佳平衡。在实际场景中,你还需要考虑使用 Hydra 尝试破解密码的法律和道德影响。
本实验展示了 -t
选项如何影响 Hydra 的性能。通过调整线程数量,你可以针对不同的环境和目标服务优化 Hydra。
在本实验中,我们首先使用 OpenSSH 在 LabEx 虚拟机上搭建了一个基本的 SSH 服务器。这包括更新软件包列表、安装 openssh-server
软件包,以及使用 systemctl status ssh
命令验证 SSH 服务是否正在运行。如有必要,可以使用 systemctl start ssh
命令启动该服务。
初始设置为后续步骤奠定了基础,后续步骤可能会使用 Hydra 通过尝试以不同的线程数破解密码来测试 SSH 服务器的安全性。然后,本实验将分析不同线程数对 Hydra 性能的影响。