akiranetの日々淡々と頑張っていこう

akiranetのコンピューターと遊ぶ

Cuckoo2.3を構築した

どうも、Ak1raです!

以前からCuckooってものが気になっていたので構築してみました!

そもそもCuckooとは?HPを見ると以下のように書かれていました

In three words, Cuckoo Sandbox is a malware analysis system.
Cuckoo Sandbox is a free software that automated the task of analyzing any malicious file under Windows, OS X, Linux, and Android

マルウェアサンドボックスと呼ばれる「攻撃されてもよい環境」を仮想環境として構築し、その中で未確認ファイルや疑わしいファイルを隔離した上で動作させ、振る舞いを詳細に分析します

Cuckooはオープンソースなので、やってみました。 最近のマルウェアは、仮想環境やサンドボックスと判断すると、活動を停止するものもあります。 他にも、ステルス型?など時間をおいてからマルウェアが実行されるのは対応できないかと…

構築方法は、ほぼ以下のドキュメントを見ただけです。

Cuckoo2.3

環境

ホストOSの設定

$ sudo apt install python python-pip python-dev libffi-dev libssl-dev
$ sudo apt install python-virtualenv python-setuptools
$ sudo apt install libjpeg-dev zlib1g-dev swig

またWebUIを使うには、Mongo DBを使うのでインストール

$ sudo apt install mongodb

YaraやPydeepもインストールしましょう(プラグインとして使えます)

# Yara install
$ wget https://github.com/VirusTotal/yara/archive/v3.6.3.tar.gz
$ tar -zxf v3.6.3.tar.gz
$ cd yara-3.6.3
$ ./bootstrap.sh
$ sudo apt install automake libtool make gcc
$ ./configure
$ make 
$ sudo make install
$ make check 
$ ./configure --enable-cuckoo

# Pydeep install
$ git clone https://github.com/kbandla/pydeep.git
$ cd pydeep
$ python setup.py build
$ python setup.py test
$ sudo python setup.py install

tcpdumpをインストールします。sudoなしで実行できるようにも設定します。ちゃんと出来ているかもチェックします。

$ sudo apt-get install tcpdump libcap2-bin
$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
$ getcap /usr/sbin/tcpdump

Volatilityをインストールします。

公式に必要なパッケージが書かれていたので以下にインストール方法を書いていきます。

$ sudo apt-get install pcregrep libpcre++-dev
$ sudo pip install pycrypto
$ sudo pip install distorm3
$ git clone https://github.com/volatilityfoundation/volatility.git
$ cd volatility
$ python setup.py install

M2Cryptoインストール

$ sudo apt-get install swig

Cuckoo SandBoxを実行するためのユーザを作成

$ sudo adduser cuckoo
$ sudo usermod -a -G vboxusers cuckoo
$ sudo usermod -a -G sudo cuckoo

ついに、Cuckooをインストール

$ sudo pip install -U pip setuptools
$ sudo pip install -U cuckoo
$ pip download cuckoo
$ pip install Cuckoo-2.3.0.tar.gz

VirtualBoxの設定をします

  • VMIPアドレス192.168.56.101/24 && eth0で設定
  • HostonlyNetworkでvboxnet0192.168.56.1/24DHCP Server: 192.168.56.100

ここは公式から参照です

Per-Analysis Network Routing — Cuckoo Sandbox v2.0.0 Book

$ sudo iptables -t nat -A POSTROUTING -o eth0 -s 192.168.56.0/24 -j MASQUERADE

# Default drop.
$ sudo iptables -P FORWARD DROP

# Existing connections.
$ sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

# Accept connections from vboxnet to the whole internet.
$ sudo iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPT

# Internal traffic.
$ sudo iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.56.0/24 -j ACCEPT

# Log stuff that reaches this point (could be noisy).
$ sudo iptables -A FORWARD -j LOG

$ echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
$ sudo sysctl -w net.ipv4.ip_forward=1

ここをやっておくべきです!!

$ sudo mkdir /opt/cuckoo
$ sudo chown cuckoo:cuckoo /opt/cuckoo
$ cuckoo --cwd /opt/cuckoo
$ export CUCKOO=/opt/cuckoo
$ cuckoo

Cuckooの設定

  • config/cuckoo.conf
 [resultserver]  
 ip = 192.168.56.100
  • config/virtualmachine.conf
[cuckoo]
 label = cuckoo
 platform = windows
 ip = 192.168.56.101
  • config/auxilliary.conf
interface = eth0

ゲストOSの設定

ゲストOSをインストール

$ VBoxManage createvm --name "cuckoo" --ostype Windows7_64 --register

VirtualBoxでの設定

  1. cuckooという仮想ボックスを設定
  2. settings
    • [System] Memory -> 2048MBに変更
    • [Display] Video Memory -> 27MBに変更
    • [Storage] SATAを追加->vdiとwindows7.isoを追加
    • [Network] Adapter1, 2に 「Host-only Adapter」(vboxnet0), 「NAT」で設定
    • 共有フォルダを設定(CWD/agent/agent.pyを共有)

あとでNATは切りましょう

Windowsでの設定

スナップショット

$ vboxmanage snapshot "cuckoo" take "setting" --pause
$ vboxmanage controlvm "cuckoo" poweroff
$ vboxmanage snapshot "cuckoo" restorecurrent

実行

cuckoo -dを実行すると以下な感じ

f:id:akiranet:20170831221420p:plain

Web UI

まずは、MongoDBを起動しないといけないので、

sudo service mongodb start
cuckoo web runserver

f:id:akiranet:20170831222109p:plain

f:id:akiranet:20170831222103p:plain

以上で完成です。

エラーで馬鹿したこと

  • MongoDBのstatusがFailedで動いていなかった
$ tail -n 20 /var/log/mongodb/mongod.log
・・・
2017-08-31T18:17:34.584+0900 [initandlisten] ERROR: Insufficient free space for journal files
2017-08-31T18:17:34.584+0900 [initandlisten] Please make at least 3379MB available in /var/lib/mongodb/journal or use --smallfiles
・・・
$ sudo vim /etc/mongod.conf`
# nojournal = trueに変更
  • ERROR: failed to create the VirtualBox objectって言われる… (スナップショット時)

    • 該当仮想環境(ここではcuckoo)を起動しておく

参照

Cuckoo Sandbox Book — Cuckoo Sandbox v2.0.0 Book

Cuckoo Sandbox 1.2の構築 - Twitterに書ききれないこと

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

Getting started — yara 3.6.0 documentation

Volatilityのインストール - Qiita

diStormをPythonで使ってみる - Log.i53

Ubuntu/VirtualBox/NAT接続でもポートフォワードでゲストOSに接続する方法 - TOBY SOFT wiki

MongoDBに接続できなかった - お前のメモ書きが俺は好きだ

mongodb 起動エラー時の対処方法-journallog - Qiita