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公式ドキュメント
- Nikola's Blog Cuckoo 3 Installation Guide
- Hamza Megahed Cuckoo 3 Installation