Cuckoo sandbox deploy tutorial

Cuckoo

Cuckoo(布谷鸟)沙箱是一个开源且免费的自动化的恶意样本分析系统。主体使用python开发, 该沙箱提供一个主要的沙箱引擎和一个使用django开发的web界面, 通过web界面或者沙箱系统提供的web api提交可疑文件,沙箱系统即可自动分析,并在分析完毕后提供一个详细的报告,概述该文件在沙箱中执行时的行为,支持分析Windows, macOS, Linux, 和 Android下的恶意文件.

架构

Cuckoo由Cuckoo host、Analysis Guests、Virtual network构成。cuckoo host是调度中心,analysis guest是具体执行样本的沙箱环境,两者通过虚拟网卡连接。当提交样本到cuckoo host后,cuckoo host会调度一个空闲的analysis guest节点,同时将样本传递给所选择的沙箱节点进行自动化分析,分析结束之后将沙箱节点采集到的分析数据进行汇总,最后输出分析报告。

image-20221029104731327

Cuckoo沙箱底层基于虚拟化技术,可以使用不同的虚拟化平台进行构建,目前支持的虚拟化平台包括:VirtualBox、KVM、VMware Workstation、XenServer

环境

Vmware workstation 16 Pro

Ubuntu 16.04 x64

Virtual Box 5.2

Windows 7 unlimited sp1 x64

Cuckoo 2.0.7

Python 2.7.18 x64

阐述下各软件安装位置,简单画个草图

image-20221029194906418

部署

首先需要在Vmware上虚拟化一个Ubuntu作为cuckoo的宿主机,建议cpu和内存配置不要太低, 笔者配置如下

image-20221029114522390

此处需要注意的是虚拟机CPU要开启VT-X或者AMD-V虚拟化嵌套

安装依赖

由于在具有中国特色的互联网环境下, 建议在安装下面各个依赖和组件时使用科学上网~

1
sudo apt-get install curl git wget openconnect python-dev libffi-dev libssl-dev libfuzzy-dev libtool flex autoconf libjansson-dev  python-setuptools libjpeg-dev zlib1g-dev swig mongodb postgresql libpq-dev libcap2-bin  tcpdump apparmor-utils  iptables-persistent ssdeep libsdl1.2debian -y --fix-missing

image-20221029133823119

安装pip
1
2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -O
sudo python get-pip.py

image-20221029134908840

安装VirtualBox

注意在安装VirtualBox时,尽量选择>5.1的版本.虽然5.1也可以正常使用,但在cuckoo启动时会显示VirtualBox存在风险

1
2
3
4
5
6
下载VirtualBox 5.2.44
curl https://download.virtualbox.org/virtualbox/5.2.44/virtualbox-5.2_5.2.44-139111~Ubuntu~xenial_amd64.deb -O
下载VirtualBox 5.2.44扩展
curl https://download.virtualbox.org/virtualbox/5.2.44/Oracle_VM_VirtualBox_Extension_Pack-5.2.44.vbox-extpack -O
安装
sudo dpkg -i virtualbox-5.2_5.2.44-139111~Ubuntu~xenial_amd64.deb

image-20221029140429467

打开VirtualBox导入扩展

image-20221029140830700

安装volatility

Volatility是一款开源的内存取证分析工具,支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证方式

1
2
3
4
git clone https://github.com/volatilityfoundation/volatility.git
git clone https://github.com/volatilityfoundation/volatility.git
cd volatility
sudo python setup.py build
sudo python setup.py install

image-20221029141224176

image-20221029141245956

安装python依赖包
1
sudo -H pip install distorm3==3.4.4 yara-python==3.6.3 pydeep openpyxl ujson jupyter pip setuptools

image-20221029142234630

image-20221029142250045

组件设置
1
2
3
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
getcap /usr/sbin/tcpdump
sudo aa-disable /usr/sbin/tcpdump

image-20221029142639460

安装cuckoo
1
2
sudo -H pip install -U cuckoo
cuckoo

image-20221029143222538

image-20221029143249023

安装完成后运行一次cuckoo让其生成默认配置文件

默认配置位于/home/xxxx/.cuckoo/conf

image-20221029143450718

至此, cuckoo主体已安装完成,要想cuckoo正常工作,还需要对虚拟网络,防火墙等进行一系列设置.

虚拟网络设置
1
2
3
4
创建仅主机虚拟网络
vboxmanage hostonlyif create
设置虚拟网络网关地址
vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1

image-20221029143911786

将虚拟网络安装为服务并设置为自启动

1
2
3
4
5
sudo mkdir /opt/systemd/
sudo nano /opt/systemd/vboxhostonly
写入以下内容,保存退出
sudo mkdir /opt/systemd/
sudo nano /opt/systemd/vboxhostonly
写入以下内容,保存退出
#!/bin/bash
vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1

