「体系的に学ぶ 安全なWebアプリケーションの作り方」の仮想環境をVagrantで動かす


2015年 12月 02日

「体系的に学ぶ 安全なWebアプリケーションの作り方」について

体系的に学ぶ 安全なWebアプリケーションの作り方」(通称徳丸本)はWebアプリケーションの脆弱性や攻撃技法とその対策についての定番中の定番と言える書籍です。

「体系的に学ぶ 安全なWebアプリケーションの作り方」表紙

書籍には付録としてVMWareのディスクイメージを収録したCD-ROMが付属し、仮想環境で脆弱性を試すことができます。

また、電子版ではディスクイメージのダウンロードURLが記載されています。

Webアプリケーション開発にMacを使っていて、VMWareではなくVirtualBoxやVagrantを使っている人も多いのではないでしょうか?

ここではOS XでVagrantを使って通称徳丸本の仮想環境を動かす方法を解説します。

(以前[Gistに書いたもの](https://gist.github.com/eyasuyuki/4975a91abc3e2b140f0a 「体系的に学ぶ 安全なWebアプリケーションの作り方」の仮想環境をVagrantで動かす)に説明を加えてブログ記事にしました)

前提条件

  • OS X 10.11.1
  • VirtualBox
  • Vagrant

VagrantやVirtualBoxがインストールされていない場合はインストールしておいてください。

Vagrant, VirtualBoxのインストール

homebrewをお使いならインストール方法は以下の通りです。

brew tap caskroom/cask
brew tap caskroom/versions
brew install brew-cask
brew cask install virtualbox
brew install vagrant

仮想ディスクイメージの入手またはダウンンロード

実習環境の仮想ディスクイメージを準備しましょう。

書籍版は付録CD-ROMからコピーしてください。

電子書籍版は2ページに書かれているURLからダウンロードしてください。

徳丸本2ページ

仮想ディスクイメージとサンプルコードの展開

入手した仮想ディスクイメージやサンプルコードを展開しましょう。

電子書籍版の.zipフィルのパスワードは、ダウンロードURLと同じく電子書籍版の2ページに書かれています。

unzip WASBOOK.zip

VMWareイメージをVirtualBoxイメージに変換する

OS Xのターミナルから以下を実行してVMWareイメージをVirtualBoxイメージに変換します。

cd WASBOOK
Vboxmanage clonehd --format VDI wasbook.vmdk wasbook.vdi

wasbook.vdiが生成されます。

参考文献) http://dackdive.hateblo.jp/entry/2014/01/14/012255

VirtualBox VMを生成する

wasbook.vdiをもとに、VirtualBoxにVMを追加し、起動するように設定してみましょう。

OS Xのターミナルから以下を実行します。

VBoxManage createvm --name WASBOOK --register
VBoxManage modifyvm WASBOOK --memory 1024 --acpi on --nic1 nat
VBoxManage modifyvm WASBOOK --ostype Linux_64
VBoxManage storagectl WASBOOK --name "IDE Controller" --add ide
VBoxManage modifyvm WASBOOK --hda wasbook.vdi

参考文献) http://blog.livedoor.jp/sonots/archives/41996329.html

eth0が識別されない現象を回避する

VirtualBoxに”WASBOOK”という名前でVMが追加されましたが、
このまま起動してもeth0が識別されません。

この現象を回避するにはVirtualBoxからVMを起動し、root権限で以下を実行してください。

VirtualBoxからの起動
仮想環境へのログイン

rootユーザーのログインパスワードは通称徳丸本の本文中に書かれています。

通称徳丸本のrootパスワード

rootユーザーとしてログインしたら、以下のコマンドを実行してください。

ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules

仮想環境をVirtualBoxからシャットダウンして再起動するとeth0が識別されるようになります。

参考文献) http://qiita.com/tarr1124/items/8276e609c0f7cdec79e7

vagrantユーザーを登録する

VMをVagrantで使えるようにするための設定を行います。
引き続きVirtualBox上のrootユーザー権限で以下のコマンドを実行します。

adduser vagrant
passwd vagrant    # パスワードもvagrant
visudo            # vagrant ALL=(ALL) NOPASSWD:ALL を追加

参考文献) http://blog.livedoor.jp/sonots/archives/41996329.html

vagrantユーザーの鍵を登録する

vagrant sshコマンドで仮想環境にログインできるようにするために、仮想環境のvagrantユーザー配下にvagrantの公開鍵を登録します。

引き続きVirtualBox環境のroot権限で以下のコマンドを実行してください。

apt-get install curl
sudo su - vagrant
mkdir .ssh
curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub > .ssh/authorized_keys
chmod 0755 .ssh
chmod 0644 .ssh/authorized_keys

参考文献) http://blog.livedoor.jp/sonots/archives/41996329.html

ここまで設定を終えたら、VirtualBoxから”WASBOOK”仮想環境をシャットダウンしてください。

Vagrant boxを生成する

Vagrantにboxを登録するために、OS X側に戻って以下のコマンドを実行してください。

vagrant package --base WASBOOK --output WASBOOK.box
vagrant box add WASBOOK WASBOOK.box
vagrant init WASBOOK # Vagrantfile ができる。
vagrant up

参考文献) http://blog.livedoor.jp/sonots/archives/41996329.html

Vagrant boxが起動したでしょうか?

プライベートネットワークを有効にする

このままだとHTTP経由で仮想環境に接続できないので、プライベートネットワークを有効にして仮想環境にIPアドレスを付与します。

OS XでVagrantfileを編集してプライベートネットワークを有効にします。

vi Vagrantfile

以下の行の行頭の#を削除し、コメントを解除します。

config.vm.network "private_network", ip: "192.168.33.10"

VMを再起動する

Vagrantfileの編集が終わったらVMを再起動して変更を反映しましょう。

vagrant reload

pingコマンドで疎通を確認してみましょう。

ping 192.168.33.10

/etc/hostsファイルにテスト用ホスト名を追加する

通称徳丸本の仮想環境にアクセスするためのホスト名を/etc/hostsファイルに追加しましょう。

OS X環境のroot権限で/etc/hostsファイルに以下を追加します。

192.168.33.10    example.jp  trap.example.com

ブラウザでアクセスしてみる

ブラウザで通称徳丸本の仮想環境にアクセスしてみましょう。

http://example.jp/
通称徳丸本仮想環境トップページ

通称徳丸本ではWindows環境でFiddlerを使ってリクエスト/レスポンスをダンプしたり、hidden要素の内容を書き換えてPOSTしたりしています。

OS X環境では、FiddlerがなくてもFirefoxの開発者コンソールを使えばこれらが可能になります。