概要
「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践」(徳丸本)の実習環境を OWASP ZAP まで含めて全て Docker で動かします。
ホストに Java などをインストールする必要が無くなります。(必要なのは Firefox と Docker のみ)
OWASP ZAP の設定変更も Docker の構成ファイルに含めているので、手動で OWASP ZAP の設定を変更する必要が無くなります。
本稿の手順を完了すると、以下の3ステップで実習環境が起動します。
-
docker compose up -d
を実行する。(数秒) - ブラウザ(Firefox 以外でもよい)で
http://localhost:8080/zap
を表示する。(10秒程度) - Firefoxで
http://example.jp/
を表示する。(すぐ)
動作確認は WSL + Ubuntu 環境で実施しています。
Ubuntu 無しの WSL オンリー環境や M1/M2 Mac 環境でも同様に実行できるはずです。
編集・追加するファイルは以下の3つです。
$ tree -a
(省略)
├── docker-compose.yml # 編集する
(省略)
└── zap
├── Dockerfile # 追加する
└── homedir
└── .ZAP
└── config.xml # 追加する
OWASP ZAP のコンテナイメージ は 2.12.0 から amd64 と arm64 の両方で用意されています。
本稿では徳丸本2-4にある「hosts ファイルの編集」を行ないません。
「hosts ファイルの編集」を行なわないので、徳丸本2-4の最後のページで実施する ping example.jp
などの疎通確認は失敗します。
本稿の手順を最後まで実施すると、最終的に Firefox で http://example.jp/
の表示ができるようになります。
VirtualBox 環境との併用は考慮していませんので、この手順を実施する時は VirtualBox 側をシャットダウンしておくと良いでしょう。
同様に既存の wasbook-docker 環境とも併用はできません。既存の wasbook-docker 環境側では docker compose down
しておきましょう。
0: WSL と Docker Desktop をインストールする
WSL を新規にインストールする場合
最新のWindows 10 22H2 であれば WSL のインストールは以下のコマンド1つで「ストア版」の WSL がインストールされ、Ubuntu ディストリビューションの導入まで完了するはずです。
PS C:\Users\tadashi> wsl --install
wsl -l -v
で Ubuntu ディストリビューションが VERSION 2 で、既定になっている(*
が表示されている)ことを確認しましょう。
PS C:\Users\tadashi> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
WSL が既にインストールされている場合
必須ではありませんが WSL をアップデートしておくと良いかもしれません。
wsl --update
を実行すると「ストア版」の WSL が入ります。
どうしても「インボックス版」の WSL を使う理由がある場合以外は実行しておくのをお勧めします。
PS C:\Users\tadashi> wsl --update
こちらの場合も wsl -l -v
でディストリビューションの状態を確認しておきましょう。
Docker Desktop for Windows をインストールする
下記のリンクからインストーラーをダウンロードしてインストールします。
1: wasbook-docker.zip を WSL の Ubuntu 環境に展開する
http://wasbook.org/download/wasbook-docker.zip をダウンロードして wasbook-docker.zip を展開します。
PS C:\Users\tadashi> ubuntu
tadashi@DESKTOP-CRHC3IF:~$ mkdir work # workが無ければ作る
tadashi@DESKTOP-CRHC3IF:~$ cd work # 以降はこのディレクトリで作業する
tadashi@DESKTOP-CRHC3IF:~/work$ cp /mnt/c/Users/tadashi/Downloads/wasbook-docker.zip ./
$ unzip wasbook-docker.zip
$ cd wasbook-docker
$ pwd # 作業するディレクトリの確認
/home/tadashi/work/wasbook-docker
2: docker-compose.yml に patch を適用する
wasbook-docker.patch を作成して docker-compose.yml に適用します。
これはファイルの編集作業に相当する操作です。
$ pwd # 作業するディレクトリを確認する
/home/tadashi/work/wasbook-docker
$ # vi でも nano でも VSCode でも良いので wasbook-docker.patch ファイルを作成する(以下の cat コマンドの結果を参照してください)
$ cat wasbook-docker.patch # 作成したファイルの中身を cat コマンドで確認すると以下のようになります
--- ./wasbook-docker.orig/docker-compose.yml 2022-12-29 16:00:12.000000000 +0900
+++ ./wasbook-docker/docker-compose.yml 2023-02-10 17:56:47.456526682 +0900
@@ -65,5 +65,16 @@ services:
networks:
internal:
+ zap:
+ build: zap
+ ports:
+ - 8080:8080
+ - 58888:8090
+ volumes:
+ - ./zap/homedir/.ZAP:/home/zap/.ZAP
+ - ./zap/homedir/.ZAP/config.xml:/home/zap/.ZAP/config.xml
+ networks:
+ internal:
+
networks:
internal:
$ pwd # 作業するディレクトリを確認する
/home/tadashi/work/wasbook-docker
$ patch docker-compose.yml <wasbook-docker.patch # 作成したパッチファイルを適用する
3: OWASP ZAP の Dockerfile を配置する
ZAP コンテナのための Dockerfile を作成して配置します。
$ pwd
/home/tadashi/work/wasbook-docker
$ mkdir -p zap/homedir/.ZAP # 必要なディレクトリをこの時点で全て作ってしまう
$ cd zap
$ pwd
/home/tadashi/work/wasbook-docker/zap
$ pwd # 作業するディレクトリを確認する(作成した zap ディレクトリの中)
/home/tadashi/work/wasbook-docker/zap
$ # vi でも nano でも VSCode でも良いので Dockerfile ファイルを作成する(以下の cat コマンドの結果を参照してください)
$ cat Dockerfile # 作成したファイルの中身を cat コマンドで確認すると以下のようになります
FROM owasp/zap2docker-stable:2.12.0
USER root
RUN apt-get update && apt-get install -y \
fonts-ipafont-gothic \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
USER zap
CMD ["zap-webswing.sh"]
4: OWASP ZAP の設定が記載された config.xml
を配置する
ここで作成する config.xml
に OWASP ZAP コンテナの基本的な設定(徳丸本2-5と http://wasbook.org/wasbook-docker.html の内容)を Docker 環境用に少し修正してまとめてファイルにしてあります。
手作業で徳丸本2-5と http://wasbook.org/wasbook-docker.html の内容を実施する必要はありません。
$ cd wasbook-docker/zap/homedir/.ZAP
$ pwd # 作業するディレクトリを確認する(zap の下の homedir の下の .ZAP ディレクトリ)
/home/tadashi/work/wasbook-docker/zap/homedir/.ZAP
$ # vi でも nano でも VSCode でも良いので config.xml ファイルを作成する(以下の cat コマンドの結果を参照)
$ cat config.xml # 作成したファイルの中身を cat コマンドで確認すると以下のようになります
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<config>
<version>20012000</version>
<breakpoints>
<buttonMode>2</buttonMode>
</breakpoints>
<network>
<connection version="2">
<httpProxy>
<enabled>true</enabled>
<host>apache</host>
<port>3128</port>
</httpProxy>
</connection>
</network>
<hud version="4">
<enabledForDesktop>false</enabledForDesktop>
</hud>
<database>
<newsession>1</newsession>
<newsessionprompt>false</newsessionprompt>
</database>
<view>
<locale>ja_JP</locale>
<fontName>IPAPGothic</fontName>
</view>
</config>
5: docker compose up -d する
docker compose up -d
で起動します。
初回なのでビルドが走ります。
$ cd wasbook-docker
$ pwd # 作業するディレクトリを確認する
/home/tadashi/work/wasbook-docker
$ docker compose up -d
少し古い環境の場合は docker compose
ではなく docker-compose
が必要になるケースがあります。
最新の Docker Desktop をインストールしていれば docker compose
で大丈夫です。
6: Firefox に FoxyProxy をインストールして設定する
ブラウザ(Firefox 以外でもよい)で http://localhost:13128/
を表示して FoxyProxy の設定ファイルをダウンロードします。(徳丸本2-6)
FoxyProxy を Firefox に導入して、ダウンロードした FoxyProxy の設定ファイルを読みこませます。(徳丸本2-6)
本稿では徳丸本2-4にある「hosts ファイルの編集」をしないので、この時点で example.jp
などの名前解決はされません。
つまり、この時点でブラウザで http://example.jp/
を表示しようとしても名前解決ができずにエラーになります。
最後まで本稿の手順を実施して下さい。
7: OWASP ZAP を起動する
ブラウザ(Firefox 以外でもよい)で http://localhost:8080/zap
を表示して(/zap
を忘れない) OWASP ZAPを起動します。
この操作は実習環境を起動する docker compose up -d
ごとに毎回必要となります。
OWASP ZAP を起動することで ZAP の 58888 ポートが有効になります。
これにより FoxyProxy での接続ができるようになります。
8: Firefox で http://example.jp/
を表示する
Firefoxで http://example.jp/
を表示させることができれば完了です。
本稿の手順の範囲では Firefox でなければ http://example.jp/
を名前解決できません。他のブラウザで http://example.jp/
を表示しようとするとエラーになります。
example.jp
などの名前解決は、Firefox からプロキシとして指定されている zap
コンテナを経て apache
コンテナに到達し、実際の名前解決は docker-compose.yml
の aliases
に従っておこなわれます。
9: Firefox のトータルクッキー保護の設定を実施する
Firefox で http://trap.example.com/firefox_tcp.html
を表示します。(http://example.jp/
の冒頭にリンクがあります)
ページの案内に従ってトータルクッキー保護を無効化します。
普段の実習環境の起動と終了
初回の実施で1から9まで完了すると、次回からは以下の3ステップで実習環境が起動します。
-
docker compose up -d
を実行する。(数秒) - ブラウザ(Firefox 以外でもよい)で
http://localhost:8080/zap
を表示する。(10秒程度) - Firefoxで
http://example.jp/
を表示する。(すぐ)
実習環境を終了する時は、可能な限り下記を実行します。
- Firefox の
http://example.jp/
などを閉じる。 -
http://localhost:8080/zap
を閉じる。 -
docker compose down
を実行する。(10秒程度)
実習環境の動作がおかしくなったと感じたら docker compose down
と docker compose up -d
をこの順に実行して Docker 環境を再起動してみます。