体系的に学ぶ安全な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ライセンス)。構築マニュアルも置いています。
#!/bin/bash
apt install -y ansible wget
ansible-playbook -i inventory playbook.yml
- 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
[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/