Hydra の接続間隔を制御する

HydraHydraBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Hydra パスワードクラッキングツールの接続間隔を制御する方法を学びます。この実験では、Hydra を設定して接続試行の間に遅延を導入する方法を示し、攻撃のペースを管理し、検知を回避する可能性を高めることができます。

実験は、OpenSSH を使用して LabEx VM 上に基本的な SSH サーバーをセットアップすることから始まります。サーバーをインストールし、その状態を確認し、ポート 22 で待機していることを確認します。その後、デフォルトのタイミングで Hydra を実行し、コマンドを変更して -W 5 オプションを追加します。このオプションは、接続試行の間に 5 秒の間隔を導入します。最後に、このタイミング調整が全体的な攻撃ペースに与える影響を観察します。


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_service("Target Service Selection") hydra/HydraGroup -.-> hydra/ssh_attack("SSH Brute Force") hydra/HydraGroup -.-> hydra/timeout_setting("Timeout Adjustment") hydra/HydraGroup -.-> hydra/success_detection("Login Success Detection") hydra/HydraGroup -.-> hydra/error_handling("Error Message Handling") hydra/HydraGroup -.-> hydra/rate_control("Rate Limiting Control") subgraph Lab Skills hydra/installation -.-> lab-550764{{"Hydra の接続間隔を制御する"}} hydra/single_username -.-> lab-550764{{"Hydra の接続間隔を制御する"}} hydra/single_password -.-> lab-550764{{"Hydra の接続間隔を制御する"}} hydra/target_service -.-> lab-550764{{"Hydra の接続間隔を制御する"}} hydra/ssh_attack -.-> lab-550764{{"Hydra の接続間隔を制御する"}} hydra/timeout_setting -.-> lab-550764{{"Hydra の接続間隔を制御する"}} hydra/success_detection -.-> lab-550764{{"Hydra の接続間隔を制御する"}} hydra/error_handling -.-> lab-550764{{"Hydra の接続間隔を制御する"}} hydra/rate_control -.-> lab-550764{{"Hydra の接続間隔を制御する"}} end

SSH サーバーのセットアップ

このステップでは、LabEx VM 上に基本的な SSH サーバーをセットアップします。SSH (Secure Shell) は、不安全なネットワーク上でネットワークサービスを安全に操作するための暗号化ネットワークプロトコルです。リモートコマンドラインログインやリモートコマンド実行に一般的に使用されます。

まず、OpenSSH サーバーをインストールする必要があります。OpenSSH は、Secure Shell プロトコルに基づくセキュリティ関連のネットワークレベルのツールのセットであり、最も一般的な SSH 実装です。

LabEx VM でターミナルを開きます。デフォルトの Xfce ターミナルを使用できます。

パッケージリストを更新するには、次のコマンドを実行します。

sudo apt update

このコマンドは、パッケージインデックスファイルをソースから同期します。新しいソフトウェアをインストールする前にこれを実行するのは良い習慣です。パスワードの入力を求められる場合がありますが、labex ユーザーはパスワードなしで sudo 権限を持っています。

次に、OpenSSH サーバーをインストールします。

sudo apt install openssh-server -y

-y フラグは、インストール中のすべてのプロンプトに自動的に「はい」と回答し、プロセスを非対話的にします。

インストールが完了すると、SSH サーバーは自動的に起動するはずです。次のコマンドを使用してその状態を確認できます。

sudo systemctl status ssh

System has not been booted with systemd as init system (PID 1). Can't operate. のようなエラーメッセージが表示される場合があります。これは、LabEx VM が systemd を使用しない Docker コンテナで実行されているためです。心配しないでください、SSH サーバーはまだ実行中です。

SSH サーバーが実行中であることを確認するには、SSH ポート (ポート 22) が待機中かどうかを確認できます。netstat コマンドを使用します。

netstat -tulnp | grep 22

次のような出力が表示されるはずです。

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -

これは、SSH サーバーが IPv4 と IPv6 の両方の接続に対してポート 22 で待機していることを示しています。

