読者です 読者をやめる 読者になる 読者になる

Shi0shishi0

とても眠い。

Cuckoo Sandbox 2.0-RC1 を構築してみた。

昨年の秋頃、自社でサンドボックスの話題が色々出た時に今更ながら興味を持ったので、自宅のPCに構築してみました。手順等を忘れないようブログに記録残そうと思っていたのですが、ブログに書くこと自体をすっかり忘れていました(・∀・)
今回は、マルウェア解析サイト「Malwr」等でも使用されている、「Cuckoo Sandbox」のバージョン2.0RC1 をインストールしました。基本的には、以下の公式ドキュメントを読みながら進めていきました。

Cuckoo Sandbox Book — Cuckoo Sandbox v2.0-dev Book
http://docs.cuckoosandbox.org/en/latest/


構築環境

ホストマシン : Windows10(64bit)

仮想化用ソフトウェア1 : VMware Workstation 12 Player
ゲストマシン1 : Ubuntu14.04LTS(64bit)

仮想化用ソフトウェア2 : VirtualBox
ゲストマシン2 : Windows7(32bit)

Pythonライブラリのインストール

$ sudo apt-get install python python-pip python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg-dev
$ sudo apt-get install mongodb
$ sudo pip install -r requirements.txt

tcpdumpを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

distormをダウンロードしてインストール

https://github.com/gdabah/distorm

Volatilityをダウンロードしてきてインストール

https://github.com/volatilityfoundation/volatility

Cuckoo Sandboxを実行するためのユーザ(cuckoo)を作成

$ sudo adduser cuckoo

cuckooユーザ作成後は、このユーザに切り替えて作業していきます。

VirtualBoxをインストール

公式サイトからdebファイルをダウンロードし、右クリックして「Ubuntuソフトウェアセンターで開く」からインストールします。
Cuckoo SandboxもGitHubからダウンロードしておきます。ダウンロードしてきたファイルは任意の場所に配置します。(自分はoptディレクトリ配下に置きました)

管理者権限でフォワード設定

$ sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
$ sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables -A POSTROUTING -t nat -j MASQUERADE
$ sudo sysctl -w net.ipv4.ip_forward=1

このあたりも基本ドキュメント通りに進めていきます。

iptables-persistentのインストール

iptablesの設定を保存するために「iptables-persistent」を入れました。

$ sudo apt-get install iptables-persistent

sysctl.confの編集

再起動後も設定を残すために、sysctl.conf も以下のように直接編集しておきます。

$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1

ユーザ(cuckoo)をvboxusersに追加

$ sudo usermod -a -G vboxusers cuckoo

ホストオンリーネットワーク用のアダプタ追加

実行するとvboxnet0 が追加されると思います。

$ sudo VBoxManage hostonlyif create

必要に応じて、virtualbox.conf と cuckoo.conf でゲストマシン1とゲストマシン2 のIPアドレスを設定します。

ゲストマシンの設定

VirtualBoxに「cuckoo1」という名前で仮想マシンを作成します。(Cuckooのデフォルトの仮想マシン名)
イメージファイルを用意し、今回はcuckoo1に Windows7(32bit) をインストールしました。

ゲストマシン(Windows7)に追加する設定

GuestAdditionのインストールと再起動
共有フォルダの作成
Windows FireWallの無効化
Windows Updateの無効化
UACの無効化
拡張子の表示設定
Python2.7とPILのインストール(PILは http://pythonware.com/products/pil/ からダウンロード)
必要に応じてPDFリーダー等のインストール
IPアドレスの設定
192.168.28.101
255.255.255.0
192.168.28.1
8.8.8.8

…などなど。設定後、共有フォルダを使ってCuckoo Sandboxのagentディレクトリに入っている agent.py をコピーして、ゲストマシンの方に配置します。agent.py 実行時のウィンドウが邪魔な場合は、ファイル名を「agent.pyw」に変えて実行してあげるとコンソールが非表示になって良いらしいです。

また、この時にagent.py を管理者権限で動かさなかった場合、自分の環境では毎回エラーを吐いて処理が死んでいました。
エラーメッセージを見ると、requirements.txt からpipした時に上手く入っていなかったものもあったようなので、それも追加でインストールしました。

$ sudo pip install sqlalchemy bson python-dateutil

このへんをインストールし、ゲストマシン側で agent.py を実行してその状態でスナップショットを作成して保存します。

Cuckoo Sandboxの実行

せっかくなので動かしたときの画面キャプチャも貼ってみます。

cuckoo.py を実行してあげると、以下のようなメッセージ(?)が出てCuckoo Sandboxが起動します。

f:id:echoha610:20170209214225p:plain

Cuckoo Sandboxが起動したら、今度は別のターミナルを立ち上げます。以下のようなコマンドで、解析したいファイルを submit.py から渡します。
何か良い例になるもの無いかな~とHDDの中を漁ってみたら、少し前に行われたSharifCTFのマルウェアっぽいexeファイルが出てきたのでこれをsubmit。

$ python /opt/cuckoo/cuckoo2.0RC1/utils/submit.py Nanomites.exe

上手くいくとメッセージが出る。しばらく待ちます。

Success: File "/home/cuckoo/Nanomites.exe" added as task with ID 1

Web管理画面から解析結果が見られるので、待っている間にCuckooのWebディレクトリにある manage.py を実行します。正しく起動すると以下のようなメッセージが出ます。(Djangoのバージョンを1.8に変えてあげないとここでもエラーが出るかも)

$ sudo python /opt/cuckoo/cuckoo2.0RC1/web/manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
February 09, 2017 - 21:20:14
Django version 1.8.4, using settings 'web.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

127.0.0.1の8000番ポートにアクセスすると、Web管理画面を見ることができました。

f:id:echoha610:20170209213854p:plain

左上のRecent から直近の解析結果一覧が見られます。解析が正常に終了した場合(表現が適切じゃないかも)は、Statusが緑色の文字でreportedになると思います。エラー吐いて途中で落ちてた時とかは赤色の文字になっていました。

f:id:echoha610:20170209214739p:plain

ハッシュ値をクリックすると詳細な解析結果が見られます。

f:id:echoha610:20170209213920p:plain

今回のexeファイルは外部との通信を試みたりするので、その際のSource/Destinationの情報や送信しているデータなども取得できています。

f:id:echoha610:20170209215158p:plain

たくさん解析すると画面がごちゃごちゃしてきますが、

cuckoo.py --clean

を実行することでお掃除できます。


Cuckoo Sandbox の細かい使い方はドキュメントに色々書かれているので、時間がある時に読み進めようと思います。他にも便利な機能があるようなら色々試していきたいと思います。

Usage - Cuckoo Sandbox v2.0-dev Book
http://docs.cuckoosandbox.org/en/latest/usage/