接触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 installHost机会使用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+eipcuckoo 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=60vmware.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的格式重复即可其他配置文件,采用默认即可,在深入定制分析情况下使用。