トップ 最新

ただのにっき

2013-05-13(月) [長年日記]

Metasploitable2をVagrant化する

Metasploitを使った演習用の攻撃対象であるMetasploitableを動かすことにしたのだけど(お仕事)、攻撃を受けたあと復旧させたりするのを楽にするために、せっかくなのでVagrantを使えるようにしよう(そしていろいろハマった)。

配布されているファイルはVMware用の仮想マシンなので、これをVirtualBoxに変換してやるそのものズバリの記事があったので参考にしつつ、Windows上で:

D:\> VBoxManage clonehd Metasploitable.vmdk metasploitable2.vdi -format VDI

Metasploitable2はUbuntuベースのようなので、VirtualBoxでVMを作成:

これで起動するのでID:msfadmin、PW:msfadminでログインし、こないだ参考にしたVeeWeeを使わずWheezyのVagrantのBoxを作るを参照しつつ基本的な設定をする。いくつかハマりどころ:

  • ユーザvagrantは手動で作成。/etc/groupにあるsudoグループに追加
  • visudoで%sudoの設定も追加(sudoが古いのか「(ALL:ALL)」が通らないので「(ALL)」で
  • rubyが1.8なのはしょうがないのであきらめる。Puppet/Chefも使わないで済ます方向

あと、GuestAdditionsは自力で入れる (ちゃんとMetasploitable2に合ったヘッダを指定してやらないといけない):

$ sudo apt-get install build-essential dkms linux-headers-2.6.24-16-server
  (VirtualBoxのメニューの[デバイス]→[GuestAdditionsのインストール]を選択してから)
$ sudo mount /media/cdrom
$ sudo sh -C /media/cdrom/VBoxLinuxAdditons.run

シャットダウンしてやって、Boxファイルに変換:

D:\> vagrant package --base vagrant-metasploitable2

できあがったpackage.boxをvagrantに追加:

D:\> vagrant box add metasploitable2 package.box

あとはvagrantの環境を作るだけ:

D:\> md metasploitable2
D:\> cd metasploitable2
D:\metasploitable2> vagrant init metasploitable2

Vagrantファイルはこんな感じ。public_networkにはIPアドレスを指定できないようなので(ホント?)、provisionであとから実行する。「config.vm.provision」には「shell」も指定できると知ったのでPuppet抜きで:

Vagrant.configure("2") do |config|
  config.vm.box = "metasploitable2"
  config.vm.network :public_network
  config.vm.provision :shell do |shell|
    shell.inline = "/sbin/ifconfig eth1 192.168.0.4 netmask 255.255.255.0 up"
  end
end

あとは実行するだけ:

D:\metasploitable2> vagrant up

実際は当初、こんなエラーがでていたのだけど:

The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` v-root /vagrant

これがGuestAdditionsが正しく入っていないのが原因だったので、上記のとおりにやればちゃんと動くはず。それでもダメなときは「/etc/init.d/vboxadd setup」を実行するというTipsもあるらしい(参考: Vagrantでmountエラーで、フォルダがShareされない)。

これで、攻撃を受けて汚染されたマシンもvagrant destroy一発で消し去ってまっさらな状態にできるぜ。

ところでユーザ「vagrant」が万能すぎるんだけど、これをリモートからログインできなくするようなセオリーはあるんだろうか。