【OWASP ZAP】Webサイトの脆弱性診断を実施する【M1 Mac】


<!--

## 技術記事のタイトル

最も伝えたいこと。
簡潔かつ分かりやすく過不足ないタイトルを考えましょう。

### 【 】(墨付き括弧)

- 【言語やサービス】
    - 例1.【Python】すぐにpytestで単体テストを実行するまでの手順
- 【言いたいこと】
    - 例1.【必見】Objectはどこに消えた？
- 【前提】
    - 例1.【個人開発】○○を○○できるサービスをリリースしました
    - 例2.【初心者向け】Reactとはそもそも何なのか説明します
- 【続き物の番号】
    - 例1.【2024年版】新入社員向け研修資料を公開します
    - 例2.【環境構築編】Windows11でPythonを実行するまで

【前提】詳しいタイトル【言語やサービス】のように、複数を併用するパターンもあります。

-->

# 目次
- [はじめに](#はじめに)
- [この記事でわかる・できること](#この記事でわかるできること)
- [この記事の対象者](#この記事の対象者)
- [動作環境・使用するツールや言語](#動作環境使用するツールや言語)
- [OWASP ZAP とは](#owasp-zap-とは)
- [インストール](#インストール)
  - [OWASP ZAP のインストール](#owasp-zap-のインストール)
  - [Firefoxのインストール](#firefoxのインストール)
- [OWASP ZAP の設定](#owasp-zap-の設定)
  - [基本設定](#基本設定)
  - [Proxy設定](#proxy設定)
- [静的スキャン](#静的スキャン)
  - [ブラウザからの手動探索](#ブラウザからの手動探索)
  - [自動探索](#自動探索)
- [動的スキャン](#動的スキャン)
- [診断結果の確認](#診断結果の確認)
- [最後に](#最後に)

## はじめに
リリース前には脆弱性診断を行っていると思いますが、様々な理由でいつも外部業者に診断してもらえるわけではありません。
- 個人情報を扱わないPoC開発なので、ライトに脆弱性診断を行いたい
- 趣味での個人開発なので、なるべくお金はかけたくない
- 外部業者に依頼はするが、事前にチェックしておきたい

こんな場合に自分で脆弱性診断を実施できたら良いと思いませんか？

Webアプリケーションのすべての画面を手動でチェックしたり、不正なリクエストを送信するのは難しいですが、OWASP ZAPであれば自動でチェックしてくれます。

今回はM1 MacにOWASP ZAPをインストールし、Webサイトの脆弱性診断を行います。

### この記事でわかる・できること
<!--
読んだら何がわかるようになるのか、何ができるようになるのかを書きましょう。
-->

- OWASP ZAPをインストールして、Webサイトの脆弱性診断を実施する方法


### この記事の対象者
<!--
誰に向けた記事なのかを明確にすることで読者に選んでもらいましょう。
-->

- 自分でWebサイトの脆弱性診断を行いたい人
- はじめてOWASP ZAPを利用する人

### 動作環境・使用するツールや言語

- OS バージョン
    - Sonoma 14.5 (M1)
- ツール
    - OWASP ZAP 2.15.0



## OWASP ZAP とは
OWASP ZAP（Zed Attack Proxy）は、OWASPが提供するオープンソースのウェブアプリケーションセキュリティツールで、脆弱性診断やセキュリティテストを自動化するセキュリティスキャナーです。SQLインジェクションやクロスサイトスクリプティング（XSS）などの一般的な脆弱性を検出するための強力な機能を備えており、無料で利用できます。

## インストール
### OWASP ZAP のインストール
公式サイト: [OWASP ZAP](https://www.zaproxy.org/)

公式サイトからZAPをダウンロードします。
![owasp_install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/43144cf1-94e2-c816-a823-7fe5d0964b64.png)

今回はM1用なので、Apple Silliconをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/6bc817a6-bcb4-b4c9-c0e1-6ead36b02237.png)

ファイルを開き、「Applications」フォルダにドラッグします。
![app.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/44b2e848-44aa-5725-f1ad-00e5e05727e2.png)

インストール完了です。
### Firefoxのインストール
この後Webサイトの解析でFirefoxを利用します。
FirefoxはZAPのプロキシ設定を簡単に構成できます。これによりZAPが通信をインターセプトし、サイト解析に利用できます。
詳細は省略しますので、下記からインストールをしてください。

公式サイト: [Firefox](https://www.mozilla.org/ja/firefox/new/)


## OWASP ZAP の設定
### 基本設定
セッション保持方法を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/67b77167-87d0-e657-9d60-ca764cefe744.png" width="350">

OWASP ZAPが起動しました。
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/602f005d-cec2-ffcd-18d0-fdc19fa6e008.png)

最初に診断モードをプロテクトモードにしましょう。
これを選択することで明示的にコンテキストに設定したURLに対してのみ攻撃を行います。
<font color="red">※診断対象外サイトに攻撃しないように必ず設定しましょう。</font>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/b05f9f7a-dac3-f940-0bb6-36cfc03f65ca.png" width="550">

### Proxy設定
OWASP ZAP経由でリクエストされるようにLocal Proxy設定を行います。
ツール > オプション > Network > Local Servers/Proxies を開きます。
利用していないポートに変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/8a2c52a1-55f0-9a9d-deb2-76925cc85b2a.png)


## 静的スキャン
### ブラウザからの手動探索
Webブラウザ上で基本的な機能の一通りの操作を行って、診断対象URLを登録すると同時にリクエスト内容を診断します。

Firefoxのマークをクリックして、Firefoxを起動します。
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/f6638a2d-4760-5335-e205-c91b26f46689.png)

ブラウザで診断したいサイトのURLを入力して開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/e0db9685-83b8-1d41-f5f6-6fdf6e29dc7e.png)

[Continue to your target]をクリックして、サイト上で一通り動かしてみると、ZAP側の「サイト」配下にFireFoxで開いているURLがどんどん追加されていきます。

対象のサイトを右クリック > コンテキストに含める > 「既定コンテキスト」をクリックして診断対象として追加しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/108b8f55-a7cd-1dd8-b0e5-ff2ae1100a48.png)


### 自動探索
さらに診断対象を自動探索したい場合はスパイダーという機能を使って、診断対象URLを登録してみましょう。
診断対象をクロール（巡回）してURLと各リクエスト、レスポンスを収集してくれます。

対象のサイトを右クリック > 攻撃 > スパイダーをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/87d2b846-fe74-920d-f1a1-9218dc9b02a1.png)

コンテキストが間違っていないことを確認して、スキャンを開始しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/ab849de8-cb40-6057-1f83-543de642ca2d.png)

検出されたURLが登録されて、後の診断対象になりました。
![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/8e9b4510-eaa8-1edc-c3bc-54155b72addb.png)


## 動的スキャン
今度は動的スキャンを行います。ここまでで登録した対象URLにパラメータを変更しながら攻撃をしかけて診断します。
対象のサイトを右クリック > 攻撃 > 「動的スキャン」をクリックして攻撃します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/ad6edcb7-30ef-6883-5bb2-88e65bbcc62f.png)

コンテキストが間違っていないことを確認して、スキャンを開始しましょう
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/ebf3d26f-2979-a823-ea97-2e895acf0858.png" width="550">
スキャンは多少時間がかかります。

## 診断結果の確認
アラートタブの診断結果を確認します。
リスクの高さと要件に応じて、それぞれ適切に対応しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804982/fed7f84d-a11c-d293-c79a-456bbbced231.png)


## 最後に
今回はWebサイトの脆弱性診断を自分で実施する方法を試してみました。
OWASP ZAPには他にもOPEN APIから定義を取り込んだり、CI/CDに組み込んで自動でスキャンすることもできますので、どんどん活用してセキュアなサイトを構築して行きましょう！