Hydra を使ったブルートフォースによるパスワード生成

HydraHydraBeginner
今すぐ練習

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

はじめに

この実験では、Hydra を使用してパスワード生成とブルートフォース攻撃の手法を探ります。主な焦点は、Hydra の -x オプションを活用して、長さや文字セットなどの定義された基準に基づいてパスワードを作成することです。

この実験では、-x オプションを使ってパスワードを生成し、ローカルホスト上のダミー FTP サーバーをターゲットにする手順を案内します。パスワードの最小および最大長を指定する方法や、小文字などの文字セットを使用する方法を学びます。また、-y オプションで記号を無効にする方法や、ブルートフォース攻撃の出力を分析する方法についても説明します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/password_creation("Password List Creation") hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/ftp_attack("FTP Brute Force") hydra/HydraGroup -.-> hydra/output_saving("Output File Saving") hydra/HydraGroup -.-> hydra/verbose_mode("Verbose Mode Usage") hydra/HydraGroup -.-> hydra/service_options("Service-Specific Options") hydra/HydraGroup -.-> hydra/troubleshooting("Basic Troubleshooting") subgraph Lab Skills hydra/password_creation -.-> lab-550769{{"Hydra を使ったブルートフォースによるパスワード生成"}} hydra/single_username -.-> lab-550769{{"Hydra を使ったブルートフォースによるパスワード生成"}} hydra/ftp_attack -.-> lab-550769{{"Hydra を使ったブルートフォースによるパスワード生成"}} hydra/output_saving -.-> lab-550769{{"Hydra を使ったブルートフォースによるパスワード生成"}} hydra/verbose_mode -.-> lab-550769{{"Hydra を使ったブルートフォースによるパスワード生成"}} hydra/service_options -.-> lab-550769{{"Hydra を使ったブルートフォースによるパスワード生成"}} hydra/troubleshooting -.-> lab-550769{{"Hydra を使ったブルートフォースによるパスワード生成"}} end

-x オプションでパスワードを生成する

このステップでは、Hydra の -x オプションを使って指定された形式に基づいてパスワードを生成する方法を探ります。これは、共通の接頭辞や接尾辞など、潜在的なパスワード構造に関する知識がある場合に特に有用です。

Hydra の -x オプションを使用すると、生成するパスワードの最小および最大長と、使用する文字セットを定義できます。構文は -x min:max:charset です。

まずは簡単な例から始めましょう。小文字のみを使用して、6 文字から 8 文字のパスワードを生成したいとします。

まず、~/project ディレクトリに移動します。

cd ~/project

次に、Hydra を使ってパスワードを生成し、FTP サーバーをクラックしようとします。デモンストレーションのために、任意のユーザー名とパスワードを常に受け入れるダミー FTP サーバーを使用します。ローカルで FTP サーバーが実行されていると仮定して、localhost をターゲットにします(ただし、このパスワード生成ステップではサーバーが実際に動作している必要はありません)。

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

hydra -l user -P /dev/null -vV -x 6:8:lc localhost ftp

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

  • hydra: Hydra のコマンドラインツール。
  • -l user: 使用するユーザー名を指定します。ここでは "user" を使用していますが、任意のユーザー名を指定できます。
  • -P /dev/null: Hydra にパスワードリストファイルを使用しないように指示します。代わりに -x を使ってパスワードを生成します。/dev/null は、書き込まれたデータを破棄する特殊なファイルです。
  • -vV: 詳細な出力を有効にし、各ログイン試行を表示します。
  • -x 6:8:lc: これが重要な部分です。Hydra に次のようにパスワードを生成するよう指示します。
    • 6: 最小長は 6 文字。
    • 8: 最大長は 8 文字。
    • lc: 小文字のみを使用する (a - z)。他のオプションには、uc (大文字)、12 (数字)、sc (記号) があります。これらを組み合わせることもできます。たとえば、lcuc12 は小文字、大文字、数字を使用します。
  • localhost: ターゲットホスト (この場合はダミー FTP サーバー)。
  • ftp: 攻撃するサービス (FTP)。

Hydra が "aaaaaa"、"aaaaaaa"、"aaaaaaaa"、"aaaaab" などの生成されたパスワードでログインを試行するのが見えるでしょう。パスワードファイルとして /dev/null を使用しているため、Hydra は -x オプションで生成されたパスワードのみを使用します。

