setodaNote

忘れる用のメモ書き for Cybersecurity

MalConfScan with Cuckoo 環境を構築して Emotet を解析する

MalConfScan

2019年4月22日頃に JPCERT/CC が github に「MalConfScan」というマルウェア解析ツールを公開しました。Volatility プラグインで、複数のマルウェアについて「設定データ」「デコードされた文字列」「DGAドメイン」を抽出できるというものです。

MalConfScan - github

対応しているマルウェアは以下の通り。

  • Ursnif
  • Emotet
  • Smoke Loader
  • PoisonIvy
  • CobaltStrike
  • NetWire
  • PlugX
  • RedLeaves / Himawari / Lavender / Armadill / zark20rk
  • TSCookie
  • TSC_Loader
  • xxmm
  • Datper
  • Ramnit
  • HawkEye
  • Lokibot
  • Bebloh (Shiotob/URLZone)
  • AZORult
  • NanoCore RAT
  • AgentTesla
  • FormBook
  • NodeRAT (https://blogs.jpcert.or.jp/ja/2019/02/tick-activity.html)
  • Pony
  • njRAT

JPCERT/CC かっこよすぎでは・・・!

そのまま Volatility で利用することもできますが、ページ下部に「MalConfScan with Cuckoo」という記述があり、Cuckoo と連携させることができるようだったので実際に Cuckoo Sandbox の環境構築から始めてツールを利用してみました。

MalConfScan with Cuckoo 環境の構築

Ubuntu 18.04.2 を準備する

ここでは Cuckoo のホストとして Ubuntu 18.04.2 LTS を VMware 上に構築します。Ubuntu を使う理由としては、困ったときに頼りにできる情報がネット上に多くあるというのが大きいです。また物理マシン上に構築するのに抵抗があったので VMware 上に構築しています。Ubuntu 上に Cuckoo 用の Python 環境(venv)、 Sandbox 用の Windows 7 環境(VirtualBox) をそれぞれ構築します。専用の Python 環境を利用するのは Cuckoo の公式が推奨していたのでそれに従いました。

MalconfScan with Cuckoo

Ubuntu の環境前提

まっさらな Ubuntu 18.04.2 を準備します。MalConfScan を利用する層であれば問題なく準備できると思いますので手順は割愛しますが、以下の環境となっていることを前提として説明を進めます。

  • Ubuntu18.04.2 (Cuckoo ホスト)

    • VMware 上に構築(VMware Workstation 15 Pro)
    • メモリサイズ: 8GB
    • プロセッサ:
      • コア数: 4
      • 「Intel VT-x/EPT または AMD-V/RVI を仮想化」を有効にする
    • ハードディスクサイズ:80GB
    • ネットワークアダプタ: NAT
    • ユーザ名: infected
  • Ubuntu 18.04.2 LTS の iso イメージのダウンロードリンク
    Download Ubuntu Desktop | Download | Ubuntu (記事執筆当時)

  • Index of /releases/18.04.2
    http://old-releases.ubuntu.com/releases/18.04.2/

「Intel VT-x/EPT または AMD-V/RVI を仮想化」はあとで仮想マシン内の VirtualBox で CPU コア数を変更するための設定です。コア数を変更しない場合には設定変更は不要です。

Ubuntu のアップデート

Ubuntu を最新の状態にアップデートします。ここでは接続先を国内のミラーサイト(理研)に変更しています。日本から接続する場合はファイルの取得先を国内のものに変更したほうが早く進む感じがします。

sudo sed -i.bak -e "s%http://us.archive.ubuntu.com/ubuntu/%http://ftp.riken.go.jp/Linux/ubuntu/%g" /etc/apt/sources.list
sudo apt update
sudo apt upgrade -y

MalConfScan with Cuckoo のための下準備

sudo apt install -y git make vim
sudo apt install -y python python-pip python-setuptools python-virtualenv virtualenv
sudo apt install -y libjpeg8-dev zlib1g-dev

git clone https://github.com/JPCERTCC/MalConfScan.git
## for cuckoo best practice(https://cuckoo.readthedocs.io/en/latest/installation/host/installation/#install-cuckoo)
virtualenv venv
. venv/bin/activate

上記コマンドを入力することで隔離された Python 環境に移行します。画面上は以下のようにプロンプトの先頭に (venv) と表示されます。

Virtualenv (venv)

手順通りに進められれば適宜この隔離環境で操作するように記載をしていますが、予期せぬ操作などで手順から外れた場合には基本的には「. venv/bin/activate」と入力して隔離環境にしてから操作を進めてください。以下では特段プロンプト表示は再現しませんが、この隔離環境にいることを前提として進めます。

## for Volatility
git clone https://github.com/volatilityfoundation/volatility.git
cd volatility
python setup.py install
cd ../
pip install distorm3 pefile

cp MalConfScan/malconfscan.py venv/lib/python2.7/site-packages/volatility-2.6.1-py2.7.egg/volatility/plugins/malware/
cp -R MalConfScan/utils venv/lib/python2.7/site-packages/volatility-2.6.1-py2.7.egg/volatility/plugins/malware/
cp -R MalConfScan/yara venv/lib/python2.7/site-packages/volatility-2.6.1-py2.7.egg/volatility/plugins/malware/

## for MongoDB
sudo apt install -y libffi-dev libssl-dev libjpeg-dev zlib1g-dev swig
sudo apt install -y mongodb

## for elasticsearch 5.6.0 (https://github.com/cuckoosandbox/cuckoo/issues/2085)
sudo apt install -y openjdk-11-jdk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.0.deb
sudo dpkg -i elasticsearch-5.6.0.deb
rm elasticsearch-5.6.0.deb 

## for mitmproxy
sudo apt install -y python3-dev python3-pip
pip3 install mitmproxy

## for tcpdump (https://cuckoo.readthedocs.io/en/latest/faq/#tcpdump-permission-denied)
sudo apt install -y apparmor-utils
sudo aa-disable /usr/sbin/tcpdump

## for non-root user (in this case, user name is "infected")
sudo usermod -a -G vboxusers infected
sudo groupadd pcap
sudo usermod -a -G pcap infected
sudo chgrp pcap /usr/sbin/tcpdump
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

## for VirtualBox
sudo apt install -y virtualbox
sudo vboxmanage hostonlyif create
sudo vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0

Cuckooではデフォルトの DB として SQLite3 が採用されています。主に性能面から MySQL や PostgreSQL に変更することが推奨されていますが、小規模の利用であれば問題なさそうだったので標準の SQLite3 で進めます。

サンドボックス用の仮想マシンの準備

ここからしばらくはサンドボック用の Windows 7 の準備を進めていきます。仮想環境検知を避ける観点からまっさらな Windows 7 を準備することが望ましいと思いますが、以下のような検証用のOSイメージもあります。

ここでは MalConfScan with Cuckoo の動作確認をするという検証目的のために上記のOSイメージを利用する前提でセットアップ手順を記載します。実際に活用する際には別途OSを用意することになると思いますが、まっさらな Windows 7 を用いる場合でもほぼ同じ手順で導入することができます。差異として大きなところは「VirtualBox Guest Additions」を削除する手順が不要になるくらいです。

Windows7 の環境前提

  • VirtualBox 上の仮想マシン (Windows 7)
    • 名前: Win7SP1x86
    • バージョン: Windows 7 SP1 (32-bit)
    • CPUコア数: 2
    • メモリサイズ: 1280 MB
    • ビデオメモリサイズ: 32 MB
    • Display - リモートディスプレイ: 無効(Warning を消すため)
    • System - Enable I/O APIC: 有効(自動で有効になる)
    • ユーザ名: IEUser (Cuckoo で利用するには英数字表記であることが必要)

ここで CPU コア数とメモリサイズを変更しているのは、仮想環境検知を避けられればいいなくらいの理由なので MalConfScan を利用するのに必須のものではありません。なお、CPU コア数を変更するためには VMware から設定できる「Intel VT-x/EPT または AMD-V/RVI を仮想化」が有効になっている必要があります。変更できない場合は Ubuntu の VMware 設定を確認してください。

VirtualBox 上の仮想マシンを起動して環境設定を変更する

  • ディスプレイ解像度を1024×768に設定
  • Windows Update の無効化
  • Windows Defender の無効化
  • Windows Firewall の無効化
  • UAC の無効化(通知しないに設定)
  • IE起動時に設定を聞かれたら「Ask me later」
  • Python 2.7 のインストール
    https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi
  • PIL-1.1.7.win32-py2.7.exeのインストール
    http://effbot.org/downloads/PIL-1.1.7.win32-py2.7.exe (2023/01/10:削除されていました)
  • agent.py をスタートアップに設定
  • ネットワーク設定
    • IP address:192.168.56.101
    • Subnet mask:255.255.255.0
    • Default gateway:192.168.56.1
    • Preferred DNS server:8.8.8.8
    • Alternate DNS server:8.8.4.4
  • ネットワークノイズの抑止(Teredo、LLMNR の無効化など)
    • [Windowsキー] + R から "gpedit.msc" と入力してグループポシリーエディタを開く
    • Computer Configuration -> Administrative Templates -> Network -> DNS Client にある "Turn off Multicast Name Resolution" を enable にする
    • Computer Configuration -> Administrative Templates -> System -> Internet Communication Management にある "Restrict Internet Communication" を enable にする
    • コマンドプロンプトに以下を入力
netsh interface teredo set state disabled
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\SYSTEM]
"SystemBiosDate"="06/12/10"
"SystemBiosVersion"="BC1.05"
"VideoBiosVersion"="VC1.20"

