本文分为3部分,分别是 布谷鸟的安装、虚拟机的使用和布谷鸟的配置和使用。
参考资料有:
布谷鸟的安装
1、环境准备
apt-get update
apt-get install -y python python-pip python-dev libffi-dev libssl-dev
apt-get install -y python-virtualenv python-setuptools
apt-get install -y libjpeg-dev zlib1g-dev swig
# 如果使用web交互界面,需要安装mongodb,ubuntu 12.04安装mongodb有问题,不能简单安装,需要参考官网文档进行安装 (可以不安装)
apt-get install -y mongodb
# 默认使用sqlite3,推荐使用PostgreSQL,需要配置(可以不安装)
apt-get install -y postgresql libpq-dev
2、安装yara和pydeep
这一步推荐使用virtualenv进行安装,否则后面使用virtualenv安装cuckoo后运行可能会报错,提示没有yara。
(venv)pip install yara-python==3.5.0
pydeep好像不需要,可参考freebuf安装。
3、安装virtualbox
dpkg -i xxx.deb
# 如果安装时报错缺少依赖项,可以执行
apt-get install -f
# 进行安装
CentOS安装virtualbox
# 首先要保证内核版本一致
yum install kernel kernel-headers kernel-devel gcc make
# 然后重启,在安装virtualbox
yum install xxx.rpm
4、安装tcpdump
apt-get install -y tcpdump apparmor-utils libcap2-bin
aa-disable /usr/sbin/tcpdump
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
5、安装Volatility 和 M2Crypto
好像也不需要。
6、创建cuckoo用户
注意,使用cuckoo的用户要和创建virtualbox的用户一致
创建用户并添加到virtualbox的用户组
adduser cuckoo
usermod -a -G vboxusers cuckoo
不过我一直都直接用root的。
7、安装cuckoo
pip install virtualenv
virtualenv venv
. venv/bin/activate
(venv)$ pip install -U pip setuptools
(venv)$ pip install -U cuckoo
CentOS安装可能会报这些错:
1)
swig error : Unrecognized option -builtin
Use 'swig -help' for available options.
error: command 'swig' failed with exit status 1
----------------------------------------
Failed building wheel for m2crypto
解决方法:http://xujpxm.blog.51cto.com/8614409/1734786
安装新版swig
2)
ImportError: No module named bz2
解决方法:yum install bzip2-devel
http://blog.csdn.net/ruiyiin/article/details/45641833
3)
CuckooDependencyError: Missing unknown database driver, unable to import pysqlite2
解决方法
yum install sqlite-devel
pip install pysqlite
如果还报错的话,解决不了,换mysql或者pgsql吧
8、启动cuckoo
在virtualenv下执行
(venv)$ cuckoo -d
首次启动会在用户目录下创建一下隐藏的cuckoo目录,即 /home/Username/.cuckoo/,目录下的conf文件夹内就有配置文件。也可以使用cwd来指定在哪里创建。
虚拟机的使用
安装好cuckoo后,我们就需要安装客户机了。如果我们使用图形化界面,则只需要像平时那样打开virtualbox,创建虚拟机,然后进行配置就可以了。
但如果是使用服务器或者是命令行界面的话,则需要使用 VBoxManage 命令来操作并管理虚拟机了。
cuckoo的客户机官方推荐使用win7 64位,xp也是非常好的。
个人推荐先在自己的系统上使用图形界面把虚拟机安装配置好,在直接把虚拟机的硬盘vdi文件复制到服务器上,然后在创建虚拟机,指定使用的硬盘文件。
客户机的安装
安装好客户机的系统后,我们要进行配置
3、关闭windows自动更新
4、关闭windows防火墙
5、安装第三方应用程序(MS Office 2003/2007,Adobe Reader 9.3.4,Firefox 3.6等,可以到http://www.oldapps.com这个网站去下载旧的软件)
6、在Ubuntu下,把/home/Username/.cuckoo/agent目录下的agent.py拷贝到客户机中(比如桌面或者新建一个目录啥的),并将agent.py重命名为agent.pyw,这样运行的时候就不会显示控制台窗口了
7、将agent.pyw的快捷方式放到启动文件夹中去(C:\Documents and Settings\All Users\「开始」菜单\程序\启动 ) (win 7: 开始菜单->所有程序->启动->右键打开,把快捷方式复制过去)
8、运行agent.pyw后,我们使用netstat -an命令会发现本地的8000端口正在处于监听状态中
(如果是win7,还需要关闭UAC)
9、设置网络为host-only模式。
cuckoo客户机需要配置网络方式为 Host-only 模式,并配置网卡ip,网关配置为默认的192.168.56.1 (此 IP 要与上面的 vboxnet0 网卡的 IP 地址相对应)。这样就不用担心客户机会污染到主机所在的网络。
配置好后,我们要验证网络没问题后在创建快照,这样每次cuckoo分析前都会恢复快照进行检测。
首先我们在宿主机上(即ubuntu/CentOS)上设置防火墙:
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.56.0/24 -j MASQUERADE
# Default drop.
iptables -P FORWARD DROP
# Existing connections.
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept connections from vboxnet to the whole internet.
iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPT
# Internal traffic.
iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.56.0/24 -j ACCEPT
# Log stuff that reaches this point (could be noisy).
iptables -A FORWARD -j LOG
还要开启主机转发,编辑 /etc/sysctl.conf ,将里面 net.ipv4.ip_forward=1 前的注释取消,然后运行以下命令即可永久开启 IP 转发功能:
sysctl -p /etc/sysctl.conf
配置好后,客户机就应该可以上网的了。
保证客户机可以上网后,我们就可以创建快照,如
VBoxManage snapshot "win7_x86" take "win7_x86_snapshot" --pause
注意,创建快照的用户一定要和cuckoo的用户一致,否则cuckoo可能启动不了和恢复不了虚拟机。
Cuckoo的配置和使用
1、首先配置cuckoo,进入到/home/Username/.cuckoo,编辑 conf/virtualbox.conf ,
# Specify a comma-separated list of available machines to be used. For each
# specified ID you have to define a dedicated section containing the details
# on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)
machines = win7_x86
[win7_x86_1]
# Specify the label name of the current machine as specified in your
# VirtualBox configuration.
label = win7_x86
# Specify the operating system platform used by current machine
# [windows/darwin/linux].
platform = windows
# Specify the IP address of the current virtual machine. Make sure that the
# IP address is valid and that the host machine is able to reach it. If not,
# the analysis will fail.
ip = 192.168.56.111
# (Optional) Specify the snapshot name to use. If you do not specify a snapshot
# name, the VirtualBox MachineManager will use the current snapshot.
# Example (Snapshot1 is the snapshot name):
snapshot = win7_x86_snapshot
把machines修改为对应的客户机名称,还有ip和快照名称
2、如果需要使用web交互界面,需要修改reporting.conf,开启mongodb
[mongodb]
enabled = yes
还有生成的报告(按需修改)
[singlefile]
# Enable creation of report.html and/or report.pdf?
enabled = yes
# Enable creation of report.html?
html = yes
# Enable creation of report.pdf?
pdf = no
还有一些其他的配置慢慢看吧。
3、安装特征库
(venv)$ cuckoo community
# 如果下载比较慢,多试几次,或者先下载完后进行导入
(venv)$ cuckoo community --file cuckoo_master.tar.gz
4、启动cuckoo
(venv)$ cuckoo -d
如果出现waiting for analysis tasks 即表示成功,可以进行提交任务进行检查了。
5、启动web界面
(venv)$ cuckoo web runserver
指定IP和端口
(venv)$ cuckoo web runserver 0.0.0.0:PORT
这样我们就可以登录页面提交测试文件或url了。
6、让cuckoo运行在后台
编辑 /home/Username/.cuckoo/conf/cuckoo.conf ,把 process_results 改为off
安装supervisor
apt-get install supervisor
运行
supervisord -c /home/Username/.cuckoo/supervisord.conf
基本命令
supervisorctl stop cuckoo:
supervisorctl start cuckoo:
supervisorctl restart cuckoo:
7、cuckoo提交任务
cuckoo submit --url http://www.example.com
8、结果分析
每次提交一个分析请求后,会得到该请求的一个ID号。我们可以在 /home/Username/.cuckoo/storage/analyses/ID/reports/report.json 查看分析结果
9、更改默认数据库
cuckoo默认使用sqlite数据库,如果需要使用并发(多台虚拟机同时分析)的话,推荐使用mysql或者postgresql。
这里使用mysql作为设置,首先创建cuckoo用户,密码为cuckoo,数据库为cuckoo
mysql> CREATE DATABASE IF NOT EXISTS cuckoo default charset utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'cuckoo'@'localhost' IDENTIFIED BY 'cuckoo';
mysql> GRANT ALL PRIVILEGES ON cuckoo.* TO 'cuckoo'@'localhost';
mysql> FLUSH PRIVILEGES;
接着修改cuckoo配置文件 conf/cuckoo.conf
[database]
connection = mysql://cuckoo:cuckoo@localhost/cuckoo
重启cuckoo即可。
10、特征分析
signature 在工作目录下 ~/.cuckoo/signatures
错误处理
常见的错误有 supervisor 出错,cuckoo出错,vboxmanage出错
基本可以用 supervisorctl restart cuckoo: 来解决(如果不行,可以使用supervisord -c 重启)
cuckoo出现的问题可能有分析完后,虚拟机关闭不了,导致虚拟机不能恢复并启动,只能是强制关闭虚拟机并重启cuckoo。还有会timeout导致生成不了报告,或者生成的报告是报错的。
这些都无解,可以到github上的issue查查解决方法。
cuckoo进阶
1、CWD工作目录
虽然 cuckoo 默认的 cwd 是 ~/.cuckoo,但决定cwd的顺序是:
通过 --cwd 参数设置 (e.g., --cwd ~/.cuckoo).
通过 CUCKOO 环境变量 (e.g., export CUCKOO=~/.cuckoo).
通过 CUCKOO_CWD 环境变量
当前目录是 CWD (假设这个目录已经创建了CWD)
默认 ~/.cuckoo
多个CWD可以让多个cuckoo实例跑在不同的配置,比如并发运行不同系统的cuckoo等。
我们也可以使用REST API来提交或者获取分析等。
开启API Server
cuckoo api
这种方式是最简单的,虽然没什么问题,但如果想需要使用健壮的方式部署服务器的话,可以使用uWSGI+Nginx来进行部署。
apt-get install uwsgi uwsgi-plugin-python nginx
然后执行
cuckoo api --uwsgi
把生成的结果保存到 /etc/uwsgi/apps-available/cuckoo-api.ini 文件里。
在执行
ln -s /etc/uwsgi/apps-available/cuckoo-api.ini /etc/uwsgi/apps-enabled/
service uwsgi start cuckoo-api
然后我们在配置nginx,执行
cuckoo api --nginx
把生成的结果保存到 /etc/nginx/sites-available/cuckoo-api
重启nginx
service nginx restart
(确保nginx重启后有在监听8090端口)
然后我们可以测试一下
提交url
curl -F url="http://www.malicious.site" http://localhost:8090/tasks/create/url
获取请求ID状态
curl http://localhost:8090/tasks/view/1
具体请查看官方文档
一些脚本
start_cuckoo.sh 开机启动脚本
#!/bin/bash
vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0
source /home/bluedon/cuckoo/venv/bin/activate
supervisord -c /home/bluedon/cuckoo/.cuckoo/supervisord.conf
/home/bluedon/cuckoo/set_iptables.sh
set_iptables.sh 设置防火墙脚本
#!/bin/bash
NIC="eth0"
iptables -t nat -A POSTROUTING -o ${NIC} -s 192.168.56.0/24 -j MASQUERADE
# Default drop.
iptables -P FORWARD DROP
# Existing connections.
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept connections from vboxnet to the whole internet.
iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPT
# Internal traffic.
iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.56.0/24 -j ACCEPT
# Log stuff that reaches this point (could be noisy).
iptables -A FORWARD -j LOG
创建虚拟机的脚本 create_win7.sh
#!/bin/bash
cuckoo_venv="/home/bluedon/cuckoo/"
create_vbox()
{
for i in {1..3}
do
vdi_path=$cuckoo_venv"virtualbox/win7_x86_"$i"/"
VBoxManage createvm --name win7_x86_$i --ostype Windows7 --register --basefolder $cuckoo_venv"virtualbox/"
VBoxManage modifyvm win7_x86_$i --memory 1024 --vram 18
VBoxManage storagectl win7_x86_$i --name SATA --add sata --controller IntelAhci --bootable on
cp $cuckoo_venv"win7_x86.vdi" $vdi_path
# change uuid
VBoxManage internalcommands sethduuid $vdi_path"win7_x86.vdi"
VBoxManage storageattach win7_x86_$i --storagectl SATA --port 0 --device 0 --type hdd --medium $vdi_path"win7_x86.vdi"
vboxmanage modifyvm win7_x86_$i --nic1 hostonly --hostonlyadapter1 vboxnet0
echo "done create win7_x86_"$i
echo ""
done
}
create_vbox