2013年11月16日土曜日

マルウェア解析システム(Cuckoo インストール編)

★Cuckoo インストール★

それでは前回説明した環境で、Cuckoo をインストールしていきます。手順としては次の通りです。
  1. Ubuntu で必要なパッケージのインストール(VirtualBox 他)と設定
  2. winxp の設定
  3. VirtualBox でスナップショットを取る
  4. Cuckoo 設定
まず Ubuntu で Cuckoo を動作させるために必要なパッケージをひと通りインストールします。この時、VirtualBox もインストールし設定します。次にサンドボックス用の winxp の設定をします。Windows のインストール自体は説明しないので、適当にインストールしてください。各 OS の準備が整ったら、VirtualBox で winxp のスナップショットを取ります。このスナップショットが初期状態となり、マルウェアの解析が実施されます。最後に Cuckoo の設定をします。

下記の説明においてコマンド実行の部分は 斜体 で書きます。

★Ubuntu で必要なパッケージのインストールと設定★

OS のパッチやインストール済みのパッケージは最新の状態にしておきます。
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

どーんとたくさんインストールします。
$ sudo apt-get install -y python
$ sudo apt-get install -y python-sqlalchemy python-dpkt python-jinja2 python-magic mongodb python-pymongo python-libvirt python-bottle python-pefile python-mako git
$ sudo apt-get install -y ssdeep python-pyrex subversion libfuzzy-dev g++ libpcre3 libpcre3-dev
$ sudo apt-get install -y libcap2bin
$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump


続いて、apt-get でインストールできないものをインストールします。とりあえずホームディレクトリにダウンロードしてきていますが、別の場所でも問題ないです。
$ cd ~/
$ svn checkout http://pyssdeep.googlecode.com/svn/trunk/ pyssdeep
$ cd pyssdeep
$ python setup.py build
$ sudo python setup.py install

$ cd ~/
$ wget https://yara-project.googlecode.com/files/yara-1.7.tar.gz
$ tar zxvf yara-1.7.tar.gz
$ cd yara-1.7
$ ./configure && make
$ sudo make install

$ cd ~/
$ wget https://yara-project.googlecode.com/files/yara-python-1.7.tar.gz
$ tar zxvf yara-python-1.7.tar.gz
$ cd yara-python-1.7
$ python setup.py build
$ sudo python setup.py install


次に VirtualBox をインストールします。VirtualBox は現在、バージョン 4.3.2 がリリースされていますが、スナップショットの処理に問題があるようで、このバージョンで Cuckoo が正常に動作しませんでした。そのため1つ前の 4.2.18 をインストールします。

まず VirtualBox のリポジトリを OS に追加します。
$ sudo vi /etc/apt/sources.list
※以下の2行をファイルの最後に追記します。
# Virtual Box
deb http://download.virtualbox.org/virtualbox/debian precise contrib

追加したリポジトリ用の認証鍵を登録します。
$ wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -

リポジトリを更新し、VirtualBox 4.2.18 をインストールします。インストールにはちょっと時間がかかるのでゆっくりお待ちください。
$ sudo apt-get update
$ sudo apt-get install -y virtualbox-4.2


以上でインストール作業は一旦終了です。次に Cuckoo 用のユーザを追加します。アカウントを分けたくないという人は、ユーザ追加をしなくても良いです。後述の設定作業は適宜読み替えてください。
$ sudo adduser cuckoo
$ sudo usermod -G vboxusers cuckoo

$ sudo usermod -G sudo cuckoo

cuckoo アカウントが作成できたら、GUI でログインしてください。もし画面サイズが小さい場合は適度に変更してください。

VirtualBox の設定をします。
左側のランチャーから①Dash home を開き、②検索ボックスに「vir」と入力します。すると③VirtualBox のアイコンが表示されると思うので、クリックし起動します。④ランチャーに追加してもOKです。

VirtualBox と同様にターミナルも起動します。「ter」と打つと Terminal のアイコンが表示されると思います。

VirtualBox 4.2.18用のエクステンションパックをダウンロードします。
$ cd ~/Downloads/
$ wget http://download.virtualbox.org/virtualbox/4.2.18/Oracle_VM_VirtualBox_Extension_Pack-4.2.18-88780.vbox-extpack


ダウンロードが完了したら、エクステンションパックを VirtualBox に適用します。VirtualBoxの画面で、左上のメニューから File → Preferences...を開きます。

左側のメニューから Extensions を選び、次に右側の上の青いダイヤのアイコンをクリックします。

そうするとファイルを選択する画面になるので、先ほどターミナルでダウンロードしたエクステンションパックを選択します。Downloads フォルダに保存されているはずです。

