☁️

#02 Hydra | TryHackMe Walkthrough - Cyber Security Roadmap

に公開

#02 Hydra | TryHackMe Walkthrough - Cyber Security Roadmap

Cyber Security Roadmapの一環として、TryHackMeのルーム攻略を記録しています。
答えは書きません。ただ、たどり着く方法は。

🚀 Introduction

今日はこのルームでHydraを体験します。
簡単にいうとHydraは、パスワードクラックを自動化するための強力なツールです。
ログインページなどに対して、たくさんのユーザー名とパスワードの組み合わせを自動で試すことができます。

🔗 Room URL: https://tryhackme.com/room/hydra

✅ Task 1: Hydra Introduction

Hydraとは?

Hydraは、Webサービスやサーバーなどの認証システムに対してブルートフォース攻撃を実行するためのツールです。
主にパスワードの強度チェックや脆弱性診断などに使われます。

特徴

  • 多様なプロトコルに対応:SSH、HTTP、FTP、RDPなど、30以上のプロトコルをサポート
  • 高速なパスワードクラック:並列処理により、効率的かつ高速に攻撃を実行
  • 柔軟な設定が可能:ユーザー名やパスワードのリストを自由に指定
  • オープンソース:誰でも自由に利用・カスタマイズ可能

このルームの攻略では、これらの特徴を押さえておけば十分だと思います。
より詳しく知りたい場合は、以下のリンクを参考にするとよいでしょう。

インストール

HydraはルームのAttackBoxに既にインストールされています。[Start AttackBox]ボタンをクリックするとアクセスできます。
ただし、自分のPCからTryHackMeのターゲットマシンへ接続する場合はインストールが必要です。

Kali Linux

  • 最初からプリインストールされています。

その他のLinux

sudo apt install hydra

macOS(Homebrew使用)

brew install hydra

Windows

  • Windowsでは直接の使用は難しいですが、WSL(Windows Subsystem for Linux) を使えばLinux環境でHydraを実行できます。

ここまでできたら最初の問題に答えることができます。

✅ Task 2: Using Hydra

ターゲットマシン・アタックボックスの起動

  1. [Start Machine] ボタンをクリックして、ターゲットマシンを起動します。
     数分待つと、マシンのIPアドレスが表示されます。

  2. [Start AttackBox] または OpenVPN を使用して、ターゲットマシンに接続しましょう。

  3. 接続が完了したら、表示されたIPアドレスをブラウザで開きます
     例:

    http://10.10.238.5/
    
  4. ブラウザでターゲットのIPアドレスにアクセスすると、HTTP 302リダイレクトが発生し、自動的に /login ページにアクセスしました「Hydra Challenge」というWebページが表示されます。
    どうやら具体的なターゲットであるユーザー名とパスワードを入力してログインするフォームがあるページのようです。恐ろしいヒドラのイメージが表示されています。
    Hydra Challenge

ワードリストの入手

アタックボックスを使用する場合、すでに入手しているのでこの手順はスキップしてください。
Hydraでブルートフォース攻撃を行うには、パスワード候補が一覧になったリスト(ワードリスト) が必要です。
このルームでは、よく使われる「rockyou.txt」を使用してみます。

✅ Kali Linuxの場合

Kali Linux には、「rockyou.txt」パスワードリストが標準でインストールされています(ただし、圧縮された状態です)。
このファイルは、ブルートフォース攻撃やセキュリティ演習で頻繁に使用される、有名なパスワードリストです。

※なお、Parrot OS などの他のセキュリティ系ディストリビューションでも、同様に標準で含まれていることがあります

  1. ファイルの存在を確認:

    ls /usr/share/wordlists/rockyou.txt.gz
    
  2. 解凍して使用可能にする:

    sudo gzip -d /usr/share/wordlists/rockyou.txt.gz
    

✅ 他のLinux環境の場合

  1. パッケージをインストール:

    sudo apt install wordlists
    
  2. 解凍して使用:

    sudo gzip -d /usr/share/wordlists/rockyou.txt.gz
    

✅ 直接ダウンロードする場合

