依赖安装

在安装和配置Cuckoo之前,需要安装依赖的一些软件和库。首先创建一个文件夹存放cuckoo所需要的文件。

这里是需要的库和需要安装的文件。

安装 Python 库 (Ubuntu/Debian-based)

Cuckoo的管理组件完全由Python脚本编写,所以就需要适合的Python版本。 完全兼容的Python版本是 2.7

老版本的Python和Python 3(未来可能会支持) 目前都是不支持的。

以下一些通过Apt安装的软件都是必须的:

$ 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

如果要使用基于Django开发的Web界面, 则MongoDB是必须要安装的:

$ sudo apt-get install mongodb

如要使用PostgreSQL数据库(推荐), PostgreSQL也必须安装:

$ sudo apt-get install postgresql libpq-dev

YaraPydeep 是可选的插件。如果选择安装的话,具体安装步骤可以参考他们的官网。这里使用源码安装。

安装pydeep

安装依赖

$apt-get install build-essential git libpcre3 libpcre3-dev libpcre++-dev  python-dev libfuzzy-dev

进入pydeep目录

$cd pydeep
$python setup.py build 
$sudo apt-get install python-dev libfuzzy-dev  #遇到编译错误用这条命令解决pydeep编译问题
$python setup.py install

进入ssdeep

$ cd ssdeep-2.13
$ ./configure
$ make
$ sudo make install

#确认安装无误
$ ssdeep -V
Then proceed by installing pydeep:

然后ssdeep -V和 pip show pydeep看看安装是否成功

安装yara

进入yaya

$cd yara-3.5.0/
$./bootstrap.sh

如果想修改yara的源代码还需要flex,bison这两个包用于语法解析

$apt-get install flex bison

接着编译安装yara:

$./configure
$make
$make install

然后测试是否安装成功

$make check

如果注意前面的编译安装结果的话会发现有缺少OpenSSL库的警告,这里我们安装一下

$apt-get install libssl-dev

接下来安装yara-python

$pip install yara-python

安装 tcpdump

Tcpdump用于抓取恶意软件运行过程中产生的所有流量。

安装命令:

$ sudo apt-get install tcpdump apparmor-utils
$ sudo aa-disable /usr/sbin/tcpdump

AppArmor 只有当PCAP文件生成没有权限的时候才需要,可以参考 Permission denied for tcpdump

禁用了AppArmor 的Linux的平台下, 比如Debian, 仅需要安装 tcpdump:

$ sudo apt-get install tcpdump

Tcpdump需要root权限,如果不想运行在root用户下,需要做以下设置:

$ 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

或者 (不推荐)

$ sudo chmod +s /usr/sbin/tcpdump

需要注意的是 setcap 命令不安全,有可能造成提权漏洞,建议将Cuckoo安装在专有的环境里。

可能出现的问题:
getcap /usr/sbin/tcpdump没有输出先查看当前的tcpdump的模式:

grep tcpdump /sys/kernel/security/apparmor/profiles
/usr/sbin/tcpdump (enforce)
上面显示是enforce模式,所以有这个问题,把它改成complain模式:
aa-complain /usr/sbin/tcpdump -
再次使用tcpdump 并写文件的时候就没问题了。
想在转换成enforce模式时:
aa-enforce /usr/sbin/tcpdump

【注】 通过命令aa-complain或aa-enforce可以切换profile文件的状态。这需要先安装对应的utils工具:
sudo apt-get install apparmor-utils

安装 Volatility

Volatility 用于分析内存转储文件的可选工具. Cuckoo与Volatility配合,可以更深度和全面的分析,可以防止恶意软件利用rookit技术逃逸沙箱的监控。

为了能够工作正常,Cuckoo要求Volatility版本不低于 2.3, 推荐最新版本2.5。 可以从官网下载 official repository.

可以查阅Volatility官方文档的安装说明.

#先安装依赖
$ sudo pip install openpyxl
$ sudo pip install ujson
$ sudo pip install pycrypto
$ sudo pip install distorm3
$ sudo pip install pytz 

#然后安装volatility
#将volatility压缩包解压
$ cd volatility
$ python setup.py build
$ python setup.py install

#确认安装无误
$ python vol.py -h

安装 M2Crypto

当前 M2Crypto 库需要 SWIG 支持. Ubuntu/Debian-like 系统下可以通过以下命令安装:

$ sudo apt-get install swig

SWIG 安装好之后,通过以下命令安装 M2Crypto:

$ sudo pip install m2crypto

安装 guacd(可选)

guacd 是RDP,SSH,VNC等远程控制的代理层, 是Cuckoo的Web界面的远程终端中使用,可选。
没有它,远程控制功能就无法使用,版本要求0.9.9及以上。我们推荐安装最新版本 使用如下命令安装:

