12月から業務として脆弱性診断を毎日やっており、診断にはOWASP ZAPとFiddlerを利用しているのですが、ほぼ一月使ってみてZAPの使い方や便利さが分かってきたので、自分の把握したZAPの使い方をシェアすることにします。

はじめに・診断対象サイトについての注意

OWASP ZAPでの診断は自分の管理下にあるサイトか、診断許可をもらっているサイトに対してのみ行ってください。(アクセス数によっては途中のインフラにも気をつける必要があります)
許可をもらっていないサーバへZAPの診断を走らせるのは、不正アクセスと解釈される可能性が高く、また実際に対象サーバに危害を与えてしまう可能性もありうるので大変危険です。


OWASP ZAPの基本的な使い方 手動診断編

OWASP ZAPのダウンロード・インストール

各環境用(win,mac,linux版がある)のOWASP ZAPをこのサイトからダウンロードしてインストールします。インストール方法は割愛します。ZAPの実行にはJREなどのJAVA実行環境が必要です。
本記事では、Windows版ZAPの執筆時点最新バージョン2.3.1に基づいて解説します。

ZAPでブラウザの通信を中継(&覗き見)する手順

1.OWASP ZAPを起動し、特定のポート(デフォルトは8080ポート)で待ち受けを開始させる
ZAPは起動すると設定されたポートでローカルプロキシとして待ち受けを始めます。何も設定していなければ、ローカルホストのデフォルト8080ポートがZAPが待ち受けるポートになっています。

※8080ポートは他のツールとかぶりやすいので、もし8080ポートで問題がある場合はZAPメニューの「ツール」-「オプション」で起動したオプション画面の「ローカルプロキシ」の設定画面で、ポートを空いてる任意のポート番号に設定します。


2.ブラウザのプロキシ設定をhttp,httpsの場合にZAPのポート(デフォルトなら8080)を通すように設定する

各ブラウザでのプロキシ設定方法を以下に記載します。
・IE11では設定-インターネットオプションの「接続」タブから「LANの設定」-プロキシサーバーのところでプロキシを使うにチェックを入れてlocalhost、8080ポートを設定。
・Firefoxでは「ツール-オプション-ネットワーク-接続設定」でHTTPとSSLにlocalhost、8080ポートを設定。
・Chromeでは「設定-詳細設定-ネットワーク-プロキシ設定の変更」でインターネットオプションのネットワーク設定画面が出てくるので、あとはIE同様に設定します。


3.プロキシ設定したブラウザで任意のサイトを見る(非SSL)
プロキシ設定したブラウザで、https~でないアドレスの任意のサイトにアクセスし、ZAPの「サイト」ウィンドウ(画面左)や画面下部の「履歴」タブのところに通信ログが出ればOKです。

(例としてIPAのサイトにアクセスしたところ。別にIPAのサイトを攻撃対象にするわけではありません)

SSLサイトの通信を中継するには:

上記の設定で、SSLを使っているサイトにアクセスすると、証明書が安全でないというエラーが出ます。
これはZAPがブラウザと当該サーバの間に入って通信を中継しているせいです。

ここで、この警告を無視してアクセスする選択(「セキュリティ例外として承認」ボタンなど)がある状態であれば、そのまま承認ボタンを押して接続することも可能ですが、Googleなど一部のサイトでは警告を無視して進むオプションが出てこないことがあります。

その場合、上の設定に加え、以下の手順を行ってください。
(SSLエラーが無視できるサイトの場合でも、都度エラーを出して例外を許可するのは手順が煩雑になるため、SSLが使われているサイト検査時には下記手順を行っておいたほうが検査がスムーズに行くと思われます)

4. ZAPのダイナミックSSL証明書をブラウザにインストールする

ZAPメニューの「ツール」-「オプション」で起動したオプション画面の「ダイナミックSSL証明書」の設定画面で、「保存」を押下します。



するとファイル保存ダイアログが表示され、OWASP ZAPが生成したルートCA証明書(デフォルトファイル名「owasp_zap_root_ca.cer」)をどこに保存するか聞かれるので、デスクトップなど、見失わないところに保存します。
このファイルをブラウザにルートCA証明書としてインポートすれば、ZAPでSSL通信を中継した時にSSLエラーが出なくなります。
(これはもちろん、正規のルートCA証明書ではなく、ZAPが勝手に作成したオレオレルートCA証明書です。)

各ブラウザへの証明書のインポート方法を以下に記載します。
・IE11では、設定-インターネットオプションの「コンテンツ」タブから「証明書」-「信頼されたルート証明機関」で「インポート」を押すと証明書インポートウィザードが開始されるので、「ファイル名」でさきほど保存した「owasp_zap_root_ca.cer」を選び「次へ」、証明書ストアで「証明書をすべて次のストアに配置する:信頼されたルート証明機関」になっていたら「次へ」で、確認画面が出るので「完了」、証明書ストアに証明書をインポートすることに対するセキュリティ警告が出るのでOKをすればインポートされます。

・Firefoxでは、「ツール」-「オプション」-「詳細」-「証明書」タブの「証明書を表示...」で、「認証局証明書」タブのところで「インポート」。ファイルダイアログが出るので「owasp_zap_root_ca.cer」を選ぶと、証明書のインポートというウィンドウが出てきて、この証明書が行う認証のうちWEB、メール、ソフトウェア製作者のどれを信頼するかという3択を聞かれるので「この認証局によるWEBサイトの識別を信頼する」にチェックを入れて「OK」を押すとインポートされます。

Chromeでは「設定」-「詳細設定」のところにある「HTTPS/SSL」セクションの「証明書の管理...」を押下すると、「証明書」というウィンドウが表示されますが、これはIE11の「インターネットオプション」-「コンテンツ」-「証明書」ボタン押下時に出てくるウィンドウとまったく一緒の画面なので、IE11同様の手順でインポートできます。


(※正式なものではないオレオレルートCA証明書をブラウザにインポートした状態はセキュリティ的にはあまり良くない状態のため、念のため「owasp_zap_root_ca.cer」ファイルはインポート後削除し、インポート済のZAPルートCA証明書も、使う期間が終わったらブラウザから削除しましょう。)

5.任意のSSLを使ったサイトにアクセス
警告が出ずにちゃんとアクセスでき、ZAP上に履歴が表示されればOKです。

ZAPでブラウザの通信を差し止めて改変する手順

1. リクエストにブレークポイントを設定

ZAPをブラウザのプロキシとして設定した後に、ZAPメニューアイコンの「→」(「全リクエストにブレークポイントセット」)ボタンを押下します。



