OWASP ZAPを使った脆弱性診断入門〜環境構築編〜

#OWASP ZAPを使った脆弱性診断
OWASP ZAPという無償のツールを使って、HTTPメッセージを観察したり、改変することを学びたい。
今回は環境構築までを説明します。
##OWASP ZAPとは
OWASP ZAPとは、セキュリティに関する課題解決や情報共有を目的としたプロフェッショナルが集まるコミュニティーであるOWASPが開発・公開しているWebアプリケーション診断ツールで、無償で公開されている。
OWASP ZAPは、WindowsPC/Mac上でプロキシとして動作し、HTTP通信を観察したり、改変したりすることができる。
ちなみに筆者の実行環境はMacです。

##OWASP ZAPのインストール
###Javaのダウンロード・インストール
OWASP ZAPを起動するために、WindowsPCの方はJava1.8以上が必要となりますので、最新版であるJava1.9をダウンロードします。
※Macの方は既にインストールされているので不要です。
既にインストールされているか確かめる方法として、ターミナルを開いて、
以下コマンドを打ち込むことで確かめることができます。
java -version

###OWASP ZAPのダウンロード・インストール
次に、以下からOWASP ZAPをインストールします。
https://www.zaproxy.org/download/
筆者はMacなので、MacOS Installerを選択しました。
ダウンロードが完了したら、exeを実行します。
「次へ」で進んでいきインストールします（標準インストール）。
特に選択事項はないのでサクサク進んで良いです。

##OWASP ZAPの設定
###ZAPセッションの保持方法
ZAPセッションとは診断結果を格納するためのZAPのデータベースのことです。
「現在のタイムスタンプでファイル名を付けてセッションを保存」を選択し「開始」ボタンを押します。
###モード切替
画面が開いたら、まずは実行モードの切り替えを行います。
誤って意図しない診断(攻撃)を実行しないために、画面左上のプルダウンを「プロテクトモード」にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273596/e3ce4136-ed7c-42e1-1d4f-586e72f49835.png)


###ローカル・プロキシ設定
各種設定を行っていきます。
「ツール」→「オプション」からオプション画面を開きます
次にローカル・プロキシの設定を行います。
ここでプロキシの待受アドレスとポート番号を設定します。
「オプション」→「Local Proxies」→「ポート」を”55555″に変更します。※デフォルトの8080でも大丈夫ですが、ポートの競合が起きやすいためです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273596/e1b0b0e6-524b-5cd9-9a4f-6e574608fbf7.png)


###スパイダー設定
次は、対象のサイトから各ページのURL情報を取得するスパイダー機能の設定です。
「オプション」→「スパイダー」を選択し、以下のように変更します。
・「クロールする最大の深さ」：15～19程度
・「並列スキャンスレッド数」：1
・「新しいURIのSVNのメタデータを解析」：ON
・「新しいURIのGitのメタデータを解析」：ON
・「OData固有のパラメータを処理」：ON
クロールする最大の深さは、サイト内のリンクをどこまで深く探しにいくかという設定です。
少ないと取得できないページが出てくる可能性があるので、ある程度大きな数字にします。
並列スキャンスレッド数は、いくつのスレッド数でスキャンするかという設定です。PCスペックにもよりますが基本”1″でいいと思います。
チェックボックス3つについては.svnなどのファイルも診断対象にするためのオプションです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273596/b5cf0bcf-1c18-e4b1-0b01-2258af965784.png)


###動的スキャン設定
次は、診断を行う動的スキャンの設定です。
「オプション」→「動的スキャン」を選択し、以下のように変更します。
・並列スキャンするホスト数：1
・並列スキャンスレッド数：1
・スキャン中にミリ秒単位の遅延：0
「並列スキャンするホスト数」はサブドメインがあった場合にそのドメインも診断対象にするか、という設定ですが診断結果レポートに混在して出力されるので”1″が推奨です。
複数ドメインある場合はドメイン毎に診断しましょう。
「並列スキャンスレッド数」は”1″が推奨です。並列に実施することで本来前後関係を守らなければならないような処理があった場合に、正しい診断結果とならない可能性があるためです。
「スキャン中にミリ秒単位の遅延」は診断用のリクエストを投げる間隔です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273596/9d42e986-ce8e-cde1-7c24-d21f4e10b283.png)