これで SSH サーバーがセットアップされたので、SSH クライアントを使用して別のマシンから接続できます。ただし、この実験では、Hydra を使用して SSH パスワードをクラックすることに焦点を当てます。

デフォルトのタイミングで Hydra を実行する

このステップでは、Hydra を実行して SSH パスワードをクラックしようとします。簡単なユーザー名とパスワードのリストを使用し、デフォルトのタイミング設定で攻撃のペースを観察します。

まず、~/project ディレクトリに users.txt という名前のユーザー名リストファイルを作成しましょう。このファイルには labex という 1 つのユーザー名が含まれます。

echo "labex" > ~/project/users.txt

次に、~/project ディレクトリに passwords.txt という名前のパスワードリストファイルを作成します。このファイルにはいくつかの一般的なパスワードが含まれ、その中には labex ユーザーの正しいパスワードである labex も含まれます。

echo "password" > ~/project/passwords.txt
echo "123456" >> ~/project/passwords.txt
echo "labex" >> ~/project/passwords.txt

これで、デフォルトのタイミング設定で Hydra を実行できます。Hydra の基本的な構文は次の通りです。

hydra [options] <target> <service> [MODULE-OPTIONS]

今回の場合、ターゲットは localhost (LabEx VM 自体)、サービスは ssh で、先ほど作成したユーザー名とパスワードのリストを使用します。

次のコマンドを実行します。

hydra -L ~/project/users.txt -P ~/project/passwords.txt localhost ssh

このコマンドを分解してみましょう。

  • hydra: Hydra ツールを実行するコマンド。
  • -L ~/project/users.txt: ユーザー名リストファイルを指定します。
  • -P ~/project/passwords.txt: パスワードリストファイルを指定します。
  • localhost: ターゲットホスト (この場合はローカルマシン)。
  • ssh: 攻撃するサービス (SSH)。

Hydra はこれで、リスト内のユーザー名とパスワードを使用して SSH サーバーにログインしようと試み始めます。攻撃の進捗を示す出力が表示されます。各ユーザー名とパスワードの組み合わせを試します。正しいパスワード labexpasswords.txt ファイルに含まれているので、Hydra は比較的早くそれを見つけるはずです。

出力は次のようになります。

Hydra v9.6 (c) 2024 by van Hauser/THC - use help for legal stuff


Hydra starting at 2024-01-01 00:00:00
[DATA] 1 task/1 service to scan
[DATA] attacking ssh://localhost:22
[STATUS] 0.00 tries/min
[STATUS] 0 of 3 passwords tested (0.00%)
[22][ssh] host: localhost   login: labex   password: labex
Hydra finished.

重要な行は [22][ssh] host: localhost login: labex password: labex です。これは、Hydra が labex ユーザーのパスワードを正常に見つけたことを示しています。

Hydra がパスワードを試行する速度に注意してください。これがデフォルトのタイミングです。次のステップでは、タイミングを変更して攻撃のペースにどのような影響があるかを確認します。

-W 5 を追加して 5 秒間隔を設ける

このステップでは、Hydra コマンドに -W 5 オプションを追加します。このオプションは、各ログイン試行の間に 5 秒間の遅延を導入します。これは、アカウントのロックアウトを回避したり、侵入検知システムに検知されないようにするのに役立ちます。

Hydra の -W オプションは、ターゲットサービスからの応答を待つタイムアウトを指定します。デフォルトでは、Hydra は非常に短いタイムアウトを使用します。このタイムアウトを増やすと、ターゲットサービスの応答が遅い場合やネットワークの遅延がある場合に役立ちます。

次のコマンドを実行します。

hydra -L ~/project/users.txt -P ~/project/passwords.txt -W 5 localhost ssh

このコマンドと前のコマンドの唯一の違いは、-W 5 オプションの追加です。

これで、Hydra は SSH サーバーにログインしようと試みますが、各ログイン試行が失敗した後、次のパスワードを試す前に 5 秒間待機します。

