LoginSignup
9
8

More than 1 year has passed since last update.

徳丸本の実習環境を全部 Docker 化してみた

Last updated at Posted at 2023-03-01

概要

「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践」(徳丸本)の実習環境を OWASP ZAP まで含めて全て Docker で動かします。

ホストに Java などをインストールする必要が無くなります。(必要なのは Firefox と Docker のみ)

OWASP ZAP の設定変更も Docker の構成ファイルに含めているので、手動で OWASP ZAP の設定を変更する必要が無くなります。

本稿の手順を完了すると、以下の3ステップで実習環境が起動します。

  1. docker compose up -d を実行する。(数秒)
  2. ブラウザ(Firefox 以外でもよい)で http://localhost:8080/zap を表示する。(10秒程度)
  3. 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.ymlaliases に従っておこなわれます。

9: Firefox のトータルクッキー保護の設定を実施する

Firefox で http://trap.example.com/firefox_tcp.html を表示します。(http://example.jp/ の冒頭にリンクがあります)

ページの案内に従ってトータルクッキー保護を無効化します。

普段の実習環境の起動と終了

初回の実施で1から9まで完了すると、次回からは以下の3ステップで実習環境が起動します。

  1. docker compose up -d を実行する。(数秒)
  2. ブラウザ(Firefox 以外でもよい)で http://localhost:8080/zap を表示する。(10秒程度)
  3. Firefoxで http://example.jp/ を表示する。(すぐ)

実習環境を終了する時は、可能な限り下記を実行します。

  1. Firefox の http://example.jp/ などを閉じる。
  2. http://localhost:8080/zap を閉じる。
  3. docker compose down を実行する。(10秒程度)

実習環境の動作がおかしくなったと感じたら docker compose downdocker compose up -d をこの順に実行して Docker 環境を再起動してみます。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8