[-HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\VBOX__]
[-HKEY_LOCAL_MACHINE\HARDWARE\ACPI\FADT\VBOX__]
[-HKEY_LOCAL_MACHINE\HARDWARE\ACPI\RSDT\VBOX__]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\Virtual Box Guest Additions]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\VBox*]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_80ee&dev_cafe]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E97D-E325-11CE-BFC1-08002BE10318}\0020]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\PCI\VEN_80EE&DEV_CAFE&SUBSYS_00000000&REV_00]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\VBoxGuest\Enum]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\PCI\VEN_80EE&DEV_CAFE&SUBSYS_00000000&REV_00]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Class\{4D36E97D-E325-11CE-BFC1-08002BE10318}\0020]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\CriticalDeviceDatabase\pci#ven_80ee&dev_cafe]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\PCI\VEN_80EE&DEV_CAFE&SUBSYS_00000000&REV_00]
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E97D-E325-11CE-BFC1-08002BE10318}\0020]
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_80ee&dev_cafe]
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\VEN_80EE&DEV_CAFE&SUBSYS_00000000&REV_00]
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\VBoxGuest\Enum]
  • VirtualBox 側の設定でネットワーク設定を「Host-only Adapter」に変更する
    • 「vboxnet0」が選択されていることを確認する
    • 「Not Selected」となっている場合は以下のコマンドを実行する