この状態でブラウザからWEBサイトにアクセスすると、ブラウザが応答待ちの状態になり、ZAPの画面で上部右のウィンドウが「ブレーク」タブに自動的に切り替わり、GET/POSTリクエストが表示されます。
この状態になれば、ブラウザから発行されたリクエストがZAPによって差し止められています。

2. リクエストを書き換えて投げる

「ブレーク」タブに表示されたリクエストの任意の部分を書き換えてから、「→」ボタンを再度押してリクエストにブレークがかかる状態を解除した後に、右三角のボタン(「サブミットして次のブレークポイントへ移動」)を押下します。
(※次のブレークポイントは設定していないので、この操作で差し止めたリクエストをすべて送るという処理になります)



→書き換えられたリクエストがサーバに飛び、レスポンスが返ってきます。(リクエストの改変に成功)
ZAPの画面下部の「履歴」タブを確認すれば、どういうリクエストが投げられたかの確認ができます。
(履歴の行をダブルクリックで、「リクエスト」タブのところにリクエストが表示され、「レスポンス」タブを開くと、リクエストに応じたレスポンスが表示されます)

一度GET/POSTしたリクエストを再送信する手順


1. 履歴ウィンドウで履歴を選択し右クリックメニュー「再送信...」を選択



すると再送信用のウィンドウが立ち上がって、そのウィンドウから何度でも再送信が可能になります。そのウィンドウ上でリクエスト改変も可能です。


(再送信ウィンドウ。この画面でリクエストを改変して送信、が繰り返せる)

ファジングを行う手順


OWASP ZAPには、リクエストの一部をいろいろな文字列に置き換えてリクエストを自動で繰り返す「ファジング」を行う機能があります。
この機能をうまく使うと検査がかなり捗るのでおすすめです。

1.履歴ウィンドウで履歴を選択 → リクエストウィンドウの任意の文字列をドラッグし、右クリックメニュー「Fuzz...」を選択する

ZAPの履歴ウィンドウで履歴行をダブルクリックすると、ZAP右上のペインで「リクエスト」タブが自動的に有効になり、その履歴のリクエストが表示されます。そのリクエストの内容の一部をドラッグで選択し、その部分をファジング対象として指定することができます。



右クリックメニュー「Fuzz...」を選択すると、下図のように、ZAPに組み込まれているさまざまなFuzzカテゴリとFuzzリストが選択できます。



選択できるFuzzリストの中にどういう文字列が設定されているかは、Windows7の場合
C:\Program Files\OWASP\Zed Attack Proxy\lib\JBroFuzz.jar
これを解凍し、解凍ディレクトリ直下のfuzzers.jbrfというファイルをテキストエディタで開くと、文字列リストが書いてあります。
(fuzzers.jbrfに文字列リストが含まれていない「jbrofuzz/Zero Fuzzers」というカテゴリのFuzzerは、リクエストをただ単に繰り返すという特殊なFuzzerのためFuzz文字列リストがありません。)

自作の文字列リストでファジングを行う手順


1.ファジング用文字列ファイルを作成

ZAPのファジング用文字列ファイルは、一行に一文字列を記載する形式で自作することができます。

例えば、

aaa
bbb
ccc

このようなテキストファイルを作成し、任意のファイル名で保存します。(ここでは仮で「aaa.txt」とします。)

ファイル内にコメントを書きたい場合は、行頭を「#」から始めるとコメント行として読み飛ばされます。

2. ZAPの「Custom Fuzzers」に取り込む

ZAPメニューの「ツール」-「オプション」で起動したオプション画面の「Fuzzer」-「Add custom fuzz file:」で、自作のファジング用文字列ファイルをZAPに追加することができます。



例えばここで、さきほどの三行のファイルを「aaa.txt」としてZAPに登録すると、リクエストウィンドウ右クリック-「Fuzz...」で出てくるメニューのうち、「Custom Fuzzers」のfuzzリストに



のように出てくるようになります。

ここで登録したファイルの修正・削除メニューはZAPのUIにはないのですが、同名ファイルを登録すると上書きになり、削除は、登録したファイルがWindows7ではC:\Users\<ユーザー>\OWASP ZAP\fuzzers 下にあるので、ここから削除すると、ZAPの「Custom Fuzzers」のリストから消去されます。

ファジングの実行結果の見方


例として、さきほどのカスタムファザー「aaa.txt」でファジングを行うと、ZAPの「Fuzzer」タブが有効になり、下図のように、ファイルの三行に応じた3つのリクエストが飛びます。

(下図の例では、URLのGETパラメータ部分をファジング対象として指定したので、GETパラメータの変化が一覧に出てきており分かりやすいのですが、POSTの場合などはこの一覧には出てこないので「Fuzz」欄の値で何を試したか確認します)



ここで、ファジングの実行結果より、怪しい応答を見つけ出す方法を解説します。

ZAPのファジング実行結果ウィンドウで、任意の行をダブルクリックすれば、そのリクエストおよびレスポンスの詳細がZAPのリクエストタブ・レスポンスタブで確認できますが、ファジングは通常、大量の値を次々に試すので、一つ一つのレスポンスを開いて目検でチェックしていくのは大変です。

実際の診断時では、ここでは、何百件もあるようなファジング結果群から、何らかの異常が起こったレスポンスだけを見当をつけてチェックする必要があるのですが、ZAPのファジング実行結果ウィンドウはよくできていて、一覧上である程度、詳細を見るべきレスポンスがどれなのか判断が付くようになっています。

ZAPのファジング実行結果ウィンドウに表示される項目は

・メソッド・・・GET/POSTなど
・URI・・・リクエストURI
・Status・・・リクエストを行った結果のHTTPステータスコード
・Reason・・・HTTPステータスコードとセットのReason-Phrase
・RTT(ms)・・・レスポンスが戻ってくるまでの時間
・Size・・・レスポンスのContent-Length
・State・・・ファジング用文字列がレスポンスに含まれていたら「Reflected」、レスポンスが戻ってきたがファジング用文字列がレスポンスに含まれていなければ「Successful」、レスポンスが戻ってこなければ「エラー」

となります。

例えば、ファジングの実行の結果、下図のような結果が返ってきたとして、

一覧に表示された情報から、

・パラメータに「aaa」を指定したところ、レスポンスに「aaa」が含まれた結果が返ってきた
・パラメータに「bbb」を指定したところ、レスポンスに「bbb」は含まれていなかった
・パラメータに「ccc」を指定したところ、レスポンスが返ってこなかった
・パラメータに「ddd」を指定したところ、404になった

ということが分かります。(fiddlerで結果を操ってこういう結果を出したので、こんな変な挙動をするhtmlファイルは何なのか等は気にしないでください)

この例から分かる通り、

