徳丸本の環境構築を楽にするツールをAnsibleとシェルで作ってみた


体系的に学ぶ安全なWebアプリケーションの作り方 第2版(通称徳丸本)はWebアプリケーションのセキュアコーディングについて体系的にまとめられたバイブル的な書籍です。実際に脆弱性を体験できる豊富な演習も有り、実際に体験しながら学べる点も素晴らしい書籍です。ただ、演習の環境構築が煩雑な作業であり、手間が掛かります。加えて、FireFoxにアドインをインストールして利用する為、出来れば演習専用環境を構築したいと思いました。本記事では、RedHatが開発している環境構築自動化を実現するOSSのAnsibleとシェルを用いて、適当なVM上に環境構築が出来るツールを開発したので紹介したいと思います。

自動化出来るプロセスがどれだけ有るか確認

徳丸本の演習環境の構築方法は書籍の第2章で解説されています。この構築方法のうち全てが自動化可能という訳ではありません。自動化の可否を以下の表にまとめました。

行程 自動化の可否
必要なソース・VMファイルのダウンロード 1
Firefoxのインストール 2
VirtualBoxのインストール
ホストネットワークマネージャーの設定(VirtualBox)
VMのインポート(VirtualBox)及び設定
hostsファイルへのFQDNの登録
OWASP ZAPのインストール
OWASP ZAPの初期設定 不可
FoxyProxy-Standardのインストール 不可

今回はUbuntuがインストールされているVMに環境構築を行うことを想定してツールを構築した為、Firefoxのインストールはツールでは行いません。故に7割5分の行程は自動化可能だということが上の表から分かります。

環境構築支援ツールの実装

ツールの実装は、実行部はシェルで実装し、内部でAnsibleが実行される様にしています。ソースは筆者のGitLabに置いています。自由にダウンロードしてお使い頂けます(MITライセンス)。構築マニュアルも置いています。

build.sh(実行部)

#!/bin/bash

apt install -y ansible wget
ansible-playbook -i inventory playbook.yml

playbook.yml(2021/5/19改訂)

- hosts: localhost
  environment:
    zap_ver: 2.10.0
  become: yes
  tasks:
   - name: Download sources
     shell: cat auth.txt | xargs -n 2 sh -c 'wget -P /home/wasbook/ --http-user=$0 --http-password=$1 https://wasbook.org/download/wasbook.zip' && \
            unzip -od /home/wasbook/wasbook /home/wasbook/wasbook.zip warn=False && \
            chown -R wasbook /home/wasbook/wasbook warn=False && \
            chgrp -R wasbook /home/wasbook/wasbook warn=False

   - name: Download VM image file
     shell: cat auth.txt | xargs -n 2 sh -c 'wget -P /home/wasbook/ --http-user=$0 --http-password=$1 https://wasbook.org/download/wasbook.ova' && \
            chown wasbook /home/wasbook/wasbook.ova warn=False && \
            chgrp wasbook /home/wasbook/wasbook.ova warn=False

   - name: Install Open JDK 11
     apt:
        name: openjdk-11-jdk

   - name: Install OWASP ZAP
     shell: wget https://download.opensuse.org/repositories/home:/cabelo/xUbuntu_18.04/amd64/owasp-zap_{{ ansible_env.zap_ver }}_amd64.deb -P /home/wasbook/ warn=False && \
            dpkg -i /home/wasbook/owasp-zap_{{ ansible_env.zap_ver }}_amd64.deb

   - name: Register hosts
     shell: echo "192.168.56.101 example.jp api.example.net trap.example.com" >> /etc/hosts

   - name: Add oracle vbox 2016 keys
     shell: wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -  warn=False && \
            add-apt-repository "deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian bionic contrib"

   - name: Install Virtual Box
     apt:
       name: virtualbox-6.0
       update_cache: yes

   - name: Change HOME 
     shell: export HOME=/home/wasbook

   - name: Import VM
     shell: vboxmanage import --options keepallmacs /home/wasbook/wasbook.ova && \
            vboxmanage hostonlyif create && \
            vboxmanage modifyvm wasbook --nic1 nat && \
            vboxmanage modifyvm wasbook --nic2 hostonly && \
            vboxmanage modifyvm wasbook --hostonlyadapter2 "vboxnet0"
     become_user: wasbook

   - name: Restore HOME  
     shell: export HOME=/root
inventory
[localhost]
127.0.0.1 ansible_connection=local

inventoryファイルを修正することでリモートでVM上に環境構築することも可能です。

VM上で構築する時の留意事項

VM上で構築する時にOS毎にお薦めのハイパーバイザーを記載しておきます。

Mac

  • VMware Fusion(商用ソフト)
  • (2020/8/24追記) 次期バージョンのFusion 12からFusion Playerという個人利用は無料で利用出来るバージョンが追加されます。(参考)

Windows

Mac向けハイパーバイザー(仮想化ソフト)を比較してみたで取り上げましたが、Mac用ハイパーバイザーのParallels Desktopの通常版ではNested Virtualizationに対応していない為、本ツールは正しく動作しません。

Oracle VirtualBoxは動作が重いため演習実行環境構築用途には不向きだと思います。(あくまで筆者の意見)

まとめ

徳丸本の演習環境の構築を支援するツールをAnsibleとシェルで実装してみました。実際にUbuntuのインストールされたVM上で実行した所、環境構築がスムーズに実行出来ました。本ツールはMITライセンスです。改良案の提案、Issueの発行、プルリクエストは大歓迎です。

Reference

Software Design 2018年12月号
https://docs.oracle.com/en/virtualization/virtualbox/6.0/user/


  1. ソースやVMファイルのダウンロードには書籍内の認証情報が必要となります。今回実装したツールも認証情報が必要となります。 

  2. VMにLinuxを利用する場合はインストール不要