お金をかけずにサーバーの勉強をしよう

WEBサーバーの脆弱性診断

2024年1月16日

メニューへ戻る

ZAPを使って自分で立ち上げた WEBサーバーの脆弱性を確認してみます。

ここではよく NGiNX・Tomcatなど WEBサーバーになるソフトも扱いますし、Node.js・Spring Boot・Dinoなんかの開発系の話も結局は WEBサーバーとなるプログラムを作るのを目標としています。

そこでここではツールを使って、WEBサーバーの脆弱性を診断してみようと思います。

使うのは以下のもので、関係のツールでは有名なやつです。
ZAP

キャラが可愛いですよね。
雨だれ型のロボットちゃんって感じで。

WEBサーバーに様々な攻撃を与えて脆弱性を見るものですが、確か変更は加えなかった安全なツールだったかと思います。

結構面白いので、実験で何かしらの WEBサーバーを作ったら試しにやってると良いかと思います。


1.環境

先日「Raspberry Pi リブート」で、ラズベリーパイに NGiNXのサーバーを立て、このホームページの内容一式を入れましたので、そこを攻撃します。

ZAPを動かすのは Lubuntu 22.04.3の PCクライアントです。

ZAPは Java製のツールなので、Lubuntu 22.04.3には Javaが必要ですので
Java SE Development Kit (JDK) 21 インストール」に書いたのと同じ手順で OpenJDK-21をインストールしています。

2024年1月16日現在での ZAPのバージョンは 2.14.0 でした。


2.ダウンロード

以下のリンク先でダウンロードできます。
Download ZAP

Lubuntu 22.04.3で動かすにあたり [Linux Installer] を選択しました。
ZAPダウンロード

ダウンロードが済むと [ZAP_2.14.0_Linux.tar.gz] ファイルができました。

subro@Lubuntu2204:~/ダウンロード$ ls -l ZAP_2.14.0_Linux.tar.gz
-rw-rw-r-- 1 subro subro 215142045  1月 16 15:33 ZAP_2.14.0_Linux.tar.gz



3.インストール

ダウンロードしたファイルは [tar.gz] 形式の圧縮ファイルなので、tarコマンドで解凍しながら展開します。

subro@Lubuntu2204:~/ダウンロード$ tar -xzvf ZAP_2.14.0_Linux.tar.gz
〜〜〜 省略 〜〜〜
ZAP_2.14.0/plugin/webdriverlinux-release-64.zap
ZAP_2.14.0/plugin/websocket-release-30.zap
ZAP_2.14.0/plugin/zest-beta-42.zap

解凍・展開できて、[ZAP_2.14.0]ディレクトリができました。

subro@Lubuntu2204:~/ダウンロード$ ls -ld Z*
drwxr-xr-x 9 subro subro      4096  1月  2  1970 ZAP_2.14.0
-rw-rw-r-- 1 subro subro 215142045  1月 16 15:33 ZAP_2.14.0_Linux.tar.gz

[ZAP_2.14.0]ディレクトリに移動して中を見てみます。

subro@Lubuntu2204:~/ダウンロード$ cd ZAP_2.14.0

subro@Lubuntu2204:~/ダウンロード/ZAP_2.14.0$ ls -l
total 5460
-rw-r--r-- 1 subro subro    2167  1月  2  1970 README
drwxr-xr-x 2 subro subro    4096  1月  2  1970 db
drwxr-xr-x 2 subro subro    4096  1月  2  1970 lang
drwxr-xr-x 2 subro subro    4096  1月  2  1970 lib
drwxr-xr-x 2 subro subro    4096  1月  2  1970 license
drwxr-xr-x 2 subro subro    4096  1月 16 16:18 plugin
drwxr-xr-x 3 subro subro    4096  1月  2  1970 scripts
drwxr-xr-x 2 subro subro    4096  1月  2  1970 xml
-rw-r--r-- 1 subro subro 5420981  1月  2  1970 zap-2.14.0.jar
-rw-r--r-- 1 subro subro     188  1月  2  1970 zap.bat
-rw-r--r-- 1 subro subro  123778  1月  2  1970 zap.ico
-rwxr-xr-x 1 subro subro    3973  1月  2  1970 zap.sh

[zap.bat]が Windows用で、[zap.sh]が Linux用かな? 実行権限もついていますし。

インストールというには若干疑問が残りますが、このディレクトリごと好きな所に移動してやれば良さげです。
ここでは移動しませんが。

[db]ディレクトリがあるので何となく分かりますが、これは OSのユーザー全体で使うものではなく、個々のユーザーが使うツールなんでしょうね。

だから自分のホームディレクトリ以下に置いておくのが良いと思います。


4.実行

[zap.sh]スクリプトファイルを実行します。

subro@Lubuntu2204:~/ダウンロード/ZAP_2.14.0$ zap.sh

ちょっと時間がかかるので待ちます。
ZAP 1

Automated Scanを押します。
ZAP 2

[URL to attack:] に攻撃対象のラズベリーパイの URLを入れ、⚡攻撃を押します。
ZAP 3

そうすると画面下のペインにわ〜っと攻撃内容が流れます。
ZAP 5

結構時間がかかり、攻撃を受けているラズパイも苦しそうです。
この間におやつにします。
今日はどうぶつビスケットです。

戻ってくると終わっていました。
意外と色々と出ています。
単にHTMLファイルを公開しているだけの WEBサイトに何の脆弱性があるというのか…
ZAP 6


5.レポート作成

メニューから [レポート] - [Generate Report...] と選択します。 ZAP 7

デフォルトでは HTML形式のレポートを作るようですが、私は Libre Office Calc(≒Excel) の形式が良いので変えようと思います。
[Template]タブを選択し、[テンプレート:] のプルダウンで色々選べます。
けれども Libre Office Calc形式も CSV形式も無いので、PDFにすることにしました。
ZAP 8

Generate Reportを押します。
ZAP 9

ちょっと時間がかかって、このようなレポートが。
晒しちゃって良いのか不明ですが…
ZAP 10
以下延々とレポートが続いていますが、フィルタの条件で必要なものだけにできそうではありました。

使い方はこれで終了です。


==========
しかし、ナンですね。
確かにレポートに書かれている事は見に覚えが無いこともないです。

本当はインターネットに晒す前にこれをやって、問題を全て潰してからリリースするべきなんですよね…。

確認をしていませんが、このツールが外部からコマンド実行できるとすると、ジョブスケジューラを使って定期的に WEBサイトの脆弱性診断レポートを作れそうな気がします。


まずこれは鉄板で買っておきましょう。
私のは第1版の古本ですが持っています。

それからこれ。