・ダブルクォートやタグなどのHTML特殊文字が「Reflected」になっていたら、値がエスケープされずに戻ってきているため、XSSの可能性あり
・特定の文字の時だけ、レスポンスサイズ・応答時間・ステータスが他リクエストと違うものがあれば、詳細を見る必要がある
(単なる記号ではなく何かしら意味のある文字として処理されている可能性がある)

のような判定が一覧を見ているだけで可能です。

また、ファジング結果判定に関するZAPの便利技として、二つのレスポンスの差分が、具体的にどこなのか目視でよく分からないときには、二つの行を選択して右クリック - 「Compare 2 Responces」を選択すると、二つのレスポンスの差分をグラフィカルに表示してくれるDiffウィンドウが開きます。(これはFuzzerウィンドウだけでなく履歴ウィンドウでも使えます)




CSRFチェックのあるページに対してファジングを行う手順


ZAPのファジング機能は便利ですが、CSRFチェックが入っているページに対してはそのままでは実行できません。
CSRFチェックが入っているページに対してファジングを行う場合は下記の設定が必要になります。

1.ZAPにCSRFチェック用のトークンを覚えさせる

ZAPメニューの「ツール」-「オプション」で起動したオプション画面の「Anti CSRF トークン」の「Add」ボタンで、CSRF防止用トークンの名前を登録します。



2.CSRFチェック用のトークンが発行されるページにアクセスする

登録したCSRFチェック用トークンが発行されるページにブラウザでアクセスします。
設定がうまくいっていれば、ZAPがトークンを認識し、履歴ウィンドウのTags欄に「AntiCSRF」 と出ます。



3.CSRFチェックがあって直接リクエストが送れないページに遷移して、ファジングを行う

CSRFトークンを受け取るページに遷移し、そのPOSTのレスポンスをZAP上で表示し、ファジングを行います。
Fuzzウィンドウは、そのページへのリクエストに「Anti CSRF トークン」に登録したトークンが含まれていると、CSRFチェック対応用のモードになります。
そのモードの場合、右クリック-Fuzz..で表示されるウィンドウに下図赤枠の項目が追加されます。
ここで「anti CSRFトークン利用」チェックボックスと、「トークン・リクエストの表示」にチェックを入れてください。

(下図は設定例です。トークン名は「samplecsrftoken」です。私の環境だと「トークン・リクエストの表示」という文字がチェックボックスにかかってしまって見にくいですが、これにチェックを入れることで、ZAPがトークンが発行されるページに都度アクセスしている履歴がFuzzerタブに出てくるようになります。)



ファジングを開始すると、ZAPが自動的に「トークンの発行されるページでトークンを取得してから当該のページにファジング」を行ってくれます。

下図は、「csrftest1.php」でトークン発行、「csrftest2.php」で受け取ったトークンが合っていたら200、合っていなければ404を返すプログラムで実験してみた結果です。
ここでファジング対象にしているのは「csrftest2.php」ですが、ZAPが1リクエストごとに「csrftest1.php」にトークンを取得しに行き、そのページで発行されたCSRFチェック用トークンで「csrftest2.php」にPOSTを行い、CSRFチェックに通る形でファジングを行っているのが分かります。


この、CSRFチェックを回避しながら自動的に検査を行う機能は、ファジングだけでなく動的スキャンのほうでも設定すれば使えます。そのあたりの解説は、後日公開予定の自動診断編で書きます。

→CSRFチェックを回避しながらの動的スキャンについては書けてませんが、続編書きました。


※本稿のOWASP ZAPでの手動診断の手順は、「脆弱性診断ええんやで」講師松本さんから教えてもらった内容をベースにして、自分で発見したテクニックを追加したものです。
https://security-testing.doorkeeper.jp/

株式会社トレードワークス セキュリティ事業部の松本さんが8月より月イチで開催しているOWASP ZAP ハンズオンセミナーの第4回目の内容のまとめです。

※まとめの前に注記ですが、このまとめを書いている私、g_satoは2014年12月1日より、セミナー講師の松本さんが所属する会社のセキュリティ事業部に転職し、念願の脆弱性診断業務に就くことになりました。
セミナー開催者の身内の立場になったのに、個人ブログでこのセミナーについて取り上げると、構図的にステマ風味になってしまうのですが、媒体はともかくセミナーの内容をフル公開するのは普通に良いことだと思うので、今回は身内であることを明記しつつ、従来どおりここでまとめます。(でもやっぱステマっぽいので記事の公開方法など悩み中です。後で記事の移転等あるかもしれません)

資料
前回までのまとめ
OWASP ZAP ハンズオンセミナー 「セキュリティ診断(自分でしたら)いかんのか?(OWASP ZAPなら)ええんやで(^ ^)」第一回~第三回の内容まとめ・前編
http://securitymemo.blogspot.jp/2014/11/owasp-zap-owasp-zap.html

OWASP ZAP ハンズオンセミナー 「セキュリティ診断(自分でしたら)いかんのか?(OWASP ZAPなら)ええんやで(^ ^)」第一回~第三回の内容まとめ・後編
http://securitymemo.blogspot.jp/2014/11/owasp-zap-owasp-zap_5.html

講師の松本さんのブログでの案内と概略
第4回セキュリティ診断(自分でしたら)いかんのか?(OWASP ZAPなら)ええんやで(^ ^)(まじめにゆいがどくそん)
http://nilfigo.hatenablog.com/entry/2014/11/21/190000

セミナーの案内ページ(セキュリティ診断手法コミュニティページ)
セキュリティ診断 勉強会
http://security-testing.doorkeeper.jp/
このページにこれまでのセミナーの案内ページへのリンクがあります。


・セミナーの事前準備
ハンズオンセミナーなので、OWASP ZAPが動く環境が必要です。

各環境用(win,mac,linux版がある)のOWASP ZAPをこのサイトからダウンロードしてインストール。(要JREなどのJAVA実行環境)
https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

本記事ではWindows版ZAPバージョン2.3.1に基づいて解説します。
今回は、プロキシの設定は講義中に行うので、インストールのみでOKです。

また、今回のテーマが「ZAPと他のツールとの連携」なので、以下のソフトのダウンロード&インストールが必要です。

・(Windows環境の方)Fiddler
http://www.telerik.com/fiddler

・(Mac環境の方)Burp Suite
http://portswigger.net/burp/

Foxyproxy Standard (ブラウザ用プロキシ設定ツール)
https://addons.mozilla.org/ja/firefox/addon/foxyproxy-standard/
https://chrome.google.com/webstore/detail/foxyproxy-standard/gcknhkkoolaabfmlnjonogaaifnjlfnp?hl=ja

