「OWASP ZAP」で脆弱性診断を行ってみた

2021/03/07

直近「OWASP ZAP」によるセキュリティ診断結果を目にする機会がありました。
OWASP ZAP」とはオープンソースで提供されているWebアプリケーション用の脆弱性診断ツールです。
こちら、診断結果をどのように出力しているのか気になったので、ローカルの仮想環境に作ったWebアプリケーションに対して軽く診断をしてみました。
実際に試してみたところ導入から診断まで、思ったより容易に行うことができたので、その流れについて簡単に記しておきたいと思います。
※本記事ではWindows10に「OWASP ZAP」をインストールして診断をしております

1. 診断対象の構成

仮想環境はWindows10 + Vagrant + VirtualBox で構築しています。
今回、仮想環境に作成したWebアプリケーションに対して脆弱性診断を行ってみます。
構成は以下となります。
 CentOS8
 php7.4
 mysql8.0
 nginx1.16.1 + php-fpm
 Codeigniter4

2. 「OWASP ZAP」 をインストール

以下よりインストールを進めます(標準インストール)
Download ZAP
(執筆時点ではver2_10_0でした)

javaがインストールさせれていない場合はインストールします。
Download Java
(執筆時点ではJRE1.8以上が必要でした)

インストール後、「OWASP ZAP」を起動すると以下が表示されます。

セッション保持については何を選んでも問題ありません。今回は「継続的に保存せず~」を選択します。
※セッションの保存先はデフォルトで
 ユーザーディレクトリ/OWASP ZAP/sessions
直下に作成されます

また、「OWASP ZAP」は推奨ブラウザをFirefoxとしているので、インストールしていない場合はインストールします。
Download Firefox

これでインストールは完了です。

3. 「OWASP ZAP」側の設定

OWASP ZAP」起動後まずは、意図しない診断対象に対してのスキャンをしないように、モードを「プロテクトモード」に変更しておきましょう。

次にポートの設定を行います。
「ツール」>「オプション」から「ローカル・プロキシ」を選択し、
 Adress:localhost
 ポート:11111
と入力します(ポート番号は被らない番号を入力しておきます)

更にポート設定後、SSL証明書の発行を行います。
「ツール」>「オプション」から「ダイナミックSSL証明書」を選択し証明書を保存しておきます(後続のブラウザ側の設定で使用します)

これで「OWASP ZAP」側の準備は完了です。

4. 「FireFox」側の設定

OWASP ZAP」側の設定が完了したら、FireFoxの設定を行います。
オプション>「一般」(左メニュー)>ネットワーク設定の「接続設定」を選択し、
前項『「OWASP ZAP」側の設定』で指定したHttpプロキシとポートを入力します。

続けて、前項『OWASP ZAP」側の設定』で保存した証明書をインポートします。
オプション>「プライバシーとセキュリティ」左メニュー>「証明書を表示」を選択し、「認証局証明書」タブを選択してインポートしましょう。

これで「FireFox」側の準備は完了です。

5. 診断を行う(動的スキャン)

上記設定が完了したら、「FireFox」で診断したいWebアプリケーションにアクセスします。
すると「OWASP ZAP」左メニューの「サイト」項目にアクセス情報が追加されていきます。
診断したいページにアクセスしていきましょう。
※本記事ではローカル環境`http://192.168.35.10/`各ページにアクセスしています。

アクセスが完了したら、「サイト」項目のURL(本記事では`http://192.168.35.10/`)を右クリック>「コンテキストに含める」>「New Context」を選択します。
サイト配下全てを対象とするため「対象のサイト/.*」に変更してOKを押下します。

コンテキストに対象のサイトが追加される(本記事では`http://192.168.35.10`)ので、右クリック>「動的スキャン」>「スキャンを開始」を押下します。
そうすると、以下のようにスキャンが開始されるので、気長に待ちましょう。

スキャンが100%になった後、ツールバーの「レポート」から診断結果を出力します。
※今回はHtmlで出力します。

上記のように出力され、4段階で脆弱性を診断してくれます。この診断結果をもとに脆弱性対策を進めます。
SolutionやReferenceの出力内容が参考になるでしょう。
例えば、Mediumの「X-Frame-Options Header Not Set」についてはNginx設定追加/変更をしながら対応をします。

▼hoge.conf 設定追加例

server {
    ...
    add_header X-Frame-Options SAMEORIGIN always;
    ...
}

診断結果をもとにNginx設定追加/変更行い再診断。MediumおよびLow項目がだいぶ減りました。修正/診断を繰り返し対処すべき警告がなくなるまで繰り返します。

6. まとめ

OWASP ZAP」によるセキュリティ診断結果を初めて見た際は、「脆弱性診断導入の敷居が高そう」といった印象でした。
ですが、今回簡単ではありますがインストール・診断まで実行してみて、『比較的容易に脆弱性診断が行える』ということがわかりました。また併せて、NginxやApacheに対しての設定の甘さに気づかされたので、今後診断結果で警告のあった項目については特に留意しておきたいと思います。