9
9

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-13

体系的に学ぶ安全な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

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

:warning: 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を利用する場合はインストール不要 

9
9
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
9