セミナー本編
今回のテーマは「OWASP ZAPと他のツールとの連携による手動診断手法」。OWASP ZAPと別のプロキシソフトとの連携の方法をハンズオンで学ぶ。
WindowsではFiddler、MacではBurp Suiteを利用する。

・(Windows環境)Fiddlerのインストール
環境がWindowsの方は、ZAPとFiddlerを連携させる設定を行うので、まずFiddlerをインストール。
ブラウザはFirefoxかChromeを利用して欲しい。(IEだとシステム全体のプロキシ設定が変更されてしまうため)

・(Mac環境)Burp Suiteのインストール
環境がMACの方は、FiddlerはMacではかなりアクロバティックなことをやらないと動かないので、Burpを利用する。
Java製なのでJar Launcher App がMACでは必要なため、入ってなければこれもインストールする。
Burp Suiteのjarを実行すればOK(windows環境でも、Burp Suiteのjarを落としてきてダブルクリックで実行すればBurp Suiteが起動する)

・(両環境)Foxyproxyのインストール
利用するブラウザによって下記リンクからFoxyproxyアドオンをインストール。
・Firefox
https://addons.mozilla.org/ja/firefox/addon/foxyproxy-standard/
・Chrome
https://chrome.google.com/webstore/detail/foxyproxy-standard/gcknhkkoolaabfmlnjonogaaifnjlfnp?hl=ja

・FoxyProxyの設定
※ここで講師より foxyproxy-config.xml というファイルが配布されFoxyproxyへのインポートを指示された。
配布ファイルは以下。
foxyproxy-config.xml

Chromeでの設定のインポート手順
Chromeのメニュー - 設定 - 拡張機能 - FoxyProxy Standardのオプション - Import/Export の「Import FoxyProxy settings from a file」で上記のxmlファイルを選択。

Firefoxでの設定のインポート手順
Firefoxのメニュー - ツール - アドオン - FoxyProxy Standard の「設定」を選択するとFoxyProxyの子ウィンドウが立ち上がるので、左上メニューの「ファイル」から「Import Settings」でファイルダイアログが立ち上がるので上記のxmlファイルを選択。

※配布された設定ファイルによるFoxyProxyの設定の内容
手作業でやる場合の設定は以下。この内容を設定ファイルのインポートで一括で設定している。


・7777 ZAP ・・・ブラウザのプロキシ設定をlocalhost:7777に設定。全URL。(ローカルPCの7777ポートでZAPが待ちうけ)
・8888 Fiddler ・・・ブラウザのプロキシ設定をlocalhost:8888に設定。全URL。(ローカルPCの8888ポートでFiddlerが待ちうけ)
・6666 Burp ・・・ブラウザのプロキシ設定をlocalhost:6666に設定。全URL。(ローカルPCの6666ポートでBurp Suiteが待ちうけ)

・ZAPとFiddler、もしくはZAPとBurpの連携方法

1) 診断に利用するブラウザでFoxyProxyの設定画面を開き「全てのURLでプロキシ7777 ZAPを利用」を選択

これでブラウザがまず7777番ポートのプロキシを通じてWebにアクセスしようとする。
(※現段階では、ZAPの設定がされていないので、7777ポートに何もプロキシが動いておらず、ブラウザで何か見ようとしても何も見れない状態にいったんなる。次の手順でZAPを7777番ポートで待ち受けるように設定する)



2) OWASP ZAPを起動し、7777番ポートでプロキシとして動作するよう設定
ZAPのツール - オプション - ローカル・プロキシの画面で、hostをlocalhost、ポートを7777に設定。



この状態で任意のWEBサイトにアクセスすると、ZAPを通してのアクセスになり、診断ができるが、今回は、ZAPと別プロキシソフトとの連携なので、ZAPの先にもう一つプロキシを設定する。

3) ZAPのプロキシ・チェインを設定する

ZAPのツール - オプション - ネットワークの画面で、「プロキシ・チェイン利用」セクションの「外部プロキシを利用」をチェックし、アドレス/ドメイン名にlocalhost、ポートを、連携させるプロキシがFiddlerであれば8888、Burpであれば6666に設定。



この設定を行うと、ブラウザからの通信がまずZAPを通り、それからさらに別のlocalhost:8888またはlocalhost:6666にあるプロキシを通るようになる。

・ZAPと連携するプロキシの設定

Fiddlerの場合

前段でZAPとの連携プロキシにFiddlerを選んだ場合は、ZAPの外部プロキシをlocalhost:8888に設定し、Fiddlerを立ち上げれば、Fiddlerは自動的にデフォルトで8888ポートでプロキシの待ち受けを開始するので、ブラウザ - OWASP ZAP - Fiddler - WEBサイトという多段プロキシ接続に成功するはず。
ブラウザでWEBサイトにアクセスしてみて、ログが出ない、ページが出ない等うまく行かないようであれば以下の対応を行う。

Fiddlerの設定1:

Fiddlerは、起動するとシステムプロキシに自動的になり代わってしまう機能がある。これはFiddlerの手軽さに貢献している大きな要素だと思うが、今回の多段プロキシなどの場合、設定内容を混乱させる要因になるため、この機能をオフにするほうが良い。

FiddlerメニューのTools - Fiddler Options... - Connectionsタブの「Act as system proxy on startup」チェックボックスをオフにする。
また、もしFiddler listens on portが8888でない場合は8888に設定する。



(また余談として、今回は利用しないが、Fiddler OptionsウィンドウのGatewayタブにFiddlerの使う外部プロキシの設定画面があるので、ここでプロキシサーバのホスト・ポートを設定すると、Fiddlerからさらに別のプロキシを通す多段設定ができる。)

Fiddlerの設定2:

Fiddlerの左下の、下図で「Capturing」と表示されている欄が空欄になっている場合、通信をキャプチャする設定になっていないので、F12を押して「Capturing」の状態にする。
また、その隣の欄の、下図で「All Processes」になっている欄が「Web Browsers」になっていると、ZAPからの接続はブラウザからという判定にならないためキャプチャ対象にならないため、「All Processes」にする。



Burp Suiteの場合

ZAPとの連携プロキシにBurp Suiteを選んだ場合は、ZAPの外部プロキシをlocalhost:6666に設定し、Burpを立ち上げた後、Burpの設定がいくつか必要になる。
Burpは起動時にリクエストを差し止める設定がオンになっているので、まずはそれをオフにする必要がある。

Burpの画面上部、二段になっているタブの列の一段目のタブ「Proxy」二段目のタブ「Intersept」で出てくる画面の「Intersept is on」というボタンが押し込まれた状態になっているので、これを押下してオフにする(「Intersept is off」という表記になる)。



それから、Burpが6666番ポートで待ち受けを行うように設定する。

