はじめに
この実験では、Hydra を使用して、さまざまなパスワード生成手法を用いて、ブルートフォース攻撃用のパスワードを生成する方法を学びます。Hydra の -x オプションを使用して、長さ、文字セット、一般的なパスワードパターンなどの異なる基準に基づいてパスワードを作成することに焦点を当てます。
この実験では、基本的な文字セット、混合文字の組み合わせ、数値パターン、現実世界のパスワード構造を含む複数のパスワード生成シナリオを指導します。ローカルホスト上のダミー FTP サーバーをターゲットとして、これらの手法を実践し、ブルートフォース攻撃の出力効果的に分析する方法を学びます。
Hydra の -x オプションによるパスワード生成
このステップでは、指定されたフォーマットに基づいてパスワードを生成するために Hydra の -x オプションを使用する方法を学びます。これは、既知の長さ範囲や文字セットなど、潜在的なパスワード構造に関する情報がある場合に役立ちます。
Hydra の -x オプションを使用すると、生成されるパスワードの最小長と最大長、および使用する文字セットを定義できます。構文は -x min:max:charset です。
簡単な例から始めましょう。小文字のみを使用して、6 文字から 8 文字の長さのパスワードを生成します。
まず、~/project ディレクトリにいることを確認します。これは、実験を開始するときのデフォルトのディレクトリです。
cd ~/project
次に、Hydra を使用してパスワードを生成します。デモのために、ローカルホストの SSH サービスをターゲットにします。これにより、実際の攻撃を実行せずに(存在しないユーザーを使用しているため)、パスワード生成を確認できます。
ターミナルで次のコマンドを実行します。
hydra -l testuser -vV -x 3:5:a-z localhost ssh
このコマンドを分解しましょう。
hydra: Hydra ツールを実行するコマンド。-l testuser: 使用するユーザー名。ここでは「testuser」をプレースホルダーとして使用しています(このユーザーは存在しない可能性が高い)。-vV: 詳細な出力を有効にし、各試行を表示します。-x 3:5:a-z: 重要な部分です。Hydra に次のようにパスワードを生成するように指示します。3: 最小長は 3 文字。5: 最大長は 5 文字。a-z: 小文字(a-z)のみを使用します。その他のオプションにはA-Z(大文字)、0-9(数字)があり、それらを組み合わせることもできます(例:a-zA-Z0-9は小文字、大文字、数字)。
localhost: ターゲットホスト。ssh: ターゲットとする SSH サービス。
Hydra は、生成されたパスワード「aaa」、「aaaa」、「aaaaa」、「aab」などを使用して接続を試行している様子が表示されます。-x オプションを使用すると、Hydra は指定された基準に基づいて自動的にパスワードを生成します。
注意: 小文字のみを使用した 3~5 文字のパスワードの組み合わせ数は管理可能です。26³ + 26⁴ + 26⁵ = 17,576 + 456,976 + 11,881,376 ≈ 1240 万組み合わせで、Hydra の制限内です。
重要: 攻撃を停止するには
Ctrl+Cを使用してください。完了するまでに時間がかかる可能性があります。
出力には、Hydra が SSH サービスに接続しようとするときに生成されたパスワードが表示されます。
Hydra v[...] (c) 2023 by van Hauser / THCO
...
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aaa" - 1 of 1 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aaaa" - 1 of 1 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aaaaa" - 1 of 1 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aab" - 1 of 1 [child 0] (0/0)
...
重要なパスワードの組み合わせの制限
Hydra の -x オプションを使用する場合、生成されるパスワードの組み合わせの総数を考慮することが重要です。Hydra には、非現実的なブルートフォース攻撃を防ぐために、40 億個のパスワードの制限が内蔵されています。
組み合わせの例を次に示します。
- 3~5 文字、小文字のみ (a-z): 約 1240 万組み合わせ ✓
- 4~6 文字、小文字のみ (a-z): 約 3 億 2100 万組み合わせ ✓
- 6~8 文字、小文字のみ (a-z): 約 2170 億組み合わせ ✗ (制限を超過)
- 4~6 文字、英数字 (a-zA-Z0-9): 約 570 億組み合わせ ✗ (制限を超過)
実行する前に、常に組み合わせの数を計算してください。charset_size^min_length + ... + charset_size^max_length
生成パスワードによる FTP 攻撃
このステップでは、Hydra のパスワード生成機能を使用して、ダミーの FTP サーバーを攻撃します。-x オプションで「動的に」生成されたパスワードリストを使用します。
まず、テスト用のシンプルな FTP サーバーを設定する必要があります。python3-pyftpdlib を使用します。これは Python 用の軽量 FTP サーバーライブラリです。
まだインストールされていない場合は、python3-pyftpdlib をインストールします。
sudo apt update
sudo apt install -y python3-pyftpdlib
~/project ディレクトリからファイルを提供するポート 2121 で、バックグラウンドで FTP サーバーを起動します。-w オプションは書き込みアクセスを許可します。
nohup python3 -m pyftpdlib -p 2121 -w -u testuser -P secret ~/project > /dev/null 2>&1 &
nohup ... & の部分は、コマンドをバックグラウンドで実行し、ターミナルを閉じても停止しないようにします。> /dev/null 2>&1 は標準出力と標準エラーを /dev/null にリダイレクトし、ターミナルをクリーンに保ちます。-u testuser -P secret オプションは、パスワード「secret」を持つユーザーを設定し、サーバーにアクセスできるようにします。
次に、Hydra を使用してこの FTP サーバーを攻撃します。-x オプションを使用してパスワードを生成し、ユーザー「testuser」としてログインを試みます。
ターミナルで次のコマンドを実行します。
hydra -l testuser -vV -x 4:6:a-z 127.0.0.1 ftp -s 2121
このコマンドを分解しましょう。
hydra: Hydra コマンドラインツール。-l testuser: 使用するユーザー名「testuser」。-vV: 詳細な出力を有効にし、各ログイン試行を表示します。-x 4:6:a-z: Hydra に次のようにパスワードを生成するように指示します。4: 最小長は 4 文字。6: 最大長は 6 文字。a-z: 小文字(a-z)のみを使用します。
127.0.0.1: ターゲットホスト(localhost)。コンテナ内の潜在的な DNS 解決の問題を回避するために127.0.0.1を使用します。ftp: 攻撃対象のサービス(FTP)。-s 2121: ポート番号を指定します。ポート 2121 で実行されている FTP サーバーをターゲットにします。
Hydra が生成されたパスワードでログインを試行している様子が表示されます。FTP サーバーは特定の資格情報(ユーザー名:testuser、パスワード:secret)で構成されているため、Hydra はブルートフォース攻撃中に「secret」を生成すると正しいパスワードを見つけます。
重要: 攻撃を停止するには
Ctrl+Cを使用してください。完了するまでに時間がかかる可能性があります。
出力にはログイン試行が表示され、最終的にログイン成功メッセージが表示されます。
Hydra v[...] (c) 2023 by van Hauser / THCO
...
[ATTEMPT] target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aaaa
[ATTEMPT] target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aaab
...
[2121][ftp] host: 127.0.0.1 login: testuser password: secret
次に、小文字と数字を組み合わせた、少し複雑な例を試してみましょう。
hydra -l testuser -vV -x 3:5:a-z0-9 127.0.0.1 ftp -s 2121
これにより、「aaa」、「aab」、「aac」など、まず 3 文字の組み合わせ、次に 4 文字の組み合わせ、最後に 5 文字の組み合わせを順次生成します。生成されたパスワードとログイン成功を確認するために、出力を観察します。
Hydra v[...] (c) 2023 by van Hauser / THCO
...
[ATTEMPT] target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aaa
[ATTEMPT] target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aab
...
[2121][ftp] host: 127.0.0.1 login: testuser password: secret
このステップでは、-x オプションを使用して Hydra を使用してパスワードを生成し、FTP サーバーを攻撃する方法を示しました。これらの手法を責任と倫理的に使用してください。
大文字小文字混在パスワード生成
このステップでは、大文字と小文字の両方を用いたパスワードの生成方法を学びます。これは多くのユーザーが使用する一般的なパスワードパターンであり、ブルートフォース攻撃において効果的な戦略となります。
多くのユーザーは、パスワードの複雑性要件を満たすために、大文字と小文字の混在したパスワードを作成します。このパターンを理解することで、ブルートフォース攻撃の成功率を大幅に向上させることができます。
~/project ディレクトリにあり、FTP サーバーがまだ稼働していることを確認してください。
cd ~/project
大文字小文字混在のパスワードを生成してみましょう。以下のコマンドを実行します。
hydra -l testuser -vV -x 3:4:a-zA-Z 127.0.0.1 ftp -s 2121
このコマンドは、以下の文字を使用してパスワードを生成します。
a-z: 小文字 (a-z)A-Z: 大文字 (A-Z)
生成されるパスワードは、「aaa」、「Aaa」、「aAa」、「AAa」、「aaA」、「AaA」、「aAA」、「AAA」、「aab」、「Aab」などとなります。Hydra が大文字と小文字を体系的に組み合わせている様子がわかります。
パターンをより明確にするために、3~4 文字の範囲を試してみましょう。
hydra -l testuser -vV -x 3:4:a-zA-Z 127.0.0.1 ftp -s 2121
これにより、大文字小文字混在の 3~4 文字のパスワードが生成されます。組み合わせがどのように進むかを観察できます。
- 3 文字:「aaa」、「Aaa」、「aAa」、「AAa」、「aaA」、「AaA」、「aAA」、「AAA」、「aab」、「Aab」など
- 4 文字:「aaaa」、「Aaaa」、「aAaa」、「AAaa」、「aaaA」、「AaaA」、「aAaA」、「AAaA」など
パターンの理解:
大文字小文字混在のパスワード生成は、Hydra が大文字と小文字のすべての可能な組み合わせを試す体系的なアプローチに従います。これは、特に以下の理由で効果的です。
- 多くのパスワードポリシーは大文字小文字の混在を要求する
- ユーザーは、単語の先頭文字やランダムな文字を大文字にすることが多い
- 一般的なパターンとして、単語の先頭文字を大文字にするものがある
このステップでは、大文字と小文字の両方を用いたパスワードに対して効果的な、大文字小文字混在のパスワード生成を用いたブルートフォース攻撃の方法を示しました。
英数字パスワード生成
このステップでは、アルファベットと数字を組み合わせたパスワードの生成方法を学びます。アルファベットと数字の組み合わせパスワードは、セキュリティと記憶のしやすさを両立させるため、非常に一般的です。
アルファベットと数字の組み合わせパスワードは、最も一般的なパスワードの種類の 1 つです。なぜなら、
- ほとんどのパスワードの複雑性要件を満たす
- 純粋なランダムな文字列よりも覚えやすい
- 企業環境でよく使用される
Hydra を使用して、アルファベットと数字の組み合わせパスワードを生成してみましょう。
hydra -l testuser -vV -x 3:4:a-zA-Z0-9 127.0.0.1 ftp -s 2121
このコマンドは、以下の文字を使用してパスワードを生成します。
a-z: 小文字 (a-z)A-Z: 大文字 (A-Z)0-9: 数字 (0-9)
生成されるパスワードの例:"abc", "A2b", "123", "aB1", "Te1" など。
より絞り込んだアプローチとして、小文字と数字のみを使用してみましょう。
hydra -l testuser -vV -x 3:4:a-z0-9 127.0.0.1 ftp -s 2121
これにより、"aaa", "aa1", "a12", "123", "test" などのパスワードが生成されます。
一般的なアルファベットと数字の組み合わせパターン
ユーザーは、アルファベットと数字の組み合わせパスワードを作成する際に、予測可能なパターンに従うことがよくあります。
- 単語 + 数字 (例:"pass123")
- 数字 + 単語 (例:"123pass")
- アルファベットと数字を交互に並べる (例:"a1b2")
ユーザーが短いアルファベットと数字の組み合わせを使用する可能性のあるパターンをシミュレートしてみましょう。
hydra -l testuser -vV -x 4:5:a-z0-9 127.0.0.1 ftp -s 2121
このステップでは、現実世界のシナリオで最も一般的なパスワードの種類の 1 つである、アルファベットと数字の組み合わせパスワードの生成方法を示しました。
数字のみパスワード生成
このステップでは、純粋な数字のみからなるパスワードの生成方法を学びます。これは、PIN、簡単なパスワード、数字のみを要求するシステムで一般的です。
数字のみのパスワードは、以下の場面で頻繁に使用されます。
- デバイスやアカウントの PIN コード
- 基本的なシステムの簡単なパスワード
- 一時的なパスワード
- 数字のみを要求するレガシーシステム
数字のみのパスワードを生成してみましょう。
hydra -l testuser -vV -x 3:6:0-9 127.0.0.1 ftp -s 2121
これにより、"123", "1234", "0000", "9999", "5678" など、純粋な数字のみのパスワードが生成されます。
PIN コードのようなパスワード(通常 4~6 桁)の場合は、以下を試してください。
hydra -l testuser -vV -x 4:4:0-9 127.0.0.1 ftp -s 2121
これにより、以下の可能性のある 4 桁の組み合わせが生成されます。
- 年 (1990, 2000, 2023 など)
- 一般的な PIN (1234, 0000, 1111 など)
- 生年月日
- 重要な日付
より長い PIN コードで一般的な 6 桁のパターンを試してみましょう。
hydra -l testuser -vV -x 6:6:0-9 127.0.0.1 ftp -s 2121
一般的な数字のパターン
ユーザーは、予測可能な数字のパスワードを選択することがよくあります。
- 連番:123456, 654321
- 繰り返し数字:111111, 000000
- 日付:生年月日、現在年
- 簡単なパターン:121212, 123123
現実世界の応用
数字のみのパスワード生成は、特に以下のターゲットに対して有効です。
- モバイルデバイスの PIN
- ATM の PIN
- 簡単なシステムパスワード
- 一時的なアクセスコード
このステップでは、多くのシステムで使用されている数字のみのパスワードの生成方法を示しました。
記号を含むカスタム文字セット
このステップでは、特定の記号を含むカスタム文字セットを作成する方法を学びます。これは、対象がパスワードに特定の特殊文字を使用していることが分かっている、または疑われる場合に役立ちます。
多くのパスワードポリシーは特殊文字を要求しており、ユーザーは入力しやすい一般的な記号を選択することがよくあります。どの記号を含めるべきかを理解することで、ブルートフォース攻撃を効率化できます。
カスタム文字セットを使用して、特定の記号を含むパスワードを生成してみましょう。
hydra -l testuser -vV -x '3:4:a-z0-9!@#' 127.0.0.1 ftp -s 2121
このコマンドは、以下の文字を使用してパスワードを生成します。
a-z: 小文字 (a-z)0-9: 数字 (0-9)!@#: 特定の記号
例:"abc!", "a1@", "te#", "12!" など。
別の一般的な記号セットを試してみましょう。
hydra -l testuser -vV -x '3:4:a-z$%&' 127.0.0.1 ftp -s 2121
これは、小文字と記号 $、%、& を使用します。
より複雑な記号を含む可能性のあるパスワードの場合は、以下を使用します。
hydra -l testuser -vV -x '3:4:a-zA-Z0-9!@#$%^&*' 127.0.0.1 ftp -s 2121
これは、以下の文字を含む包括的な文字セットを作成します。
- 大文字と小文字
- 数字
- 一般的な記号:!@#$%^&*
最も一般的なパスワード記号
パスワード分析に基づくと、これらの記号は最も頻繁に使用されます。
!- 感嘆符@- アットマーク#- ハッシュ記号$- ドル記号%- パーセント記号^- キャレット&- アンパサンド*- アスタリスク
戦略的な記号の選択
カスタム文字セットを作成する際には、以下の点を考慮してください。
- キーボードのアクセシビリティ (数字キー行にある記号は一般的)
- パスワードポリシーの要件
- 文化的な好み (一部の記号は特定の地域でより一般的)
- システムの制限 (一部のシステムでは特定の記号を使用できない)
ターゲットを絞った記号セット
特定のシナリオでは、ターゲットを絞った記号セットを使用できます。
## 一般的な句読点
hydra -l testuser -vV -x '3:4:a-z0-9.,;:' 127.0.0.1 ftp -s 2121
## 角括弧記号
hydra -l testuser -vV -x '3:4:a-z0-9()[]{}' 127.0.0.1 ftp -s 2121
## 数学記号
hydra -l testuser -vV -x '3:4:a-z0-9+-=/' 127.0.0.1 ftp -s 2121
このステップでは、特定の記号を持つカスタム文字セットを作成する方法を示しました。これにより、既知または疑われるパスワードパターンに基づいて、ブルートフォース攻撃を調整できます。
まとめ
この実験では、Hydra を使用して、包括的なステップ・バイ・ステップのアプローチでブルートフォース攻撃用のパスワードを生成する方法を学びました。Hydra の -x オプションを、それぞれ特定のパスワード生成手法に焦点を当てた複数の専用シナリオで詳しく探求しました。
以下の異なるパスワード生成戦略を実践しました。
- 基本的なパスワード生成:
-xオプションの構文と基本的な概念を理解する - FTP 攻撃シナリオ: 実際のサービスに対してパスワード生成を適用する
- 大文字小文字の混合: 一般的なパスワードパターンに合わせて大文字と小文字を組み合わせる
- 英数字パスワード: 実際のシナリオで最も一般的なパスワードの種類である文字と数字を使用する
- 数字のみのパスワード: PIN や単純な数字のパスワードをターゲットにして、高い解読効率を実現する
- 特定の記号を含むカスタム文字セット: 一般的な使用パターンに基づいて、ターゲットを絞った記号の組み合わせを作成する


