OWASP ZAPで行ういくつかの操作では、操作対象とするURLを限定することができます。例えば、履歴タブでは全てのアクセスデータが一覧表示されますが、予め登録したURLに合致したデータだけに表示を絞ることができます。これは脆弱性検査対象となるデータのみを表示する場合に便利です。
今回はこの機能を理解するために必要な「コンテキスト」「スコープ」について説明します。また、このコンテキストに対してURLを登録するのですが、このURLを指定するのに使用できる正規表現には独特のエスケープシーケンスがありますので、これも最後に説明します。
本記事の対象としているOWASP ZAPのバージョンは 2.2.2 です。
目次
コンテキスト(Contexts)
- 「コンテキスト」とは、簡単に言うと 複数のURLをまとめたもの です。
- 実際には、除外URLや認証に関する情報も設定できます。
- 脆弱性検査対象のアプリケーション毎に作成することが想定されていますが、自由に定義することができます。
- [セッションのプロパティ(Session Contexts dialogs)]アイコンから設定できます。
- [サイト]タブや[履歴]タブ等の中にある個別のデータを右クリックし、[Include in Context]からURLを登録することができます。
- コンテキスト自体も複数作成することができます。
- セッション・プロパティ・ダイアログボックスの左側の[Include in context]を選択し、右側の[URL regexs]にURLを直に登録することもできます。(上画像)
- ドキュメント
- コンテキスト HelpStartConceptsContexts – zaproxy – OWASP ZAP (https://code.google.com/p/zaproxy/wiki/HelpStartConceptsContexts)(リンク切れ)
- セッションのプロパティ HelpUiDialogsSessionContexts – zaproxy – OWASP ZAP (https://code.google.com/p/zaproxy/wiki/HelpUiDialogsSessionContexts)(リンク切れ)
スコープ(Scope)
- 「スコープ」とは、「その時点で処理対象とするアプリケーション(URLの集まり)のセット」を指します。
- 動的スキャンやファジングでは「スコープを対象として実行する」ことができます。
- 作成したコンテキストの中から、現在スコープとして含めるコンテキストを選択することで定義します。
- つまり、OWASP ZAPで何かの操作をする時に「スコープを対象とする」と言った場合、「(現在のスコープに含まれているコンテキスト)の中で登録されたURLを対象とする」ということになります。
- コンテキストをスコープに含める場合は、「セッション・プロパティ」ダイアログボックスの左側で目的のコンテキスト(の番号)を選択し、右側にある[in Scope]チェックボックスにチェックを入れます。(但し、デフォルトでこのチェックは入っています)
- 「セッション・プロパティ」ダイアログボックスの左側にある[Contexts]を選択すると、右側にコンテキスト一覧が表示され、現在スコープに含まれているコンテキストの[in Scope]列にはチェックが入っていることが確認できます。
- ドキュメント
URL、コンテキスト、スコープの設定の大まかな流れ
次のような順番で設定することになります。
- コンテキストに対してURLを設定します(複数可)。
- コンテキスト自体も複数作成できます。
- スコープとして使用するコンテキストに対してスコープの設定をします。
- 但し、コンテキストは作成されるとデフォルトでスコープに含まれた状態になっています。
スコープの使用例
例えば、[履歴]タブでは次の画面のように赤い丸のアイコンをクリックすることによって、現在のスコープで対象としているURLに合致したデータのみ表示することができます。
コンテキストで使えるURL正規表現について
コンテキストで使用できるURLの正規表現については、セッションのプロパティ HelpUiDialogsSessionContextsで、以下のように説明されています。
URL regexs
In the Include in and Exclude from dialogs, you can enter regular expressions to define excluded URLs. While you can escape a single meta-character with a backslash, you can also use the \Q…\E escape sequence. All the characters between the \Q and the \E are interpreted as literal characters. E.g. \Q*\d+*\E matches the literal text *\d+*. This escape sequence is used in ZAP when you exclude URLs via some context menus.
Note: If your URL contains a “\E”, then you have to do the following steps when using the \Q…\E escape sequence:
- Open the escape sequence
- Close the escape sequence before the “character” \E
- Escape the backslash
- Open after the “\E” another escape sequence;
- Close the escape sequence as normally would.
Example: https://subdomain.example.com/path?a=\E&moredata=2 should appear as \Qhttps://subdomain.example.com/path?a=\E\E\Q&moredata=2\E
翻訳してみました。
URL正規表現
Include inダイアログと Exclude fromダイアログでは、除外URLを定義するのに正規表現を使うことができます。バックスラッシュでメタ文字をエスケープできるのと同時に、\Q…\E エスケープシーケンスを使うこともできます。\Qと\Eの間の全ての文字は、リテラル文字列として解釈されます。例えば、\Q*\d+*\E は、リテラル文字列 *\d+* に一致します。このエスケープシーケンスは、いくつかのコンテキストメニューを通してURLを除外する時に、ZAPによって使用されます。
覚書: もしURLが “\E” を含んでいるのなら、\Q…\Eのエスケープシーケンスを使う時には次の手順に従わないといけません。
- \Q…\Eエスケープシーケンスを開始します。
- “\E” の前で、\Q…\Eエスケープシーケンスを閉じます。
- バックスラッシュをエスケープします。
- “\E”の後で、別の\Q…\Eエスケープシーケンスを開始します。
- 通常行うように、\Q…\Eエスケープシーケンスを閉じます。
例:https://subdomain.example.com/path?a=\E&moredata=2 は、\Qhttps://subdomain.example.com/path?a=\E\\E\Q&moredata=2\E となります。
通常、URLにはピリオドがいくつも含まれますが、正規表現におけるピリオドは特殊文字ですのでエスケープする必要があります。しかしそれでは面倒だし視認性が低いので、\Qと\Eで囲めば個別にエスケープしなくて済むようにしてくれているのだと思われます。
覚書として、URLに”\E”を含んでいる場合のエスケープ手順も記載されています。このような状況になることはなかなか無いとは思いますが、上の例で上げられているURLを使って具体的にどうエスケープするのかを以下に書いておきます。
エスケープ前のURL:https://subdomain.example.com/path?a=\E&moredata=2
- \Q…\Eエスケープシーケンスを開始します。
- \Qhttps://subdomain.example.com/path?a=\E&moredata=2
- “\E” の前で、\Q…\Eエスケープシーケンスを閉じます。
- \Qhttps://subdomain.example.com/path?a=\E\E&moredata=2
- バックスラッシュをエスケープします。
- \Qhttps://subdomain.example.com/path?a=\E\\E&moredata=2
- “\E”の後で、別の\Q…\Eエスケープシーケンスを開始します。
- \Qhttps://subdomain.example.com/path?a=\E\\E\Q&moredata=2
- 通常行うように、\Q…\Eエスケープシーケンスを閉じます。
- \Qhttps://subdomain.example.com/path?a=\E\\E\Q&moredata=2\E
エスケープ後のURL:\Qhttps://subdomain.example.com/path?a=\E\\E\Q&moredata=2\E
注意事項
- [サイト]タブや[履歴]タブ内から、末尾が「/」で終わっているURLを右クリックし [Include in Context]を選択してコンテキストにこのURLを追加した場合、このURLは\Qと\Eで囲まれた正規表現文字列として登録されます。しかし、なぜか末尾の「/」は削除されるようです。ですので 手動で「/」を追加 しておかないとスコープとして使った場合にURLが合致してくれません。