Burpの画面上部、二段になっているタブの列の一段目のタブ「Proxy」二段目のタブ「Options」で出てくる画面の「Proxy Listeners」欄にあるデフォルトの行を選択し「Edit」押下。



すると「Edit Proxy Listener」というウィンドウが開くので、「Bind to port」を「6666」、「Bind to address」を「All Interfaces」に設定。



これで、ZAP-Fiddler もしくは、 ZAP-Burpという構成の多段プロキシ接続で診断ができるような構成になった。


多段プロキシ構成でZAPを使った検査を行う演習

※ここでハンズオン演習。
セミナー第一回~第三回まとめのときと同様、会場内サーバにあるMuttilidae(ミューティリダエ)のルートURLをコンテキストに入れて、一度ブラウザでPOSTを行い、ZAPの画面下部の履歴タブのPOSTを右クリックして、Active Scan Single URLを選択し、動的スキャンを走らせる。
細かい手順はセミナー第一回~第三回まとめを参照。
この手順を自習する場合は、Muttilidaeでなくとも、任意の自己管理下にある検査しても良いサーバに対して行っても良い。(Muttilidaeに依存した手順や説明は出てこない)


別プロキシを通すと何がいいのか?

ZAP単体で検査をするのではなく、別プロキシを通して多段にするメリットは何か?

・ZAPの診断内容を手軽に知ることができる。正確なログが取れ、エクスポートもできる。

ZAPの履歴タブ(など)には全てのリクエストが出るわけではない。成功したときだけ出たり、Fuzzerタブ、履歴タブなどで履歴が出る基準が違ったりするため、検査内容を正確に把握するために別プロキシを通して履歴を出しておくと便利。
(サーバ側ApacheのログにPOSTを出すようにして診断内容を把握することもできなくはないが、サーバ側に設定を加えたりする必要があるので、手間がかかる)

ZAPからの診断リクエストを、直接ではなくFiddlerを通すようにすると、どれだけのリクエストが行われたかもカウントアップされるし、Fiddlerの設定を加えて日時を表示することもできる。まとめてごそっとExportもできる。

診断時に何かサーバ側で問題があった場合、Fiddlerを通してログをとっておくと、診断のせいなのかそうでないのかの切り分けが容易になる。

・負荷を低く抑える設定が可能になる

ZAPで検査していて、検査時にかかる負荷が問題になるときには、ZAP単体である程度負荷をおさえる設定をすることができる。

ZAPのツール - オプション - 動的スキャンの画面で、「並列スキャンするホスト数」を1、「並列スキャンスレッド数」を1、「スキャン中のミリ秒単位の遅延」を「1000」に設定すると、1つのホストに対して1スレッドが1秒ごとに検査を行う、という設定になる。



しかし、「スキャン中のミリ秒単位の遅延」の上限が1000ミリ秒なので、ZAP単体では、1秒よりも遅い設定を行うことはできない。

そこで、多段プロキシの設定を行い、二つ目のプロキシ側で遅延をかける方法がある。

[Fiddlerで通信の遅延処理を入れる方法]
1)
FiddlerのRules - Customize rules... を選択するとテキストエディタでCustomRules.jsが開いて、各アクションをカスタマイズすることが可能になる。
CustomRules.js内のOnBeforeRequestハンドラ内で、if (m_SimulateModem) {...}となっているif文を探す。
筆者の環境だと下記If文となっている。
if (m_SimulateModem) {
    // Delay sends by 300ms per KB uploaded.
    oSession["request-trickle-delay"] = "300"; 
    // Delay receives by 150ms per KB downloaded.
    oSession["response-trickle-delay"] = "150"; 
}
2)
このif文内に
System.Threading.Thread.Sleep(1000);
という文を書き加える。(1秒スリープ)

3)
FiddlerのRules - Performance - Simulate Modem Speedチェックボックスにチェックを入れる。
ここにチェックを入れると、上記の if (m_SimulateModem) {...} のIf文内が有効になり、リクエストごとに指定したミリ秒sleepするという動作をさせることができる。

Burpも同様のことができるはずだが、今回は説明は割愛。

質疑応答

質問1
Burp でSSLのページで警告が出ないようにするには?



Burpの一段目のProxyタブ、二段目の「Options」を選択。
CA Certificate...ボタンを押下。
CA CertificateウィンドウでCertificate in DER formatを選択しエクスポート。
その証明書をブラウザのルート証明書としてインポート。(Portswigger CAという認証局。インポート時に対象を聞かれるが「この認証局によるWEBサイトの識別を信頼する」のみでよい)

これでSSLエラーや警告は出なくなるはず。
(使い終わったらブラウザにインポートした証明書は削除すること。)

質問2
診断の結果はどこに?

アラートタブにリアルタイムに診断結果が出ている。
診断の結果は、ZAPメニューの「レポート」で XML、HTMLでレポート生成があって、保存先を指定すると自動的にブラウザで開かれる。
レポートは英語だが、翻訳プロジェクトがある。

質問3

レポートに日付は?
→今確認したところ出ていない。
レポートを作った日は出るが、リクエスト日付は出ない。これは不便なので、改善要求を出したほうが良いかもしれない。

2)実際の検査におけるZAPの設定と手順

前編の1)で「Standerd Mode」の状態で「クイックスタート」による検査を行ったが、これはあくまでもZAPの動作を確認するための手順で、実際の検査ではもう少し細かい指定をして検査を行う。
以下に実際の検査時の手順を説明する。

・ブラウザのプロキシを設定し、ブラウザで検査対象のページにアクセスする

前編の事前準備のところで解説した手順で、ZAPのプロキシ設定の調整(調整不要ならデフォルトで)と、ブラウザへのプロキシ設定を行う。

その状態で、検査対象とするサイトにアクセスすると、ZAP画面下部の「履歴」タブや左の「サイト」のところにアクセスしたサイトやURLが表示される。

・モードの変更
前編では「Standerd Mode」で検査を行ったが、実際の検査ではZAPの左上のmode設定を「Protected Mode」にして、意図しないページへの検査(攻撃)が走らないようにしながら検査を行う。

セミナーでは教わらなかったか私が聞き洩らしたか、で各モードの詳細が不明だったので調べたところ

・Safe Mode - 危険な処理が一切できないモード
・Protected Mode - スコープ内のURLにのみ危険な処理が行えるモード
・Standard Mode - 全URLに危険な処理が行えるモード

