Hydra を使用した SSH へのブルートフォース攻撃

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

はじめに

この実験では、サイバーセキュリティの分野で広く利用されているパスワードクラッキングツール「Hydra」を使用して、SSH サービスに対するブルートフォース攻撃(総当たり攻撃)の手法を学びます。この演習では、Hydra のインストールから始まり、脆弱な認証情報を設定したターゲットサーバーの構築、そして用意したワードリストを用いた攻撃の実行までを網羅しています。

SSH テスト環境の構築と Hydra のブルートフォース機能の分析を通じて、実践的な経験を積むことができます。この実験は、制御された環境下で倫理的ハッキングの原則を再確認しながら、現実世界で起こりうる攻撃シナリオをシミュレーションするものです。

Hydra のインストール

このステップでは、さまざまなネットワークサービスに対してブルートフォース攻撃を行うために使用される強力なパスワードクラッキングツール、Hydra をインストールします。Hydra は、保護されたシステムへのアクセスを得るために、ユーザー名とパスワードの組み合わせを体系的に試行できるため、ペネトレーションテスト(侵入テスト)において非常に有用です。今回の実験で使用する SSH のほか、FTP、HTTP など、多くのプロトコルをサポートしています。

  1. まず、LabEx VM 環境のターミナルを開きます。ターミナルは Linux でコマンドを実行するための主要なインターフェースです。すべての作業を行うデフォルトの作業ディレクトリに移動していることを確認してください。

    cd ~/project
  2. 新しいソフトウェアをインストールする前に、パッケージリストを更新するのが良い習慣です。これにより、Hydra とその依存関係にあるソフトウェアの最新バージョンを取得できるようになります。

    sudo apt update
  3. 次に、Ubuntu などの Debian 系システムでソフトウェアのインストールを管理する apt パッケージマネージャーを使用して Hydra をインストールします。-y フラグを付けることで、インストール時の確認を自動的に承認します。

    sudo apt install -y hydra
  4. インストール後、バージョンを確認して Hydra が正しくインストールされたか検証しましょう。head -n 1 コマンドを使用すると、バージョン情報が含まれる出力の最初の 1 行だけを表示できます。

    hydra -h | head -n 1
    Hydra のバージョンを示す出力

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

    Hydra v9.2 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
  5. Hydra には、GUI ツールを好むユーザー向けにグラフィカルインターフェース版も用意されています。この実験ではコマンドライン版を使用しますが、必要に応じて以下のコマンドで GTK+ GUI 版をインストールすることも可能です。

    sudo apt install -y hydra-gtk
    Hydra のバージョンを示す出力

ターゲット SSH サーバーの構築

このステップでは、後のステップでパスワードクラッキングの対象となるローカル SSH サーバーを構築します。これにより、制御された環境でペネトレーションテストの技術を練習できます。SSH(Secure Shell)は、コンピュータ間で安全にリモートログインするためのプロトコルですが、ここでは学習のためにあえて脆弱な設定で構築します。

  1. まず、デフォルトの作業ディレクトリにいることを確認してください。実験に関連するファイルを 1 か所にまとめて管理することが重要です。

    cd ~/project
  2. OpenSSH サーバーパッケージをインストールします。このソフトウェアを導入することで、マシンがリモート接続を受け入れる SSH サーバーとして機能するようになります。

    sudo apt install -y openssh-server
  3. デモンストレーション用に、脆弱なパスワードを持つテスト用ユーザーアカウントを作成します。現実のシナリオでは、このような弱いパスワードこそが攻撃者の格好の標的となります。

    sudo useradd -m testuser
    echo "testuser:password123" | sudo chpasswd
  4. SSH でパスワード認証を許可するように設定します(この実験のための一時的な設定です)。デフォルトでは、セキュリティ上の理由から多くのシステムでパスワード認証が制限されていますが、ここではブルートフォース攻撃の仕組みを理解するために有効化します。

    sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
  5. 設定を反映させるために SSH サービスを再起動します。設定ファイルを変更した後は、通常、サービスの再起動が必要になります。

    sudo service ssh restart
  6. SSH サーバーが動作しているか確認します。このコマンドで、SSH サーバーが正しくアクティブになり、接続を待ち受けている状態かどうかをチェックします。

    sudo service ssh status

    サービスが active (running) と表示されていれば成功です。そうでない場合は、これまでのステップでエラーが発生していないか確認する必要があります。

  7. ローカルで SSH 接続をテストします。攻撃フェーズに進む前に、すべてが正常に動作しているか最終確認を行います。

    ssh testuser@localhost -o StrictHostKeyChecking=no

    パスワードを求められたら password123 と入力してください。ログインに成功したら、exit と入力して元のセッションに戻ります。-o StrictHostKeyChecking=no オプションは、サーバーのフィンガープリントの確認をスキップするためのもので、この実験環境では安全に使用できます。

    ローカル SSH 接続テストの結果

