とりあえずCuckoo3を構築してみた。

Cuckoo3の構築手順(2024年03月07日時点)

転職や結婚の準備などプライベートが忙しく、なかなかブログを書けずにいましたが、
時間ができたため、公式ドキュメントやネット記事を参考に試行錯誤し、
Cuckoo3の構築に成功したので、共有したいと思います。
CAPEとFogはもうしばらくお待ちください。。。。

目次

環境

今回のインストール環境はUbuntu 22.04.4 LTS 上で構築しました。

cuckoo@cuckoo:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
cuckoo@cuckoo:~$

Pythonのバージョンは、3.10.12で構築しています。

cuckoo@cuckoo:~$ python3 --version
Python 3.10.12
cuckoo@cuckoo:~$

依存関係

アップデート

システムを最新の状態に更新します。

sudo apt update && sudo apt upgrade -y

依存関係のインストール

必要なパッケージをインストールします。

sudo apt install git build-essential python3-dev python3.10-venv libhyperscan5 libhyperscan-dev libjpeg8-dev zlib1g-dev unzip p7zip-full rar unace-nonfree cabextract yara tcpdump genisoimage qemu-system-x86 qemu-utils qemu-system-common -y

KVMの権限変更

KVM アクセス権限を cuckoo ユーザーに与えます。

sudo adduser cuckoo kvm
sudo chmod 666 /dev/kvm

TCPダンプの構成

cuckoo ユーザー (非 root) に tcpdump の使用を許可

既存のユーザー(cuckoo)をpcapグループに追加します。

sudo groupadd pcap
sudo adduser cuckoo pcap
sudo chgrp pcap /usr/bin/tcpdump

非 root ユーザーの pcap の作成を許可する。

sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump

Ubuntu の Apparmor 設定を変更します。

sudo ln -s /etc/apparmor.d/usr.bin.tcpdump /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/disable/usr.bin.tcpdump

apparmorプロファイルを再度読み込みます。

sudo apparmor_parser -r /etc/apparmor.d/usr.bin.tcpdump

Cuckoo3のインストール

ダウンロード

GitHub から Cuckoo3 のソースコードを取得します。

sudo chown cuckoo /opt && cd /opt
git clone https://github.com/cert-ee/cuckoo3
cd cuckoo3

processing/setup.py ファイルの install_requires セクションを編集し、バージョン指定を修正します。

"pefile<2023.0.0",
"hyperscan>=0.4.0",
"yara-python==4.2.0",

変更前

install_requires=[
        "Cuckoo-common>=0.1.0",
        "sflock>=1.0, <1.1",
        "protobuf>=3.20.1, <4.0.0",
        "httpreplay>=1.0, <1.1",
        "pefile>=2022.5.30, <2024.0.0",
        "oletools>=0.60.1, <0.61",
        "cryptography>=41.0.4, <42.0.0",
        "hyperscan>=0.2.0, <0.7",
        "yara-python>=4.2.0, <4.4",
        "roach>=1.0, <1.1",
        "suricatactl==0.0.1.dev3",
        "dpkt>=1.9.7.2, <1.10"
    ],

変更後

install_requires=[
        "Cuckoo-common>=0.1.0",
        "sflock>=1.0, <1.1",
        "protobuf>=3.20.1, <4.0.0",
        "httpreplay>=1.0, <1.1",
        "pefile<2023.0.0",
        "hyperscan>=0.4.0",
        "oletools>=0.60.1, <0.61",
        "cryptography>=41.0.4, <42.0.0",
        "hyperscan>=0.2.0, <0.7",
        "yara-python==4.2.0",
        "roach>=1.0, <1.1",
        "suricatactl==0.0.1.dev3",
        "dpkt>=1.9.7.2, <1.10"
    ],

インストール

新しい Python 環境を作成し、Cuckoo をインストールします。

python3 -m venv venv
source venv/bin/activate
pip install wheel

インストーラスクリプトを実行します。

./install.sh

Cuckoo 作業ディレクトリ (CWD) の作成します。

cuckoo createcwd

ステージャーと監視バイナリをインストールします。

cuckoo getmonitor monitor.zip
unzip signatures.zip -d ~/.cuckoocwd/signatures/cuckoo/

VMcloakのインストール

ダウンロード

Cuckoo サンドボックス環境で使用する Windows 仮想マシンを VMcloak を使用して作成します。githubからソースを取得します。

git clone https://github.com/hatching/vmcloak.git && cd vmcloak

setup.py を編集し、install_requires の pefile のバージョンを次のように変更します。

"pefile<2023.0.0",

修正前

install_requires=[
        "click",
        "jinja2",
        "pefile>=2019.4.18, <2019.5.0"
        "pyyaml>=5.1",
        "sqlalchemy>=1.4, <1.5",
        "alembic>=1.7.4, <1.8",
        "requests>=2.22.0, <3",
        "psutil>=5.4.8, <6"
    ],

修正後

install_requires=[
        "click",
        "jinja2",
        "pefile<2023.0.0",
        "pyyaml>=5.1",
        "sqlalchemy>=1.4, <1.5",
        "alembic>=1.7.4, <1.8",
        "requests>=2.22.0, <3",
        "psutil>=5.4.8, <6"
    ],

vmcloak/platforms/qemu.py を編集し、_create_snapshot_disk 関数を次のように変更します。

subprocess.check_call(["qemu-img", "create", "-F", "qcow2", "-o",
                    "lazy_refcounts=on,cluster_size=2M", "-b",
                    image_path, "-f", "qcow2", path])

