MalConfScan
2019年4月22日頃に JPCERT/CC が github に「MalConfScan」というマルウェア解析ツールを公開しました。Volatility プラグインで、複数のマルウェアについて「設定データ」「デコードされた文字列」「DGAドメイン」を抽出できるというものです。
- MalConfScan
対応しているマルウェアは以下の通り。
- 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 環境の構築
- MalConfScan
- MalConfScan with Cuckoo 環境の構築
- Ubuntu 18.04.2 を準備する
- サンドボックス用の仮想マシンの準備
- MalConfScan with Cuckoo のセットアップ
- Cuckoo を起動する
- 参考文献
- 付録
- 更新履歴
Ubuntu 18.04.2 を準備する
ここでは Cuckoo のホストとして Ubuntu 18.04.2 LTS を VMware 上に構築します。Ubuntu を使う理由としては、困ったときに頼りにできる情報がネット上に多くあるというのが大きいです。また物理マシン上に構築するのに抵抗があったので VMware 上に構築しています。Ubuntu 上に Cuckoo 用の Python 環境(venv)、 Sandbox 用の Windows 7 環境(VirtualBox) をそれぞれ構築します。専用の Python 環境を利用するのは 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) と表示されます。
手順通りに進められれば適宜この隔離環境で操作するように記載をしていますが、予期せぬ操作などで手順から外れた場合には基本的には「. 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イメージもあります。
- Free Virtual Machines from IE8 to MS Edge - Microsoft Edge Development
https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
ここでは 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 をスタートアップに設定
- agent.py:
https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/cuckoo/data/agent/agent.py - スタートアップ:
%AppData%\Microsoft\Windows\Start Menu\Programs\Startup
- 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
- 以下の内容を init.reg として作成(仮想環境検知避け)
出典: Cuckoo sandbox | secvision22
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」をクリックすることで解析設定画面に移ります。とりあえずはデフォルト設定のまま解析するので問題ないと思います。
以下は Emotet を解析した場合の結果です。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 ~ - JPCERT/CC Eyes | JPCERTコーディネーションセンター公式ブログ
https://blogs.jpcert.or.jp/ja/2019/07/malconfscan.html - マルウエアの設定情報を自動で取得するプラグイン ~MalConfScan with Cuckoo~ - JPCERT/CC Eyes | JPCERTコーディネーションセンター公式ブログ
https://blogs.jpcert.or.jp/ja/2019/08/malconfscan-with-cuckoo.html
MalConfScan の導入手順について
- JPCERTCC/MalConfScan: Volatility plugin for extracts configuration data of known malware
https://github.com/JPCERTCC/MalConfScan - JPCERTCC/MalConfScan-with-Cuckoo: Cuckoo Sandbox plugin for extracts configuration data of known malware
https://github.com/JPCERTCC/MalConfScan-with-Cuckoo
Cuckoo の導入手順について
- サンドボックス解析によるマルウェア対策ツール「cuckoo」を使ってみよう | Think IT(シンクイット)
https://thinkit.co.jp/article/12711 - Cuckoo Sandbox - Automated Malware Analysis
https://cuckoosandbox.org/ - Cuckooのインストール - Cuckoo Sandbox v2.0.6 Book
https://cuckoo.readthedocs.io/en/latest/installation/host/installation/ - Requirements — Cuckoo Sandbox v2.0.6 Book
https://cuckoo.readthedocs.io/en/latest/installation/host/requirements/ - SQLite Capabilities: At what point should I move to MySQL or PostgreSQL · Issue #1508 · cuckoosandbox/cuckoo
https://github.com/cuckoosandbox/cuckoo/issues/1508 - Pythonの仮想環境を構築できるvirtualenvを使ってみる - Qiita
https://qiita.com/H-A-L/items/5d5a2ef73be8d140bdf3
サンドボック用の環境構築について
- Cuckoo sandbox | secvision22
https://secvision22.wordpress.com/tag/cuckoo-sandbox/ - CAPE/network.rst at 3a3c2e0dc2633b5c6f901ffabf4bd54235c581cd · ctxis/CAPE
https://github.com/ctxis/CAPE/blob/3a3c2e0dc2633b5c6f901ffabf4bd54235c581cd/docs/book/src/installation/guest/network.rst
Volatility の導入手順について
- Installation · volatilityfoundation/volatility Wiki
https://github.com/volatilityfoundation/volatility/wiki/Installation
Elasticsearch の導入手順について
- Ubuntu 18.04 に Elasticsearch をインストール - Qiita
https://qiita.com/ekzemplaro/items/acc81bc96fdd56eed587
ネットワーク設定周り
- Per-Analysis Network Routing — Cuckoo Sandbox v2.0.6 Book
https://cuckoo.readthedocs.io/en/latest/installation/host/routing/ - Mostly painless Cuckoo Sandbox install
https://gist.github.com/braimee/bf570a62f53f71bad1906c6e072ce993(2023/01/10:削除されていました) - dr's tech memo: Cuckoo で Linux マルウェアの解析
https://blog.drmn.jp/2016/07/cuckoo-linux.html - networking - Wrong nameserver set by resolvconf and NetworkManager - Ask Ubuntu
https://askubuntu.com/questions/973017/wrong-nameserver-set-by-resolvconf-and-networkmanager - Ubuntu 18.04でnameserverが127.0.0.53になってしまう - 発声練習
http://next49.hatenadiary.jp/entry/20190418/1555568222
エラー時に参考にしたサイトなど
- Failling to downgrade m2crypto · Issue #2606 · cuckoosandbox/cuckoo
https://github.com/cuckoosandbox/cuckoo/issues/2606 - javascript - MongoDB dot (.) in key name - Stack Overflow
https://stackoverflow.com/questions/12397118/mongodb-dot-in-key-name - Cuckoo Elastic Search Installation Ubuntu · Issue #1704 · cuckoosandbox/cuckoo
https://github.com/cuckoosandbox/cuckoo/issues/1704 - ElasticSearch throws an unhandled exception! · Issue #2085 · cuckoosandbox/cuckoo
https://github.com/cuckoosandbox/cuckoo/issues/2085 - Unable to start auxiliary module mitm · Issue #2313 · cuckoosandbox/cuckoo
https://github.com/cuckoosandbox/cuckoo/issues/2313 - Cannot run volatility module: the volatility library is not available. Please install it according to their documentation. · Issue #2500 · cuckoosandbox/cuckoo
https://github.com/cuckoosandbox/cuckoo/issues/2500 - Fail during installation of Pillow (Python module) in Linux - Stack Overflow
https://stackoverflow.com/questions/34631806/fail-during-installation-of-pillow-python-module-in-linux - Linuxのファイルコピーで「cp: omitting directory 'hoge'」エラー: 継続は力なり?
http://keizokupw.seesaa.net/article/358217548.html
付録
Office2016 がクラッシュする
Cuckoo 2.0.6 には、サンドボックス上に MS Office2016 (Office365など)を導入して docx などの Office ファイルを解析しようとすると、開くプロセスがクラッシュする既知のバグ(Issue #2302, Issue #2737 など)が存在しています。
古いバージョンの Office を利用するか、解析時のオプションを変更してインジェクション(Enable Injection/Enable behavioral analysis.)をオフにすることで回避できます。
Behavior analysis crash on office 2016 32-bit · Issue #2302 · cuckoosandbox/cuckoo
https://github.com/cuckoosandbox/cuckoo/issues/2302Process crashed for MS office file analyses · Issue #2737 · cuckoosandbox/cuckoo
https://github.com/cuckoosandbox/cuckoo/issues/2737
ダークモード表示
右上にある筆アイコンをクリックすることでカラーを変更することができます。ダークモード含め、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
結果は以下の通りです。
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 一部リンク切れの旨を追記