接触cuckoo sandbox沙盒有一段时间了,对host端的处理流程和guest端windows平台的分析都具有了一定的了解。将自己在这个过程中遇到的问题和解决方法总结出来,供大家学习和交流。欢迎大家批评和指正!
这篇文章主要介绍cuckoo sandbox的windows恶意文件分析环境的搭建方法。
cuckoo sandbox是一个开源的恶意文件自动化分析系统,采用python和c/c++开发,跨越windows、android、linux和darwin四种操作系统平台,支持二进制的PE文件(exe、dll、com)、PDF文档、office文档、URLs、HTML文件、各种脚本(PHP、VB、Python)、jar包、zip文件等等几乎所有的文件格式。能分析恶意文件的静态二进制数据和动态运行后的进程、网络、文件等行为。对于恶意文件的初步分析定性具有很大帮助。
(1). ubuntu版本:16.04TLS
(2). cuckoo sandbox版本:2.0-rc1
(3). python版本:2.7.12
(1). 官方下载:
进入cuckoo sandbox官方网站:https://www.cuckoosandbox.org/download.html
点击”Download Cuckoo”,注意:当前最新文档版本为:2.0-RC1
注意:不要使用git clone git://github.com/cuckoosandbox/cuckoo.git方式下载,这样下载的为开发版,并非releases版
(2).github下载:
进入github上cuckoo sandbox主页:https://github.com/cuckoosandbox
选择cuckoo(monitor、community、cuckoomon也是cuckoo sandbox重要组件,以后会介绍)
选择releases版本发布区域,注意:不要从“Clone or download”处直接下载,此处下载的为开发版,并非releases版
找到2.0-rc1版本,可以选择zip或tar.gz包下载
- agent:一个跨平台的pythom模块,用于Host和Guest之间交换数据
- analyzer:windows、android、darwin、linux平台下的分析模块
- conf:配置文件目录
- data:html报告模板、yara规则库、monitor库
- distributed:分布式(暂时也不清楚)
- docs:说明文档目录,包含html、pdf、text版本和源码
- lib:cuckoo sandbox核心代码库
- modules:auxiliary辅助模块、machinery机器模块、processing分析模块、reporting报告模块、signatures行为分析模块
- tests:测试模块
- utils:工具集
- web:web模块
- cuckoo.py:启动程序
- requirements.txt:依赖库
稍后上传流程图
(1).更新linux源
$ sudo apt-get update
(2).安装python环境
$ sudo apt-get install python python-pip python-dev libffi-dev libssl-dev
(3).安装virtualenv,并新建env_cuckoo2.0_rc1
注: 推荐先使用virtualenv练习安装,如不需要,请跳过此步。以下步骤均在env_cuckoo2.0_rc1下安装
$ sudo apt-get install virtualenv #安装virtualenv
$ virtualenv env_cuckoo2.0_rc1 #新建env_cuckoo2.0_rc1
$ source env_cuckoo2.0_rc1/bin/activate #进入env_cuckoo2.0_rc1环境
(4).修改requirements.txt文件(#注释行为修改前)
alembic==0.8.0
beautifulsoup4==4.4.1
cffi==1.2.1
chardet==2.3.0
#cryptography==1.0(1.0版本安装后出错)
cryptography==1.4
Django==1.8.4
dpkt==1.8.6.2
ecdsa==0.13
enum34==1.0.4
Flask==0.10.1
HTTPReplay==0.1.5
idna==2.0
ipaddress==1.0.14
itsdangerous==0.24
Jinja2==2.8
jsbeautifier==1.5.10
Mako==1.0.1
MarkupSafe==0.23
ndg-httpsclient==0.4.0
#http://pefile.googlecode.com/files/pefile-1.2.10-139.tar.gz#egg=pefile(此链接要)
pefile==2016.3.28
pyasn1==0.1.8
pycparser==2.14
pymongo==3.0.3
pyOpenSSL==0.15.1
python-dateutil==2.4.2
python-editor==0.3
python-magic==0.4.6
requests==2.7.0
six==1.9.0
SQLAlchemy==1.0.8
tlslite-ng==0.6.0-alpha3
wakeonlan==0.2.2
Werkzeug==0.10.4
(5).安装requirements.txt
注:https://pypi.mirrors.ustc.edu.cn/simple/为国内镜像,此处使用国内镜像下载速度会快很多,你也可以改为其他镜像源。
注:如有某些依赖库安装出错,可单独安装出错的依赖库
$ pip install --upgrade pip
$ pip install -r requirements.txt --index https://pypi.mirrors.ustc.edu.cn/simple/
注:安装完成后,运行pip命令,如报以下错误:
$ pip
$ ……
AttributeError:'CompileFFI' object has no attribute 'def_extern'
……
则删除env_cuckoo2.0_rc1/lib/python2.7/site-packages/cryptography文件夹(未使用virtualenv时,删除/usr/local/lib/python2.7/dist-packages/cryptography),然后重新安装requirements.txt即可。
(1).如要使用cuckoo sandbox自带web程序,需安装mongodb
$ sudo apt-get install mongodb
(2).cuckoo sandbox默认使用sqlite数据库,如要使用mysql,需安装mysql和MySQL-python,
$ sudo apt-get install mysql-server mysql-client libmysqld-dev
$
$ unzip MySQL-python-1.2.5.zip #安装MySQL-python
$ cd MySQL-python
$ python setup.py build
$ python setup.py install
Host机会使用tcpdump捕获网络数据包
(1).安装tcpdump
$ sudo apt-get install tcpdump
(2).启用root账户
$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
注:如未找到setcap命令,使用如下命令安装:
$ sudo apt-get install libcap2-bin`
(3).验证启用是否成功
$ getcap /usr/sbin/tcpdump
/usr/sbin/tcpdump=cap_net_admin,cap_net_raw+eip
cuckoo sandbox支持多种虚拟机,包括vmware、virtualbox、esx、kvm、vsphere、xenserver。选择一种你最熟悉的。此处简单介绍vmware和virtualbox的安装。
(1).vmware
vmware是商业软件,许多功能都比较强大和完善。到官方下载linux版本,安装成功后,百度上有许多可用的注册码。
(2).virtualbox
virtualbox是开源软件,功能虽没有vmware完善,但满足cuckoo sandbox的使用。下面是安装命令:
$ sudo apt-get install virtualbox
(1).Yara
yara是一款强大的基于文本或二进制模式匹配的工具。在data/yara目录已经内置了一些文本或二进制匹配规则。需利用软件下载安装。下载链接:https://pypi.python.org/pypi/yara
$ python setup.py install
$ python setup.py test
$ yara-ctypes -h
(2).pydeep
下载链接:https://github.com/kbandla/pydeep/releases
(3).mitmproxy
pip install mitmproxy
(4).Volatility
需要进行内存分析,则需要安装Volatility
$ sudo apt-get install Volatility
本文主要讲windows恶意文件分析环境,所以Guest为windows操作系统。
Guest支持winxp和win7,使用win7时,需关闭User Access(用户账户控制)。下面以win7为例,讲述安装过程。
使用Host中已安装的虚拟机软件,安装win7虚拟机。此步骤很简单,相信用过虚拟机的都会;不会,也没关系,百度上很多资源,一学就会。此处不做过多讲解。
注:win7虚拟机无需打补丁,无需安装杀毒软件、安全卫士
(1).2.7.6以上任何一个稳定的2.7版本都可以,附下载链接:https://www.python.org/downloads/windows/
(2).PIL(Python Image Library)用于恶意文件运行过程中对桌面进行截屏,安装版本需与python库版本一致。附下载链接:http://www.pythonware.com/products/pil/
(1).关闭windows自动更新
(2).关闭windwos防火墙
(3).关闭用户账户控制
(1).使用Host-Only(仅主机模式)上网方式
注:vmware自带Host-Only模式,virtualbox需手动新建Host-only模式,如下图:
(2).将win7网络地址配置到Host-Only模式网段
(3).保证Host和Guest能正常通信,可使用ping命令测试
(4).现在许多恶意文件都需要网络环境才能运行,所以还需要将win7配置到能访问外部网络环境。cuckoo sandbox使用iptables配置转发规则,假如:eth0为ubuntu连接外部网络的网卡,vboxnet0虚拟机Host-Only的虚拟网卡(virtualbox为vboxnet0,vmware为vmnet0)
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
(1).安装基础的运行库,如java、python、.net等
(2).安装2005-2015的vc运行库
(3).安装MS-Office套件(推荐低版本)、PDF阅读器等文档软件
(4).安装生活常用的聊天、听歌软件
(1).将agent目录下的agent.py拷贝至win7文件系统,位置无严格要求。
(2).运行agent.py,测试是否能够按照如下正常运行:
[+] Starting agent on 0.0.0.0:8000……
(3).将agent.py修改成agent.pyw,并添加至开机启动项。agent.pyw为无界面模式。
(1)在agent.pyw运行的状态下,保存win7快照。记录win7的ip地址和快照名称。
(2)确认agent.pyw:在进程列表查看到进程名为pythonw的进程。
cuckoo.conf是cuckoo sandbox基本的配置文件,下面对主要的节做介绍:
[cuckoo]
version_check=on #版本检查
delete_original=off #删除源文件
delete_bin_copy=off #删除源文件备份
machinery=virtualbox #指定使用的虚拟机(vmware\virtualbox\avd\physical等)
memory_dump=off #dump虚拟机的内存
terminate_processes=off #超时后,终止进程
reschedule=off #启动cuckoo后,重新分析以前分析失败的文件
max_analysis_count=0 #支持同时分析最大数,0无限制
max_machines_count=0 #支持同时运行虚拟机最大数,0无限制
max_vmstartup_count=10 #支持vm启动最大数
freespace=64 #磁盘剩余最小空间,单位MB
tmppath=/tmp #临时目录,存放分析过程中产生的文件
rooter=/tmp/cuckoo-rooter #
[routing]
route=none #
internet=none
[resultserver]
ip=192.168.56.1 #服务器IP地址
port=2042 #服务器端口
upload_max_size=10485760
[processing]
analysis_size_limit=104857600
resolve_dns=on
sort_pcap=on
[database]
connection= #数据库连接
timeout=
[timeouts]
default=120
critical=600
vm_state=60
vmware.conf\virtualbox.conf\physical.conf/qumu.conf等格式相似
[vmware]
mode=gui #界面模式,gui(有界面),nogui(无界面),推荐nogui
path=/usr/bin/vmrun #vmrun路径,默认即可
machines=cuckoo1 #Guest列表,以“,”间隔,如cuckoo1,cuckoo2,cuckoo3
interface=virbr0 #Guest使用的网卡
[cuckoo1]
vmx_path=../cuckoo1/cuckoo1.vmx #vmx文件路径
snapshot=Snapshot1 #建立的快照名称
platform=windows #Guest的平台类型,windows/darwin/linux
ip=192.168.54.111 #Guest的IP地址
#如有多个Guest,安装cuckoo1的格式重复即可
[jsondump] #分析结果导出json文件
enabled=yes
indent=4
encoding=latin-1
calls=yes
[reporthtml] #是否生成html报告
enabled=no
[mongodb] #mongodb的启用,如使用自带的web程序,需开启mongodb
enable=no
host=127.0.0.1
port=27017
db=cuckoo
store_memdumo=yes
paginate=100
[moloch] #moloch,将分析结果导入到moloch关联分析
enable=no
host=127.0.0.1
其他配置文件,采用默认即可,在深入定制分析情况下使用。