* 本文原创作者:ExpLife,本文属CodeSec原创奖励计划,未经许可禁止转载
简介安全研究员平时在进行恶意代码分析的时候,为了避免过多重复繁杂的人工分析,首先会使用沙箱进行自动化分析,如果碰到比较新颖的样本,再考虑进一步人工分析。最近笔者体验了一下布谷鸟这款开源的沙箱即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-pippip 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 pydeepcd /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.gzcd yara-3.5.0/
./bootstrap.sh
如果想修改yara的源代码还需要flex,bison这两个包用于语法解析
apt-get install flex bison接着编译安装yara:
./configuremake
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)

安装完增强工具后我们才能对宿主机和客户机建立共享文件夹
建立文件夹依次选择VirtualBox菜单项中的Machine-Setting-Shared Folders,设置如下:

配置客户机:
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 ACCEPTiptables -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 requestscd 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
像这样表示沙箱启动成功,正在等待提交样本.
提交样本的web页面(比命令行提交样本更加方便)要成功运行web管理页面需要安装django 1.85版本,高版本页面渲染会错乱,还需要安装mongodb的数据库软件.这两个软件的安装的过程不再赘述,见下面的参考文章.
启动web页面服务的命令:
python /opt/cuckoo/web/manage.py runserver效果如下:

使用沙箱自动分析恶意样本
提交样本的基本命令:
./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 首先我们要修改