という感じのようでした。
「スコープ」というのは、コンテキストの一段上の概念で、コンテキストの設定画面で「In Scope」にチェックが入っているとそのコンテキストがスコープ内として扱われるようです。
コンテキスト設定画面の「In Scope」にはデフォルトでチェックが入っているので、本記事の手順では「コンテキストに入れていればスコープ内」になります。スコープについては他にも便利な使い方があったりするようなのですが、セミナーでは「スコープ」という概念の説明は、(多分)まだ出てきていないか省略されているため、本記事でも割愛します。

「Standerd Mode」の時に、ZAPを通してアクセスしたサイトをZAP上で右クリックすると、下図のように「攻撃」の各メニューが有効になっている。



この状態で検査を行うと、各URLに何の歯止めもなく攻撃できてしまうモードになっているため、誤操作や誤設定により意図しないページにまで検査を行ってしまう可能性がある。

それを防止するため、ZAPの左上のmode設定を「Protected Mode」にすることにより、「コンテキスト」に指定したページしか検査を行わないという設定を行う。

まず、ZAP左上のモードを「Protected Mode」にすると、コンテキストメニューの「攻撃」の各メニューはほとんどが無効とされてしまい、そのままでは検査(攻撃)をおこなうことができなくなる。



検査対象サイト/ページを指定するには、「サイト」もしくは「履歴」タブ内の検査対象にしたいサイトかページを右クリックし、コンテキストメニューより「include in Context」の「1」を選択。(この「1」はコンテキストの名称で、次に出てくるコンテキストの設定画面でちゃんとした名前に変更できる)



上で「1」を選択すると下図のウィンドウが開く。



ここで、「Include in Context」の「URL regexs」に「\Q」~「\E」の形の正規表現で、指定したURLが表示される。正規表現の「\Q」は「\E」までの正規表現メタ文字をエスケープするため、URLの「.」などが余計な意味を持たない。

「Include in Context」の「URL regexs」にURLを指定すると、ZAPの「サイト」タブのその正規表現にマッチするURLを持つページだけに二重丸「◎」のようなマークが付く。



この二重丸「◎」のようなマークが付いているページはコンテキストメニューの「攻撃」が有効になり、検査対象のページとなる。

ここで、本記事の手順を手元で確認中に気付いたのですが、Protected Modeの場合、対象となるページをコンテキストに入れるだけではなく、サイトのルートもコンテキストに入れないとうまく検査が走らないという挙動があるようです。(セミナーでも、単体のページだとうまく検査が動かず、急遽ルートからの検査に切り替えていたような気がします)

例えば、Protected Modeにした後で「http://127.0.0.1/test/test.php」だけを指定してコンテキストに入れて、このページに「◎」が付いている状態で自動検査を行おうとしても、一見、右クリックメニューで「攻撃」が有効になっているように見えて、実際に「Active Scan single URL」を選択しても検査が走らず、何もせずに止まってしまいます。
モードを「Standard Mode」に戻すか、「http://127.0.0.1/」をコンテキストに入れると、右クリック-「攻撃」-「Active Scan single URL」が動作するようです。
ただ、「◎」が付いていて、コンテキストメニューでも攻撃可能になっているのに、実際には攻撃が走らない、というのは直感に反するので、この挙動が正しいのか自分の設定ミスなのか、後日確認します。
ひとまず上記手順で検査が動かない場合、「サイトのルート」もコンテキストに入れる、という手順を追加して確認してみてください。

※2014/11/8追記
この現象について、私がいろいろZAP関連で参照させていただいているYuki(@yukisov)様のブログで検証がされていました。
Yuki様の調査によるとやはりバグっぽいようで、近いうちに出るZAP 2.4では修正されるようです。ありがとうございます。
OWASP ZAP 2.3 の Protected mode で Active Scan した時の問題について
(Web Application Security Memo)

・手動検査

OWASP ZAPを部分的に使って、手動検査を行うことも可能で、ここではその手順を解説する。

ブレークポイント

OWASP ZAPの右ペインの上部に「→」(全リクエストにブレークポイントセット)というアイコンがあり、このボタンを押下すると、ブラウザから発行されるPOSTやGETをZAPで中継する際に一時的に差し止めて、リクエストを改変してから発行することができる。



「Standard Mode」の場合、「→」(全リクエストにブレークポイントセット)を押下しただけで全てのリクエストにブレークポイントが設定されるが、「Protected Mode」の場合、ブレークポイントが有効になるのはコンテキスト内のURLに対してのみの模様。

ブレークが入るURLの場合、POSTやGETなどで当該URLに遷移する際、ZAPが反応してリクエストを差し止めてくれる。右上ペインの「ブレーク」タブが自動的に有効になり、上にリクエストヘッダ、下にリクエストボディが表示された状態になる。



パラメータやリクエストヘッダの内容を改変し、「サブミットして次のリクエストかレスポンスへ移動」「サブミットして次のブレークポイントへ移動」のどちらかのボタンを押下すると、改変したリクエストがサーバーに投げられ、レスポンスが戻ってくる。



サーバから戻ってきたレスポンスは、ZAPの右上の「レスポンス」タブで内容が見られるし、ブラウザにも表示される。
この手順でリクエストをいろいろ改変し、脆弱性を探すことができる。

Fuzzer

ブレークポイントを使ってパラメータを一つ一つ改変するのを手作業でやるのがつらい時がある。
OWASP ZAPには、ファジングを行う機能もあり、その機能を使って様々なパラメータを楽に試すことができる。(ファジングに使うパラメータリストを自前で作成することもできる。)

Fuzzerの設定を調整


「ツール」-「オプション」-「Fuzzer」で「並列スキャンスレッド数」を設定することができる。並列スレッド数を増やすと、ファジングを行うスレッドが増え、検査の進捗が早くなるが、サーバ及びクライアント側の負荷が高くなる。

また、この画面の「Add Custom fuzz File:」「ファイルを選択してください」というボタンを押下し、任意のテキストファイル(1行に1パラメータを記述したテキストファイル)を、自前のファジング用パラメータリストとしてZAPに設定することができる。



ここでFuzzerの動作を確認するため、試しに

fuzz1
fuzz2
fuzz3

という3行だけのテキストファイルを作って、「fuzztest.txt」という名前でデスクトップ等に保存し、これをZAPのカスタムファザーに設定してみる。(このファイルの一行が、1パラメータになる予定)

上図Options画面の「Add Custom fuzz File:」「ファイルを選択してください」というボタンを押下し、「fuzztest.txt」を指定する。(このファイルをZAPが格納するディレクトリの書き込み権限がないとエラーになることがある。その場合はエラーダイアログに表示されるディレクトリを作成し書き込み権限を追加してください)

ZAPの画面下部の履歴タブからファジングを行いたいリクエストを選択し、画面上部右の「リクエスト」タブを開き、ファジングを行いたい箇所をドラッグで選択してから右クリック-「Fuzz..」を選択。



