Cuckoo SandBox的安装、配置和应用
依赖安装
在安装和配置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
Yara 和 Pydeep 是可选的插件。如果选择安装的话,具体安装步骤可以参考他们的官网。这里使用源码安装。
安装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-vnc0
和 libguac-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