image-20221029144243044

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cd /opt/systemd/
sudo chmod a+x vboxhostonly
创建服务
sudo cd /opt/systemd/
sudo chmod a+x vboxhostonly
创建服务
sudo touch /etc/systemd/system/vboxhostonlynic.service
sudo nano /etc/systemd/system/vboxhostonlynic.service
写入以下内容,保存退出
[Unit]
Description=Setup VirtualBox Hostonly Adapter
After=vboxdrv.service

[Service]
Type=oneshot
ExecStart=/opt/systemd/vboxhostonly

[Install]
WantedBy=multi-user.target

image-20221029144703449

1
2
3
4
重载服务
systemctl daemon-reload
设置虚拟网络自启动
systemctl 重载服务
systemctl daemon-reload
设置虚拟网络自启动
systemctl enable vboxhostonlynic.service

image-20221029145036493

配置iptables-persistent
1
2
3
4
5
6
7
sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
ens33替换为实际网卡名称
sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
打开ipv4转发
echo 1 | sudo sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
ens33替换为实际网卡名称
sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
打开ipv4转发
echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
sudo sysctl -w net.ipv4.ip_forward=1

image-20221029145738456

修改cuckoo配置文件

cuckoo.conf

image-20221029150504555

memory_dump=yes 忘记截图了

auxiliary.conf

image-20221029150713653

virtualbox.conf

image-20221029151228360

processing.conf

image-20221029151737867

memory.conf

image-20221029152104617

reporting.conf

image-20221029152403703

安装配置分析机

在VirtualBox中安装Windows7 unlimited sp1 x64, 安装过程此处不再赘述

注意

  • 分析机标签名称,ip和快照要与配置文件中一致
  • 快照要使用运行中快照
  • 设置静态ip后检查是否可以正常连接互联网,如不能联网检查iptables配置
  • 分析机网络选择HostOnly

组策略配置

1
windows设置->安全设置->本地策略->安全选项->安全选项->用户账户控制: 管理员批准模式中管理员的提升权限的行为 下选择windows设置->安全设置->本地策略->安全选项->安全选项->用户账户控制: 管理员批准模式中管理员的提升权限的行为 下选择"不提示,直接升"

image-20221029172024467

1
windows设置->安全设置->本地策略->安全选项->安全选项->用户账户控制:检测应用程序安装并提升提升,下选择windows设置->安全设置->本地策略->安全选项->安全选项->用户账户控制:检测应用程序安装并提升提升,下选择"禁用"

image-20221029172212664

1
windows设置->安全设置->本地策略->安全选项->安全选项->用户账户控制:以管理员批准模式运行所有管理员,选择windows设置->安全设置->本地策略->安全选项->安全选项->用户账户控制:以管理员批准模式运行所有管理员,选择"禁用"

image-20221029172448469

安装python 2.7.18和pillow

安装python时注意勾选添加到环境变量
由于中国特色网络原因需要换pip源

1
2
3
4
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn

image-20221029173107366

image-20221029173757160

设置agent

拷贝/home/s0cke3t/.cuckoo/agent/agent.py到分析机C:\Users\xxxxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\目录下并更改后缀为pyw

image-20221029182642966

双击运行,查看是否有8000端口监听

image-20221029182748392

一切设置完毕后,就可以对分析机当前状态进行快照保存,保存名称要与配置文件的一致, 保存快照后暂停并休眠分析机

image-20221029183601831

至此全部配置完毕

启动

启动cuckoo

1
2
3
4
5
6
7
8
拉取最新的规则库
cuckoo community
启动cuckoo
cuckoo
启动本地web管理页面
cuckoo web
远程访问web管理页面
cuckoo web runserver 0.0.0.0:8000

image-20221029184219957

启动cuckoo

image-20221029184314418

启动web页面

image-20221029184426904

默认管理地址http://localhost:8000

image-20221029184527951

输入配置的密码即可访问

image-20221029184612182

样本测试

笔者以Synaptics蠕虫病毒进行测试

image-20221029185055740

上传样本后选择要分析的行为, 分析时长, 以及要使用的分析机, 之后提交即可.

image-20221029185535126

等待状态变为reported说明已经分析完成,点击任务可查看分析报告

image-20221029192151001

image-20221029192221733

总结

总体来说cuckoo还是一款比较完善且专业的开源沙箱分析系统, 对于研究分析恶意软件和应急响应人员来说都是一个很不错的选择

优缺点

优点:

  • 开源且免费,对于有特殊需求的人群可以很好的进行定制化
  • 支持虚拟化类型多,可以跨平台使用
  • 分析较为全面,几乎可以满足需求
  • 不需要太高的硬件要求
  • 支持导出报告

缺点:

  • 安装和配置过于繁琐, 稍有差错会导致运行失败

  • 英文界面, 需要使用者具有一定的英语基础

  • 内存分析时间太长, 基本都在半小时左右

  • 更新迭代慢(最新版本为2019年发布)

  • 默认的规则, 样本库对恶意软件的支持较少

    对于新的恶意软件需要使用者自己编写yara规则

  • 不支持Python3

参考

官方网站

官方文档

cuckoo仓库

cuckoo 2.0.7更新日志

开源沙箱Cuckoo Sandbox 的部署