【多图超详细】从零开始安装配置Cuckoo sandbox并提交样本进行分析
1. 功能介绍
沙盒(Sanbox)是一种将未知、不可信的软件隔离执行的安全机制。恶意软件分析沙盒一般用来将不可信软件放在隔离环境中自动地动态执行,然后提取其运行过程中的进程行为、网络行为、文件行为等动态行为,安全研究员可以根据这些行为分析结果对恶意软件进行更深入地分析。
Cuckoo sandbox是一款用 Python和C/C++ 编写的开源的自动化恶意软件分析系统,且跨越Windows、Android、Linux和Darwin四种操作系统平台。
1.1主要功能
- 跟踪记录恶意软件所有的调用状况;
- 恶意软件文件行为:恶意软件执行过程中创建新文件、修改文件、删除文件、读取文件或下载文件的行为;
- 获取恶意软件的内存镜像;
- 以 PCAP 格式记录恶意软件的网络流量;
- 获取恶意软件执行过程中的屏幕截图;
- 获取执行恶意软件的客户机的完整内存镜像
Cuckoo 可以分析的几乎所有的文件格式
1.2 架构设计
Cuckoo 的架构也比较简单,在 Host 机上运行 Cuckoo 主程序,多个 Guest 机通过虚拟网络与 Host 机相连,每个 Guest 机上有一个 Cuckoo Agent 程序,用来做 Cuckoo 的监控代理,结构图如下:
其实就是说,在host的web上提交的文件,会被分配到各个guest上运行,收集该文件调用的状况。
2. 安装与配置
2.1 配置情况
主机(host):Ubuntu 18.04 LTS + 4Gb Ram + VirtualBox6.0 + Cuckoo Sandbox 2.0.4
客户机(guest):Windows XP professional SP3 + 512Mb Ram
主机与客户机之间的连接方式:Host-Only + IP转发
2.2 主机环境准备
-
更换源
自带的源不太稳定,所以更换为国内的源,如阿里源。操作如下:
sudo gedit /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ disco main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ disco-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ disco-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ disco-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ disco-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco-proposed main restricted universe multiverse
删除缓存:
sudo rm -vfr /var/lib/apt/lists/*
更新:
sudo apt-get update
sudo apt-get upgrade
-
安装cuckoo的依赖
-
sudo apt-get install git mongodb libffi-dev build-essential python-django python python-dev python-pip python-pil python-sqlalchemy python-bson python-dpkt python-jinja2 python-magic python-pymongo python-gridfs python-libvirt python-bottle python-pefile python-chardet tcpdump -y
-
安装Tcpdump并确认安装无误:
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
则表示已正确安装 -
安装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
确认pydeep安装无误:
ssdeep -V #检查版本
pip show pydeep #再安装一次看看会不会提示已安装
-
安装Volatility:
先安装Volatility的依赖
sudo pip install openpyxl ujson pycrypto distorm3 pytz
安装volatility
git clone https://github.com/volatilityfoundation/volatility.git
cd volatility
python setup.py build
python setup.py install
确认volatility安装无误
python vol.py -h
-
-
安装Cuckoo:
直接pip安装,别整啥乱七八糟的,到2019.06.29为止,最新版本应该是2.0.7,笔者试过2.0.1,2.0.4,2.0.6,2.0.7,发现从2.0.4开始之后的版本都差不多,倒是之前的版本差异太大,很难配置成功。
-
先执行以下指令以防止安装pillow时出错。
sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk
pip安装cuckoo时会自动安装pillow,若不执行以下指令会出现
Command "/usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-install-OPu7Zt/pillow/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-record-s5ZAyi/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-install-OPu7Zt/pillow/报错,如图:
[外链图片转存失败(img-gI6fyswo-1562310089362)(https://i.loli.net/2019/06/30/5d18370fdeecf63181.png)]
-
执行以下指令安装cuckoo:
pip install -U cuckoo
-
此时再到home目录下,按Ctrl+h显示隐藏文件,若没有 .cuckoo 这个隐藏目录,则要到
/home/(username)/.local/bin/
下,执行python cuckoo
,会在home下自动生成 .cuckoo 目录:cd /home/(username)/.local/bin/ #注意这里的username是你的Ubuntu用户名
python cuckoo
此时回到home下,执行
cuckoo -d
,测试一下能否打开cuckoocd /home cuckoo -d
“若出现找不到指令cuckoo”类似的报错:
-
可以进入到
/home/(username)/.local/bin/
下执行cuckoo -d
cd /home/(username)/.local/bin/ cuckoo -d
-
或是将
/home/(username)/.local/bin/
下的cuckoo文件,复制到/usr/local/bin/
下,这样的话就可以更加方便的启动cuckoo了。cp /home/(username)/.local/bin/cuckoo /usr/local/bin
若是有CuckooCriticalError这个报错,则说明成功,因为已经能成功启动cuckoo了,只是没有配置cuckoo,cuckoo无法连接套接字,待会再进行配置。
-
-
2.3 客户机环境准备
安装VirtualBox:
直接使用apt-get安装就行:
sudo apt-get install virtualbox
请注意,可能直接使用apt-get安装的virtualbox会缺少增强功能(也就相当于VMWare中的VMWare Tools),会导致无法让ubuntu主机和xp客户机之间建立共享文件夹,导致无法将python2.7安装包、PIL安装包、agent文件传送到xp客户机内,导致不能进行下一步操作。
在virtualbox中建立一个虚拟机作为客户机(guest),建议安装Win7或者WinXP,笔者使用XP,体积较小,xp镜像可以自行去msdn下载。
笔者这里提供msdn的zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso 镜像
迅雷连接:ed2k://|file|zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso|630239232|CD0900AFA058ACB6345761969CBCBFF4|/
若是想用pandownload的,笔者提供百度云(永久)链接:https://pan.baidu.com/s/1Zf7xJSG4WFmPKXEdt1rguQ
下载之后将镜像拖入Ubuntu中,打开终端,输入virtualbox,
点击新建虚拟机
接下来不想截图了:
依次设置:内存512m→现在创建虚拟硬盘→VDI→动态分配10G(这里可能7、8G就行了)
之后安装XP镜像,首先选择安装介质,选择刚刚导入的XP镜像。
接着将启动(引导)顺序更改,使进入虚拟机后自动进入光驱而不是硬盘,之后点确定,启动虚拟机。
注意如果出现以下提示:”发现无效设置“提示已经启用硬件虚拟化的,应该进入 系统→硬件加速→将启用VT-x/AMD-V的选项去掉,去掉之后应当检查之前的设置是否生效。
进入之后F8选择同意,之后一路按ENTER选择默认选项,直到读安装进度条。
完成后会自动重启,重启之后会出现安装windows的界面
之后的安装步骤没提到的话一路下一步就可以了,密钥爱填不填无所谓。
等待十几二十分钟,安装完毕之后,进入到windows xp的配置界面
这里选择不启用自动更新
选择不激活
之后就进入了桌面
-
此时点击右下角的那个红色盾牌,进去把防火墙、自动更新、病毒保护这三项全部关掉,防火墙不关掉的话Ubuntu主机是无法ping通xp虚拟机的。
-
接着检查xp的ip地址
点击左下角的开始按钮,点击运行,输入cmd,输入ipconfig查看xp客户机的ip地址,不出意外的话应该是10开头的ip地址,证明此时ubuntu主机和xp客户机现在是以网络地址转换(NAT)的连接方式连接着的,接下来就要将其改为Host-only方式连接。
2.4 基本网络配置
-
首先在VirtualBox的主机网络管理器中配置一个网卡
点击virtualbox的管理→主机网络管理器→创建,这样会自动创建一个ip地址为192.168.56.1的名为vboxnet0的网卡,这里不用开启DHCP服务器,因为后面我们要手动配置XP虚拟机的IP地址。
-
接着在virtualbox中右键xp虚拟机,点击网络→连接方式选择仅主机(Host-Only)网络,之后点击确定
-
点击确定完成之后,xp虚拟机右下角的网络连接应该会弹出一个小三角表示不能正常连接,这是正常的,处于Host-Only的连接方式下,Guest是不能访问互联网的,而Host是可以访问互联网的,要使Guest能访问
-
此时设置xp虚拟机的网络配置如下
-
进入Ubuntu主机,手动设置IP,我的设置如下
其中默认网关每个人的都可能不同,不要照着我的填,因为我的VMWare刚好就帮我设置了192.168.56.0这个网段。
具体该怎么设置如下:
-
打开本体机的VMWare,点击左上角的 编辑→虚拟网络编辑器
上面那个192.168.56.2就是要填入Ubuntu主机默认网关的IP地址,请按照自己的情况来设置。
此时关闭按钮再开启按钮,作为一次网络重启
此时Ubunutu主机的网络信息如下所示
-
-
尝试双方能不能ping通,按道理来讲是能ping通的。
2.5 IP转发
cuckoo的网络配置中使用Host-Only连接方式的原因:
根据cuckoo的架构可以得知,一个恶意软件被安装配置了cuckoo的host提交到各个guest进行运行分析时,host是想要知道guest的所有流量信息的,因为绝大部分的恶意软件搞破坏都依赖网络。此时只有设置Host-Only连接,host才能截获guest与互联网之间流经的所有流量,才能更好的分析恶意软件的行为方式。
此时Guest是无法访问互联网的,所以要在Host中设置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规则之前要先Iptables -L看下有没有其他的防火墙规则,如果有的话自己百度搜怎么样删除
iptables -A FORWARD -o eth0 -i vboxnet0 -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
#接着为保证重启之后依然有效 sudo gedit /etc/network/interfaces
#在最后添加两行 pre-up iptables-restore < /etc/iptables.rules post-down iptables-save > /etc/iptables.rules
-
测试Host-Only连接方式是否已经正确配置:
-
此时Ubuntu主机就不能访问网页了,但是ping 8.8.8.8的话是可以ping通的,因此肯定是DNS出了问题,但是不影响,可以先不管。
如果非要管的话也行,终端输入
sudo gedit /etc/resolv.conf
将nameserver 127.0.0.53 改为nameserver 114.114.114.114,保存,就可以访问网页了,但是千万不能重启网络,这样的话又会变成127.0.0.53了,想要彻底解决问题的话可以参考:
https://www.helplib.com/ubuntu/article_162736
https://blog.csdn.net/weixin_33920401/article/details/87407103 -
此时XP是可以正常访问网页的。
-
2.6 启动客户机的agent
-
在home下新建一个文件夹share,将文件
.cuckoo/agent/agent.py
复制到share -
接着在share中打开终端,输入
wget https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi
wget http://effbot.org/media/downloads/PIL-1.1.7.win32-py2.7.exe
下载python2.7安装包和PIL安装包
-
要想再virtualbox中使用共享文件夹就必须再xp虚拟机中安装virtualbox增强功能,具体如下:
直接apt-get安装的Virtualbox是不带增强功能的,需要自己装。
点击
接下来会提示你下载,那就下载,记得选择保存至(Save as…)
接下来将xp正常关机,然后进入virtualbox的设置中顺便将之前的引导顺序调回来:
将之前的xp安装镜像移除:
将下载下来的Virtualbox增强功能的镜像安装上去:
接着点击确定,启动xp虚拟机即可,打开我的电脑,点击安装即可(安装中途会出现两次询问,点仍然安装即可)
-
在virtualbox中打开xp虚拟机的设置,新建共享文件夹,点击确定
-
进入xp虚拟机的我的电脑,可以看到下面多了一个网络驱动器,点进去就能看见共享的文件了,先安装python2.7后安装PIL
-
配置agent
我们想要agent.py运行但是不能有运行窗口,因为如果有窗口的话,到后面运行cuckoo提交样本时客户机会出错(别问我为什么知道的)。
-
把 agent.py 后缀改成 agent.pyw
-
将agent.pyw复制到
C:\Python27\
文件夹下,双击运行(是没有任何反应的) -
打开cmd,输入
netstat -an
,查看本地8000端口是否在监听如果8000端口正在监听,那说明此xp虚拟机就能被cuckoo所调用。
-
最后一步,在8000端口正在被监听的状态下,再virtualbox保存xp虚拟机快照,将快照命名为snapshot1
-
2.7 配置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. tcpdump = /usr/sbin/tcpdump
-
virtualbox.conf:
machines = 你的虚拟机名字 [你的虚拟机名字] label = 你的虚拟机名字 platform = windows ip = 192.168.56.101 # IP address of the guest snapshot = 你创建的快照名字 interface = vboxnet0
-
reporting.conf:
[mongodb] enabled = yes #也许还有其他要改的,但是这个最重要,其他是yes还是no更多的是看你的需要,或者之后在使用时再来配置文件里面打开
3. 提交样本进行分析
-
首先运行以下指令,解决tcpdump的权限被拒绝
sudo apt-get install apparmor-utils sudo aa-disable /usr/sbin/tcpdump
否则新版的cuckoo再提交样本后会报错:
Unable to stop auxiliary module: Sniffer
具体参考https://cuckoo.sh/docs/faq/index.html#permission-denied-for-tcpdump
-
接着打开
.cuckoo/analyzer/windows/modules/auxiliary/recentfiles.py
将使用SHGetKnownFolderPath函数的部分注释掉(python中可以以三个单引号作为注释,且要注意三个单引号要与 r= 对齐,因为python中是以缩进来划分代码块)
否则cuckoo会报python的错误:
AttributeError: function 'SHGetKnownFolderPath' not found
具体参考https://github.com/cuckoosandbox/cuckoo/issues/1934
''' r = SHELL32.SHGetKnownFolderPath( uuid.UUID(self.locations[location]).get_bytes_le(), 0, None, ctypes.byref(dirpath) ) if r: log.warning("Error obtaining user directory: 0x%08x", r) return # TODO We should free the memory with CoTaskMemFree(). return dirpath.value '''
-
接着打开两个终端,一个先输入
cuckoo -d
,另一个再输入cuckoo web runserver
,接着用浏览器打开127.0.0.1:8000
登录到cuckoo的web服务页面,点击上传按钮可以提交样本,这里我随手提交了病毒实验用的工具pecomp.exe。点击提交,主机会将客户机恢复快照,并将样本传送至客户机进行运行分析:
样本分析结果摘要:
点击进入分析日志会发现没有报错,结果页面可显示测试后样本的行为,展示样本的基本信息,样本运行的基本信息,样本运行时的屏幕截图。
去卡饭论坛下载几个病毒样本https://bbs.kafan.cn/thread-2145532-1-1.html
-
可能是由于xp虚拟机里面没有装什么应用程序,单从截图上来看只有samp(1)有明显的行为。
可有看出它尝试连接了许多连接,并且下载了橙子浏览器的安装程序并自动运行:
左侧选择“Process Memory”,显示如下图。显示样本中所包含的URL链接。
更多操作及Cuckoo行为监控工作原理可以参考https://zhuanlan.zhihu.com/p/43410960
参考链接:
https://www.jianshu.com/p/f623fa0bebf9
https://www.jianshu.com/p/ac009f6c2710