はじめに
OWASP ZAPを使用して、Webの脆弱性診断を行ってみます。OWASP ZAPはオープンソースで無料で使うことができます。
Webアプリケーションのすべての画面を手動でチェック、または、不正パラメータを手動で送信して確認というのは難しいですが、このツールを使うと、自動で様々なパターンの検証を行い診断を行うことができます。
脆弱性診断を行う専門の業者がありますが、費用が高いです。
作成したアプリケーションに対し、「取り敢えず診断してみたい」という場合にはとても便利です。
アプリケーションに脆弱性があると以下のような被害に遭い、運営者やそれを利用するユーザにまで影響が及びます。
- 不正にアクセスされる(情報流出)
- データを不正に書き換えられる
Webアプリケーションは、場合によっては不特定多数のユーザがアクセスするため、脆弱性がある状態での公開は非常に危険です。(特に個人情報を扱うようなアプリなど)
脆弱性の危険性を試した記事を以前まとめましたので、ご覧ください。
Windowsでのインストール方法や使い方については、以下の記事を参考にしてください。
本記事ではMacを使用しています。
他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。
【紹介】個人開発
Mac向けの、定型文の挿入も可能なクリップボード履歴管理アプリです。
Windows版は以前からありましたが、基本的な使い方はMac版も同じですので、もしよかったらダウンロードしてみてください。
OWASP ZAPインストール
以下のページより、OWASP ZAPのインストーラをダウンロードします。
MacOS向けのインストーラを選択します。

インストーラをダウンロードできました。
ZAP_2.11.1.dmgファイルをダブルクリックで開きます。

OWASP ZAP.appファイルを、アプリケーションフォルダへドラッグしインストールします。

OWASP ZAP起動
OWASP ZAPを起動する前に、Firefoxをインストールしておきます。
サイトにアクセスするために使用します。

早速起動してみましょう。
アプリケーションフォルダのOWASP ZAP.appを右クリックし、「開く」を選択します。

警告が表示されますが、「開く」を選択しました。

OWASP ZAPが起動します。

セッションの保持方法を任意で選択します。

OWASP ZAPが起動しました。

プロテクトモードに変更します。
これが選択されていることにより、コンテキストに登録されたサイトのみが診断対象となります。

OWASP ZAP設定
OWASP ZAPのオプションを開きます。

ローカル・プロキシから、ポートを確認します。
デフォルトで8080になっていましたが、重複する可能性があるため18080に変更しました。

診断を行うブラウザに、Firefox を使用します。
右上の Firefox アイコンをクリックし、Firefox を起動します。

Firefox が起動します。

Explore your application with ZAP
今回は、ローカル PC に作成した Web アプリケーションを対象にします。(Laravelで作成したサイト)
先ほど起動した Firefox で、以下の URL にアクセスし、Laravel の起動画面を表示します。
http://localhost/
以下のような画面が表示されますが、「Continue to your target」をクリックします。

OWASP ZAP 上で認識されました。

OWASP ZAPの基本的な使い方
このサイトを対象とするために、コンテキストへ登録します。
サイトを右クリックし、規定のコンテキストへ追加しました。

サイトがコンテキストに追加されます。

これで対象サイトへの診断ができるようになりました。

スパイダー
スパイダーとは、サイトに含まれるページを自動的に検知します。
スパイダーを選択します。

スコープを確認し、スキャンを開始します。

対象サイトが Laravel の起動画面であり、それほどリンクがないのですが、一部のファイルを認識しました。

ちなみにこのページには、外部の URL が含まれていますが、コンテキストに含まれないページは追加されません。

動的スキャン
それでは実際に脆弱性の診断を行いましょう。
動的スキャンを選択します。

設定はそのままでスキャンを開始しました。

ページ数やスキャンの設定によりますが、時間がかかります。

アラートタブを確認すると、スキャンの結果が表示されます。
スコープで対象としている URL のみ表示するため、以下のアイコンをクリックします。

診断結果を確認しましょう。
リスクというのが危険度ですので、必要に応じて対策を検討しましょう。

レポートの出力
診断結果をレポートとして出力することができます。
レポートのGenerate Reportを選択します。

Generate Reportをクリックします。

レポート結果が出力できました。

セッションの保存
今回行った作業を、セッションとして保存しておきましょう。
次回、OWASP ZAPを起動後に、同じ状態に読み込むことができます。(セッションデータファイルを開く)

さいごに
今回はMacのOWASP ZAPで動作確認を行いました。
脆弱性はなかなか見つけにくいため、コーディング時に気をつけるのはもちろんですが、こういったツールで確認するのも効果的です。
作成したWebアプリケーションには、是非利用しましょう。
他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。
コメント
OWASP ZAPの設定でちょっと詰まっていたところがあり、ググりまくったのに一向に解決せず。
そしてこのページに辿りつき、提示通りの設定をしたら一発でした。
今までなんだったんだろう、、
一番わかりやすいサイトでした!ありがとうございました