「Fuzz」という子ウィンドウが開くので、「Fuzzカテゴリー:」のプルダウンを「Custom Fuzzers」にセットし、Fuzzリストにさきほど読み込ませたファイルが出てきていたら、それを選択。



「Fuzz」ボタンを押下すると、ZAPメインウィンドウの「Fuzzer」タブがアクティブになり、読み込ませたファイルに記載したパラメータが、ドラッグした箇所に設定されて次々とリクエストされる。



後は、レスポンスを見て回って脆弱性を示すようなレスポンスがないかチェックする。

結果一覧で、「Status」がHTTPステータスコード、「RTT(ms)」がレスポンス時間、「size」がレスポンスサイズ、「Fuzz」欄にリクエストしたパラメータが表示されるので、
特定のパラメータの時だけ
・HTTPステータスがおかしい
・他のパラメータの時と比べてレスポンスに時間がかかっている
・他のパラメータの時と比べてレスポンスサイズが大きい/小さい
などの変化を一覧で表示してくれるので、大変便利である。

また、「State」に「Refrected」とあると、リクエストしたパラメータが変更なく反射されたということを表すので、XSSの判定などに便利である。

・ZAPのアップデート
ZAPの「ヘルプ」-「アップデートのチェック」で、「Manege Add-ons」というウィンドウが開き、すでにZAPにインストールされているアドオンのアップデートがある場合には「Installed」タブに「Update」という印がついているので、右のチェックボックスをクリックして「Update Selected」ボタンでアップデートすることができる。



「MarketPlace」タブのほうでアドオンを追加することもでき、ここでstatusが「Release」になっている項目は、リリースレベルであると確認されたものなので追加しても安全とされる。

Betaレベルのアドオンでもベータ版であることを分かった上で追加することもでき、たとえば「SQLMap」がBetaレベルのアドオンとしてリストにあるので、追加してみると、スキャンポリシーのインジェクションカテゴリに「Advanced SQL Injection」という設定項目が増える。
(SQLMapは強力なツールなので、利用には気をつけたほうがよいようです。私は機能追加のテストとしてのみ入れ、ポリシーの項目が増えるのを確認した後アンインストールしました。)


参考資料

Translations / OWASPドキュメント翻訳
https://www.owasp.org/index.php/Japan#Completed
OWASP ZAP マニュアル Ver.2.1.0版 がある(日本語マニュアル)

zaproxy Google Code プロジェクト
https://code.google.com/p/zaproxy/
downloadsのところにUserGuideがある

(参考)別の方のOWASP ZAP ハンズオンセミナーマニュアル
OWASP ZAPのススメ (亀田 勇歩氏)
http://sssslide.com/speakerdeck.com/ykame/owasp-zapfalsesusume

ZAPをぶん回せ(境 稔氏、亀田 勇歩氏)
http://www.slideshare.net/minorsakai/130821-owasp-zed-attack-proxy

8月から毎月一度開催されている「セキュリティ診断(自分でしたら)いかんのか?(OWASP ZAPなら)ええんやで(^ ^)」という、OWASP ZAPハンズオンセミナーに第一回から第三回まで参加し、講師の方に全体的な内容のまとめ&ブログ掲載の許可をいただいたので、これまで私がセミナーで学んだ内容を全部まとめてみます。
時系列に沿ったまとめではなく、セミナーの内容を頭から自習できるような一本の記事に再構成しました。

ブログ記事へのまとめ・編集による間違いやミスの混入の責任は私にあります。 また、一部、セミナーの時にとったメモを見ながら不明点を手元で確かめて書いている箇所があります。

リンク
セミナーの案内ページ(セキュリティ診断手法コミュニティページ)
セキュリティ診断 勉強会
http://security-testing.doorkeeper.jp/
このページにこれまでのセミナーの案内ページへのリンクがあります。

第二回ハンズオンセミナー 資料(Slideshare)
http://www.slideshare.net/nilfigo/sec-test-zap00220140925-40667816

第三回ハンズオンセミナー 資料(Slideshare)
http://www.slideshare.net/nilfigo/sec-test-zap00320141024-40802525

・セミナーの事前準備
ハンズオンセミナーなので、OWASP ZAPが動く環境が必要です。
自習用に環境の整え方を記載しておきます。

準備1: OWASP ZAPインストール
各環境用(win,mac,linux版がある)のOWASP ZAPをこのサイト からダウンロードしてインストール。(要JRE)
本記事ではWindows版ZAPバージョン2.3.1に基づいて解説します。

準備2:ブラウザのプロキシ設定
OWASP ZAPをローカルプロキシとして設定する。

OWASP ZAPは起動するとデフォルトで8080ポートでプロキシとして動作し始めるが、8080ポートは他サービスで利用されている可能性が高いポートなので、他とぶつかる場合は「ツール」-「オプション」の「ローカル・プロキシ」でポートを変更する。



ここで、ホスト名のほうも変更できるが、これはhostsなどでローカルホスト名が変わっている場合などに設定を行う。

そして、利用するブラウザのプロキシ設定を、OWASP ZAPのローカルプロキシのポートに設定する。 (http, https 両方を同じポートに設定する必要がある。)

Firefoxの場合は「ツール」-「オプション」-「詳細」-「接続設定」で下図のように設定する。


講師の松本さんによると、FirefoxであればFoxyProxyというプラグインが、Fiddlerや、ZAP、通常接続などを手軽に切り替えられるのでお勧めとのこと。

プロキシ設定に成功していれば、ブラウザで任意のサイトにアクセスすることで、OWASP ZAPの「サイト」や「履歴」のところにサイトやアクセスログが記録される。

準備3:検査可能なサイトの用意

セミナーでは講師の方が自分のパソコンに「Mutillidae II」という、OWASPで配布している 「やられ役サイト」を立ち上げて、セミナー参加者が一斉にそのアドレスに攻撃(検査)を仕掛ける、という形式だった。

本記事で自習する場合、手順確認用に、何か検査可能な(=壊れても大量アクセスしても他人に迷惑をかけないような)任意のローカルWEBアプリを準備する必要がある。(リモートにあるWEBアプリでは、検査により途中のネットワークに負荷がかかってしまう恐れがあるのでローカルネットワーク内が望ましい)

「Mutillidae II」はWindowsのXAMPP環境でセットアップしてみた限りでは、「Mutillidae II」のZIPアーカイブを解凍して出てきたディレクトリをXAMPPのhtdocs下に置いて、MySQL+Apache有効化してアクセスしただけで使えるようになるので、それを利用してもよい。(本セミナーでは目下「Mutillidae II」に依存した手順は出てきていないので、自分の管理下にある検査可能なサイトがある場合はそのサイトで代用しても良い)

