OWASP ZAP 2.3 自動認証機能の設定

OWASP ZAP

OWASP ZAP v2.3における自動認証設定の手順を説明します。

自動認証(ログイン)機能とは、

  1. 認証機能を持つWebアプリケーションのログインが必要なページにアクセスした時に、
  2. ログインしていないことを検知し、
  3. ログインしていなければ、内部でログインアクセスしてログイン状態にしてくれ、
  4. その状態で本来アクセスしようとしていたURLに改めてアクセスしてくれる

という機能です。

これにより、スパイダー検索等を行う時に、ログアウトURLにアクセスしてログアウトしてしまった後でも自動で認証(ログイン)して処理を続行できるようになります。

今回の設定で使うWebアプリケーション

BodgeIt

設定項目

  • BodgeItがそうであるように、実際に使用される認証方法はほとんどがフォームによる認証だと思います。ですので、今回は認証方法として “Form-based Authentication” を選択した場合に必要な項目を設定します。
  • 設定する項目
    • [セッション・プロパティ]内のContextを設定します。
      • OWASP ZAP セッションのプロパティアイコン
    • [セッション・プロパティ] -> [Include in context]
      • URL正規表現(検査対象WebアプリのURL)
      • OWASP ZAP セッションのプロパティ1
    • [セッション・プロパティ] -> [Authentication]
      • Authentication Method (認証方法の種類)
      • Login Form Target URL (ログインするURL)
      • Login Request POST Data (ログイン時に送信するデータ)
      • Username Parameter, Password Parameter (ユーザ名
        ・パスワード)
      • Logged In Indicator Pattern / Logged Out Indicator Pattern (ログイン中を示す文字列 / ログアウト中を示す文字列)
        • どちらか1つだけ設定しておけばよいです。
      • OWASP ZAP セッションのプロパティ2
    • [セッション・プロパティ] -> [Users]
      • ユーザを登録します。
      • OWASP ZAP セッションのプロパティ3
    • [セッション・プロパティ] -> [Forced User]
      • 認証で使用されるユーザを1つ選択します。
      • OWASP ZAP セッションのプロパティ4
    • [セッション・プロパティ] -> [Session Management]
      • セッション管理方法を選択します。
      • OWASP ZAP セッションのプロパティ5

手順1: Include in context 画面の設定

  • この検査の対象となるURL正規表現を登録します。
  • 今回はBodgeIt全体を対象とするので、「\Qhttp://192.168.0.50/bodgeit\E.*」という正規表現を登録します。
  • [サイト]タブ上からリクエストを右クリックして登録することもできます。

Include in context のURL正規表現

OWASP ZAP セッションのプロパティ1

手順2: Authentication の設定

  1. Authentication method の項目には、「Form-based Authentication」を選択します。
  2. ブラウザ上でログイン操作を手動で行うと、[サイト]タブもしくは[履歴]タブ内にそのPOSTリクエストが表示されるので、右クリックして[Flag as Context] -> [1: Form-based Auth Login request]を選択することにより Login Form Target URL と Login Request POST Data を登録することができます。
    • 登録されたURLの正規表現に問題があれば修正します。
    • Authentication設定1
    • [Login Form Target URL]項目の右にあるボタンから登録をすることもできます。
    • Authentication設定2
  3. Login Request POST Data に、ユーザ名とパスワードを表すパラメータが入っていると思いますので、[Username Parameter *] と [Password Parameter *]という項目のプルダウンメニューでそれぞれのパラメータ名を指定します。
    • Authentication設定3
  4. Logged In Indicator Pattern もしくは Logged Out Indicator Pattern を登録します。
    • どちらか一方で構いません。
    • ここでは Logged In Indicator Pattern を登録してみます。
    • ブラウザ上でログイン操作を手動で行い、ログイン中にのみ表示される文字列を探します。
    • 自分で文字列を入力してもよいですが、[レスポンス]タブ内のレスポンスボディ上で対象文字列を選択して右クリックし、[Flag as Context] -> [1: Authentication Logged-in indicator]を選択して登録することもできます。
    • 今回は、ログアウトのリンクがよさそうだったので「<a href=”logout.jsp”>Logout</a>」を登録します。
    • Authentication設定4
    • Authentication設定4
    • Logged Out Indicator Pattern を設定する場合も、同じような手順で登録できます。

手順3: Users の設定

ログインする時に使用するユーザ名とパスワードを登録します。

  1. [Add]ボタンを押します。
    • Usersの設定
  2. ユーザ名とパスワードを入力して[追加]ボタンを押します。
    • Usersの設定2
  3. 登録されます。
    • Usersの設定3

手順4: Forced User の設定

自動認証で使用するユーザを選択します。
1つのユーザ情報しかなければ、それが選択されていますので特に何もする必要はありません。

手順5: Session Managementの設定

セッション管理の方法として、”Cookie-base Session Management” を選択します。
OWASP ZAP セッションのプロパティ5

手順6: 自動認証を有効にします

  • 次のアイコンをクリックすると自動認証が有効になります。

自動認証 無効状態

自動認証 有効状態

設定後の動作

  • Logged In Indicator Pattern として設定した文字列を含まないWebページにアクセスすると、OWASP ZAPの内部でログインリクエストが送信されログイン状態になった上で再度元のWebページにアクセスし、そのレスポンスをブラウザに返してくれます。
  • この設定を行うと、スパイダー検索等でログインが必要なページをクロールすることができます。

ログアウト状態

ログイン状態

認証済みかどうかの判断

認証済みかどうかは次のロジックで判断されます。

  1. Logged In Indicator Pattern が空 且つ Logged Out Indicator Pattern が空の場合
    • 認証済みであると判断する。
  2. Logged In Indicator Pattern が空でない且つ Logged In Indicator Pattern がレスポンスヘッダまたはボディにマッチする場合
    • 認証済みであると判断する。
  3. Logged Out Indicator Pattern が空でない且つ Logged Out Indicator Pattern がレスポンスヘッダにもボディにもマッチしない場合
    • 認証済みであると判断する。
  4. それ以外
    • 未認証であると判断する。

Logged In Indicator Pattern(または Logged Out Indicator Pattern)の選定

  • Logged In Indicator Patternには、ログイン状態でアクセスして欲しいページ上で、ログインしている場合にのみ表示される文字列(ブラウザ上に表示された文字列ではなくHTML上に出力される文字列です)を探して登録します。
  • Logged Out Indicator Patternには、ログイン状態でアクセスして欲しいページ上で、ログインしていない場合にのみ表示される文字列(ブラウザ上に表示された文字列ではなくHTML上に出力される文字列です)を探して登録します。

[最終更新日: 2014年4月29日]

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*