マルウェアの動的解析を行おうとして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(ゲスト編))とします。