Hydra の応答待ち時間を調整する実験

HydraBeginner
オンラインで実践に進む

はじめに

この実験では、応答が遅いまたは信頼性の低いサービスに対して攻撃を行う際に、Hydra の応答待ち時間を微調整する方法を学びます。SMTP を例として、これらの概念を説明します。

Python を使用して、シミュレートされた遅延応答を持つシンプルな SMTP サーバーを設定することから始めます。これにより、遅いまたは信頼性の低いネットワーク環境を模倣できます。次に、Hydra をこのサーバーに対して、まずデフォルトの待ち時間設定で実行し、その後 -w オプションを使用して待ち時間を調整してその影響を観察します。最後に、-l-p オプションを使用して単一の認証情報を直接指定し、単一スレッドでテストします。

遅延応答の SMTP サーバーを設定する

このステップでは、Python を使用してシンプルな SMTP サーバーを設定します。このサーバーは応答に遅延を導入し、遅いまたは信頼性の低いサービスをシミュレートします。これは、Hydra の待ち時間設定がパフォーマンスにどのように影響するかを理解する上で非常に重要です。

まず、~/project ディレクトリに delayed_smtp.py という名前の Python スクリプトを作成する必要があります。このスクリプトは SMTP サーバーとして機能します。

nano テキストエディタを開いてこのファイルを作成します。

nano ~/project/delayed_smtp.py

次に、以下の Python コードを delayed_smtp.py ファイルにコピー&ペーストします。

import socket
import time
import threading

def handle_client(client_socket):
    try:
        ## グリーティングを送信
        client_socket.send(b"220 localhost ESMTP\r\n")

        while True:
            data = client_socket.recv(1024).decode('utf-8').strip()
            if not data:
                break

            if data.upper().startswith('EHLO') or data.upper().startswith('HELO'):
                client_socket.send(b"250-localhost\r\n250-AUTH LOGIN\r\n250 OK\r\n")

            elif data.upper().startswith('AUTH LOGIN'):
                client_socket.send(b"334 VXNlcm5hbWU6\r\n")  ## ユーザ名:
                client_socket.recv(1024)  ## ユーザ名を受信

                ## 5 秒の遅延を追加
                time.sleep(5)

                client_socket.send(b"334 UGFzc3dvcmQ6\r\n")  ## パスワード:
                client_socket.recv(1024)  ## パスワードを受信
                client_socket.send(b"235 Authentication successful\r\n")

            elif data.upper().startswith('QUIT'):
                client_socket.send(b"221 Bye\r\n")
                break
            else:
                client_socket.send(b"250 OK\r\n")

    except:
        pass
    finally:
        client_socket.close()

def run_server():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind(('127.0.0.1', 1025))
    server.listen(5)
    print("SMTP サーバーをポート 1025 で起動しました")

    while True:
        try:
            client, addr = server.accept()
            thread = threading.Thread(target=handle_client, args=(client,))
            thread.daemon = True
            thread.start()
        except:
            break

if __name__ == '__main__':
    run_server()

この簡略化された Python スクリプトは、ポート 1025 でリスニングする基本的な SMTP サーバーを作成します。サーバーは Hydra が期待する LOGIN メソッドを使用した SMTP 認証をサポートします。重要な点は、認証処理中に time.sleep(5) 行があり、ネットワーク応答の遅延をシミュレートするために認証プロセス中に 5 秒の遅延を導入している点です。

コードを貼り付けた後、ファイルを保存し、nanoCtrl + XYEnter の順に押して終了します。

次に、この Python スクリプトをバックグラウンドで実行する必要があります。nohup を使用すると、ターミナルセッションを閉じてもスクリプトが継続して実行されます。監視のために、出力は delayed_smtp.log という名前のログファイルにリダイレクトされます。

ターミナルで以下のコマンドを実行します。

nohup python3 ~/project/delayed_smtp.py > ~/project/delayed_smtp.log 2>&1 &

このコマンドは SMTP サーバーを起動します。末尾の & はプロセスをバックグラウンドに送るため、ターミナルを継続して使用できます。

SMTP サーバーが実行中でポート 1025 でリスニングしていることを確認するために、ss コマンドを使用できます。ss コマンドはソケットを調査するためのユーティリティです。

ss -tulnp | grep 1025

サーバーがポート 1025 でリスニングしていることを示す、次の様な出力が表示されるはずです。

tcp   LISTEN 0      4096   0.0.0.0:1025      0.0.0.0:*    users:(("python3",pid=XXXX,fd=X))

