自分だけのクイズ作成 - Quipha公開中

【OWASP ZAP】ログインページにスパイダー/動的スキャン

ツール
スポンサーリンク

はじめに

今回は、ログインが必要なページに対して、OWASP ZAPで脆弱性診断を行う手順をまとめました。

そのようなページは当然、ログインを行わないとアクセスできないため、OWASP ZAPで認証情報の設定が必要になります。

OWASP ZAPのインストール方法や、基本的な使い方は以下にまとめましたのでご覧ください。

脆弱性の危険性を試した記事を以前まとめましたので、あわせてご覧ください。

動作環境
  • ホスト端末:Windows 10
  • OWASP ZAP 2.11.0
  • Laravel Framework 8.69.0

対象サイト

今回はLaravelログイン認証に対して、ログインが必要なページを用意し診断を行います。

Laravelで作成したサイトの認証に対して試しますが、基本的な手順はLaravel以外でも参考になると思います。

以下の記事の通り、Laravelを構築後、認証機能を導入したサイトを使用します。

Laravelプロジェクトのサーバーを起動し、ログイン画面を開きます。

事前にログインアカウントを登録します。

ログインに必要な情報は、後ほどOWASP ZAPの設定で使用しますので、控えておきましょう。

ログインを行うと、ダッシュボード画面が表示されました。

このページは、ログインをしないと表示できませんが、OWASP ZAPでこのようなページに対して診断を行う場合は、認証情報の設定を行いログインが必要なページにアクセスできるようにします。

Laravelのログイン認証には、CSRFの対策が組み込まれているため、以下の設定も済ませておきましょう。

基本的には、CSRF対策を行っているサイトの方が多いと思いますので、設定しておきましょう。

設定前に動作確認

ログインが必要なページに動的スキャンを行うためには、OWASP ZAPの設定が必要ですが、まずは設定せずに試してみましょう

ダッシュボードはログインしていないとアクセスできません。
そのページに対して動的スキャンを実施してみましょう。

スキャンを開始します。

動的スキャンの結果を確認しましょう。

1.ダッシュボードへのリクエストを確認しました。
2.レスポンスタブをクリックし、応答内容を確認します。
3.ログイン画面へリダイレクトされています。(ステータスコード:302)

これは認証情報がないためです。

その次の行の、ダッシュボードへのリクエストも確認しましょう。
ステータスコード:200が返ってきていますが、ダッシュボード画面ではなく、ログイン画面が返されています

1.ダッシュボードへのリクエストを確認しました。
2.レスポンスタブをクリックし、応答内容を確認します。
3.ログイン画面が返却されています。(ステータスコード:200)

つまり、ダッシュボード画面に対して脆弱性診断が行われていません。
引き続き、OWASP ZAPのログイン設定を行い、試してみましょう。

スポンサーリンク

OWASP ZAPの設定

認証ユーザの追加

一度ログインを行うと、ログイン時のPOSTリクエストが残ります
そのPOSTリクエストを右クリックし、Flag as Context」→「既定コンテキスト:Form-based Auth Login Requestを選択します。

認証設定が開きました。

「ユーザ」メニューを開き、追加ボタンをクリックします。

有効なログイン情報を入力します。

ユーザが追加されました。

「Username Parameter」と「Password Parameter」を変更します。
Laravelの場合、それぞれ「email」と「password」です。
ここまで設定したら、一度OKボタンをクリックしましょう。

もう一度セッション・プロパティを開くには、上部にあるボタンをクリックします。

「Login Request POST Data」を以下のように変更しました。
再度開いた時点で、emailとpasswordは変更されていますが、_tokenは手動で変更しました。

_token={%_token%}&email={%username%}&password={%password%}

_tokenは、CSRF対策に使用するパラメータです。

認証済みチェック

診断時にアクセスしたページが、認証済みかどうか判断する設定を行います。
このページにアクセスできるということは、認証済みです。

右上にあるログアウトリンクがあれば、ログイン済みと判断できそうです。

指定した文字列がなければ、OWASP ZAPはログイン処理を行った後に、対象のページへアクセスするようになります。

HTMLタグを確認しました、以下のタグがログアウトのリンクでした。

this.closest('form').submit();">Log Out</a>

「Regex pattern used to identify Logged in messages」に、以下のように入力しました。

\Qthis.closest(‘form’).submit();”>Log Out\E

\Qは開始、\Eは終了文字です。

スポンサーリンク

ログインが必要なページに動的スキャン

設定が完了しましたので、ダッシュボードへ脆弱性診断を行いましょう。

動的スキャン時にユーザを選択します。

毎回指定するのも面倒なので、以下のボタンをクリックしておきます。
これを選択しておけば、動的スキャン時にユーザを選択する必要がありません

Forced User Modeでは、セッション・プロパティの「強制ユーザー」が使われます。

動的スキャンに戻りましょう。
今度はステータスコード:302は返らず、ダッシュボード画面に対して攻撃ができました。
レスポンスにはログアウトのリンクが含まれているのが確認できます。

ログインが必要なページにスパイダー

ダッシュボード画面に、更にログインが必要なページを追加しました。
(ダッシュボード2)

スパイダーを実行する前には「dashboard2」は存在しません。
それではスパイダーを実行します。

ユーザを指定します。(または強制ユーザモード)

ログインに必要なページのスパイダーも成功し、ダッシュボード2を取得することができました。

さいごに

ログインが必要なページに対して、OWASP ZAPで脆弱性診断を行う手順をまとめました。
Webアプリケーションでは、管理画面やユーザのマイページなど、ログインが必要なケースは多いと思いますが、これで脆弱性診断を行うことができました。

是非ご活用ください。

コメント

タイトルとURLをコピーしました