重要な注意: この例ではデモンストレーションのためにダミー FTP サーバーを使用しています。明示的な許可なしに FTP サーバーをクラックしないでください。

次に、もう少し複雑な例を試してみましょう。パスワードが "prefix" で始まり、数字で終わり、その間に 4 から 6 文字の英数字があることがわかっているとします。

-x で直接接頭辞と接尾辞を指定することはできません。ただし、中間部分を生成し、sedawk などの他のツールを使って既知の部分を前後に追加してパスワードリストファイルを作成し、それを Hydra で使用することができます。簡単にするために、このステップでは基本的な -x の使い方に留めます。後のステップでより高度なパスワードリストの操作を探ります。

今のところ、小文字と数字を使用して 8 文字から 10 文字のパスワードを生成しましょう。

hydra -l user -P /dev/null -vV -x 8:10:lc12 localhost ftp

これにより、"aaaaaaaa"、"aaaaaaa1"、"aaaaaa11" などのパスワードが生成されます。

このステップでは、特定の長さと文字セットの制約でパスワードを生成するために -x オプションを使用する方法を示しました。潜在的なパスワード構造に関する事前の知識がある場合、これは強力な手法です。

生成したパスワードで FTP を攻撃する

このステップでは、前のステップを踏まえて、Hydra のパスワード生成機能を使って(ダミーの)FTP サーバーを攻撃します。主に -x オプションで「オンザフライ」に生成されたパスワードリストを使用します。

再度強調しますが、明示的な許可なしにシステムを攻撃することは違法で非倫理的な行為です。この実験は教育目的のみで行われており、これらの手法は自分が所有するシステムまたはテスト許可を得たシステムに対してのみ使用する必要があります。

このステップでは、基本的な FTP サーバーが動作していることを前提とします(任意の資格情報を受け入れるダミーサーバーでも構いません)。サーバーがない場合は、Python を使って簡単にセットアップできます。

sudo apt update
sudo apt install python3-pyftpdlib

次に、FTP サーバーが提供するディレクトリを作成します。

mkdir ~/project/ftp_root

そして、FTP サーバーを起動します。

python3 -m pyftpdlib -p 2121 -w ~/project/ftp_root

これにより、ポート 2121 で FTP サーバーが起動し、~/project/ftp_root ディレクトリのファイルを提供します。-w オプションで書き込みアクセスが許可されます。Ctrl+C でサーバーを停止できます。これはテスト目的の非常に基本的なサーバーであり、本番環境での使用には適していません。

では、Hydra を使ってこの FTP サーバーを攻撃しましょう。-x オプションを使ってパスワードを生成し、ユーザー "testuser" としてログインを試みます。

hydra -l testuser -P /dev/null -vV -x 4:6:lc 127.0.0.1 ftp

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

  • hydra: Hydra のコマンドラインツール。
  • -l testuser: 使用するユーザー名を指定します:"testuser"。
  • -P /dev/null: Hydra にパスワードリストファイルを使用しないように指示します。代わりに -x を使ってパスワードを生成します。
  • -vV: 詳細な出力を有効にし、各ログイン試行を表示します。
  • -x 4:6:lc: Hydra に次のようにパスワードを生成するよう指示します。
    • 4: 最小長は 4 文字。
    • 6: 最大長は 6 文字。
    • lc: 小文字のみを使用する (a - z)。
  • 127.0.0.1: ターゲットホスト (ローカルホスト)。Docker コンテナ内での潜在的な DNS 解決の問題を避けるために、localhost ではなく 127.0.0.1 を使用します。
  • ftp: 攻撃するサービス (FTP)。

Hydra が生成されたパスワードでログインを試行するのが見えるでしょう。ダミー FTP サーバーは任意の資格情報を受け入れるため、Hydra はすぐに有効なパスワードを見つける可能性が高いです。

では、少し複雑な例を試してみましょう。小文字と数字を組み合わせます。

hydra -l testuser -P /dev/null -vV -x 5:7:lc12 127.0.0.1 ftp

これにより、"aaaaa"、"aaaaa1"、"aaaa11" などのパスワードが生成されます。