修正前

def _create_snapshot_disk(image_path, path):
    log.info("Creating snapshot %s with master %s", path, image_path)
    subprocess.check_call(["qemu-img", "create", "-f", "qcow2", "-o",
                           "lazy_refcounts=on,cluster_size=2M", "-b",
                           image_path, path])

修正後

def _create_snapshot_disk(image_path, path):
    log.info("Creating snapshot %s with master %s", path, image_path)
    subprocess.check_call(["qemu-img", "create", "-F", "qcow2", "-o",
                           "lazy_refcounts=on,cluster_size=2M", "-b",
                           image_path, "-f", "qcow2", path])

インストール

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

pip install . && cd ..

VMの作成

QEMU ネットワークインターフェースの構成

sudo /opt/cuckoo3/venv/bin/vmcloak-qemubridge br0 192.168.30.1/24
sudo mkdir -p /etc/qemu
echo 'allow br0' | sudo tee /etc/qemu/bridge.conf
sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper

Windows10のISOファイルをダウンロードします。

vmcloak isodownload --win10x64 --download-to ~/win10x64.iso
sudo mkdir /mnt/win10x64

Windows 10 ISOをマウントします。

sudo mount -o loop,ro /home/cuckoo/win10x64.iso /mnt/win10x64

Windows10のベースイメージをインストールします。

vmcloak --debug init --win10x64 --hddsize 128 --cpus 2 --ramsize 4096 --network 192.168.30.0/24 --vm qemu --ip 192.168.30.2 --iso-mount /mnt/win10x64 win10base br0

オプションで追加ユーティリティをインストールします。

vmcloak --debug install win10base dotnet:4.7.2 java:7u80 vcredist:2013 vcredist:2019 edge carootcert wallpaper disableservices

スナップショットを取得します。

vmcloak --debug snapshot --count 1 win10base win10vm_192.168.30.20

Cuckoo3の構成変更

CuckooにVMをインポートします。

cuckoo machine import qemu ~/.vmcloak/vms/qemu

サンプルのテンプレートを削除します。

cuckoo machine delete qemu example1

Cuckoo データベースの初期化をします。

cuckoomigrate database all

全てのエラーを無視する

resultserverとtcpdumpの設定を変更します。

vi ~/.cuckoocwd/conf/cuckoo.yaml

resultserverは下記のようにIPを変更します。 また、tcpdumpはpathを下記のように変更します。

# route/forward traffic between the analysis machines and the resultserver.
resultserver:
  listen_ip: 192.168.30.1
  listen_port: 2042

# Settings used by Cuckoo to find the tcpdump binary to use for network capture of machine traffic.
tcpdump:
  enabled: True
  path: /usr/bin/tcpdump

allowed_subnetsのサブネットを編集します。私の場合は(192.168.68.0/24)

vi ~/.cuckoocwd/conf/web/web.yaml

Cuckoo3のドキュメントをインストールします。

cd /opt/cuckoo3/docs
pip install -r requirements.txt
mkdocs build
cp -R site ../web/cuckoo/web/static/docs

デバッグモードでcuckooを実行します。

cuckoo --debug

Webサーバーのインストールと設定

Cuckoo Web インターフェースを公開するために uWSGI と Nginx を設定します。

pip install uwsgi
sudo apt-get install uwsgi uwsgi-plugin-python3 nginx -y
sudo adduser www-data cuckoo

uwsgi の設定を生成します。

cuckoo web generateconfig --uwsgi > cuckoo-web.ini

uWSGI 設定の配置を変更します。

sudo mv cuckoo-web.ini /etc/uwsgi/apps-available/
sudo ln -s /etc/uwsgi/apps-available/cuckoo-web.ini /etc/uwsgi/apps-enabled/cuckoo-web.ini

Webサーバー設定ファイルの編集します。

 vi ~/.cuckoocwd/web/web_local_settings.py

下記を設定ファイルの最後の行に追加します。

STATIC_ROOT = "/opt/cuckoo3/web/cuckoo/web/static"

nginxの設定を生成します。

cuckoo web generateconfig --nginx > cuckoo-web.conf

Nginx 設定の編集します。

vi cuckoo-web.conf

serverセクションで、listenの値をlisten 127.0.0.1:8000からlisten 80に変更します。

server {
    listen 80;

    # Directly serve the static files for Cuckoo web. Copy
    # (and update these after Cuckoo updates) these by running:
    # 'cuckoo web djangocommand collectstatic'. The path after alias should
    # be the same path as STATIC_ROOT. These files can be cached. Be sure
    # to clear the cache after any updates.
    location /static {
        alias /opt/cuckoo3/web/cuckoo/web/static;
    }

Nginx 設定の配置を変更します。

sudo mv cuckoo-web.conf /etc/nginx/sites-available/cuckoo-web.conf
sudo ln -s /etc/nginx/sites-available/cuckoo-web.conf /etc/nginx/sites-enabled/cuckoo-web.conf

Nginxデフォルトページの削除します。

sudo rm /etc/nginx/sites-enabled/default

Nginxとuwsgiを再起動します。

sudo systemctl restart nginx uwsgi

Cuckoo3を起動します。

cuckoo

UI

UIは以下のような感じです。

解析結果の画面は以下のような感じです。

サマリ

PF File

Task

参考文献

  • Cuckoo3公式ドキュメント

github.com

  • Nikola's Blog Cuckoo 3 Installation Guide

reversingfun.com

  • Hamza Megahed Cuckoo 3 Installation

www.hamza-megahed.com