出力を観察してください。前のステップと比較して攻撃のペースが大幅に遅くなっていることに気付くでしょう。Hydra は依然として正しいパスワード (labex) を見つけますが、それにはもっと時間がかかります。

出力は次のようになります。

Hydra v9.6 (c) 2024 by van Hauser/THC - use help for legal stuff


Hydra starting at 2024-01-01 00:00:00
[DATA] 1 task/1 service to scan
[DATA] attacking ssh://localhost:22
[STATUS] 0.00 tries/min
[STATUS] 0 of 3 passwords tested (0.00%)
[22][ssh] host: localhost   login: labex   password: labex
Hydra finished.

ただし、重要な違いは Hydra finished. メッセージが表示されるまでにかかる時間です。-W 5 オプションを使用すると、Hydra が正しいパスワードを見つけるまでに少なくとも 10 秒 (2 回の失敗した試行 * 5 秒/試行) かかります。

次のステップでは、この変更が攻撃のペースに与える影響と、セキュリティテストへの影響について説明します。

攻撃ペースへの影響を観察する

このステップでは、-W 5 オプションが Hydra の攻撃ペースに与える影響を分析します。

前のステップで観察したように、-W 5 を追加すると攻撃速度が大幅に低下します。-W 5 オプションがない場合、Hydra はネットワークの遅延とサーバーの応答時間のみに制限され、できるだけ早くログインを試みます。-W 5 を使用すると、Hydra は各ログイン試行が失敗した後、5 秒間一時停止します。

この攻撃ペースの違いにはいくつかの重要な影響があります。

  • アカウントロックアウト: 多くのシステムには、一定回数のログイン試行に失敗するとアカウントを無効にするアカウントロックアウトポリシーがあります。-W 5 で攻撃ペースを遅くすることで、これらのロックアウトポリシーをトリガーするリスクを減らし、ターゲットアカウントからロックアウトされるのを回避できます。
  • 侵入検知システム (IDS): IDS は、ブルートフォース攻撃などの疑わしい活動をネットワークトラフィックから監視します。連続した多数のログイン試行失敗は、ブルートフォース攻撃の強い兆候であり、アラートをトリガーする可能性があります。攻撃ペースを遅くすることで、IDS による攻撃の検知を困難にすることができます。
  • リソース消費: 高速な攻撃ペースは、攻撃元のマシンとターゲットサーバーの両方で大量のリソースを消費する可能性があります。攻撃ペースを遅くすることで、リソース消費を削減し、攻撃を目立たなくすることができます。
  • 完了までの時間: 最も明らかな影響は、攻撃が完了するまでにかかる時間が増えることです。パスワードリストが大きい場合、試行間に遅延を追加すると、パスワードをクラックするのに必要な総時間が大幅に増える可能性があります。

要するに、Hydra の -W オプションを使用すると、攻撃ペースを制御し、速度の必要性と検知やアカウントロックアウトのリスクとのバランスを取ることができます。-W に適切な値を選ぶには、特定のターゲットと攻撃の目的に応じる必要があります。ペネトレーションテストでは、攻撃に時間がかかるとしても、目立たずに検知を回避することが多いです。

この実験では、Hydra を使用して SSH パスワードをクラックする基本的な例を示しました。実際のシナリオでは、攻撃者は多くの場合、はるかに大きなユーザー名とパスワードのリストを使用し、セキュリティ対策を回避するためのより洗練された手法を用います。強力で一意のパスワードを使用し、適切なセキュリティ対策を実施して、ブルートフォース攻撃から保護することが重要です。

まとめ

この実験では、まず LabEx 仮想マシン (VM) 上に基本的な SSH サーバーをセットアップしました。これには、sudo apt update を使用してパッケージリストを更新し、sudo apt install openssh-server -y で OpenSSH サーバーをインストールする作業が含まれていました。

次に、netstat -tulnp | grep 22 を使用して SSH サーバーの状態を確認し、ポート 22 で待機していることを確認することで、SSH サーバーが動作していることを検証しました。実験環境では Docker を利用しているため、systemd コマンドは期待通りに機能しない場合がありますが、SSH サーバーは正常に動作します。