はじめに
In this lab, we will explore how to stop Hydra attacks early by leveraging its options to limit the number of attempts. We'll begin by setting up an FTP server using vsftpd and configuring it with multiple user accounts, testuser1 and testuser2, each with their own password. This setup will allow us to simulate a scenario where Hydra attempts to crack multiple accounts simultaneously.
The lab will then guide you through using the -f option to stop Hydra after the first successful login and the -F option with a multi-host list. Finally, we will compare the behavior of -f and -F to understand how they can be used to mitigate Hydra attacks.
複数の認証情報を持つ FTP を設定する
このステップでは、FTP サーバーを設定し、複数のユーザー認証情報で構成します。これにより、Hydra が複数のアカウントを同時にクラッキングする能力をテストできます。vsftpd (Very Secure FTP Daemon) を FTP サーバーとして使用します。
まず、vsftpd をインストールします。ターミナルを開き、以下のコマンドを実行します。
sudo apt update
sudo apt install vsftpd -y
次に、vsftpd を設定する必要があります。最初に、元の設定ファイルのバックアップを作成します。これは、システム設定ファイルに変更を加える前に実行する良い慣習です。
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
次に、設定ファイル /etc/vsftpd.conf を nano を使用して編集します。このファイルは FTP サーバーの動作を制御します。
sudo nano /etc/vsftpd.conf
nano エディタ内では、以下の行を追加または変更します。これらの設定は、匿名アクセスを無効化し、ローカルユーザーログインを有効化し、書き込みアクセスを許可し、セキュリティのためにローカルユーザーをそれぞれのホームディレクトリに chroot します。
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
listen=YES
listen_ipv6=NO
nano でファイルを保存するには:
Ctrl + Xを押して終了します。Yを押して保存を確定します。Enterを押してファイル名を確定します。
ファイルを保存したら、以下のコマンドを使用して設定ファイルを確認し、変更が正しく適用されていることを確認します。
sudo cat /etc/vsftpd.conf | grep -E "^(anonymous_enable|local_enable|write_enable|chroot_local_user|listen)"
出力に、追加した設定と同じ設定が表示されていることを確認してください。
次に、複数のユーザーアカウントを作成します。testuser1 と testuser2 の 2 つのユーザーを作成し、それぞれパスワードを設定します。これらのユーザーは、Hydra によってログインを試行されます。
testuser1 をホームディレクトリ付きで作成します。
sudo useradd -m testuser1
testuser1 のパスワードを非対話型コマンドを使用して設定します。
echo 'testuser1:password123' | sudo chpasswd
testuser2 をホームディレクトリ付きで作成します。
sudo useradd -m testuser2
testuser2 のパスワードを非対話型コマンドを使用して設定します。
echo 'testuser2:password456' | sudo chpasswd
これらのコマンドは非対話型であり、入力の入力を求めずにユーザーを直接作成するため、自動化された環境でより信頼性があります。
これで、chroot 設定のためにホームディレクトリのパーミッションを修正する必要があります。chroot_local_user=YES が有効になっている場合、セキュリティ上の理由からユーザーのホームディレクトリはユーザーによって書き込み可能であってはなりません。
sudo chmod 755 /home/testuser1
sudo chmod 755 /home/testuser2
各ユーザーがファイルのアップロードができるように、書き込み可能なサブディレクトリを作成します。
sudo mkdir /home/testuser1/files
sudo mkdir /home/testuser2/files
sudo chown testuser1:testuser1 /home/testuser1/files
sudo chown testuser2:testuser2 /home/testuser2/files
次に、設定ファイルに加えた変更を適用し、新しいユーザーを認識するために、vsftpd サービスを再起動します。
sudo service vsftpd restart
これで、FTP サーバーが正しく動作しており、新しいユーザーがログインできることを確認するために、FTP サーバーをテストします。ftp コマンドラインクライアントを使用して、サーバーに接続できます。ローカルでサーバーを実行しているため、localhost に接続できます。
ftp localhost
ユーザー名を入力するよう求められます。testuser1 とパスワード password123 を入力します。すべてが正しく設定されている場合、ログインしたことを示すメッセージが表示されます。
Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:labex): testuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
FTP クライアントを終了するには、bye と入力します。
ftp> bye
221 Goodbye.
次に、Hydra が攻撃に使用するためのファイルの準備をします。デフォルトの作業ディレクトリである ~/project ディレクトリに移動します。
cd ~/project
~/project ディレクトリに users.txt という名前のファイルを作成します。このファイルには、Hydra が使用しようとするユーザー名を含みます。
nano users.txt
users.txt に以下のユーザー名を追加します。
testuser1
testuser2
ファイルを保存して nano を終了します。
次に、~/project ディレクトリに passwords.txt という名前のファイルを作成します。このファイルには、テストユーザーの正しいパスワードを含むパスワードリストと、一般的な間違ったパスワードが含まれます。
nano passwords.txt
passwords.txt に以下のパスワードを追加します。
password123
password456
password
123456
qwerty
ファイルを保存して nano を終了します。
これで、複数のユーザーアカウントと、Hydra がアカウントクラッキングを試行するために使用できるユーザー名とパスワードのリストを持つ FTP サーバーが設定されました。
最初のペアの後で停止するように -f オプションで実行する
このステップでは、Hydra に -f オプションを使用します。-f オプションは、Hydra が 単一の ターゲットに対して最初の有効なユーザー名/パスワードのペアを見つけたら停止するように指示します。これは、特定のサービスで有効なアカウントを 1 つだけ見つけたい場合、ログインに成功した後、Hydra が他の組み合わせを試行し続ける必要がない場合に便利です。
~/project ディレクトリにいることを確認します。
cd ~/project
次に、前のステップで作成したユーザー名とパスワードのリストを使用して、FTP サーバーに対して Hydra を実行します。-f オプションを含めます。
hydra -L users.txt -P passwords.txt localhost ftp -f
このコマンドを分解してみましょう。
hydra: ブルートフォース攻撃用のコマンドラインツール。-L users.txt: ユーザー名リストを含むファイル (users.txtは現在のディレクトリにあります) を指定します。-P passwords.txt: パスワードリストを含むファイル (passwords.txtは現在のディレクトリにあります) を指定します。localhost: ターゲット FTP サーバーのアドレス。ftp: 攻撃対象のサービスプロトコル (この場合は FTP)。-f: これは、Hydra が 最初の有効なユーザー名/パスワードのペアを見つけたら停止する という重要なオプションです。
ターミナルの出力を確認します。Hydra は、リストのユーザー名とパスワードを使用してログインを試行します。有効な組み合わせ (例:testuser1:password123) を見つけると、ログイン成功を表示して操作を停止します。
出力は次のようになります。
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:41:46
[DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://localhost:21/
[21][ftp] host: localhost login: testuser1 password: password123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:41:47
Hydra は、最初の有効な組み合わせ (testuser1:password123) を見つけた直後に停止したことに注目してください。-f オプションなしでは、Hydra は passwords.txt ファイル内の testuser1 のすべての他の組み合わせを試行し、次に testuser2 に進み、そのユーザーのすべてのパスワードも試行していたでしょう。
このオプションは、特定のサービスをテストしていて、少なくとも 1 つのアカウントが脆弱であることを確認するだけで十分な場合に特に役立ち、大幅な時間とリソースを節約できます。
複数ホストリストで -F オプションを使用するテスト
このステップでは、Hydra の -F オプションを調べます。-f オプションは 単一 のホストに対して最初の有効な認証ペアが見つかったら停止しますが、-F オプションは、リスト内の すべての ホストに対して最初の有効な認証ペアが見つかったら停止します。これは、複数のシステムを対象としており、それらのシステムの中で 1 つだけ脆弱なエントリを見つける必要がある場合に特に便利です。
このデモを行うために、複数ホストのシナリオをシミュレートします。仮想マシンが 1 つしかないため、異なるターゲットをシミュレートするために、ホストリストに localhost を複数回使用します。
最初に、~/project ディレクトリにいることを確認します。
cd ~/project
次に、~/project ディレクトリに hosts.txt というファイルを作成します。このファイルには、ターゲットホストのリストが含まれます。
nano hosts.txt
hosts.txt に以下の行を追加します。
localhost
localhost
ファイルを保存して nano を終了します。localhost を 2 回リストアップすることで、同じマシンを指しているにもかかわらず、Hydra に 2 つの別個のターゲットとして扱うように指示しています。
次に、hosts.txt に指定されたホストのリストを対象として、-F オプションを使用して Hydra を実行します。
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
このコマンドを分解してみましょう。
-L users.txt: ユーザー名リストを含むファイルの指定。-P passwords.txt: パスワードリストを含むファイルの指定。-M hosts.txt: 新しいオプションです。ターゲットホストのリストを含むファイル (hosts.txtは現在のディレクトリにあります) を指定します。ftp: 攻撃対象のサービスプロトコル。-F: これは、リスト内のすべてのホストに対して最初の成功したログインが見つかったら停止する重要なオプションです。
ターミナルの出力を確認します。Hydra は、リストのユーザー名とパスワードを使用して、hosts.txt ファイル内の各ホストにログインを試行します。いずれかの ホストで有効な組み合わせが見つかった時点で、成功したログインを表示し、hosts.txt にリストされているすべてのホストの攻撃を停止します。
出力は次のようになります。
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:42:10
[DATA] max 10 tasks per 2 servers, overall 20 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://(2 targets):21/
[21][ftp] host: localhost login: testuser1 password: password123
[STATUS] attack finished for localhost (valid pair found)
2 of 2 targets successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:42:11
hosts.txt に localhost エントリが 2 つあるにもかかわらず、Hydra は最初の localhost インスタンスで最初の成功したログインが見つかった後、停止します。2 番目の localhost エントリの認証情報を検索しようと続行しません。これは、-F オプションの効果を示しています。
-F オプションは、複数のシステムを対象としており、目的を達成するために 1 つの脆弱なシステムを見つける必要がある場合に非常に便利です。リストされたターゲットのいずれかで脆弱性が見つかった時点で攻撃を停止することで、時間と計算リソースを大幅に節約できます。
-f オプションと -F オプションの動作比較
このステップでは、-f と -F オプションの動作を直接比較し、その違いを理解します。前のステップと同じ設定を使用します。localhost 上で動作する FTP サーバー、users.txt と passwords.txt ファイル、localhost を 2 つ含む hosts.txt ファイルです。
まず、-f オプションを使用してコマンドを再実行します。このコマンドは 単一 のホスト (localhost) を対象とし、その特定のホストに対して最初の有効な認証情報が見つかったら停止します。
hydra -L users.txt -P passwords.txt localhost ftp -f
ステップ 2 で見たように、Hydra は testuser1:password123 を見つけて停止します。localhost の testuser2:password456 を探すことはありません。
次に、-F オプションを使用してコマンドを再実行します。このコマンドは、ホストのリスト (hosts.txt) を対象とし、そのリスト内の いずれかの ホストで最初の有効な認証情報が見つかったら停止します。
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
ステップ 3 で見たように、Hydra は hosts.txt の最初の localhost エントリで testuser1:password123 を見つけて停止します。hosts.txt の 2 番目の localhost エントリをチェックすることはありません。
重要な違いは、Hydra がターゲットをどのように解釈し、いつ停止するかです。
-f(単一ターゲット): 単一のターゲット (例:localhost) を指定した場合、-fは Hydra に その特定のターゲット に対して いずれかの 有効なユーザー名/パスワードのペアが見つかったらすぐに停止するように指示します。同じターゲットで他の有効な認証情報を検索することはありません。-F(複数ホストリスト):-Mを使用してターゲットのリストを指定した場合、-Fは Hydra に、そのリスト内の いずれかの ホストで いずれかの 有効なユーザー名/パスワードのペアが見つかったらすぐに停止するように指示します。同じホストで他の有効な認証情報を検索することも、リスト内の後続のホストをチェックすることもありません。
さらに違いを説明するために、複数の FTP サーバー (ftp1.example.com、ftp2.example.com、ftp3.example.com) を持つネットワークをスキャンする架空のシナリオを考えてみましょう。
-fを使用してftp1.example.comを対象とした場合、Hydra はftp1.example.comで最初の有効な認証情報を見つけると停止します。次にftp2.example.comをチェックしたい場合は、別の Hydra コマンドを実行する必要があります。3 つのサーバーをすべて
hosts.txtファイルに入れて-Fを使用した場合、Hydra はftp1.example.comのチェックを開始します。そこに有効な認証情報が見つかった場合、ftp2.example.comやftp3.example.comに接続しようとさえせずに、すぐに全体の操作を停止します。
要約すると:
- 単一のターゲット に焦点を当てて、そのターゲットに対して少なくとも 1 つの有効な認証情報を見つけたい場合は、
-fを使用します。 - 複数のターゲット をスキャンしていて、いずれかの ターゲットで いずれかの 有効な認証情報が見つかった時点で全体の操作を停止したい場合は、
-Fを使用します。
これで実験は終了です。FTP サーバーをセットアップし、複数のユーザーアカウントを設定し、Hydra を使用してアカウントをクラッキングし、-f と -F オプションを使用して Hydra の攻撃動作を制御しました。
まとめ
この実験では、-f と -F オプションを使用して Hydra の攻撃動作を制御する方法を学びました。まず、vsftpd を使用してローカルの FTP サーバーを設定し、複数のユーザーアカウント (testuser1 と testuser2) を設定して、実際の状況をシミュレートしました。また、Hydra が使用する users.txt と passwords.txt ファイルも準備しました。
次に、-f オプションを使用して、Hydra に単一のターゲットに対して最初の有効なユーザー名/パスワードのペアが見つかったら停止するように指示しました。これにより、単一の脆弱なアカウントを効率的に見つける方法を学びました。その後、複数ホストリスト (hosts.txt) を使用して -F オプションを試しました。これにより、リストされたホストのいずれかで単一の有効な認証情報が見つかった時点で、Hydra が複数のターゲットに対する攻撃全体を停止する方法を学びました。
最後に、-f と -F の異なる動作を比較し、それぞれの使用事例を理解しました。-f は単一のターゲットで最初の成功後に停止し、-F は複数のターゲットで最初の成功後に停止します。この知識は、ブルートフォース攻撃を最適化し、リソースを効果的に管理するために非常に重要です。


