ヤマザキの地球偵察記録

ヤマザキさんの個人的な記録・備忘録です。

攻撃対象マシンの構築

vagrantの設定がいろいろ間違っていたので修正しました(2017/05/31 )

脆弱性を突く攻撃を試験的に行うためのマシンを構築する。 仮想マシンの構築はVirtualBoxVagrantを用い、仮想マシン内部の環境構築についてはAnsibleを用いて行う。

攻撃の種類毎に仮想マシンを立ち上げて設定するのも面倒だから、vagrantプラグインsaharaを使って仮想マシンの初期の状態を保存しておいて、攻撃実験が終わったらロールバックして仮想マシンを初期状態に戻す。

  1. 仮想マシン構築(初期状態、状態を保存)
  2. Ansibleで脆弱性のある環境を構築(攻撃毎に内容の違う環境を構築)
  3. 脆弱性を突いた攻撃実験
  4. vagrantプラグインsaharaで仮想マシンの状態を初期状態にロールバック

こんな感じ。

ってことで、まずは仮想マシンの構築からやっていこう。

環境

仮想マシン一覧

  • 192.168.32.101(vulvm01)
  • 192.168.32.102(vulvm02)

手順

仮想マシンの準備

作業用フォルダを作成する。 基本的にこのフォルダ以下で作業を行う。

$ mkdir ~/vulvm

vagrantのbox追加する。

$ vagrant box add centos-6.8 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.8/vagrant-centos-6.8.box

vagrantの初期化をする。

$ vagrant init centos-6.8

Vagrantfileを編集する。

$ emacs ~/vulvm/Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos-6.8"

  config.vm.define "vulvm01" do |server|
    server.vm.hostname = "vulvm01"
    server.vm.network "private_network", ip: "192.168.32.101"
  end

  config.vm.define "vulvm02" do |server|
    server.vm.hostname = "vulvm02"
    server.vm.network "private_network", ip: "192.168.32.102"
  end
end

公開鍵認証方式で、ホスト名指定してパスワードなしでログインできるようにする。 vagrant ssh使ってログインするとログインするまでに少し時間がかかるから、公開鍵認証方式にしてssh vulvm01みたいにログインする方がよいよい。

$ emacs ~/.ssh/config

Host vulvm01
  HostName 192.168.32.101
  User vagrant
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile ~/vulvm/.vagrant/machines/vulvm01/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

Host vulvm02
  HostName 192.168.32.102
  User vagrant
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile ~/vulvm/.vagrant/machines/vulvm02/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL%

仮想マシンを起動する。 以下のコマンドだとvulvm01とvulvm02の2台が起動する。 どちらか一方を起動したい場合はvagrant up vulvm01のように引数に仮想マシン名(config.vm.defineで定義した名称)を渡してあげる。

$ vagrant up

これで仮想マシンの設定はおっけー。 次はAnsibleの設定するよ。

Ansible

Ansibeプロビジョニング対象ホスト定義フォルダ、ファイルを設置する。

$ mkdir ~/vulvm/inventory
$ emacs ~/vulvm/inventory/hosts

[test1]
vulvm01

[test2]
vulvm01
vulvm02

Playbook設置フォルダ、ファイルを設置する。

$ mkdir ~/vulvm/provisioning
$ emacs ~/vulvm/provisioning/test.yaml

- hosts: test1
  become: yes
  user: vagrant
  tasks:
     - name: ホスト名を取得する
       shell: hostname

テスト

仮想マシンとAnsibleの準備が整ったので、試しにテスト用のPlaybookファイルを走らせてみる。

$ ansible-playbook -i inventory/hosts provisioning/test.yaml

PLAY [test1] *******************************************************************

TASK [setup] *******************************************************************
ok: [vulvm01]

TASK [get hostname] ************************************************************
changed: [vulvm01]

PLAY RECAP *********************************************************************
vulvm01 : ok=2 changed=1 unreachable=0 failed=0

failed=0となっており、特に問題なく実行出来るはず。

仮想マシンを使い終わったら以下のコマンドで停止しよう。

$ vagrant halt

次回からはこの仮想マシンと、攻撃毎に個別に用意したPlaybookファイルを用意する。