Windows
Linux
Ubuntu
sandbox
Cuckoo

Cuckoo Sandbox on KVM(ホスト編)

More than 3 years have passed since last update.

マルウェアの動的解析を行おうとしてCuckoo Sandboxのセットアップを行おうと思ったのですが、壮大にハマったのでやり方をメモしておきます。

基本はVirtualBoxだと思いますが、今回はKVMについて書きます。
VirtualBoxは構築済みなので、暇な時に書きたいと思います。
とりあえずUbuntu 14.04上にKVMを構築し、Windows 7のVMをその上で動かし、Windows 7でマルウェアを動かす構成にしたいと思います。

このパッケージはこれ入れれば依存関係で勝手に入るよ、とかあるとは思いますが検証している暇がないので必要な物は片っ端から入れてあります。

環境

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

参考

Cuckoo Sandboxの設定

ホストの設定

まずはホストOSの設定をしていきます。
基本は公式ドキュメントに従いますが、公式通りにやっても全くうまく行かなかったので、出来なかった部分を直したものを書いておきます。

pythonのインストール

Ubuntuを普通に入れたらpythonは入っているとは思いますが、入っていない時のため。
python 2.7が推奨のようです。
同時にpythonのパッケージ管理ツールのpipもインストールしておきます。

$ sudo apt-get install python
$ python --version
Python 2.7.6
$ sudo apt-get install python-pip

SQLAlchemyとPython BSONのインストール

必須のライブラリを入れます。
ここでpython-bsonを入れるように書いてありますが、入れるとcuckoo実行時にWarningが出てうまくMongoDBに保存できませんでした(Cuckooでpymongoがimportできない)。
pymongoを入れるときにインストールされるbsonを使わないと駄目なようで、先にインストールしていると怒られます。
なのでここではpython-bsonはインストールしないほうが恐らく良いです。
後で不具合が起きたら上記の記事の内容を試してみてください。

$ sudo apt-get install python-sqlalchemy (python-bson)

moduleで必要なライブラリ群のインストール

apt-get

python-magic, python-dpkt and python-libvirtに関してはapt-getでインストールし、残りはpipでインストールします。

$ sudo apt-get install python-magic python-dpkt python-libvirt

pip

残りはpipでインストールしますが、ここで注意があります。
ドキュメントのようにmaecをインストールしようとするとエラーが出ます。
それに関しては以下に詳しく書きました。
pipでmaec 4.0.1.0をインストールしようとするとエラーが出る
ここでは詳細は省いてmaecのインストール手順だけ書いておきます。

#python-lxmlだけでいいかも
$ sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev python-lxml
#cyboxを入れる
$ wget https://github.com/CybOXProject/python-cybox/archive/v2.0.1.4.tar.gz
$ tar zxvf v2.0.1.4.tar.gz
$ cd python-cybox-2.0.1.4/
$ sudo python setup.py install
#maecを入れる
$ sudo pip install maec==4.0.1.0

これでmaecがインストールされるので残りのライブラリをインストールします。

$ sudo pip install jinja2 pymongo bottle pefile django chardet

Pydeepのインストール

Pydeepをソースからコンパイルしてインストールしたら、cuckoo実行時に

WARNING: Unable to import pydeep (install with `pip install pydeep`)

と言われて怒られたので、pipでインストールします。
予め必要そうなパッケージと他にも必要なパッケージをインストールします。

$ sudo apt-get install ssdeep python-pyrex libfuzzy-dev subversion
$ sudo pip install pydeep

Yaraのインストール

yaraとyara-pythonもあったほうが良いのでインストールしますが、ここで盛大にハマりました。
Cuckoo Sandboxの実行でYaraのエラーが出る
これも詳細は上記を参考にしてもらうとして、コマンドだけ記載しておきます。

#必要なライブラリなど
$ sudo apt-get install libtool automake libjansson-dev libmagic-dev
#yaraの最新版を入れてコンパイルする
$ wget https://github.com/plusvic/yara/archive/v3.1.0.tar.gz
$ tar zxvf v3.1.0.tar.gz
$ cd yara-3.1.0/
$ ./bootstrap.sh
$ ./configure --enable-cuckoo --enable-magic
$ make
$ sudo make install
#yara-pythonをコンパイルする
$ cd yara-python/
$ python setup.py build
$ sudo python setup.py install
#ldconfigする
$ sudo su
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
# exit

tcpdumpのインストール

ネットワークをモニタリングするためにtcpdumpが必要です。

$ sudo apt-get install tcpdump

tcpdumpは通常root権限が必要ですが、Cuckooをrootで動かしたくない場合は権限を変更します。

$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

以下のコマンドで結果を確認します。

$ getcap /usr/sbin/tcpdump
/usr/sbin/tcpdump = cap_net_admin,cap_net_raw+eip

MongoDBのインストール

これはオプションなのですが、解析結果をMongoDBに入れることが出来ます。
便利なので、インストールしておくことにしておきます。
#実はpymongoは既に上でpipで入れてたりします。

$ sudo apt-get install mongodb

Volatilityのインストール

詳細はVolatilityのインストールに書きましたので、ここではコマンドだけ書いておきます。

$ sudo apt-get install pcregrep libpcre++-dev

$ sudo pip install pycrypto

$ wget https://distorm.googlecode.com/files/distorm3.zip
$ unzip distorm3.zip
$ cd distorm3/
$ python setup.py build
$ sudo python setup.py build install

$ wget https://volatility.googlecode.com/files/volatility-2.3.1.tar.gz
$ tar zxvf volatility-2.3.1.tar.gz
$ cd volatility-2.3.1/
$ python setup.py build
$ sudo python setup.py build install

Cuckoo用ユーザを作成

Cuckooではcuckooというユーザで実行するので、そのユーザを作成します。

$ sudo adduser cuckoo
$ sudo usermod -G libvirtd cuckoo

Cuckooのインストール

ついに念願のCuckooをインストールします。

$ sudo apt-get install git
$ git clone git://github.com/cuckoobox/cuckoo.git

まとめ

これでホスト側の設定は終わりです。
ホスト側でもかなり大変なのですが、自分はこの手順で何回も構築に成功したので、今後は楽になりそうです。
ただ、Cuckooを使うためにはこれだけでは足りず、今度はゲスト側の設定が必要になります。
それは次回(Cuckoo Sandbox on KVM(ゲスト編))とします。