はじめに
この実験では、Hydra が SSH 攻撃中にユーザー名とパスワードをどのように繰り返し試行するかを学びます。ユーザー名とパスワードのリストを作成し、デフォルトの SSH 攻撃を実行して、Hydra のデフォルト動作を観察します。
最初に、ユーザー名とパスワードのリストをそれぞれ含む usernames.txt と passwords.txt ファイルを用意します。次に、これらのリストを使用して基本的な Hydra SSH 攻撃を実行し、Hydra がさまざまな組み合わせを試行する方法を示します。最後に、-u オプションが Hydra がユーザー名とパスワードの組み合わせを試行する順序に与える影響を調べます。
ユーザー名とパスワードリストの準備
このステップでは、ユーザー名リストとパスワードリストの 2 つの重要なファイルを作成します。これらのリストは、Hydra によって SSH ログインを試行するために使用されます。これらのリストを作成することで、ターゲットに対してさまざまなユーザー名とパスワードの組み合わせを体系的にテストできます。
まず、ターミナルを開きます。現在、/home/labex/project ディレクトリ(~/project ともアクセス可能)の中にいます。このディレクトリにファイルを作成します。
nano テキストエディタを使用して、usernames.txt という名前のファイルを作成します。
nano ~/project/usernames.txt
次に、ファイルに以下のユーザー名を追加します。これらの例です。必要に応じてカスタマイズしてください。
root
admin
test
user
ubuntu
内容を追加したら、Ctrl + O を押してファイルを保存し、ファイル名を確定するために Enter を押します。最後に Ctrl + X を押して nano を終了します。
次に、パスワードリストを作成します。再び nano を使用して、passwords.txt という名前のファイルを作成します。
nano ~/project/passwords.txt
ファイルに以下のパスワードを追加します。これも例です。
password
123456
qwerty
secret
ubuntu
Ctrl + O を押してファイルを保存し、ファイル名を確定するために Enter を押します。最後に Ctrl + X を押して nano を終了します。
ファイルが正しく作成されたことを確認するために、cat コマンドを使用してその内容を表示できます。
usernames.txt の内容を表示します。
cat ~/project/usernames.txt
出力は次のようになります。
root
admin
test
user
ubuntu
同様に、passwords.txt の内容を表示します。
cat ~/project/passwords.txt
出力は次のようになります。
password
123456
qwerty
secret
ubuntu
これらのファイル usernames.txt と passwords.txt は、次のステップで Hydra と共に使用できるようになりました。
デフォルトの SSH 攻撃を実行する
このステップでは、前のステップで作成したユーザー名とパスワードのリストを使用して、Hydra を用いた基本的な SSH 攻撃を実行します。これにより、Hydra がユーザー名とパスワードを繰り返し試行するデフォルトの動作を示します。
Hydra コマンドの基本的な構文は次のとおりです。
hydra [options] <target> <service> [additional options]
hydra: Hydra ツールを呼び出すコマンド。[options]: 攻撃をカスタマイズするためのさまざまなオプション、たとえばユーザー名とパスワードのリストを指定するオプション。<target>: ターゲットの SSH サーバーの IP アドレスまたはホスト名。この実験では、ターゲットとして127.0.0.1(localhost) を使用します。<service>: 攻撃対象のサービス (例:ssh,ftp,http)。この場合はsshです。[additional options]: サービス固有のオプション。
それでは、デフォルトの SSH 攻撃を実行します。ユーザー名リストを指定するために -L オプション、パスワードリストを指定するために -P オプション、各試行を表示するために -V オプションを使用します。
hydra -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh
このコマンドは、Hydra に次の指示を与えます。
-V: 詳細モードを有効にして、各ログイン試行を表示します。-L ~/project/usernames.txt:~/projectディレクトリにあるusernames.txtファイルをユーザー名リストとして使用します。-P ~/project/passwords.txt:~/projectディレクトリにあるpasswords.txtファイルをパスワードリストとして使用します。127.0.0.1: ローカルホスト上で実行されている SSH サービスをターゲットにします。ssh: SSH サービスを攻撃対象とすることを指定します。
ターミナルでコマンドを実行します。Hydra は、usernames.txt の各ユーザー名と passwords.txt の各パスワードを使用して、127.0.0.1 の SSH サービスにログインを試行します。デフォルトでは、Hydra は最初にユーザー名を繰り返し、1 つのユーザー名に対してすべてのパスワードを試してから、次のユーザー名に進みます。
出力には、試行が行われている様子が表示されます。各ログイン試行の詳細な情報が表示されます。弱いパスワードを使用し、localhost をターゲットにしているため、ログインが成功する可能性がありますが、ほとんどの試行は失敗するでしょう。
出力は次のようになります (正確な出力は異なります)。
Hydra vX.X (c) XXXX 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 YYYY-MM-DD HH:MM:SS
[DATA] max X tasks per X server, overall X tasks, X login tries (l:X/p:X), ~X try per task
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "root" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "123456" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "qwerty" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "secret" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "ubuntu" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - X of X [child X] (X/X)
...
Hydra が最初に「root」ユーザーのすべてのパスワードを試してから、「admin」などに進む様子に注目してください。これがデフォルトの動作です。
パスワードを最初にループさせる -u オプションで実行する
このステップでは、Hydra に -u オプションを使用して、ログイン試行の順序を変更します。デフォルトでは、Hydra は最初にユーザー名を繰り返し、各ユーザー名に対してすべてのパスワードを試してから次のユーザー名に進みます。-u オプションは、この動作を逆転させ、Hydra が最初にパスワードを繰り返し、すべてのユーザー名に対して各パスワードを試してから次のパスワードに進みます。
これは、複数のアカウントで共通のパスワードが使用されていると疑われる場合に役立ちます。
-u オプションを使用するには、前の Hydra コマンドに追加するだけです。詳細な試行を表示するために、再び -V オプションも使用します。
hydra -u -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh
このコマンドは、Hydra に次の指示を与えます。
-u: パスワードを優先的に試行します。-V: 詳細モードを有効にして、各ログイン試行を表示します。-L ~/project/usernames.txt:~/projectディレクトリにあるusernames.txtファイルをユーザー名リストとして使用します。-P ~/project/passwords.txt:~/projectディレクトリにあるpasswords.txtファイルをパスワードリストとして使用します。127.0.0.1: ローカルホスト上で実行されている SSH サービスをターゲットにします。ssh: SSH サービスを攻撃対象とすることを指定します。
ターミナルでコマンドを実行します。Hydra は、今度は passwords.txt の最初のパスワードを usernames.txt のすべてのユーザー名に対して試してから、次のパスワードに進みます。
出力を確認してください。試行の順序が前のステップとは異なることに気付くはずです。Hydra は、同じパスワードを複数のユーザー名に対して連続して試行するようになります。
出力は次のようになります (正確な出力は異なります)。
Hydra vX.X (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 YYYY-MM-DD HH:MM:SS
[DATA] max X tasks per X server, overall X tasks, X login tries (l:X/p:X), ~X try per task
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "root" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "user" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "ubuntu" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "123456" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "123456" - X of X [child X] (X/X)
...
Hydra が、最初にすべてのユーザー名に対して「password」を試してから、すべてのユーザー名に対して「123456」などに進む様子に注目してください。これが -u オプションを使用した場合の動作です。
このコマンドの出力を前のステップのコマンドの出力を比較することで、ログイン試行の順序の違いを明確に確認できます。これは、Hydra の動作を理解し、特定の状況に最適な攻撃戦略を選択するのに役立ちます。
攻撃パターンとパフォーマンスを分析する
このステップでは、2 つの攻撃方法の実用的な違いを分析し、それぞれの方法がより効果的な状況を理解します。また、さまざまなシナリオに基づいて Hydra 攻撃を最適化する方法についても探ります。
戦略的な違いの理解
デフォルトモードと -u モードの選択は、攻撃効率に大きな影響を与える可能性があります。
- デフォルトモード (ユーザー名優先): 特定のユーザーが弱いパスワードを持っていると疑われる場合に有効です。
- パスワード優先モード (
-u): 複数のアカウントで共通のパスワードが使用されていると疑われる場合に有効です。
これをよりターゲットを絞ったアプローチで示しましょう。まず、違いを明確に確認するために、より小さな、より焦点を絞ったテストを作成します。
echo -e "admin\ntest" > ~/project/small_users.txt
echo -e "password\n123456" > ~/project/small_passwords.txt
次に、パターンを明確に確認するために、両方の攻撃を制限された出力で実行します。
デフォルト攻撃 (ユーザー名優先):
hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh
-t 1 オプションは、Hydra が一度に 1 つのタスクしか使用しないように制限し、シーケンスをより簡単に追跡できるようにします。
パスワード優先攻撃:
hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh
パフォーマンス分析
次に、時間と効率を分析しましょう。簡単な時間計測テストを作成します。
echo "Testing default mode timing..."
time hydra -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1
echo "Testing -u mode timing..."
time hydra -u -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1
実際のアプリケーションシナリオ
それぞれのモードを使用する適切なタイミングを理解しましょう。
デフォルトモードを使用する場合:
- 特定の重要なアカウントに関する情報を持っている場合
- 管理者アカウントに弱いパスワードがあるかどうかを迅速にテストしたい場合
- 少数の特権ユーザーを対象としている場合
-uモードを使用する場合:- 複数のアカウントでパスワードが再利用されていると疑われる場合
- 過去の侵害から共通のパスワードのリストを持っている場合
- 共通の弱いパスワードを持つアカウントを見つけたい場合
攻撃パターンの検証
攻撃パターンの違いを明確に確認するために、簡単なデモを作成しましょう。
echo "=== デフォルトモードパターン ==="
hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4
echo "=== パスワード優先モードパターン ==="
hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4
これにより、次のことが明確になります。
- デフォルトモード:admin/password, admin/123456, test/password, test/123456
- パスワード優先モード:admin/password, test/password, admin/123456, test/123456
アカウントロックアウトポリシーに対処する場合や、複数のアカウントにわたって試行を分散させることで検出を回避しようとする場合、この違いは重要になります。
まとめ
この実験では、~/project ディレクトリにユーザー名とパスワードのリストを作成することで、Hydra SSH 攻撃に必要なファイルを準備する方法を学びました。Hydra を使用して SSH 攻撃を実行し、詳細な攻撃試行を観察し、Hydra の反復動作を理解するために、詳細な出力を有効にしました。
Hydra のデフォルトモード (ユーザー名優先反復) と -u オプション (パスワード優先反復) の重要な違いを探りました。実践的な練習を通して、以下のことを発見しました。
- デフォルトモード: 次のユーザー名に移る前に、各ユーザー名に対してすべてのパスワードを試します。特定の重要なアカウントをターゲットにするのに適しています。
- パスワード優先モード (
-u): 次のパスワードに移る前に、すべてのユーザー名に対して各パスワードを試します。共通の弱いパスワードを持つアカウントを見つけるのに適しています。
また、これらのモードの選択に関する実践的な考慮事項、パフォーマンスへの影響、それぞれの方法が最も効果的な現実世界のシナリオについても学びました。この理解により、特定のターゲット環境と目標に基づいて、侵入テスト戦略を最適化できます。
この実験では、異なる攻撃パターンが、アカウントロックアウトポリシーに対処する場合や、複数のアカウントにわたってログイン試行を分散させることで検出を回避しようとする場合に、どのように重要になるかを示しました。


