同僚から教わった脆弱性診断を別プロダクトでやってみたお話。

この記事は[Qiita Engineer Festa 2023](https://qiita.com/official-campaigns/engineer-festa/2023) 参加記事です。
Qiita運営さんの[この記事誰得？ 私しか得しないニッチな技術で記事投稿！](https://qiita.com/official-events/5d4f04cf2ba0cdbc8821)企画への参加記事になります。
　
### この記事で書くこと
OWASP ZAPを使って脆弱性診断をやってみた流れを書きます。
　
### この記事で書かないこと
脆弱性診断の詳細や、OWASP ZAPの細かい使い方は書きません。

# はじめに

## 脆弱性診断とは

お得意のChatGPTさんに聞いてみました。

> 脆弱性診断は、コンピュータシステムやソフトウェアに存在するセキュリティ上の欠陥や弱点を特定するプロセスです。脆弱性とは、悪意のある攻撃者によって悪用される可能性のある、システムやソフトウェアのセキュリティ上の穴や欠陥を指します。
> 
> 脆弱性診断では、専門的なツールや手法を使用して、システムやソフトウェアに潜む潜在的な脆弱性を特定します。これには、システムの設定や構成の問題、ソフトウェアのバグや脆弱なコード、セキュリティポリシーの不備などが含まれます。
> 
> 脆弱性診断の目的は、脆弱性を特定し、修正することでシステムやソフトウェアのセキュリティを向上させることです。診断結果に基づいて、修正やセキュリティ対策の改善が行われることで、悪意のある攻撃からシステムを保護することができます。
> 
> 脆弱性診断は、定期的に実施することが重要です。新しい脆弱性が見つかる可能性や、システムやソフトウェアがアップデートや変更されることで新たな脆弱性が発生する可能性があるためです。定期的な診断を通じて、セキュリティ上のリスクを最小限に抑えることができます。
> 
> 最終的な目標は、脆弱性のない安全なシステムやソフトウェアを構築することです。しかし、脆弱性は完全になくなることはありません。新たな脆弱性が常に現れるため、セキュリティの専門家は常に最新の情報やツールを利用し、脆弱性診断を継続的に行う必要があります。

![脆弱性診断.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/58b3570f-0c01-1d7e-6d55-ffc7a12c1975.png)

何となく分かりましたね。

## 脆弱性診断を自分でやってみたきっかけ

弊社では、社内ルールで特定のタイミングで第三者機関の脆弱性診断をやっています。
しかし、この脆弱性診断では軽くウン百万円かかってしまったりします。
そのため、中規模・小規模リリースの時は内製で簡易的にテストできるといいな〜と思っていました。

以前、PMをやっていたプロジェクトにおいて、チームのめちゃくちゃ優秀な仲間が脆弱性診断をやってくれたことがあり、その仲間に教えてもらいながら自分でも診断をやってみよう！と思い、別プロダクトで診断に挑戦してみました。

# 同僚から教わった脆弱性診断を別プロダクトでやってみたお話。

今回は、OWASP ZAPというツールを使って診断を行います。

:::note alert
このツールは、Webサイトに対して **実際に攻撃をしかけながら脆弱性の有無を診断してい** くツールです。
自身が開発に携わるサイト（原則、開発環境など）のみに使用しましょう。
　
自身・自社の本番サイトなどにテストを行うと、その影響からお客様などへご迷惑をおかけする可能性があります。
また、他社のサイトに対して実行すると、ご迷惑をおかけしてしまい、 **法律的にも社会的にも大きな責任を取らなければいけない可能性が非常に高い** です。
:::

## OWASP ZAPのインストール

[OWASP ZAPのダウンロードページ](https://www.zaproxy.org/download/) から、自身の環境に併せてダウンロード&インストールをします。

![OWASP ZAPのダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/1ba0e82c-54fc-fbed-e324-5a82e5bce500.png)

## OWASP ZAPの起動

アプリから起動すると、最初にダイアログが出てくるので、一旦「継続的に保存せず、必要に応じてセッションを保存」を選んで、「開始」を押します。

![ダイアログ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/f46276a3-1ed4-68d3-a0f3-cdddf94b5025.png)

そうするとメインの画面に到達します。

![メインの画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/c8a2a1b6-7ede-3f52-2e83-a573fdb72d38.png)

## 診断の開始

今回は、診断対象のページを自動スキャンにして、一括で診断したいので、「Automated Scan」を選択します。

![Automated Scan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/ec49793e-f5a1-9bcc-36c5-2ed0e32d68a2.png)

診断するサイトの情報などを入力します。

![スキャン設定画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/64697ed1-8ea4-5823-6f14-76d2565ddc28.png)

| 項目 | 設定内容 |
|:-:|:-:|
| URL to attack  | 診断対象をスキャンする際の初期ページのURLを入力  |
| Use traditional spider  | 自動でクローリングさせたいので、チェックを入れる  |
| Use ajax spider  | クローリングさせないので、今回はチェックを入れない  |

:::note warn
Use ajax spider にチェックを入れると、サイトのページ数にもよりますが、診断が丸1日を余裕で超えるレベルなので、簡易診断が目的の今回はチェックを外します。
:::

**攻撃** というちょっと押すのを躊躇するボタンを押すと診断開始します。

## 診断中

オートスキャンで診断対象のページの洗い出し実施後に、実際の診断が開始されます。
診断中は、ウィンドウの下部にどんなリクエストが行われているのか？や進捗率が表示されます。

![診断中.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/ffa28037-9aec-700c-a6ec-3884db477d01.png)

サイトのページ数にもよりますが、１〜数時間で完了します。
（途中でbeep音がププププププ・・・と鳴ったりすることもありますが、焦らず気長に待ちましょう。）

## 診断後

アラートタブで、診断結果を確認することができます。

![アラートタブ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/2ee37c45-aad9-cc68-a8a0-41ba85c915f5.png)

## レポート作成

履歴タブで、実施結果を選択し、レポート→Generate Report を選択する。

![レポート作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/6b79cf23-c992-5f39-1406-3ef7f24217cb.png)

レポートの出力先などを設定し、Generate Report を選択する。

![レポート設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/397a8709-996c-e34e-f7bb-65bf7dcea63d.png)

## レポートの中身

こんな感じで、どんな指摘があるか分かります。

![レポートのサマリー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394384/7d4131d9-98bd-b1e2-35f1-85c7f9b8e350.png)

# まとめ

自身で、無料で、簡易的に脆弱性診断ができるので、是非お試しください！
　
また、診断後は、結果を元に対応を進めることになるかと思います。
最善としてはすべて対応することだと思いますが、各組織・各プロダクト・各プロジェクトの判断でどこまで対応するかを議論し、リスクを潰していきましょう。