cuckoo sandbox之windows恶意文件分析环境搭建

1.前言

 接触cuckoo sandbox沙盒有一段时间了,对host端的处理流程和guest端windows平台的分析都具有了一定的了解。将自己在这个过程中遇到的问题和解决方法总结出来,供大家学习和交流。欢迎大家批评和指正!
 这篇文章主要介绍cuckoo sandbox的windows恶意文件分析环境的搭建方法。

2.cuckoo sandbox简单介绍

 cuckoo sandbox是一个开源的恶意文件自动化分析系统,采用python和c/c++开发,跨越windows、android、linux和darwin四种操作系统平台,支持二进制的PE文件(exe、dll、com)、PDF文档、office文档、URLs、HTML文件、各种脚本(PHP、VB、Python)、jar包、zip文件等等几乎所有的文件格式。能分析恶意文件的静态二进制数据和动态运行后的进程、网络、文件等行为。对于恶意文件的初步分析定性具有很大帮助。

3.约定条件

 (1). ubuntu版本:16.04TLS
 (2). cuckoo sandbox版本:2.0-rc1
 (3). python版本:2.7.12

4. 准备工作

4.1.下载cuckoo sandbox

 (1). 官方下载:
 进入cuckoo sandbox官方网站:https://www.cuckoosandbox.org/download.html
 点击”Download Cuckoo”,注意:当前最新文档版本为:2.0-RC1
 注意:不要使用git clone git://github.com/cuckoosandbox/cuckoo.git方式下载,这样下载的为开发版,并非releases版
cuckoo sandbox之windows恶意文件分析环境搭建_第1张图片
 (2).github下载:
 进入github上cuckoo sandbox主页:https://github.com/cuckoosandbox
 选择cuckoo(monitor、community、cuckoomon也是cuckoo sandbox重要组件,以后会介绍)
cuckoo sandbox之windows恶意文件分析环境搭建_第2张图片
 选择releases版本发布区域,注意:不要从“Clone or download”处直接下载,此处下载的为开发版,并非releases版
cuckoo sandbox之windows恶意文件分析环境搭建_第3张图片
 找到2.0-rc1版本,可以选择zip或tar.gz包下载
cuckoo sandbox之windows恶意文件分析环境搭建_第4张图片

4.2.认识cuckoo sandbox文件结构

cuckoo sandbox之windows恶意文件分析环境搭建_第5张图片
 - 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:依赖库

5.cuckoo sandbox工作原理简介

  稍后上传流程图

6.Host环境搭建

6.1基本依赖库

  (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即可。

6.2数据库依赖库

 (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

6.3网络数据包捕获

 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

6.4虚拟机软件

  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

6.5其他推荐库

 (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

7.Guest环境搭建

  本文主要讲windows恶意文件分析环境,所以Guest为windows操作系统。
  Guest支持winxp和win7,使用win7时,需关闭User Access(用户账户控制)。下面以win7为例,讲述安装过程。

7.1 win7虚拟机安装

  使用Host中已安装的虚拟机软件,安装win7虚拟机。此步骤很简单,相信用过虚拟机的都会;不会,也没关系,百度上很多资源,一学就会。此处不做过多讲解。
  注:win7虚拟机无需打补丁,无需安装杀毒软件、安全卫士

7.2 python运行环境

  (1).2.7.6以上任何一个稳定的2.7版本都可以,附下载链接:https://www.python.org/downloads/windows/
  (2).PIL(Python Image Library)用于恶意文件运行过程中对桌面进行截屏,安装版本需与python库版本一致。附下载链接:http://www.pythonware.com/products/pil/

7.3 win7环境配置

  (1).关闭windows自动更新
  (2).关闭windwos防火墙
  (3).关闭用户账户控制

7.3 win7网络环境配置

  (1).使用Host-Only(仅主机模式)上网方式
  注:vmware自带Host-Only模式,virtualbox需手动新建Host-only模式,如下图:
        cuckoo sandbox之windows恶意文件分析环境搭建_第6张图片
  (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

7.4 win7伪装环境

  (1).安装基础的运行库,如java、python、.net等
  (2).安装2005-2015的vc运行库
  (3).安装MS-Office套件(推荐低版本)、PDF阅读器等文档软件
  (4).安装生活常用的聊天、听歌软件

7.5 安装agent.py

  (1).将agent目录下的agent.py拷贝至win7文件系统,位置无严格要求。
  (2).运行agent.py,测试是否能够按照如下正常运行:

[+] Starting agent on 0.0.0.0:8000……

  (3).将agent.py修改成agent.pyw,并添加至开机启动项。agent.pyw为无界面模式。

7.6 保存win7快照

  (1)在agent.pyw运行的状态下,保存win7快照。记录win7的ip地址和快照名称。
  (2)确认agent.pyw:在进程列表查看到进程名为pythonw的进程。

8.cuckoo sandbox配置文件介绍

8.1 cuckoo.conf

  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

8.2 vmware.conf

  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的格式重复即可

8.3 reporting.conf

[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

8.4 其他配置文件

  其他配置文件,采用默认即可,在深入定制分析情况下使用。

你可能感兴趣的:(Python,cuckoo,sandbox)