重要な考慮事項:

  • レート制限: 実際の FTP サーバーでは、ブルートフォース攻撃を防ぐためにレート制限が設定されていることが多いです。Hydra には、同時接続数や試行間の遅延を制御するオプションがあります。
  • パスワードの複雑性: ブルートフォース攻撃の有効性は、パスワードの複雑性に大きく依存します。長くて複雑なパスワード(大文字、小文字、数字、記号を組み合わせたもの)は、はるかにクラックが難しいです。
  • 法的および倫理的な影響: いかなるシステムのセキュリティをテストする前に、必ず明示的な許可を得てください。

このステップでは、-x オプションを使って Hydra でパスワードを生成し、FTP サーバーを攻撃する方法を示しました。これらの手法を責任を持って倫理的に使用することを忘れないでください。

-y オプションで記号を無効にする

このステップでは、Hydra の -y オプションを使って、ファイルからパスワードを読み取る際に記号の使用を無効にする方法を学びます。これは、ターゲットシステムがパスワード内の特殊文字を扱う際に問題を引き起こす可能性があると思われる場合、またはブルートフォース攻撃の試行から記号を明示的に除外したい場合に役立ちます。

-y オプションは、Hydra にパスワードリストファイル内に存在する記号を無視するよう指示します。このオプションは -x オプションでのパスワード生成には影響せず、ファイルからパスワードを読み取る場合にのみ適用されます。

まず、記号を含むいくつかのパスワードを含むパスワードリストファイルを作成しましょう。~/project ディレクトリに移動します。

cd ~/project

次に、nano を使って passwords.txt という名前のファイルを作成します。

nano passwords.txt

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

password123
P@sswOrd
secret!
12345
qwerty

ファイルを保存し、nano を終了します(Ctrl+X を押し、次に Y を押し、最後に Enter を押します)。

では、このパスワードリストを使って、-y オプションを 使用せずに Hydra でダミー FTP サーバーを攻撃しましょう(前のステップでサーバーを起動したままであると仮定します)。

hydra -l testuser -P passwords.txt -vV 127.0.0.1 ftp

Hydra は、passwords.txt ファイル内の各パスワード(記号を含むものも含む)を使ってログインを試行します。

では、-y オプションを使って記号を無効にしましょう。

hydra -l testuser -P passwords.txt -y -vV 127.0.0.1 ftp

-y オプションを使用すると、Hydra は "P@sswOrd" のようなパスワードを "PsswOrd" として、"secret!" を "secret" として扱います。ログインを試行する前に記号を削除します。

重要な注意: -y オプションは、パスワードがターゲットサービスに送信される にパスワードを変更します。つまり、実際のパスワードに記号が 必要 な場合、-y を使用するとそのパスワードを見つけることができません。

これをさらに説明するために、正しいパスワードが "secret!" であるシナリオを考えてみましょう。-y を使用すると、Hydra は "secret" を試行し、失敗します。

-y を使用する場合:

  • ターゲットシステムがパスワード内の記号に問題があると思われる場合。
  • ブルートフォース攻撃の試行から記号を明示的に除外したい場合(たとえば、パスワードポリシーで記号が許可されていないことがわかっている場合)。
  • 接続問題をトラブルシューティングしており、記号が原因であると思われる場合。

このステップでは、Hydra の -y オプションを使ってファイルからパスワードを読み取る際に記号を無効にする方法を示しました。ブルートフォース攻撃の試行に対する潜在的な影響を考慮することを忘れないでください。記号を含むパスワードを見つけることができなくなる可能性があります。

ブルートフォース攻撃の出力を分析する

このステップでは、ブルートフォース攻撃中に Hydra が生成する出力を分析することに焦点を当てます。出力を理解することは、ログインの成功を特定し、問題をトラブルシューティングし、攻撃戦略を最適化するために重要です。

Hydra は -v オプションで制御される異なる詳細レベルを提供します。前のステップでは -vV を使用しており、これは適切な情報量を提供します。異なる出力メッセージとその意味を見てみましょう。

まず、ダミー FTP サーバーに対して簡単な Hydra コマンドを実行しましょう(サーバーがまだ実行中であることを確認してください)。

hydra -l testuser -P passwords.txt -vV 127.0.0.1 ftp