「Mutillidae II」ダウンロードサイトはこちら。
http://sourceforge.net/projects/mutillidae/

※「Mutillidae」って正しくは何て読むのだろう? と思って調べたところ「ミューティリダエ」というのが正しい読み方っぽいです。
発音→http://ja.forvo.com/word/mutillidae/
(私は「ムッチリダエ」で定着してしまったのでこの綴りを書くときは必ず「ムッチリダエ」と内心で読んでいますが)


以下はセミナーの内容です。

・OWASP ZAP って何?
OWASP(The Open Web Application Security Project)が開発および管理しているセキュリティ診断ツール。オープンソースで、世界中のセキュリティエンジニアが開発に加わっている。

・ハンズオンセミナー開催の理由
講師の松本さんが熱い思いを語っておられました。
セキュリティ会社の人間が自前での検査方法をレクチャーするのは、自分の利益を減らすような行為だが、あまりにも今のWEBアプリのセキュリティの状況が悪すぎるので、診断方法を公開して、開発者が自ら検査を行えるようにセミナーを開くことにした、とのことでした。


・セミナー本編
1)「クイックスタート」による検査

まずOWASP ZAPの動きを見るため、一番手軽な「クイックスタート」での検査を行ってみる。
「クイックスタート」での検査では、URL欄に攻撃対象のURLを指定し、ボタンを押すと、自動でリンクをたどってクロールを行い、OWASP ZAPに備わっているさまざまな検査項目を自動で実施してくれる。
これは手軽に検査できるが、微調整ができないので、実際の診断ではあまり使わない。
しかし、クローリング-自動的なスキャン-検出結果出力というZAPの一通りの手順を試すことができるため、ZAPの機能を一通り見ることができる。

「クイックスタート」での検査手順は、

ZAPのウィンドウ左上のプルダウンの値が「Standard Mode」である状態(起動直後のデフォルトではそうなっている)で


クイックスタートタブの「URL」欄に、アタックしてよいURLを指定して「攻撃」ボタン押下


最初にスパイダー検索が走る(ZAPウィンドウ下部の「スパイダー検索」タブが自動的にアクティブになり、クロールの履歴が表示される)

次に、OWASP ZAPに設定されているポリシーにより
・静的スキャン
・動的スキャン
が実施され(「動的スキャン」タブが自動的にアクティブになる)、スキャンが終わると結果が表示される。

ここでのプチテクニックとして、分かりにくいが「動的スキャン」タブのプログレスバーの左隣に、グラフのようなアイコンがあり、これを押下すると、現在の検査の進捗が別ウィンドウで表示される。





カテゴリ別にどのくらい検査が進んでいるかがプログレスバーで表示される。
「status」欄にある再生一時停止ボタンのようなマークをクリックすると、そのジャンルの検査をそこで終えて次のカテゴリの検査に移る。上の画面は「パストラバーサル」の検査を途中でスキップしたときのキャプチャ。

自動検査が終わると、「アラート」タブに切り替わって見つかった脆弱性が表示される。

※ここで、twitterなどの外部サイトへリンクがある場合、勝手にそっちのサイトまでクロールして検査してしまうのではないかと不安になる方もいると思われるが、クイックスタートでURLを指定した場合は、ドメインレベルで違うサイトにまでは検査は行わないようになっており、例えば、URLに「http://127.0.0.1/mutillidae/」を指定した場合、Mutillidaeからリンクが貼られているhttp://www.owasp.org、http://sourceforge.net、http://www.kali.orgなどのページは、クロール結果に出ては来るが「OUT_OF_SCOPE」(スコープ外)として表示される。



前方一致ではなくあくまでドメインレベルで歯止めをかけているだけらしく、探査するディレクトリを制限したくて「http://127.0.0.1/mutillidae/xxx/」を指定しても、上のディレクトリは探査対象に入るようで、「http://127.0.0.1/mutillidae/」や「http://127.0.0.1」は対象になってしまう。

スキャンポリシー

OWASP ZAPは、自動検査の強度(Strength)や閾値(Threshold)を設定することができる。
「メニュー」-「スキャンポリシー」を選択すると、別ウィンドウで、スキャンポリシーの設定画面が開く。ここでの設定値に基づいて、自動検査の強度が決定される。



各カテゴリごとに「Threshold」「Strength」という設定項目がついている。

それぞれ選べる設定値は次のとおり。


「Threshold」を「OFF」にすると、そのカテゴリの検査を行わないようにできる。「LOW」~「HIGH」についてはパラメータの多さなどの調整になるとのこと。

「Strength」については、具体的な意味をセミナーで質問するのを忘れてしまったが、ZAPのヘルプによると「strength (the number of attacks they perform)」と書いてある箇所があるので、攻撃の回数を表す模様。「insane」にするとダメージが大きい模様(insaneってどういう意味だっけ? と思って辞書引いてみたら「正気でない、狂気の」とあった)。

「Threshold」「Strength」は、OSSの開発のプロセスでバランス調整が行われているのが期待されるので、基本はDefaultで良い。
また、各カテゴリを選択すると、その内部でも細かく検査項目が分かれており、その項目ごとに「Threshold」「Strength」を個別で設定することができ、そうやってカスタマイズしたスキャンポリシーに名前をつけて保存することも可能。

カテゴリ内の設定項目の例)「インジェクション」の設定項目


「Passive」カテゴリだけは「Threshold」の選択項目がなく、OFFにできないが、これはいわゆる「静的スキャン(受動的スキャン)」だからで、通常のアクセスログから分かるような脆弱性(が疑われる箇所)を指摘するものなので、OFFにする必然性がないからと思われる。(静的スキャンはスパイダーによるクロール時に既に行われてしまう模様)

ここで、特定のカテゴリのみDefault、他のカテゴリを全部OFFにすると、例えばディレクトリトラバーサルのみ、SQLインジェクションのみ、という検査を走らせることも可能になる。

※セミナーで紹介されてはいないのですが、OWASP ZAPのスキャンポリシーの検査項目については、下記 Yuki 氏 のサイトにかなり詳しい説明があったので、参考資料としてリンクしておきます。
OWASP ZAP スキャンポリシーの検査項目一覧(Release版)(Web Application Security Memo)


OWASP ZAP ハンズオンセミナー 「セキュリティ診断(自分でしたら)いかんのか?(OWASP ZAPなら)ええんやで(^ ^)」第一回~第三回の内容まとめ・後編へ続く

Powered by Blogger.
© WEB系情報セキュリティ学習メモ Suffusion theme by Sayontan Sinha. Converted by tmwwtw for LiteThemes.com.