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_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
ちょっと時間がかかるので待ちます。
Automated Scanを押します。
[URL to attack:] に攻撃対象のラズベリーパイの URLを入れ、⚡攻撃を押します。
そうすると画面下のペインにわ〜っと攻撃内容が流れます。
結構時間がかかり、攻撃を受けているラズパイも苦しそうです。
この間におやつにします。
今日はどうぶつビスケットです。
戻ってくると終わっていました。
意外と色々と出ています。
単にHTMLファイルを公開しているだけの WEBサイトに何の脆弱性があるというのか…
5.レポート作成
メニューから [レポート] - [Generate Report...] と選択します。
デフォルトでは HTML形式のレポートを作るようですが、私は Libre Office Calc(≒Excel) の形式が良いので変えようと思います。
[Template]タブを選択し、[テンプレート:] のプルダウンで色々選べます。
けれども Libre Office Calc形式も CSV形式も無いので、PDFにすることにしました。
Generate Reportを押します。
ちょっと時間がかかって、このようなレポートが。
晒しちゃって良いのか不明ですが…
以下延々とレポートが続いていますが、フィルタの条件で必要なものだけにできそうではありました。
使い方はこれで終了です。
==========
しかし、ナンですね。
確かにレポートに書かれている事は見に覚えが無いこともないです。
本当はインターネットに晒す前にこれをやって、問題を全て潰してからリリースするべきなんですよね…。
確認をしていませんが、このツールが外部からコマンド実行できるとすると、ジョブスケジューラを使って定期的に WEBサイトの脆弱性診断レポートを作れそうな気がします。
まずこれは鉄板で買っておきましょう。
私のは第1版の古本ですが持っています。
それからこれ。