前のステップで passwords.txt ファイルを作成したと仮定すると、Hydra はファイル内の各パスワードを使ってログインを試行します。

以下は、よく見られる出力メッセージの内訳です。

  • [DATA] 127.0.0.1:21 - banner: 220 pyftpdlib 1.5.6: これは FTP サーバーから受け取ったバナーを示しています。バナーにはサーバーソフトウェアとバージョンに関する情報が含まれています。
  • [STATUS] 127.0.0.1:21 - 1/5 [5/5 pp]: これは攻撃の進捗状況を示しています。
    • 1/5: Hydra が合計 5 個のパスワードのうち 1 個を試したことを意味します。
    • [5/5 pp]: 各プロセスで試行するパスワードの数を示しています。
  • [DEBUG] ...: デバッグメッセージは、接続と認証プロセスに関するより詳細な情報を提供します。トラブルシューティングに役立ちます。
  • [21][ftp] host: 127.0.0.1 login: testuser password: password123: これは試行される資格情報を示しています。
  • [21][ftp] host: 127.0.0.1 login: testuser password: P@sswOrd: これは次に試行される資格情報を示しています。
  • [ATTEMPT][ftp] 127.0.0.1:21 - login: 'testuser' password: 'password123': この行は、Hydra が指定されたユーザー名とパスワードでログインを試行していることを示しています。
  • [21][ftp] 127.0.0.1: Login incorrect: これはログイン試行の失敗を示しています。正確なメッセージは FTP サーバーの設定によって異なります。
  • [21][ftp] 127.0.0.1: Invalid username or password: これもログイン試行の失敗を示しています。
  • [21][ftp] 127.0.0.1: ftp:Login OK: これが最も重要なメッセージです! これはログインの成功を示しています。Hydra が有効なユーザー名とパスワードの組み合わせを見つけました。

Hydra が有効なログインを見つけると、"Login OK" メッセージを表示し、デフォルトで攻撃を停止します。

出力をファイルに保存する:

-o オプションを使用して、Hydra の出力を後で分析するためにファイルに保存することができます。

hydra -l testuser -P passwords.txt -vV -o output.txt 127.0.0.1 ftp

これにより、すべての出力メッセージが ~/project ディレクトリ内の output.txt という名前のファイルに保存されます。その後、grep などのツールを使用して、"Login OK" などの特定のメッセージを検索することができます。

たとえば、output.txt ファイル内の成功したログインを見つけるには、次のようにします。

grep "Login OK" output.txt

出力の解釈:

  • "Login OK" メッセージがない場合: これは、Hydra が有効なユーザー名とパスワードの組み合わせを見つけることができなかったことを意味します。これはいくつかの理由による可能性があります。
    • 正しいパスワードがパスワードリストに含まれていない。
    • ユーザー名が間違っている。
    • ターゲットサービスはブルートフォース攻撃に対して脆弱ではない(たとえば、アカウントロックアウトポリシーのため)。
    • ネットワーク接続に問題がある。
  • 多数の "Login Incorrect" メッセージがある場合: これは、Hydra が多くの無効なユーザー名とパスワードの組み合わせを試行していることを示しています。これはブルートフォース攻撃中に予想されることです。
  • "Connection refused" または "Timeout" エラーがある場合: これらはネットワーク接続に問題があることを示しています。ターゲットサービスが実行中で、あなたのマシンからアクセス可能であることを確認してください。

Hydra の出力を注意深く分析することで、ターゲットシステムのセキュリティに関する貴重な洞察を得ることができ、攻撃戦略を洗練させることができます。

まとめ

この実験では、Hydra を使ってブルートフォース攻撃用のパスワードを生成する方法を探索し、特に -x オプションに焦点を当てました。このオプションを使用すると、最小および最大の長さや文字セット(小文字、大文字、数字、記号)などの定義されたパラメータに基づいてパスワードを作成することができます。

この実験では、特定の長さ制限と lc(小文字)の文字セットを使用して -x を使い、パスワードを生成し、ローカルホストで実行されているダミー FTP サーバーをクラックしようとする方法を示しました。コマンド hydra -l user -P /dev/null -vV -x 6:8:lc localhost ftp を使用してこのプロセスを説明し、効果的なパスワード生成のために構文と利用可能な文字セットオプションを理解する重要性を強調しました。