$ sudo apt install libguac-client-rdp0 libguac-client-vnc0 libguac-client-ssh0 guacd

如果只需要远程桌面功能,则可以跳过 libguac-client-vnc0libguac-client-ssh0 两个包.

如果使用了较老的Linux发行版,又想使用最新的guacd,那只能自己动手编译:

$ sudo apt -y install libcairo2-dev libjpeg-turbo8-dev libpng-dev libossp-uuid-dev libfreerdp-dev
$ mkdir /tmp/guac-build && cd /tmp/guac-build
$ wget https://www.apache.org/dist/guacamole/0.9.14/source/guacamole-server-0.9.14.tar.gz
$ tar xvf guacamole-server-0.9.14.tar.gz && cd guacamole-server-0.9.14
$ ./configure --with-init-dir=/etc/init.d
$ make && sudo make install && cd ..
$ sudo ldconfig
$ sudo /etc/init.d/guacd start

安装requests包(用于http请求)

#进入requests
$cd requests
$python setup.py install

安装dateutil包

使用pip安装

$pip install python-dateutil

客户机安装

安装VirtualBox(直接安装):

$ sudo apt-get install virtualbox

打开虚拟机的时候需要用root权限打开,因为cuckoo是root权限,所以如果是非root权限的virtualbox,对于cuckoo来说是无法进行监听的。

然后使用VirtualBox安装windows xp

安装完成后安装增强功能工具(类似于VMware的VMware Tools)

安装完增强工具后我们才能对宿主机和客户机建立共享文件夹

建立文件夹依次选择VirtualBox菜单项中的设备-共享文件夹,设置如下:

配置客户机:

1.为windows安装python2.7

为系统添加python环境

2.安装PIL(Python截屏库)

3.关闭windows自动更新

4.关闭windows防火墙

6.Ubuntu .cuckoo/agent目录下的agent.py拷贝到客户机中的c:\python27目录下去,并将agent.py重命名为agent.pyw,这样运行的时候就不会显示控制台窗口了

7.将Python根目录下的agent.pyw的快捷方式放到启动文件夹中去

运行agent.pyw后,我们使用netstat -an命令会发现本地的8000端口正在处于监听状态中

接着将IP配置为192.168.56.101

对客户机做一个快照,取名为cuckoostart-1(名字自己取),后面对沙箱的配置中会用到。

配置该虚拟机的网络模式为Host-only: 宿主机192.168.56.1 客户机192.168.56.101,然后客户机就能与ubuntu通信。

此时Guest是无法访问互联网的,所以要在Host中设置IP转发,利用虚拟网卡做代理转发,接下来回到Ubuntu中,使用Iptables配置宿主机IP的转发和过滤规则:

#开启IP转发
$ sudo -i
$ sysctl -w net.ipv4.ip_forward=1
$ echo 1 > /proc/sys/net/ipv4/ip_forward
#为使重启之后仍然有效
$ gedit /etc/sysctl.conf
#去掉net.ipv4.ip_forward=1 前的注释,然后再执行下面的
$sysctl -p /etc/sysctl.conf

#配置Iptables的规则
$iptables -A FORWARD -o ens33 -i vboxnet1 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
$iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$iptables -A POSTROUTING -t nat -j MASQUERADE
$sysctl -w net.ipv4.ip_forward=1

#接着为保证重启之后依然有效
$sudo gedit /etc/network/interfaces
#在最后添加两行
$pre-up iptables-restore < /etc/iptables.rules 
$post-down iptables-save > /etc/iptables.rules 

安装 Cuckoo