sudo vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0
  • 「Oracle VM VirtualBox Guest Additions」をアンインストールする
    • 再起動するか聞かれるので再起動する
  • 再起動後に agent.py が起動していることを確認する
    • 「C:\Python27\python.exe」というタイトルの黒い画面が起動しているはず
    • 起動していない場合は agent.py の内容が入手元の内容と一致してるかを確認する
  • 解析時のスクリーンショットで邪魔にならないように agent.py のウィンドウを最小化しておく(なお拡張子を agent.pyw と変更してから実行するとウィンドウ表示を抑止できる)
  • 先ほど作成した init.reg を実行する

上記手順をすべて完了したら、最後に起動したままの状態で仮想マシンのスナップショットを取得します。スナップショットの名前は「cuckoo」としてください。仮想マシンの名前とスナップショットの名前は Cuckoo の設定ファイルに記載するので間違えないように注意します。スナップショットを取得したら仮想マシンを終了をさせておきます。VirtualBox 自体も終了させて構いません。

これでサンドボックス用の仮想マシンの準備は完了です。Cuckoo のセットアップに戻ります。

MalConfScan with Cuckoo のセットアップ

ここまできたらホストマシンを再起動させます。(再起動しない場合に mitmproxy がうまく起動しないことへの対処です。)

reboot

Cuckoo にパッチを適用して MalConfScan を利用できるようにします。

git clone https://github.com/jpcertcc/malconfscan-with-cuckoo.git
git clone -b 2.0.6 https://github.com/cuckoosandbox/cuckoo.git

. venv/bin/activate
cd cuckoo
patch -p1 < ../malconfscan-with-cuckoo/malconfscan.patch
python stuff/monitor.py
python setup.py sdist develop
cd ../
cuckoo

mitmproxy を初期化します。設定に必要な証明書ファイルを生成するために以下の手順で一度起動し [Ctrl]+C で終了させます。

## for create the ".mitmproxy" dir
mitmproxy
[Ctrl]+C
## 証明書を cuckoo が利用するところにコピーする
cp .mitmproxy/mitmproxy-ca-cert.p12 .cuckoo/analyzer/windows/bin/cert.p12

後でエラーになるのを避けるために mitm.py を差し替えます。差し替えない場合は解析時点でエラーが発生します。