pid=XXXX には、Python スクリプトの実行プロセス ID が表示されます。これにより、遅延 SMTP サーバーがアクティブになり、テストの準備ができていることが確認できます。

この出力は、Python SMTP サーバーが正常に実行され、ポート 1025 でリスニングしていることを確認します。LISTEN ステータスはサーバーが接続を受け付ける準備ができていることを示し、python3 プロセス名は、スクリプトが実行されていることを確認します。このサーバーに組み込まれた 5 秒の遅延は、Hydra の待ち時間設定が攻撃パフォーマンスにどのように影響するかを理解するのに役立ちます。

ポート 1025 で実行中の遅延 SMTP サーバー

デフォルトの待ち時間で Hydra を実行する

このステップでは、設定した遅延 SMTP サーバーに対して Hydra を実行します。Hydra のデフォルトの待ち時間は 10 秒です。これにより、ターゲットサービスの応答遅延が Hydra のデフォルトのタイムアウト範囲内にある場合の Hydra の動作を示します。

最初に、Hydra が使用するユーザ名リストとパスワードリストを作成する必要があります。これらのファイルは ~/project ディレクトリに配置されます。

users.txt ファイルを作成します。

nano ~/project/users.txt

users.txt ファイルに以下のユーザ名を追加します。

testuser
admin
user

ファイルを保存し、nano を終了します (Ctrl + X, Y, Enter)。

次に、passwords.txt ファイルを作成します。

nano ~/project/passwords.txt

passwords.txt ファイルに以下のパスワードを追加します。

password
123456
test

ファイルを保存し、nano を終了します (Ctrl + X, Y, Enter)。

次に、Hydra を実行します。localhost (127.0.0.1) のポート 1025 で実行中の SMTP サーバーをターゲットにします。smtp モジュール、users.txt リスト、passwords.txt リストを使用します。-t 1 オプションは、Hydra が 1 つのスレッドのみを使用するように指定し、出力を読みやすくします。

hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 127.0.0.1 smtp -s 1025

コマンドを分解します。

  • hydra: Hydra ツールを呼び出すコマンド。
  • -L ~/project/users.txt: ユーザ名リストを含むファイルへのパスを指定。
  • -P ~/project/passwords.txt: パスワードリストを含むファイルへのパスを指定。
  • -vV: 詳細モードを有効にし、ログイン試行(成功、失敗)に関する詳細情報を表示します。
  • -t 1: 並列タスク(スレッド)の数を 1 に設定。各試行を順番に観察するのに便利です。
  • 127.0.0.1: ターゲットの IP アドレス(ローカルマシン)。
  • smtp: 攻撃に使用する Hydra のサービスモジュール(今回の場合は SMTP)。
  • -s 1025: ターゲットサービスのポート番号を指定(遅延 SMTP サーバーの場合は 1025)。

SMTP サーバーが 5 秒の遅延を持ち、Hydra のデフォルトの待ち時間が 10 秒であるため、Hydra はタイムアウトすることなく各試行を正常に完了するはずです。Hydra が各ユーザ名とパスワードの組み合わせを試している様子を示す、以下の様な出力が表示されます。

labex:project/ $ hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 127.0.0.1 smtp -s 1025
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 13:47:03
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 1 task per 1 server, overall 1 task, 9 login tries (l:3/p:3), ~9 tries per task
[DATA] attacking smtp://127.0.0.1:1025/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "password" - 1 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
... (その他の試行)
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
1 of 1 target successfully completed, 3 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 13:47:20

この出力は、Hydra がデフォルトの 10 秒の待ち時間を使って、5 秒の遅延を持つサーバーに対して動作している様子を示しています。すべての試行がタイムアウトすることなく正常に完了しているため、このシナリオではデフォルトの待ち時間が十分であることがわかります。[DATA] 行は、合計 9 回の試行(3 つのユーザ名 × 3 つのパスワード)を示し、各ログイン成功は、ポートとサービスタイプを示す [1025][smtp] でマークされています。

待機時間を-w オプションで調整する

このステップでは、-w オプションを使用して Hydra の待ち時間を明示的に設定します。デフォルトの待ち時間 (10 秒) は 5 秒の遅延に対して十分でしたが、このパラメータを理解し制御することは、Hydra をさまざまなネットワーク状況やサーバーの動作に適応させるために非常に重要です。

前のステップで作成したユーザ名リスト (users.txt) とパスワードリスト (passwords.txt) を使用します。

次に、-w オプションを追加して Hydra を再度実行します。このコマンドは、10 秒が Hydra のデフォルトの待ち時間であるため、前のコマンドと動作は同じですが、オプションの使用方法を示します。

hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 -w 10 127.0.0.1 smtp -s 1025

コマンドを分解します。重要な違いを強調します。

  • hydra: Hydra コマンド。
  • -L ~/project/users.txt: ユーザ名リストファイルの指定。
  • -P ~/project/passwords.txt: パスワードリストファイルの指定。
  • -vV: 詳細モードを有効にする。
  • -t 1: スレッド数を 1 に設定。
  • -w 10: 待ち時間 (タイムアウト) を明示的に 10 秒に設定します。 つまり、Hydra はターゲットサービスからの応答を最大 10 秒待機してから、試行を失敗とみなします。
  • 127.0.0.1: ターゲットの IP アドレス。
  • smtp: サービスモジュール。
  • -s 1025: ポート番号を指定。

出力は、10 秒の待ち時間が SMTP サーバーの 5 秒の遅延に対して十分であるため、前のステップと同様になります。このステップは主に -w オプションの使い方を示すものです。

Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:02:49
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 1 task per 1 server, overall 1 task, 9 login tries (l:3/p:3), ~9 tries per task
[DATA] attacking smtp://127.0.0.1:1025/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "password" - 1 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
... (その他の試行)
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
1 of 1 target successfully completed, 3 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:03:05

この出力は、待ち時間を 10 秒に設定する -w 10 の明示的な使用を示しており、デフォルト設定と同じ結果が得られます。攻撃は正常に完了し、16 秒の時間枠 (14:02:49 から 14:03:05) 内に 3 つの有効なパスワードすべてが見つかりました。このステップでは、デフォルトの 10 秒の制限よりも長い応答時間を持つサーバーを扱う際に、タイムアウト設定を明示的に制御する方法を示しています。

単一の認証情報(-l と -p オプション)でテストする

このステップでは、Hydra の -l-p オプションを使用して、単一のユーザ名とパスワードの組み合わせをテストする方法を学びます。このアプローチでは、個別のファイルを使用する代わりに、コマンドラインで直接単一の認証情報を指定できます。これは、特定の認証情報を迅速にテストするために、ファイルを作成したり変更したりする必要がない場合に特に便利です。

最初のステップで設定した遅延 SMTP サーバーを使い続けます。

以下の Hydra コマンドを実行し、-l オプションでユーザ名、-p オプションでパスワードを指定します。

hydra -t 1 -l testuser -p password -vV 127.0.0.1 smtp -s 1025

このコマンドを分解します。

  • hydra: Hydra コマンド。
  • -t 1: スレッド数を 1 に設定し、明確で順次的な試行を保証します。
  • -l testuser: テストするユーザ名です。 -l (小文字の L) オプションは、単一のユーザ名に使用されます。
  • -p password: テストするパスワードです。 -p オプションは、単一のパスワードに使用されます。
  • -vV: 詳細モードを有効にします。
  • 127.0.0.1: ターゲットの IP アドレス。
  • smtp: サービスモジュール。
  • -s 1025: ポート番号を指定。

このシナリオでは、Hydra は単一の認証情報ペア testuser:password でログインを試行するだけです。デモのために、SMTP サーバーは任意の認証情報を受け入れるため、Hydra はログイン成功を報告します。

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

labex:project/ $ hydra -t 1 -l testuser -p password -vV 127.0.0.1 smtp -s 1025
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 13:50:25
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 1 task per 1 server, overall 1 task, 1 login try (l:1/p:1), ~1 try per task
[DATA] attacking smtp://127.0.0.1:1025/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "password" - 1 of 1 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 13:50:30

この出力は、-l-p オプションを使用して、単語リストファイルではなく単一の認証情報ペアをテストしていることを示しています。[DATA] 行は、1 login try (l:1/p:1) と表示され、テストされるユーザ名とパスワードが 1 つずつであることを示しています。特定の認証情報を検証する必要がある場合のターゲットテストには効率的であり、9 回の試行ではなく 1 回の試行しかないため、はるかに高速に完了します。

まとめ

In this lab, you have learned how to fine-tune Hydra's behavior when dealing with services that have slow or unreliable responses.

You started by setting up a simulated slow SMTP server using a Python script, which introduced a 5-second delay in its responses. This allowed you to create a controlled environment to test Hydra's timeout settings. You then ran Hydra against this server, first observing its default behavior, and then explicitly adjusted the wait time using the -w option. Finally, you explored the -l and -p options for specifying single credentials directly on the command line, which is useful for quick, targeted tests.

This lab has provided you with practical experience in configuring Hydra for various network conditions, enhancing your ability to perform effective brute-force attacks.