安装最新版本的Cuckoo比较简单. 推荐使用 pip 和 [](https://cuckoo-sandbox.readthedocs.io/zh_CN/latest/installation/host/installation.html#id4)setuptools来安装最新版本的Cuckoo。 (一些可能存在的问题 DistributionNotFound / No distribution matching the version..).

(缺少依赖的时候会导致各种问题.建议安装前确定依赖项是否安装完成。)

$ sudo pip install -U pip setuptools
$ sudo pip install -U cuckoo

全局安装Cuckoo是没有问题的,但是 强力推荐virtualenv 来安装

$ virtualenv venv
$ . venv/bin/activate
(venv)$ pip install -U pip setuptools
(venv)$ pip install -U cuckoo

为什么推荐使用 virtualenv 呢:

  • Cuckoo的依赖并不是用的最新版本,可能会与系统已有的版本冲突.
  • 系统中其他软件的安装,可能会导致Cuckoo的依赖产生问题.
  • 使用virtualenv,可以让非root用户也可以安装相关软件.
  • 简单来说virtualenv是最佳实践.

配置cuckoo

Cuckoo配置文件的更改是非常重要的一步,否则很可能你的所有安装都无法正常启动。在 .cuckoo/conf/中修改配置文件:

cuckoo.conf

machinery = virtualbox
[resultserver]
ip = 192.168.56.1 #This is the IP address of the host
port = 2042 #leave default unless you have services running

auxiliary.conf

[sniffer]
# Enable or disable the use of an external sniffer (tcpdump) [yes/no].
enabled = yes

# Specify the path to your local installation of tcpdump. Make sure this
# path is correct.
# You can check this using the command: whereis tcpdump
tcpdump = /usr/sbin/tcpdump

# Specify the network interface name on which tcpdump should monitor the
# traffic. Make sure the interface is active.
# The ifconfig command will show you the interface name.
#自己选择的网络名称    
interface = vboxnet1

virtualbox.conf

machines = 你的虚拟机名字

[你的虚拟机名字]
label = 你的虚拟机名字
platform = windows
ip = 192.168.56.101 # IP address of the guest
snapshot = 你创建的快照名字

reporting.conf

[mongodb]
enabled = yes

启动cuckoo

$sudo cuckoo -d

至此,所有的配置都配置完了,此时先运行Web服务

 $sudo cuckoo web runserver

正常运行的话打开http://127.0.0.1:8000,就可以看到cuckoo SandBox的Web页面了。然后打开Cuckoo的服务,cuckoo 若最后一行显示等待分析任务,则说明你安装没问题,如果显示说没有找到CWD位置,则你需要先运行cuckoo -d

正常运行的话打开http://127.0.0.1:8000,就可以看到cuckoo SandBox的Web页面了。然后打开Cuckoo的服务,cuckoo 若最后一行显示等待分析任务,则说明你安装没问题,如果显示说没有找到CWD位置,则你需要先运行cuckoo -d

(可能遇到的情况 sudo cuckoo 命令找不到,cuckoo默认是在/home/username/.cuckoo/.local/bin/cuckoo)

把它添加到sudo命令启动

$sudo cp /home/username/.cuckoo/.local/bin/cuckoo  /usr/local/bin

运行情况:

web页面

Cuckoo基本使用

使用如下命令可以启动Cuckoo:

$ sudo cuckoo

启动后,可以看到日志输出,Cuckoo 会在开始的时候,请求 api.cuckoosandbox.org 检查更新。 可以在配置文件中修改 version_check 来关闭更新检查。

启动完成后,Cuckoo 就等着提交文件来分析了。

开始使用之前,如果需要修改Cuckoo的默认配置, 配置目录在 $CWD/conf/ 。 如果添加虚拟机或者修改数据库, 可以参考 客户机的准备。 如果需要WEB界面上看到样本分析报告, $CWD/conf/reporting.conf 中的 mongodb 一定要启用。 参考 Web 界面

接下来我们需要下载 Cuckoo Community, 其中包含了300多个恶意软件行为签名,可用于简化我们对结果的分析。 下载命令如下:

(venv)$ cuckoo community

或者如果有下载好的 community 压缩包, (例如 wget https://github.com/cuckoosandbox/community/archive/master.tar.gz) 可以通过如下命令直接导入:

(venv)$ cuckoo community --file master.tar.gz

至此,我们就可以开始提交样本了, 可以参考 提交工具 。 多个样本可以在一次命令中提交,例如:

(venv)$ cuckoo submit /tmp/sample1.exe /tmp/sample2.exe /tmp/sample3.exe
Success: File "/tmp/sample1.exe" added as task with ID #1
Success: File "/tmp/sample2.exe" added as task with ID #2
Success: File "/tmp/sample3.exe" added as task with ID #3
(venv)$ cuckoo submit --url google.com bing.com
Success: URL "google.com" added as task with ID #4
Success: URL "bing.com" added as task with ID #5

样本的分析,依赖 cuckoo 的守护进程。 默认情况下, 直接运行守护进程, 不限制同时分析的样本数量(可通过 -m 参数指定)

# This command is equal to what used to be "./cuckoo.py -d".
(venv)$ cuckoo -d

如果需要从WEB界面查看界面分析结果, 则需要运行cuckoo WEB进程。 对于测试环境或者并发数较小的环境, 可以通过内置的 Django WEB server 来运行, 实际环境下,我们更推荐基于高性能的WEB服务器来部署, 可以参考 Web 界面部署

(venv)$ cuckoo web
Performing system checks...

System check identified no issues (0 silenced).
March 31, 2017 - 12:10:46
Django version 1.8.4, using settings 'cuckoo.web.web.settings'
Starting development server at http://localhost:8000/
Quit the server with CONTROL-C.

提交工具

最简单的提交样本分析的方式是通过 cuckoo submit 命令, 例如:

$ cuckoo submit --help
Usage: cuckoo submit [OPTIONS] [TARGET]...

  Submit one or more files or URLs to Cuckoo.

Options:
  -u, --url           Submitting URLs instead of samples
  -o, --options TEXT  Options for these tasks
  --package TEXT      Analysis package to use
  --custom TEXT       Custom information to pass along this task
  --owner TEXT        Owner of this task
  --timeout INTEGER   Analysis time in seconds
  --priority INTEGER  Priority of this task
  --machine TEXT      Machine to analyze these tasks on
  --platform TEXT     Analysis platform
  --memory            Enable memory dumping
  --enforce-timeout   Don't terminate the analysis early
  --clock TEXT        Set the system clock
  --tags TEXT         Analysis tags
  --baseline          Create baseline task
  --remote TEXT       Submit to a remote Cuckoo instance
  --shuffle           Shuffle the submitted tasks
  --pattern TEXT      Provide a glob-pattern when submitting a
                      directory
  --max INTEGER       Submit up to X tasks at once
  --unique            Only submit samples that have not been
                      analyzed before
  -d, --debug         Enable verbose logging
  -q, --quiet         Only log warnings and critical messages
  --help              Show this message and exit.

通过 cuckoo submit 可以指定文件或者目录, 如果是目录的话, 会遍历并提交里面的文件。

对于提交为样本类型会在后续的代码中自动分析, 可以参考 Analysis Packages

Example: 提交一个本地的二进制文件:

$ cuckoo submit /path/to/binary

Example: 提交一个 URL:

$ cuckoo submit --url http://www.example.com

Example: 提交一个本地的二进制文件并且指定了较高的优先级:

$ cuckoo submit --priority 5 /path/to/binary

Example: 提交一个本地的二进制文件并且设置最长分析时间是60秒:

$ cuckoo submit --timeout 60 /path/to/binary

Example: 提交一个本地的二进制文件并且指定文件类型:

$ cuckoo submit --package <name of package> /path/to/binary

Example: 提交一个本地的二进制文件并且指定网络路由方式是tor:

$ cuckoo submit -o route=tor /path/to/binary

Example: 提交一个本地的二进制文件并且指定文件类型,以及指定二进制文件运行时携带的参数:

$ cuckoo submit --package exe --options arguments=--dosomething /path/to/binary.exe

Example: 提交一个本地的二进制文件并且指定运行的虚拟机是 cuckoo:

$ cuckoo submit --machine cuckoo1 /path/to/binary

Example: 提交一个本地的二进制文件并且指定虚拟机平台是windows:

$ cuckoo submit --platform windows /path/to/binary

Example: 提交一个本地的二进制文件并且要求完整内存dumps:

$ cuckoo submit --memory /path/to/binary

Example: 提交一个本地的二进制文件并且强制使用最大的单个样本分析时长:

$ cuckoo submit --enforce-timeout /path/to/binary

Example: 提交一个本地的二进制文件并且指定设置虚拟机的系统日期时间:

$ cuckoo submit --clock "01-24-2001 14:41:20" /path/to/binary

Example: 提交一个本地的二进制文件并且要求内存分析, 且设置内存分析的参数

$ cuckoo submit --memory --options free=yes /path/to/binary

API

REST API 的使用方法参考 REST API.

分布式 Cuckoo

分布式的Cuckoo 可以参考 Distributed Cuckoo.

病毒样本测试

1.提交蓝屏病毒

web页面显示:

分析:结果分析:提交方式可以通过命令行和 web 进行提交。对上传的蓝屏病毒进行分析,计算出病毒程序的md5等特征值,可以在腾讯哈勃分析系统中查找对应MD5 值并分析。蓝屏病毒主要是运行了 cmd.exe,并对系统中的 taskkill.exe 进行破 环。 taskkill.exe 是系统正常运转、各种办公软件、游戏运行所不可或缺的重要文 件。在缺失 taskkill.exe 的情况下会导致无故蓝屏等。

总结

在搭建 cuckoo 的过程中,主要是参考了官方的搭建文档,根据官网文档搭 建还是挺顺利了,但遇到了一些问题,在安装配置时缺少某些依赖库,所以在安装库的时候,都采用了源码安装。在遇到配置错误时,能够根据提示的错误来修正,最后完成了 cuckoo 的搭建。在进行病毒样本提交分析时,学会了如何查看分析报告,并从中分析病毒的特征。

参考资料:
cuckoo官网:https://cuckoo-sandbox.readthedocs.io/zh_CN/latest/
其他链接:https://www.jianshu.com/p/f623fa0bebf9
https://www.freebuf.com/articles/system/123816.html