##for https://github.com/cuckoosandbox/cuckoo/issues/2313
wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/9a1cd18a079de49cc5279631c04995313e2b509e/cuckoo/auxiliary/mitm.py
mv mitm.py ./cuckoo/cuckoo/auxiliary/

Cuckoo で解析に必要な m2crypto を導入します。素直に導入できないので以下の手順を踏みます。

## for m2crypto (https://github.com/cuckoosandbox/cuckoo/issues/2606)
wget http://deb.debian.org/debian/pool/main/m/m2crypto/m2crypto_0.24.0.orig.tar.xz
wget http://deb.debian.org/debian/pool/main/m/m2crypto/m2crypto_0.24.0-1.1.debian.tar.xz
tar xvf m2crypto_0.24.0.orig.tar.xz
tar xvf m2crypto_0.24.0-1.1.debian.tar.xz
cp -r debian/ M2Crypto-0.24.0/

sudo apt install -y quilt
echo export QUILT_PATCHES=debian/patches>>.bashrc
source .bashrc
. venv/bin/activate
cd M2Crypto-0.24.0/
quilt push
python setup.py sdist
cd ../
sudo apt install -y libssl1.0-dev
pip install M2Crypto-0.24.0/dist/M2Crypto-0.24.0.tar.gz

rm m2crypto_0.24.0.orig.tar.xz
rm m2crypto_0.24.0-1.1.debian.tar.xz

Cuckoo で利用する MongoDB と ElasticSearch を起動させておきます。

sudo service elasticsearch start
sudo systemctl enable elasticsearch
sudo service mongodb start
sudo systemctl enable mongodb

Cuckoo コンフィグファイルの設定

ここからは Cuckoo の各種コンフィグファイルを環境に合わせて修正していきます

  • .cuckoo/conf/auxiliary.conf
vi .cuckoo/conf/auxiliary.conf
[mitm]
## Enable man in the middle proxying (mitmdump) [yes/no].
##enabled = no
enabled = yes
(snip)
## path is correct.
##mitmdump = /usr/local/bin/mitmdump
mitmdump = /home/infected/.local/bin/mitmdump
  • .cuckoo/conf/cuckoo.conf
vi .cuckoo/conf/cuckoo.conf
## submission. Currently available for: VirtualBox and libvirt modules (KVM).
##memory_dump = no
memory_dump = yes
(snip)
## The value is expressed in bytes, by default 128 MB.
##upload_max_size = 134217728
upload_max_size = 1610612736
  • .cuckoo/conf/memory.conf
vi .cuckoo/conf/memory.conf
[basic]
## Profile to avoid wasting time identifying it
##guest_profile = WinXPSP2x86
guest_profile = Win7SP1x86
  • .cuckoo/conf/processing.conf
vi .cuckoo/conf/processing.conf
[memory]
## Create a memory dump of the entire Virtual Machine. This memory dump will
## then be analyzed using Volatility to locate interesting events that can be
## extracted from memory.
##enabled = no
enabled = yes
  • .cuckoo/conf/reporting.conf
vi .cuckoo/conf/reporting.conf
[mongodb]
##enabled = no
enabled = yes
(snip)
[elasticsearch]
##enabled = no
enabled = yes
(snip)
##hosts = 127.0.0.1
hosts = 127.0.0.1:9200
  • .cuckoo/conf/virtualbox.conf
vi .cuckoo/conf/virtualbox.conf
[cuckoo1]
## Specify the label name of the current machine as specified in your
## VirtualBox configuration.
##label = cuckoo1
label = Win7SP1x86
(snip)
## Example (Snapshot1 is the snapshot name):
##snapshot =
snapshot = cuckoo
(snip)
## Example (vboxnet0 is the interface name):
##interface = 
interface = vboxnet0

Cuckoo のネットワーク設定

ネットワーク周りの設定をします。はじめに Ubuntu18.04.2 で発生する「nameserverが127.0.0.53になってしまう」問題の手当をしておきます。

ls -l /etc/resolv.conf
sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo service systemd-resolved restart

次にサンドボックスからインターネットへの通信を許可しつつ他の内部IP宛のアクセスを禁止するように設定します。この設定について多少の動作確認はしていますが、外部と通信させる設定というのは不安が残るので特に支障がなければホストの Ubuntu 自体を外部と遮断しておくことを推奨します

iptables の設定を初期化します。