Linux以外の環境や手動で入手したい場合は、GitHubから直接ダウンロードできます。

Use Hydra to bruteforce molly's web password. What is flag 1?

このセクションでは、Hydraを使って「molly」というユーザーのWebパスワードをブルートフォース攻撃で見つけ、Flag 1を取得することが目的です。

HydraはWebのログインフォームに対しても使用でき、POSTメソッドのリクエストであれば、以下のような形式でコマンドを構成します。

hydra -l <ユーザー名> -P <パスワードリスト> <ターゲットIP> http-post-form "<パス>:<ログインパラメータ>:<失敗時のレスポンス>"
オプション 説明
-l 使用するユーザー名(今回は molly
-P 使用するパスワードリストのファイルパス
http-post-form WebフォームがPOSTメソッドであることを指定
<パス> ログインページのURLパス(例:/login
<ログインパラメータ> username=^USER^&password=^PASS^ のように指定
<失敗時のレスポンス> ログイン失敗時に返される文字列の一部
-V 各試行を詳細に表示(Verboseモード)

では、実際にこのコマンドを組み立てていきましょう。

まず、ユーザー名は molly と指定します。

-l molly

次に、事前に用意したワードリストのパスを指定します。僕は以下のようにrockyou.txt を指定しました。

-P /usr/share/wordlists/rockyou.txt

続いて、ターゲットとなるマシンのIPアドレスを指定します。ここでは例として 10.10.3.218 を使用します。

ここまでで、以下のような構文になります:

hydra -l molly -P /usr/share/wordlists/rockyou.txt 10.10.3.218

このあと、ログインページのパス、送信するパラメータ、そしてログイン失敗時のメッセージを指定することで、最終的なコマンドが完成します。

さっそく、フォーム情報を指定しましょう。今回ログインするページは、ユーザー名とパスワードを入力し、「Login」ボタンを押すことで、usernamepassword の値が POSTメソッドで送信される構造です。

念のため、ブラウザのデベロッパーツールのネットワークタブview-source: を用いて、フォームの構造を確認してみましょう。

view-sourceで表示したページ

HTMLを確認すると、以下のようになっていました:

<form class="form-signin" action="/login" method="post">
  ...
  <label for="inputEmail" class="sr-only">Username</label>
  <input type="text" name="username" class="form-control" placeholder="Username" required autofocus>
  ...
  <label for="inputPassword" class="sr-only">Password</label>
  <input type="password" name="password" class="form-control" placeholder="Password" required>
  <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
</form>

このことから、フォームは usernamepassword というパラメータでログイン情報を送信していることがわかります。

フォームの確認には HTMLソースを直接見る方法もありますが、ブラウザのデベロッパーツールのネットワークタブを活用するのが特におすすめです。
JavaScriptでパラメータを動的に組み立てている場合など、HTMLを見ただけではわかりにくいケースでも、実際に送信されているリクエスト内容を確認できるため、ネットワークタブの方が確実で便利かもしれません。

ここまで調査したことを反映して、Hydraコマンドを次のように更新しました:

hydra -l molly -P /usr/share/wordlists/rockyou.txt 10.10.3.218 http-post-form "/login:username=^USER^&password=^PASS^"

次に、ログイン失敗時のメッセージを指定します。
手動でフォームに adminpassword123 などを入力してログインを試みたところ、画面上に以下のメッセージが表示されました:

Your username or password is incorrect.

この文言が返ってきたときは「失敗した」と判断できるので、これをHydraの判定条件として使います。

hydra -l molly -P /usr/share/wordlists/rockyou.txt 10.10.3.218 http-post-form "/login:username=^USER^&password=^PASS^:Your username or password is incorrect." -V

攻撃の準備が整いました。このコマンドを実行して、Hydraによる総当たり攻撃を開始します。

正しいパスワードが見つかると、次のような出力が表示されます:

[80][http-post-form] host: 10.10.3.218   login: molly   password: <見つかったパスワード>

表示されたパスワードを使って、ログインしてみましょう。
成功すれば、Flag 1 がページ上に表示されるはずです。

ヒドラ退治といえば、*****を思い浮かべる人もいるかもしれませんね。
彼もまた、多くの首を持つ怪物ヒドラに立ち向かい、工夫を凝らして勝利を収めました。

あなたもHydraを使って、この試練を乗り越えたわけです。
これでこの設問に答える準備が整いました。

Use Hydra to bruteforce molly's SSH password. What is flag 2?

このセクションでは、Hydraを使って molly ユーザーの SSHログインパスワードを総当たり攻撃により見つけ出し、Flag 2 を取得することが目的です。

HydraはSSHにも対応しており、以下のような構文で攻撃を行います:

hydra -l <ユーザー名> -P <パスワードリストのフルパス> <ターゲットIP> -t 4 ssh
オプション 説明
-l SSHログインに使用するユーザー名(この場合は molly
-P 使用するパスワードリストのファイルパス(例:/usr/share/wordlists/rockyou.txt
-t 4 並列実行するスレッド数(4スレッドで効率よく試行)
ssh 使用するサービス(SSH)を指定

では、実際にこのコマンドを組み立てていきましょう。

まず、ユーザー名は molly と指定します。

hydra -l molly

次に、事前に用意したワードリストのパスを指定します。僕は以下のようにrockyou.txt を指定しました。

-P /usr/share/wordlists/rockyou.txt

続いて、ターゲットとなるマシンのIPアドレスを指定します。ここでは例として 10.10.3.218 を使用します。

ここまでで、以下のような構文になります。Webフォームに対する構文と同じですね。

hydra -l molly -P /usr/share/wordlists/rockyou.txt 10.10.3.218

最後に並列実行するスレッド数と使用するサービスを指定しましょう。
これで、SSHログインに対するブルートフォース攻撃を開始できます:

hydra -l molly -P /usr/share/wordlists/rockyou.txt 10.10.3.218 -t 4 ssh

Hydraは rockyou.txt の中から順にパスワードを試し、ログインに成功した場合は次のような出力を表示します:

[22][ssh] host: 10.10.3.218   login: molly   password: <見つかったパスワード>

見つかったパスワードを使って、実際にSSHでログインしてみましょう:

ssh molly@10.10.3.218

ログインに成功したら、flag2.txt ファイルがホームディレクトリにあるはずです。
中身を確認します:

cat flag2.txt

これでこのルームの最後の設問に答える準備が整いました。

Congratulations on completing Hydra!!! 🎉

🎯 Conclusion

このルームを体験することで、「molly」さんのように単純なパスワードを使っていると、Hydraのようなツールで簡単に不正ログインされてしまうことがわかりました。

実際、「弱いパスワード ランキング」などで検索すると、辞書に載っているような単語が頻繁に使われていることが確認できます。
他にも、キーボード配列順(例:qwerty)や、IDと同じパスワード(例:admin:admin)など、人間の心理やクセに基づいたパターン的なパスワードが多く見受けられます。

今回使用した rockyou.txt のようなワードリストも、そうした「ありがちなパターン」が多数含まれており、攻撃者にとっては非常に強力なツールになります。そして、Hydraを使って実際にログインできてしまうようなサイトには、以下のようなセキュリティ上の課題があると思った方もいるかもしれません。

問題点 対策例
簡単なパスワードでログインできてしまう 複雑なパスワードポリシーの導入
無制限にログイン試行が可能 アカウントロック機能やレート制限
エラーメッセージでログイン成否が判断できる エラーメッセージの汎用化(例:「ログインに失敗しました」)

正直なところ、こうした視点はセキュリティ業務に関わっていないと意識しづらい部分かもしれません。
僕自身、セキュリティを意識するまでは単に「エラーメッセージは詳しく書いたほうが親切」と思っていたりしました。
でも、実際にHydraで体験したように、エラーメッセージを判定などに活用して攻撃を行うことは、パスワードにかかわらず行われます。

そのため、攻撃者の視点を学ぶことは、安全なシステムを設計・開発するために欠かせない第一歩なのだと思います。
こういった体験をきっかけに、セキュアな設計・実装をより意識できるようになりたいですね。

Discussion