OWASP ZAPを使って通信を取得する設定をサクサク書いてみた（Chrome）

OWASP ZAPを使ってPCブラウザの通信を見たいときに必要な手順を
簡単にサクサクまとめてみました。

MacでChromeを使うときの設定手順です。

 - OWASP ZAPのインストールと設定
 - Chromeで通信確認用のユーザー作成
 - Chromeのプロキシ設定
 - 証明書のインストール

以上の設定が終わると、Chromeの通信をOWASP ZAP側で取得できます。

設定手順を以下に書いていきます。


## 環境
 - macOS Sierra 10.12.5
 - OWASP ZAP 2.6.0 
 - java version 1.8.0_144
 - Google Chrome (60.0.3112.113)

## OWASP ZAPのインストールと設定

OWASP ZAPをダウンロードして起動します。
>OWASP Zed Attack Proxy Project
>https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

※今回はCross Platform Packageを使用しました。その場合は、事前にJavaのインストールが必要になります。

起動時に聞かれるZAPセッションの保持方法ですが、今回は「継続的に保存せず、必要に応じてセッションを保存」にチェックしました。
また、起動時に「ポートで待ちうけできません locakhost:8080」とエラーがでた場合は、すでに8080ポートが別のツールで使用されている状態です。
OWASP ZAPのポートを後から変更することは可能ですので、とりあえずOKしておきます。

### ポートの設定
下記の手順を行うことで、OWASP ZAPが待ち受けるポート番号を設定することができます。

 - 「ツール」の「オプション」をクリック
 - 左の一覧項目にある「ローカル・プロキシ」をクリック
 - ポートの項目を任意の番号に設定してOK

<img width="80%" alt="setting" src="https://qiita-image-store.s3.amazonaws.com/0/156827/f78ee93b-1545-23f6-4a1e-a10cc1295b86.png">


## Chromeで通信確認用のユーザー作成

普段使っているブラウザでプロキシ設定をすると、すべての通信がOWASP ZAPを経由することになります。
そのため、普段使っているChromeでそのまま設定してしまうと、開いているタブやインストールしているアドオンなどが行う通信も拾ってしまうため、確認したい通信のログが埋もれてしまう可能性があります。

そのため、通常使用しているユーザーとは別に確認用のChromeユーザーを設定することをおすすめします。

### 新規ユーザーの作成
新規ユーザーの作成は下記を参考にしました。
> Chrome を他のユーザーと共有する、プロフィールを追加する
> https://support.google.com/chrome/answer/2364824?co=GENIE.Platform%3DDesktop&hl=ja
>1.パソコンで Chrome を開きます。
>2.画面右上の、自分の名前またはユーザー アイコン ユーザー をクリックします。
>3.[ユーザーを管理] をクリックします。
>4.[ユーザーを追加] をクリックします。
>5.画像と名前を選択します。
>6.[保存] をクリックします。新しいウィンドウが開き、ログインするように求められます。
>7.新しいプロフィール用の Google アカウントを使って Chrome にログインします。ブックマーク、履歴、パスワードとその他の設定が自動的に同期されます。


手順7で、Googleアカウントを使ってChromeにログインするように記載されていますが、確認用のユーザーなのでログインはせずにそのまま作成を完了します。

## Chromeのプロキシ設定
Chromeの「設定」にある「詳細設定」をクリックすると、「システム」が表示されます。
そして、「プロキシ設定を開く」をクリックするとPC側のプロキシ設定画面が表示されて、そこで設定を行うことができます。

ただ、毎回PC側のプロキシ設定を操作するのはめんどくさいので、プロキシ設定を切り替えるアドオンを入れてしまいます。

### アドオンの設定
下記のアドオンでのプロキシ設定を行う手順を書いていきます。
>Proxy SwitchyOmega
>https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif

 - URLにアクセスしてアドオンをインストール
 - Proxy SwitchyOmega設定画面の「New Profile」から、新しく設定を作成して下記のように入力後、保存


<img width="80%" alt="proxylistener" src="https://qiita-image-store.s3.amazonaws.com/0/156827/a86fe1ef-c95d-1cd1-2268-4436f03793ea.png">

　※ポートには、OWASP ZAP側で設定したポート番号を設定しています。

 - Chromeのツールバーに追加されている「Proxy SwitchyOmega」のアイコンをクリックして、作成したプロキシ設定を選択

これでChrome側の設定は完了です。
アドオンのデフォルト設定では、プロキシ設定を変更したタイミングで画面更新が行われます。
そのためOWASP ZAPの設定が完了していれば、画面が更新されてOWASP ZAPの履歴タブ内に、ブラウザの通信履歴が入ってきているかと思います。

## 証明書のインストール
プロキシの設定を完了すると、ブラウザの通信がOWASP ZAPを通るようになりますが、httpsのサイトにアクセスすると証明書エラーが表示されます。
ChromeはPC側の証明書を利用するため、エラーを回避するにはPCに証明書を登録する必要があります。
下記の手順でOWASP ZAPの証明書をPCに登録することができます。

### OWASP ZAPでの操作
- OWASP ZAPの上部にあるツールバー内の歯車マーク「オプション」をクリック
- 左の一覧項目にある「ダイナミックSSL証明書」をクリック
- ルートCA証明書が設定されていることを確認して保存をクリック

<img width="80%" alt="setting" src="https://qiita-image-store.s3.amazonaws.com/0/156827/0c61d758-ea61-84a9-cdd4-44ca59782013.png">


### Macのキーチェーンアクセスに証明書を登録
次は、OWASP ZAPで保存した証明書をMacに登録して使えるようにします。
下記の手順を行います。

 - 保存した証明書（owasp_zap_root_ca.cer）をキーチェーンアクセス設定画面の「システム」にドラッグ&ドロップ
 - 「OWASP Zed Attack Proxy Root CA」が登録され、「このルート証明書は信頼されていません」と表示される
 - 登録した証明書を選択して、コンテキストメニューから「情報を見る」画面を表示
 - 「▼信頼」をクリックして、「この証明書を使用するとき」を「常に信頼」に設定して「情報を見る」ウィンドウを閉じる
 - 「このルート証明書は信頼されていません」の表示が、「この証明書はこのアカウントにとって信頼されているものとして指定されています」に変更していることを確認



## 完了
OWASP ZAPとChromeでアドオンの設定をした状態で、SSLのサイト（https://www.google.co.jp/ など）にアクセスしてみます。
証明書エラーにならずに、履歴タブに通信データが入ってきていれば完了です！

## 忘れずに！
作業が終わったらアドオンのプロキシの設定を解除しておくことを忘れずに！

## 参考サイト
下記のサイトを参考にいたしました。
- [OWASP ZAP 簡単な使い方 by Jun Matsumoto](https://speakerdeck.com/jun_matsumoto/owasp-zap-jian-dan-nashi-ifang)
- [ブラウザからのリクエストをOWASP ZAPで保留し、編集してからWebサーバに送信する方法](https://www.pupha.net/archives/579/)
- [OWASP ZAPの基本的な使い方（手動診断編）](https://securitymemo.blogspot.jp/2014/12/owasp-zap.html)