sudo iptables -t nat -F
sudo iptables -F
sudo iptables -L
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -i vboxnet0 -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.0.0/16 -i vboxnet0 -o ens33 -j DROP
sudo iptables -A FORWARD -s 192.168.56.0/24 -d 172.16.0.0/12 -i vboxnet0 -o ens33 -j DROP
sudo iptables -A FORWARD -s 192.168.56.0/24 -d 10.0.0.0/8 -i vboxnet0 -o ens33 -j DROP
sudo iptables -A FORWARD -s 192.168.56.0/24 -i vboxnet0 -o ens33 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP

sudo sysctl -w net.ipv4.ip_forward=1

設定の永続化(表示される選択肢は Yes を選択する)

sudo apt install -y iptables-persistent

sudo bash
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
exit

ネットワーク設定の確認

$ sudo iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i vboxnet0 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.56.0/24 -d 192.168.0.0/16 -i vboxnet0 -o ens33 -j DROP
-A FORWARD -s 192.168.56.0/24 -d 172.16.0.0/12 -i vboxnet0 -o ens33 -j DROP
-A FORWARD -s 192.168.56.0/24 -d 10.0.0.0/8 -i vboxnet0 -o ens33 -j DROP
-A FORWARD -s 192.168.56.0/24 -i vboxnet0 -o ens33 -m conntrack --ctstate NEW -j ACCEPT

$ sudo iptables -S -t nat
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -j MASQUERADE

Cuckoo を起動する

再起動をしているため、まず以下のコマンドで vboxnet0 を有効化しておきます。

sudo vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0

すべての準備が整ったので Cuckoo を起動します。

cuckoo community
cuckoo

以下のような表示が出れば無事に起動し、検体が渡されるのを待っている状態になっています。

                               ),-.     /
  Cuckoo Sandbox              <(a  `---','
     no chance for malwares!  ( `-, ._> )
                               ) _>.___/
                                   _/

 Cuckoo Sandbox 2.0.6
 www.cuckoosandbox.org
 Copyright (c) 2010-2018

 Checking for updates...
 You're good to go!

 Our latest blogposts:
 * IQY malspam campaign, October 15, 2018.
   Analysis of a malspam campaign leveraging .IQY (Excel Web Query) files containing DDE to achieve code execution.
   More at https://hatching.io/blog/iqy-malspam

 * Hooking VBScript execution in Cuckoo, October 03, 2018.
   Details on implementation of Visual Basic Script instrumentation for Cuckoo Monitor for extraction of dynamically executed VBScript.
   More at https://hatching.io/blog/vbscript-hooking

 * Cuckoo Sandbox 2.0.6 pentest, September 18, 2018.
   Cuckoo Sandbox 2.0.6 public pentest performed by Cure53 and sponsored by PolySwarm!
   More at https://hatching.io/blog/cuckoo-206-pentest

 * Cuckoo Sandbox 2.0.6, June 07, 2018.
   Interim release awaiting the big release.
   More at https://cuckoosandbox.org/blog/206-interim-release

 * Cuckoo Sandbox 2.0.5: Office DDE, December 03, 2017.
   Brand new release based on a DDE case study.
   More at https://cuckoosandbox.org/blog/205-office-dde

2019-05-21 23:54:00,165 [cuckoo.core.scheduler] INFO: Using "virtualbox" as machine manager
2019-05-21 23:54:00,737 [cuckoo.core.scheduler] INFO: Loaded 1 machine/s
2019-05-21 23:54:00,757 [cuckoo.core.scheduler] INFO: Waiting for analysis tasks.

以下のようなエラーが表示された場合は vboxnet0 を有効になっていない可能性があります。「ip a」などで vboxnet0 が表示されていない場合は sudo vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0 と入力して有効にする必要があります。

2019-05-21 23:52:46,019 [cuckoo] CRITICAL: CuckooCriticalError: Unable to bind ResultServer on 192.168.56.1:2042 
[Errno 99] Cannot assign requested address. This usually happens when you start Cuckoo without bringing up 
the virtual interface associated with the ResultServer IP address. 
Please refer to https://cuckoo.sh/docs/faq/#troubles-problem for more information.

Cuckoo Web interface

ブラウザから利用できるように WebUI を起動させます。別ターミナルを開いて以下を入力します。

. venv/bin/activate
cuckoo web
Performing system checks...

System check identified no issues (0 silenced).
May 22, 2019 - 03:21:32
Django version 1.8.4, using settings 'cuckoo.web.web.settings'
Starting development server at http://localhost:8000/
Quit the server with CONTROL-C.

上記のような表示が出れば準備完了です。