ここまできたら、「OK」を押して設定を保存します。
##スキャンポリシーの設定
###ポリシーの追加
動的スキャンのポリシーを設定します。
「ポリシー」→「スキャンポリシー」を選択し、スキャンポリシー管理画面を開きます。
「追加」ボタンを押します。

スキャンポリシー画面が開いたら、以下のように入力し、一旦すべての診断を無効にします。
・ポリシー：任意の名前
・上の方の「適用」：”off”を選択し、「開始」ボタン押下
・下の方の「適用」：”低”を選択し、「開始」ボタン押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273596/a63a26b0-01c9-91b0-4aef-4f917a24d83c.png)


左ぽちの「インジェクション」を選択し、以下のテストのしきい値と強度を変更します。
・SQLインジェクション-しきい値：低
・SQLインジェクション-強度：低
・クロスサイト・スクリプティング(反射型)-しきい値：低
・クロスサイト・スクリプティング(反射型)-強度：低
しきい値はアラートをあげる判定値のことです。”低”だとNGかOKかあいまいな場合でもアラートを起こします。”高”だと完全にNGの場合だけアラートがあがります。
強度はテストの精度のことで、高はより細かなテストを行ってくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273596/8b20cf3c-3178-f2b2-0c3b-2421bb34626b.png)


「スキャンポリシー」に戻ると以下のようになっているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273596/d7a581c8-a722-44b5-3791-dd3738589ca1.png)


インジェクションのしきい値が空欄、クライアント・ブラウザのしきい値と強度が空欄になっていればOKです。

確認できたら「OK」ボタンを押しましょう。
「テストポリシー」が追加されてます。確認したら閉じましょう。

##ブラウザの設定
###プロキシ設定
次はブラウザの設定です。
OWASP ZAPの診断は、ブラウザから対象のサイトへアクセスする際にプロキシとしてOWASP ZAPを経由することで診断を実行します。
そのため、ブラウザのプロキシを設定を行います。
使用するブラウザは何でも大丈夫ですが、Firefoxが推奨です。
Firefoxはプロキシの設定がOSの設定と切り離してできるので、診断後にプロキシの設定を戻し忘れてインターネットに繋がらない…みたいなことが発生するのを防ぎます。
ということで、Firefoxがインストールされていなければインストールしておきましょう。
Firefoxを起動したら、右上のメニューから「設定」選択します。

スクロールして一番下の「ネットワーク設定」の「接続設定」を押して、インターネット接続画面を表示します。
画面が表示されたら、以下のように入力し、OKを押します。
・手動でプロキシを設定する：ON
・HTTPプロキシ：localhost　ポート：55555
・すべてのプロトコルでこのプロキシを使用する：ON
・SOCKSホスト：localhost　ポート：55555
・プロキシなしで接続：入力値を空にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273596/67cd265a-1ec1-949c-dabd-60d09678edd6.png)


##最後に
これで脆弱性診断のための環境設定は完了しました。
次回は実際に診断を行なっていきたいと思います。

##参考
<a target="_blank"  href="https://www.amazon.co.jp/gp/product/B07DVY4H3M/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B07DVY4H3M&linkCode=as2&tag=samuragouchim-22&linkId=94855b99784ba51b83344ea8977ad6eb"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B07DVY4H3M&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=samuragouchim-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=samuragouchim-22&l=am2&o=9&a=B07DVY4H3M" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
・<a target="_blank" href="https://www.amazon.co.jp/gp/product/B07DVY4H3M/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B07DVY4H3M&linkCode=as2&tag=samuragouchim-22&linkId=4f6141efa34ff0e6d043bc3b80740ed8">体系的に学ぶ 安全なWebアプリケーションの作り方 第2版［固定版］　脆弱性が生まれる原理と対策の実践</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=samuragouchim-22&l=am2&o=9&a=B07DVY4H3M" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[・OWASP ZAPというWebアプリの脆弱性診断ツールの使い方]
(https://kama3.jp/archives/214)