前の投稿 次の投稿

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

株式会社トレードワークス セキュリティ事業部の松本さんが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

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

Leave a Reply

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