Web ブラウザから http://127.0.0.1:8000/ にアクセスすると Cuckoo の画面が表示されます。解析したいファイルを「SUBMIT A FILE FOR ANALYSIS」のスペースにD&Dすると解析設定画面に移ります。URL やハッシュ値の場合は「Submit URLs/hashes」に貼り付けるてから「Submit」をクリックすることで解析設定画面に移ります。とりあえずはデフォルト設定のまま解析するので問題ないと思います。

Cuckoo Web - Firefox

以下は Emotet を解析した場合の結果です。Emotet であると判定され、通信先一覧が抽出されていることが確認できます。

Cuckoo Report Sanmple - Emotet

再起動後に Cuckoo を使う場合

vboxnet0 を起こしてやる必要があるみたいです。以下のコマンドをセットで打ち込むとちゃんと起動してくれます。

sudo vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0
. venv/bin/activate
cuckoo &
cuckoo web &

以上

参考文献

MalConfScan について
MalConfScan の導入手順について
Cuckoo の導入手順について
サンドボック用の環境構築について
Volatility の導入手順について
Elasticsearch の導入手順について
ネットワーク設定周り
エラー時に参考にしたサイトなど

付録

Office2016 がクラッシュする

Cuckoo 2.0.6 には、サンドボックス上に MS Office2016 (Office365など)を導入して docx などの Office ファイルを解析しようとすると、開くプロセスがクラッシュする既知のバグ(Issue #2302, Issue #2737 など)が存在しています。

古いバージョンの Office を利用するか、解析時のオプションを変更してインジェクション(Enable Injection/Enable behavioral analysis.)をオフにすることで回避できます。

Options : Enable Injection

ダークモード表示

右上にある筆アイコンをクリックすることでカラーを変更することができます。ダークモード含め、3種類ほどあるのでお好みのものを。

解析環境検知対策の効果について

あくまで参考ですが、どれだけ解析環境検知を回避できそうかを pafish を解析することで確認してみました。

  • a0rtega/pafish: Pafish is a demonstration tool that employs several techniques to detect sandboxes and analysis environments in the same way as malware families do.
    https://github.com/a0rtega/pafish

結果は以下の通りです。

Pafish 1/3
Pafish 2/3
Pafish 3/3

iptables を初期化する

sudo iptables -t nat -F
sudo iptables -F
sudo iptables -L

画面ロックの無効化

  • [Setting] -> [Privacy] -> [ScreenLock] を OFF にする
  • [Setting] -> [Power] -> [Blank screen] を Never にする

日本語環境の導入

wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
wget https://www.ubuntulinux.jp/sources.list.d/bionic.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt dist-upgrade
sudo apt install -y ubuntu-defaults-ja

Issue #2, #3 対策

現在は既に修正されているので対処不要です。記録として残しています。

  • MalConfScan/utils/emotetscan.py
vi MalConfScan/utils/emotetscan.py
## p_data["IP " + str(i)] = str(inet_ntoa(ip)) + ":" + str(port)
p_data[str(unpack("!I", ip)[0])] = str(inet_ntoa(ip)) + ":" + str(port)

更新履歴

  • 2019/05/23 新規作成。
  • 2019/05/23 AM 一部文言と見出しを修正。操作順を整理。
  • 2019/05/23 PM 概要図に MalConfScan を追記。
  • 2019/05/25 PM サンドボックス環境にネットワークノイズ抑止を追記。"agent.pyw" について追記。
  • 2019/05/25 PM 目次を追加。それに伴い章立てを整理。
  • 2019/05/28 PM MongoDB周りに関して emotetscan.py を修正する記載を削除。(issues #2
  • 2019/06/01 AM Office2016 がクラッシュするバグについての記載を追記。
  • 2019/06/01 AM mitmproxy の初回実行前にホストの再起動を手順に追記。 iptables の初期化を手順に追記。iptables の設定に「sudo iptables -P FORWARD DROP」が抜けていたのを修正。emotetscan.py を修正する記載を追記。(Issue #3)。
  • 2019/06/01 PM 「.cuckoo/conf/auxiliary.conf」で cert.p12 へのファイルパスの修正が誤っていたのを訂正(デフォルトの記載で問題なかった)。
  • 2019/06/04 PM Issue #3 に関連して emotetscan.py を修正していた記載を削除(付録に移動)。
  • 2019/08/05 PM 参考文献に JPCERT/CC の MalConfScan 紹介記事を追記。
  • 2020/08/31 Ubuntu 18.04.2 についてのダウンロードリンクを追記。
  • 2023/01/10 一部リンク切れの旨を追記