今回はWebアプリケーションのパスワードを、ツールburpsuitおよびhydraを用いて解析します。例として、WordPressを使用します。
試行する場合は、自分自身の管理下のサーバーを使用してください。
はじめに
Webアプリケーションは外部にさらされているため、常に攻撃対象となる危険性があります。 対策を怠ると、思わぬ事故に巻き込まれる可能性が潜んでいます。手口を知ることで、対策を実施するきっかけになれば幸いです。
今回は、ユーザー名を既知として、パスワードを解析してみます。
準備
WordPressを準備する
攻撃対象とするWordPressは、クイックスタートを参考に、DockerおよびDocker-Composeを利用して構築しました。
Portは8000とし、初期設定として、下記を登録しました。
- ユーザー名:wordpress
- パスワード:passwords
- 言語:日本語
Kali Linuxを準備する
攻撃用OSとして、Kali Linux(2021.2)を用意しました。
解析
burpsuitでリクエストパターンを採取する
Kali Linuxのメニューから、[03 – Web Application Analysis] > [burpsuit]を起動します。
burpsuitを起動したら、[proxy] > [Intercept]の[Intercept is on]をenableに設定します。
次に、ブラウザ(ここではFireFox)で、先に用意したWordPressのログイン画面を表示し、FireFoxの[Settings] > [Preferences] > [Network Settings]からProxyを下記に設定します。
- Mode:Manual proxy configuration
- HTTP Proxy:127.0.0.1
- Port:8080
ユーザー名を”wordpress”、パスワードを任意(ここでは”aaaaaaaa”)で、WordPressに対してログインエラーを発生させます。
すると、burpsuitにhttp requestが表示されます。
ここで、下記を攻撃に使用するパラメーターとして書き留めます。 burpsuitのパラメーターを保存し終えたら、burpsuitの[Forward]ボタンを押下して、パケットを送信します。
- burpsuit画面内
- POST
/wp-login.php HTTP/1.1 - (最下部の一行)
log=wordpress&pwd=aaaaaaaa&wp-submit=%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3&redirect_to=http%3A%2F%2F192.168.1.20%3A8000%2Fwp-admin%2F&testcookie=1
- POST
- ブラウザ画面上のエラーと判別できる文字列
今回は、”エラー”を採用。
リクエストパターンを採取する ログインエラー確認
ここまで終えたら、先ほど設定したProxyを解除します。
hydraでパスワード攻撃を仕掛ける
Kali Linuxのメニューから、[すべてのアプリケーション] > [hydra]を起動します。
パスワード辞書は、既存の下記リストファイル(/usr/share/dirb/wordlists/small.txt)を使用します。サイズが大きくなりますが、rockyou.txt(/usr/share/wordlists/)もお勧めです。
パスワード部分を可変変数”^PASS^“として加工し、各種取得したパラメーターを用いて、ツールhydraでWordPressに辞書攻撃を仕掛けます。
hydra -l wordpress -P /usr/share/dirb/wordlists/small.txt -s 8000 192.168.1.20 http-post-form "/wp-login.php:log=wordpress&pwd=^PASS^&wp-submit=%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3&redirect_to=http%3A%2F%2F192.168.1.20%3A8000%2Fwp-admin%2F&testcookie=1:エラー"
暫く待つと、パスワードが”passwords”である旨の結果が表示されます。
解析結果
ユーザー名を辞書指定(-Lオプション)した場合、ユーザー名を変数(“^USER^“)として、解析対象にすることも可能です。
まとめ
Webアプリケーションは外部にさらされているため、常に攻撃対象となる危険性があります。
今回の様は場合は、以下のような対策を検討しましょう。
- パスワードを複雑に設定する
単純な単語で構成されている、パスワードの桁数が小さい、もしくは文字種が少ない場合、辞書および総当たり攻撃で解析される可能性が高くなります。システムが許容する範囲内で、できるだけ強固なパスワードを設定するようにしましょう。 - アカウントロック機能を導入する
複数回続けてログインに失敗した場合、一定時間ログインを不可能にするアカウントをロックする機能を導入するのも有効です。ただし、パスワードを固定してアカウント名をチェックするリバースブルートフォース攻撃には無力です。 - 多要素・多段階認証を採用する
パスワード以外の要素をログイン条件に組み入れることも、不正ログインに対して大きな効果を発揮します。コストや運用とのバランスを検討してみるのも手です。
以上、Webアプリのパスワードを解析する方法の紹介でした。
コメント