最近因为需要做一个恶意流量分析的项目,需要自行搭建沙箱环境,综合各种论文的意见最终选择了cuckoo(布谷鸟)这款沙箱。搭建的过程中参考了cuckoo作者的文档还有网上一些其他的资料,总的来说遇到了不少的坑,现在把自己搭建的配置写一下。
本人搭建cuckoo的设备是联想曙光I420服务器,系统为ubuntu18.04.2 64位版本
1.host安装
安装python库
需要以下来自apt存储库的软件包才能使Cuckoo正确安装和运行:
sudo apt-get install python python-pip python-dev libffi-dev libssl-dev
sudo apt-get install python-virtualenv python-setuptools
sudo apt-get install libjpeg-dev zlib1g-dev swig
安装MongoDB:
sudo apt-get install mongodb
如果使用PostgreSQL数据库,如下方法安装:
sudo apt-get install postgresql libpq-dev
安装Pydeep:
wget http://sourceforge.net/projects/ssdeep/files/ssdeep-2.13/ssdeep-2.13.tar.gz/download -O ssdeep-2.13.tar.gz
tar -zxf ssdeep-2.13.tar.gz
cd ssdeep-2.13
./configure
make
sudo make install
sudo -H pip install pydeep
安装yara:
sudo apt-get install yara
sudo apt-get install python-yara
sudo -H pip install pip install yara-python==3.6.3
如果要将KVM用作机械模块,则必须安装KVM:
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils python-libvirt
如果要使用XenServer,则必须安装XenAPI Python包:
sudo -H pip install XenAPI
其它相关依赖:
sudo apt-get install git python-django python-pil python-sqlalchemy python-bson python-dpkt python-jinja2 python-magic python-pymongo python-gridfs python-bottle python-pefile python-chardet -y
安装virtualbox虚拟化软件(在Ubuntu上)
echo deb http://download.virtualbox.org/virtualbox/debian xenial contrib | sudo tee -a /etc/apt/sources.list.d/virtualbox.list
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install virtualbox-5.2
安装tcpdump(在Ubuntu上)
sudo apt-get install tcpdump apparmor-utils
sudo aa-disable /usr/sbin/tcpdump
Tcpdump需要root权限,但由于您不希望Cuckoo以root身份运行,因此必须为二进制文件设置特定的Linux功能:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
可以使用以下命令验证上一个命令的结果:
getcap /usr/sbin/tcpdump
#/usr/sbin/tcpdump = cap_net_admin,cap_net_raw+eip
如果没有安装setcap,可以使用:
sudo apt-get install libcap2-bin
安装Volatility:
先安装依赖:
sudo -H pip install openpyxl
sudo -H pip install ujson
sudo -H pip install pycrypto
sudo -H pip install distorm3
sudo -H pip install pytz
然后安装volatility
git clone https://github.com/volatilityfoundation/volatility.git
cd volatility
python setup.py build
sudo python setup.py install
#确认安装无误
python vol.py -h
安装cuckoo:
sudo -H pip install -U pip setuptools
sudo -H pip install -U cuckoo
安装cuckoo虚拟环境(可选):
virtualenv venv
. venv/bin/activate
(venv)$ pip install -U pip setuptools
(venv)$ pip install -U cuckoo
配置主机网络信息(保证虚拟机内客户机流量通过cuckoo转发):
sudo iptables -t nat -A POSTROUTING -o eth0 -s 192.168.56.0/24 -j MASQUERADE
sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.56.0/24 -j ACCEPT
sudo iptables -A FORWARD -j LOG
echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
sudo sysctl -w net.ipv4.ip_forward=1
注意,配置完这里以后在我的服务器上出现了一个情况,就是服务器的DNS地址变成了127.0.0.1,导致安装完成后虚拟机内客户机可以正常上网而服务器主机无法正常完成dns解析,所以需要检查服务器dns是否发生变动,如果变动需要自己修改。
2.guest安装
在virtualbox虚拟机中中全局创建host-only网卡,创建完成后在虚拟机中安装window7 32位版本。
关闭windows防火墙和自动更新:
在控制面板关闭windows防火墙、自动更新、UAC
配置虚拟机网络:
配置虚拟机的网络为Host-only。在虚拟机内手动设置IP、网关、子网掩码、DNS。
IP: 192.168.56.101
Subnet mask:255.255.255.0
Default gateway: 192.168.56.1
Prefered DNS server: 114.114.114.114
Alternate DNS server: 8.8.8.8
安装python2.7并配置环境变量
apent代理文件设置:
将之前安装的cuckoo得到的.cuckoo(隐藏文件,在Home文件夹下按ctrl+h),文件夹中的agent/agent.py挪到虚拟机中(记得给你的虚拟机安装增强功能,如果拖不进去就直接去Github上面下载2.0.rc2的版本,里面有)。需要 agent.py 开机启动,并且不能有运行窗口,这就需要另做一些处理:把agent.py文件放到系统开机启动目录中,Win7默认的路径是:
C:\Users[USER]\AppData\Roaming\MicroSoft\Windows\StartMenu\Programs\Startup\;
把 agent.py 后缀改成 agent.pyw,这样程序启动就不会有 GUI 窗口了。
保存虚拟机:
在执行此操作之前,请确保您Cuckoo的代理正在运行并且Windows已完全启动。
3.Cuckoo 配置
Cuckoo配置文件的更改是非常重要的一步,否则很可能你的所有安装都无法正常启动。在 .cuckoo/conf/中修改配置文件:
cuckoo.conf:
[cuckoo]
version_check = no //每次启动都要检查更新很费时间,可以选择关闭
machinery = virtualbox
process_results = yes //有教程建议修改为no,这样会导致启动Cuckoo Sandbox需要多一个步骤,但会让主模块与处理报告的模块分离,大幅提升稳定性,避免各种意外发生。但是我没有找到这样做以后报告如何生成,所以维持了yes。
virtualbox.conf:
mode = gui //有界面,调试的时候可以选择
或 mode = headless //无界面
machines = 你的虚拟机名字
[你的虚拟机名字]
label = 你的虚拟机名字
platform = windows
ip = 192.168.56.10 # IP address of the guest
snapshot = 你创建的快照名字
reporting.conf:
[mongodb]
enabled = yes
#也许还有其他要改的,但是这个最重要,其他是yes还是no更多的是看你的需要,或者之后在使用时再来配置文件里面打开
4.其他配置
社区签名库:
运行以下命令下载Cuckoo提供的社区版行为签名库:
cuckoo community
5.Cuckoo的启动
Cuckoo的启动和VirtualBox需要在同一用户角色下,一般来说都是非root用户
启动Cuckoo
cuckoo 或 cuckoo –d
启动web
cuckoo web runserver 0.0.0.0:8000
然后就可以在局域网内远程通过http://xxx.xxx.xxx.xxx:8000访问了。
可以通过web提交样本、查看报告,也可以通过命令行。
分析结果的储存路径为:
CWD/storage/analyses
启动API
cuckoo api --host 0.0.0.0 --port 9000
然后就可以在局域网内远程通过http://xxx.xxx.xxx.xxx:9000 调用api接口。