ユーザー名とパスワードリストの準備

このステップでは、Hydra が SSH 認証を試行する際に使用する、候補となるユーザー名とパスワードを記述したテキストファイルを作成します。これらのファイルは、辞書攻撃(ディクショナリアタック)ベースのブルートフォース攻撃に不可欠です。辞書攻撃は、あらかじめ用意されたリストからユーザー名とパスワードのあらゆる組み合わせを体系的に試す手法であるため、質の高いリストを準備することが非常に重要です。

  1. まず、デフォルトの作業ディレクトリにいることを確認してください。これにより、プロジェクトファイルが整理され、後で参照しやすくなります。

    cd ~/project
  2. nano テキストエディタを使用して、ユーザー名リストファイルを作成します。多くのシステムでデフォルト設定や予測しやすい名前が使われているため、ブルートフォース攻撃では一般的なユーザー名が最初に試されることが多いです。

    nano usernames.txt

    以下の一般的なユーザー名を追加してください(Ctrl+O で保存、Ctrl+X で終了します)。

    admin
    root
    testuser
    user
    guest
  3. パスワードリストファイルを作成します。以下のような弱いパスワードは頻繁に使用されており、セキュリティテストにおいて真っ先に標的となります。

    nano passwords.txt

    以下の一般的なパスワードを追加してください。

    password
    password123
    123456
    qwerty
    letmein
  4. ファイルの内容を表示して、正しく作成されたか確認します。この確認ステップにより、リスト内のタイポ(打ち間違い)やフォーマットの問題を防ぐことができます。

    cat usernames.txt
    cat passwords.txt

    ターミナルに作成したリストが表示されるはずです。

  5. (オプション)crunch を使用して、さらに多くのパスワードバリエーションを生成します。このツールは、指定したパターンに基づいて組み合わせを自動生成し、より包括的なパスワードリストを作成するのに役立ちます。

    sudo apt install -y crunch
    crunch 4 6 0123456789 -o num_passwords.txt

    これにより、4 文字から 6 文字の長さの数字のみのパスワードが生成されます。コマンドの引数は、最小長(4)、最大長(6)、および使用する文字セット(数字 0-9)を指定しています。

SSH に対する Hydra の実行

このステップでは、Hydra を使用してローカルの SSH サーバーに対してブルートフォース攻撃を実行します。ブルートフォースとは、正しい組み合わせが見つかるまで多数のユーザー名とパスワードの組み合わせを試行する手法です。先ほど準備したワードリストを使用して、このプロセスを自動化します。

  1. まず、ワードリストが保存されているプロジェクトディレクトリに移動します。これにより、Hydra が作成したファイルを確実に読み込めるようになります。

    cd ~/project
  2. 特定のパラメータを指定して Hydra を実行します。コマンドの構造は、Hydra に「何を」「どのように」攻撃するかを指示します。各パラメータの意味を確認しましょう。

    hydra -L usernames.txt -P passwords.txt ssh://localhost -t 4 -vV

    パラメータの説明:

    • -L usernames.txt: 候補となるユーザー名のリストを指定します。
    • -P passwords.txt: パスワード辞書ファイルを指定します。
    • ssh://localhost: このマシンの SSH サービスをターゲットにします。
    • -t 4: 同時試行数を 4 に制限して、実行速度を制御します。
    • -vV: ターミナルに詳細な進捗状況を表示します。
  3. Hydra の実行中、各試行がリアルタイムで表示されます。有効な認証情報が見つかると、出力の中に次のように明確に表示されます。

    [22][ssh] host: localhost   login: testuser   password: password123
    Hydra の実行結果の表示
  4. (オプション)結果を永続的な記録として残すために、ファイルに保存することもできます。これはドキュメント作成や後の分析に役立ちます。

    hydra -L usernames.txt -P passwords.txt ssh://localhost -t 4 -o results.txt
  5. スキャン完了後、保存された結果を以下のコマンドで確認できます。

    cat results.txt

まとめ

この実験では、強力なパスワードクラッキングツールである Hydra を使用して、SSH に対するブルートフォース攻撃を行う方法を学びました。演習を通じて、Hydra のインストール、テスト用 SSH サーバーの構築、およびターゲットを絞ったユーザー名とパスワードリストの作成を行いました。

辞書攻撃の実行と結果の分析を実践したことで、脆弱な認証情報がいかに簡単に悪用されるかを理解できたはずです。このハンズオン経験は、サイバーセキュリティにおいて強力なパスワードと安全な認証方法がいかに重要であるかを浮き彫りにしています。