実戦形式で学ぶホワイトハッカーの技術

初心者向けのEthical Hacking講座です。

ブルートフォース攻撃

ではブルートフォース攻撃に移りましょう。
ブルートフォース攻撃は、サイバーセキュリティの中で原始的でありながら非常に有効な攻撃手法です。

ブルートフォース攻撃とは、暗号や認証のセキュリティを破るための方法の1つで、文字通り「無差別な力」を使って攻撃を試みる手法です。例えば、あらゆる組み合わせのパスワードを試すことで、ターゲットとなるアカウントのパスワードを特定したりします。

今回はブルートフォース攻撃の中の辞書型攻撃を行います。

辞書型攻撃とは、辞書(ワードリスト)に登録されている単語や人物名などを組み合わせたものをパスワードに使用して、システムなどへのログインを試みる方法です。
例えば下記の様なパスワードが含まれています。

  • secret
  • admin
  • password123
  • 123456

一般的に避けるべきパスワードやよく使用されているパスワードがリスト化されたワードリストを用いて総当たり攻撃を行います。
逆に「aa」→「ab」→「ac」といったように全ての可能性(文字列)を試すようなブルートフォース攻撃は今回は扱いません。理由はシンプルで、時間がかかりすぎてしまうからです。

ブルートフォース攻撃 - ログイン

ではブルートフォース攻撃を体験してみましょう。
SQLインジェクションの時に見た様なログインプログラムがあります。一度適当なユーザーネームとパスワードを入力してみましょう。

ログイン失敗

先ほどはSQLインジェクションで突破しましたが、今回はブルートフォース攻撃にて突破します。
ユーザーネームとパスワード両方をブルートフォースしてもよいですが、組み合わせの数があまりに多すぎるため、おすすめできません。
実はユーザーネームは皆さんがすでに知っている方法で取得できます。
探してみましょう。

見つかりましたか?

page source

ページソースを見てると、ユーザーネームがadminであることが判明しました。
では、パスワードだけをブルートフォースしましょう。

ブルートフォース(辞書型攻撃)を実行するには2つのものが必要です。
1つ目はワードリストです。ワードリストは様々なものがGithubに落ちているため、すぐにダウンロードして使用することが可能です。
2つ目はブルートフォースを実行するプログラムです。Pythonなどのプログラミング言語スクリプトを作成することも可能ですが、今回はBurp SuiteのIntruder機能を使いましょう。
Burp SuiteのIntruderを利用することで、ブルートフォースを実行することが可能です。

では先ほど適当なユーザーネームとパスワードでログインしたリクエストを「HTTP history」タブより発見し、右クリックして、「Send to Intruder」を選択しましょう。

Intruder

Intruderタブに移動すると上記画像のような画面にいるはずです。
まずユーザーネームがadminでない人は、adminに変更してください。
そしてパスワードをブルートフォースする用意をしましょう。
github.com
このワードリストをダウンロードしてください。このリストには500個の激弱パスワードが格納されています。

ではBurp Suiteの設定をします。
先ほどの画面で入力したパスワードをカーソルで選択し、右上の「Add$」ボタンを押します。
するとパスワード部分が青色っぽくなったはずです。

Add$

その状態で一個右の「Payloads」タブへ移動します。
そして「Payload settings」より「Load」ボタンを押して、先ほどのワードリストを選択します。(Downloadsフォルダにあるはずです。)
最後に右上の「Start attack」ボタンを押すとブルートフォース攻撃が開始されます。

Start attack

ではどのようにパスワードが当たっていることを判定するかについてお伝えします。
Intruderの結果には、送信したペイロードとStatus code、Lengthなどがあります。
ここで注目したいのがLengthです。
パスワードが当たっていない場合と当たっている場合では、レスポンスに何かしらの違いがあると考えるのが当然です。
つまりはLengthも異なる可能性が高いでしょう。
そこでLengthの文字部分をクリックすると、一番上にLengthの異なるパスワードが表示されるはずです。(一番上に来ない場合はもう一度Lengthを押してみてください。)
そしてResponseを見てみると、ログインに成功していることがわかります。

secret

「secret」がパスワードであることが分かりました。
では正しいユーザーネームとパスワードでログインしてみましょう。するとログインに成功するはずです。
ブルートフォース攻撃はシンプルですが強力な攻撃手法のため、適切な対策を取る必要があります。

ブルートフォース攻撃 - ディレクト

では次にディレクトリのブルースフォース攻撃です。
実はブルートフォース攻撃はパスワードを特定する以外にも、ディレクトリやサブドメインの発見にも役立ちます。
ちなみにURLは今いるページでは下記の様になっています。

http://10.0.2.23:3000/bruteforce-directory

上記URLでは「bruteforce-directory」部分がディレクトリにあたります。先ほどのログインプログラムでは「bruteforce-login」となっていました。
基本的にはユーザーがWebサイトのリンクやボタンなどをクリックすることで画面が遷移しますが、実際に起こっていることは違うディレクトリへと遷移しているイメージです。

ではここで疑問が浮かびます。
実際にクリックして遷移できるディレクトリ以外のディレクトリが存在するのかということです。
実際問題隠れたディレクトリが存在する場合は非常に多く、そこから情報漏えいが発生することも少なくありません。

では実際にディレクトリのブルートフォースをしてみましょう。
ディレクトブルートフォースには様々なツールやワードリストが存在しますが、今回は「dirsearch」を使用します。
「dirsearch」はディレクトブルートフォースのためのツールです。
標準ではKali Linuxにインストールされていないので、インストールしましょう。
下記コマンドでインストールできます。パスワードを求められた際は「kali」と入力してください。

sudo apt update && sudo apt install dirsearch

ではdirsearchでブルートフォースしましょう。

dirsearch -u http://10.0.2.23:3000/  # IPアドレスは皆さんの環境に合わせてください。

すると下記画像の様に「/admin」というディレクトリが存在することが判明しました。

dirsearch

では「/admin」ディレクトリに行ってみましょう。

/admin

すると、「You found me」というメッセージが見つかりました。
今回のようにディレクトリをブルートフォースするだけで機密情報が漏えいできることも少なくありません。
開発者はWebサイト上から一般ユーザーがアクセスできないディレクトリ(ページ)をよく残してしまうのです。

対策

ログインのブルートフォース攻撃への対策はシンプルです。
まずはユーザーに複雑なパスワードを設定させることです。ブルートフォース攻撃は総当たりをしているだけなので、複雑なパスワードであるだけで一気に成功率が低下します。
パスワードを使い回させないことも大切です。なぜなら他のサービスでパスワードが漏えいしていて、そのパスワードがどこかのワードリストに入っている可能性があるからです。
またログインの試行回数を制限することも大切です。例えば5回パスワードを間違えるとアカウントをロックするといったことが考えられます。
皆さんもパスワードを忘れてアカウントがロックされた経験があるかもしれません。

そして2段階認証を設定することも大切です。
仮にユーザーネームとパスワードの組み合わせを当てられたとしても、(フィッシング攻撃以外で)2段階認証を突破することは不可能に近いです。
ですので、ユーザーとしては2段階認証を行うこと、開発者は2段階認証をユーザーに強いることが必要です。

ディレクトリのブルートフォース攻撃への対策は、Basic認証を設定したり、IPアドレスによる制限を行うことで、重要な情報を含んだディレクトリへのアクセスを制限することが大切です。

お疲れ様でした。
次はIDOR(安全でない直接オブジェクトの参照)です。

learn-ethicalhacking.hatenablog.com