確認画面が出てくるので Install 選択します。するとライセンス条項が表示されます。内容に同意するなら、スクロールバーを一番下まで移動させ I Agree を選択します。

エクステンションパックをインストールするために cuckoo ユーザのパスワードを入力します。一般ユーザ権限ではインストールできないので、sudo グループに所属していないとパスワードを正確に入力してもインストールに失敗します。

インストールに成功すると次のように表示されます。


エクステンションパックの4.2がインストールできているようです。

これで VirtualBox のインストールと設定は終わりです。ここで Cuckoo を Git リポジトリから取ってきておきます。ターミナルを開いて下記のコマンドを実行してください。
$ cd ~/
$ git clone git://github.com/cuckoobox/cuckoo.git

次はサンドボックスとして実行する winxp の設定をします。


★winxp の設定★

サンドボックスとしてどの OS を動かすかは人それぞれなので、ここでは OS のインストールについては説明しません。ただし次の条件を満たしておく必要があります。

  • Guest Additions がインストールされていること。
  • NICが1つ以上あること。(今回は NIC が1つかつ Bridged Adapter で、固定のプライベート IP アドレスを割り当てていること)
  • ホスト OS とゲスト OS 間の共有フォルダがあること。
  • Windows Update が無効になっていること。
  • Firewall が無効になっていること。
  • Python 2.7 がインストールされていること(Cuckoo 0.6の場合)。もちろんパスも通す。
  • Python Image Library(PIL)がインストールされていること。
  • Cuckoo の agent が起動すること(注1)。
たくさん条件がありますが、インストールや設定はどの OS でもそんなに難しくないと思います。わからなかったらググってください。Google is your Friend :)

また必要であれば Microsoft Office や Adobe 製品など、適当なソフトをインストールしておくと、いろんな種類のマルウェア実行が捗るのではないでしょうか。古いバージョンのソフトは Old Appsにまとめられているので、脆弱な環境を作るには都合が良いです。
http://www.oldapps.com/

注1
agent は Python で書かれたプログラムで Cuckoo とサンドボックス間で情報のやりとりに使われます。共有フォルダでもその他の手段でもいいので、Ubuntu の下記の場所にある agent.py を winxp にコピーし起動します。スタートアップに登録し、OS 起動時に自動実行しておくようにするとスマートです。

$ ~/cuckoo/agent/agent.py

なお agent.py を winxp でそのまま実行すると、コマンドプロンプトが開きます。このコマンドプロンプトを開きたく無い場合は、拡張子を「.py」から「.pyw」に変更してください。そうするとプログラムは実行されてもコマンドプロンプトは開かなくなります。


★VirtualBox でスナップショットを取る★

サンドボックスでマルウェアを実行し、解析が終了したら、マルウェアの実行前の状態に戻す必要があります。この状態の管理のために Cuckoo は VirtualBox のスナップショットを使います。

winxp の準備が整ったら、起動している状態で、Ubuntu のターミナルで下記のコマンドを実行します。

$ vboxmanage snapshot "winxp1" take "cuckoo_ready" --pause
$ vboxmanage controlvm "winxp1" poweroff
$ vboxmanage snapshot "winxp1" restorecurrent


winxp1 が VirtualBox 上の winxp の名前です。環境に合わせて変えてください。cuckoo_ready という名前のスナップショットを取っています。


★Cuckoo 設定★

Ubuntu で Cuckoo の設定をします。ファイルは2つ(cuckoo.conf と virtualbox.conf)で、「~/cuckoo/conf/」にあります。

設定ファイル1→ ~/cuckoo/conf/cuckoo.conf
ip = 192.168.56.1
を次のように書き換える。(Cuckoo を動かす Ubuntu の IP アドレス)
ip = 192.168.1.2

interface = vboxnet0
を次のように書き換える。(Cuckoo を動かす Ubuntu の NIC の名前)
interface = eth0

設定ファイル2→ ~/cuckoo/conf/virtualbox.conf
machines = cuckoo1
を次のように書き換える。
machines = winxp1

[cuckoo1]
を次のように書き換える。
[winxp1]

label = cuckoo1
を次のように書き換える。
label = winxp1

ip = 192.168.56.101
を次のように書き換える。(winxp の IP アドレス)
ip = 192.168.1.3


もし VirusTotal の API キーを持っている人は、その API キーを Cuckoo に登録しておくことができます。必須じゃないです。書き換えなくても Cuckoo を動作させることはできます。

設定ファイル3→ ~/cuckoo/conf/processing.conf
key = a0283a2c3d55728300d064874239b5346fb991317e8449fe43c902879d758088
を次のように書き換える。
key = 持っている API キー


以上で Cuckoo でマルウェア解析をする準備が整いました。次回は Cuckoo を動作させてみます。