Cuckoo Sandbox on KVM（ゲスト編）

前回、Cuckoo Sandboxのホスト構築についての記事を書きました。
本記事はその続きで、ゲスト編です。
VM側の設定をしていきます。ホストほど苦労はしません。

#環境
- ホストOS
 - Ubuntu 14.04
- ゲストOS
 - Windows 7
- KVM
 - virsh 1.2.2
- cuckoo
 - 1.2-dev


#参考
- [Cuckoo Sandbox Book](http://docs.cuckoosandbox.org/en/latest/)
- [マルウェア解析システム(Cuckoo 説明編)](http://katana4kun.blogspot.jp/2013/11/cuckoo.html)

#前提
- ホストの構築は完了している
- Windowsのイメージやライセンスキーを持っている

#ゲストの設定
今回はVMとしてWindows 7を用います。
予めISOなどは入手してホストマシン上に置いておいて下さい。

##ネットワークの設定
VMを作成する前に、ネットワークの設定を行います。
KVMではインストール時に`default`というネットワークが作成されているはずです。
普通にVMを作成すれば`defaut`に所属するはずです。
このネットワークではDHCPによってVMにIPアドレスが付与されます。
しかし、Cuckooでは固定IPアドレスじゃないと色々と不具合が生じます。
なので、KVMに新たにネットワークを作成しようと思います。
[KVMでホストオンリーネットワークを作る](http://qiita.com/knqyf263/items/6865d0a61a23cb359476)の最後に書いたように、固定IPアドレスのNATネットワークを作成しておきます。

```console
$ virsh net-dumpxml hostonly0
<network connections='1'>
  <name>hostonly0</name>
  <uuid>17c993d1-f917-47c8-8cf8-3edbcc2605b6</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='hostonly0' stp='on' delay='0'/>
  <mac address='52:54:00:d6:87:cc'/>
  <domain name='hostonly0.local'/>
  <ip address='192.168.124.1' netmask='255.255.255.0'>
  </ip>
</network>
```
このようになっていれば設定はOKです。
一応startしておきます。

```console
$ virsh net-start hostonly0
```
既に起動していると言われれば問題無いです。


##イメージの作成
VMのイメージを作成する上で注意があります。
Cuckooで利用するためにはsnapshotが作成できる必要があります。
マルウェアを動作させたあと、元の状態に戻すためです。
KVMでは`qcow2`でsnapshotの作成が可能なので、VMを作成するときに`qcow2`を指定しなくてはなりません。
今回は`virt-manager`を使います。
まず、virt-managerを起動して下さい。分からない人は[KVMでVMのセットアップ方法](http://qiita.com/knqyf263/items/e47d77adad797eae98a0)とかに書いてあります。
起動すると以下の様な画面が開かれます。

![kobito.1413271975.325882.png](https://qiita-image-store.s3.amazonaws.com/0/56222/c8bafbb5-13eb-224e-b2f9-4ff7eb5edb5a.png "kobito.1413271975.325882.png")

上部で「New」をクリックします。
次に適当なVM名を指定します（ここではWindows7）。
予めISOを入手してあるので、「Local install media(ISO image or CDROM)」を選びます。

![kobito.1413967504.267005.png](https://qiita-image-store.s3.amazonaws.com/0/56222/2b5ccd9a-cee6-4768-7440-c1d41e74ef3e.png "kobito.1413967504.267005.png")

「Use ISO image」の「Browse」からローカルのISOを指定します。
ついでに「OS type」をWindowsとかにしておきました。

![kobito.1413967653.106948.png](https://qiita-image-store.s3.amazonaws.com/0/56222/2198d4b2-cacc-1aa0-b0ec-1c47d6690b70.png "kobito.1413967653.106948.png")


メモリやCPUの数などを指定したあと、storageの設定画面になりますが、ここで「Select managed or other existing storage」を選び、「Browse】を押します。

![kobito.1413967745.448786.png](https://qiita-image-store.s3.amazonaws.com/0/56222/f10f39c9-59b1-1f4a-b1bb-de4e8512f41e.png "kobito.1413967745.448786.png")

その後、下にある「New Volume】ボタンを押します。
適当なイメージ名を指定し（ここではWindows7.img）、Formatを`qcow2`にします。
これが重要です。
あとはサイズの指定ですが、今回は20GBとしました。

![kobito.1413967800.419717.png](https://qiita-image-store.s3.amazonaws.com/0/56222/c9bad799-f203-129e-94aa-089ab477b7fc.png "kobito.1413967800.419717.png")


次の画面に進んで「Advanced options」のところを開き、ネットワークの設定を変えます。
今回の場合は`hostonly0`というネットワークを指定すればよいです。
正しくNATになっているか確認して下さい（Storageとかは8GBになってますが無視して下さい）。
![kobito.1413968613.704829.png](https://qiita-image-store.s3.amazonaws.com/0/56222/aba4d2fd-c246-dbb4-2030-6484ed197534.png "kobito.1413968613.704829.png")

これで「Finish」を押せば完了です。
その後、「Run」を押してVMを起動し、普通にWindowsのインストールを行って下さい。

#Windowsの設定
インストールが終わったらWindowsの設定を行っていきます。
##固定IPアドレスを振る
DHCPでアドレスを振らないように設定したので、自分でアドレスを振ります。
IPアドレスは192.168.124.2~254ならなんでも良いです。
DNSですが、プロバイダなどのDNSサーバを指定しても良いですし、何でも良いですが、今回は分かりやすく8.8.8.8としてあります。
![kobito.1413968849.680418.png](https://qiita-image-store.s3.amazonaws.com/0/56222/2141d94a-4d27-9691-91a4-e33b437239c5.png "kobito.1413968849.680418.png")


##Windows FirewallとWindows Updatesの無効化
そのままですが、FirewallとUpdateを切ります。
![kobito.1413969425.756773.png](https://qiita-image-store.s3.amazonaws.com/0/56222/6614902e-0d93-c377-440d-bf4d072bcf00.png "kobito.1413969425.756773.png")
このように両方オフにします。

##PythonとPILのインストール
Pythonをインストールします。
http://www.python.org/getit/
上記サイトからPython2.7をインストールして下さい。

PIL(Python Image Library)はスクリーンショットを撮る際に必要なので下記サイトからインストールして下さい。
http://www.pythonware.com/products/pil/
なお、Windowsの64bit版を使う場合、上記のインストーラだと失敗します。
非公式ですが、[Unofficial Windows Binaries for Python Extension Packages](http://www.lfd.uci.edu/~gohlke/pythonlibs/)から64bit版のインストーラを落とすことが出来ます。

##共有フォルダの作成
どうやら今は共有フォルダなくても動くようなのですが、あると便利なので作成しておきます。
VirtualBoxだと簡単なのですが、KVMだと少し苦戦したのでSambaを使いました。
[KVM上のWindowsとホストOSでフォルダを共有する。](http://qiita.com/knqyf263/items/4706cac7a5ff9d2e3faf)

##agent.pyの実行
agent.pyをWindows上で実行する必要があります。
これはホストのcuckooディレクトリに存在しています。
私はホームディレクトリ直下にcuckooをcloneしたので、
`/home/cuckoo/cuckoo/agent/agent.py`
にありました。
これを先ほどの共有フォルダ経由でWindows上に保存します。
今回はDesktopに置きました。

保存できたら、コマンドプロンプトを管理者権限で実行します。
管理者権限なのは大事です。これをし忘れたせいでしばらくハマりました。
起動したら、agent.pyを実行します。
![kobito.1413969736.553426.png](https://qiita-image-store.s3.amazonaws.com/0/56222/8064ce0e-9352-9734-446f-c774300600c3.png "kobito.1413969736.553426.png")
画像のようにListenし始めたら成功です。

##スナップショットの作成
この状態でスナップショットを作成します。
ホストマシンにログインして、以下のコマンドを打ちます。

```shell-session
$ virsh snapshot-create "Windows7"
Domain snapshot 1413969823 created
$ virsh snapshot-list "Windows7"
 Name                 Creation Time             State
------------------------------------------------------------
 1413969823           2014-10-22 18:23:43 +0900 running
```
`snapshot-list`で作成されているのを確認したらOKです。

これで全設定は終わりです。

次の[Cuckoo Sandbox on KVM（実行編）](http://qiita.com/knqyf263/items/a15ab44c8811dae7cdc5)で最後です。