首页
社区
课程
招聘
[分享]Windows平台利用虚拟机搭建Cuckoo沙箱
2022-2-4 19:11 7561

[分享]Windows平台利用虚拟机搭建Cuckoo沙箱

2022-2-4 19:11
7561

1. 概述

参考链接:

实验环境:

  • Win10
  • Vmware Pro 16.1.2
  • VirtualBox 6.1
  • Cuckoo 2.0.7

官方推荐在Linux平台安装Cuckoo,若要在Windows系统上使用Cuckoo沙箱,可将其安装在windows平台的WSL子系统中,也可通过Vmware中的虚拟机安装。

 

本文使用第二种方法。
cuckoo有Host和Guest两类节点,在windows上分别配置如下:

  • 宿主机(Host):vmware中的ubuntu虚拟机
  • 客户机(Guest):在Vmware的Ubuntu虚拟机中,安装VirtualBox并新建win7虚拟机作为客户机

2. 宿主机Host

2.1 依赖安装

宿主机:Vmware中的Ubuntu16

2.1.1 python库

Cuckoo的管理组件完全由Python脚本编写,所以就需要适合的Python版本。 官方文档提到,当前完全兼容的Python版本是 2.7

1
2
3
$ sudo apt-get install python python-pip python-dev libffi-dev libssl-dev
$ sudo apt-get install python-virtualenv python-setuptools
$ sudo apt-get install libjpeg-dev zlib1g-dev swig

2.1.2 mongodb

如果要使用基于Django开发的web界面,需要安装MongoDB。
直接使用apt install安装的是2.6版本,比较老旧

1
2
3
4
5
6
7
8
# 导入 apt 的 key
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
# 创建版本列表文件
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
# 更新软件源
sudo apt-get update
# 安装最新版
sudo apt-get install -y mongodb-org

启动/重启/停止mongo数据库服务

1
2
3
sudo service mongod start
sudo service mongod restart
sudo service mongod stop

2.1.3 VirtualBox

cuckoo沙箱支持大部分虚拟化软件,可以很方便添加和使用各种虚拟化支持

 

如:VirtualBox,KVM

 

若使用apt install直接,后续启动cuckoo时会报错版本太低:

1
2
3
4
5
##  安装5.1启动cuckoo会报错如下:
# Vulnerable dependencies found
#--> Vulnerable version of virtualbox installed (5.1.38). It is highly recommended to update. Please update and restart Cuckoo. Recommended version: >=5.2.28
#Additional information: https://www.oracle.com/technetwork/security-advisory/cpuapr2019-5072813.html
#$ sudo apt-get install virtualbox-5.1

用oracle仓库安装VirtualBox:

1
2
3
4
# 添加Oracle VirtualBox仓库到仓库列表
# 其中lsb_release -cs 将打印 Ubuntu 系统的代号
$ sudo add-apt-repository "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib"
$ sudo apt update

sudo apt install virtualbox- 并点击 tab 键以查看可用于安装的各种 VirtualBox 版本,然后通过补全命令来选择其中一个版本。

2.1.4 tcpdump

Tcpdump用于抓取恶意软件运行过程中产生的所有流量。

 

安装命令:

1
2
$ sudo apt-get install tcpdump apparmor-utils
$ sudo aa-disable /usr/sbin/tcpdump

AppArmor 只有当PCAP文件生成没有权限的时候才需要

 

禁用了AppArmor 的Linux的平台下, 比如Debian, 仅需要安装tcpdump:

1
$ sudo apt-get install tcpdump

Tcpdump需要root权限,如果不想运行在root用户下,需要做以下设置:

1
$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

可以用以下命令验证是否配置正确:

1
2
3
$ getcap /usr/sbin/tcpdump
# 输出如下:
# /usr/sbin/tcpdump = cap_net_admin,cap_net_raw+eip

如果没有setcap命令, 则需要安装下面的包:

1
$ sudo apt-get install libcap2-bin

2.1.5 M2Crypto

当前 M2Crypto 库需要 SWIG支持. Ubuntu/Debian-like 系统下可以通过以下命令安装:

1
$ sudo apt-get install swig

SWIG 安装好之后,通过以下命令安装 M2Crypto:

1
$ sudo pip install m2crypto==0.24.0

2.1.6 可选的依赖

安装Volatility

Volatility 用于分析内存转储文件的可选工具. Cuckoo与Volatility配合,可以更深度和全面的分析,可以防止恶意软件利用rookit技术逃逸沙箱的监控。

 

为了能够工作正常,Cuckoo要求Volatility版本不低于 2.3, 推荐最新版本2.5。

 

(尚未安装,待补充)

安装guacd

guacd 是RDP,SSH,VNC等远程控制的代理层, 是Cuckoo的Web界面的远程终端中使用,可选。

 

没有它,远程控制功能就无法使用,版本要求0.9.9及以上。

 

(尚未安装,待补充)

2.2 cuckoo安装

2.2.1 创建用户

Cuckoo可以运行在已有用户下面,也可以新建一个用户来跑Cuckoo。 但是要保证虚拟机和Cuckoo运行在相同的用户下
(本文搭建环境时没有新建cuckoo用户)

 

创建新用户:

1
$ sudo adduser cuckoo
  • 如果使用VirtualBox,需要使cuckoo用户属于VirutalBox运行时的vboxusers组

    1
    $ sudo usermod -a -G vboxusers cuckoo
  • 如果使用KVM,要将用户加入到Libvirtd用户组:

    1
    $ sudo usermod -a -G libvirtd cuckoo

2.2.2 安装cuckoo

推荐使用 pip 和setuptools来安装最新版本的Cuckoo。

 

可以全局安装,但基于以下优点,推荐virtualenv 来安装

  • Cuckoo的依赖并不是用的最新版本,可能会与系统已有的版本冲突.

  • 系统中其他软件的安装,可能会导致Cuckoo的依赖产生问题.

  • 使用virtualenv,可以让非root用户也可以安装相关软件.

  • 简单来说virtualenv是最佳实践.

    • PS:安装virtualenv:

      1
      2
      3
      4
      # python2
      sudo pip install virtualenv
      # apt
      sudo apt-get install python-virtualenv

使用Virtualenv安装cuckoo:

1
2
3
4
$ virtualenv venv
$ . venv/bin/activate
(venv)$ pip install -U pip setuptools
(venv)$ pip install -U cuckoo

2.2.3 Cuckoo 工作目录

Cuckoo 工作目录用来存储所有配置文件、生成的数据以及分析结果。 具体包括但不限于以下几种文件:

  • 配置文件
  • Cuckoo 签名规则
  • Cuckoo 分析器
  • Cuckoo 客户端
  • Yara 规则集
  • Cuckoo 分析数据存储
  • 其他文件..

Cuckoo首次运行的时候 CWD 目录(cuckoo work directory)会自动创建,默认在~/.cuckoo,配置文件在$CWD/conf目录下

 

CWD目录使配置与cuckoo的引擎分离,两边可以独立升级

 

CWD目录可以配置(指定为其他文件夹),因此理论上cuckoo进程能够并行,如:同时运行Windows 和 Android 分析。

 

CWD配置命令如下:

1
2
3
4
5
6
7
8
9
10
11
# 指定CWD目录为opt/cuckoo,虽然cuckoo可以自己创建CWD,但该位置需要root权限
$ sudo mkdir /opt/cuckoo
# chown修改文件和目录的所有者和所属组,使cuckoo用户对该目录有读写权限。chown 用户:用户组 文件或目录
$ sudo chown cuckoo:cuckoo /opt/cuckoo
# 指定CWD启动
$ cuckoo --cwd /opt/cuckoo
 
# 如果想使用cuckoo直接启动,则要配置环境变量指定CWD目录。如下:
$ export CUCKOO=/opt/cuckoo
# 初始化(注意要在正确的用户命令行下启动[如cuckoo],这样产生的文件夹所有者才是cuckoo-----否则sudo启动文件所有者是root,后续运行时会报permission denied错误
cuckoo@u16$ cuckoo -d

2.2.4 Cuckoo配置文件

  • cuckoo.conf: 用于配置通用选项和分析参数.
  • auxiliary.conf: 用于开启或者分配辅助模块.
  • .conf: 用于配置和填入虚拟机相关参数(使用何种虚拟机,则选择哪种虚拟机配置文件,例如选择kvm, 则配置kvm.conf).
  • memory.conf: Volatility 配置选项.
  • processing.conf: 用户开启或者配置数据处理模块.
  • reporting.conf: 用于开关报表模块.

Cuckoo正常工作至少需要配置两个文件 cuckoo.conf和 .conf

 

virtualbox.conf的mode可以设成gui,否则默认静默启动,无gui界面

 

如果要使用web页面:

  • reporting.conf的[mongodb] enabled = yes

3. 客户机

3.1 网络配置

3.1.1 Virtualbox网卡

1.Ubuntu中启动virtualbox:

1
$ virtualbox virtualboxvm

使用VBoxManage下载扩展包

1
2
3
4
$ wget https://download.virtualbox.org/virtualbox/6.1.30/Oracle_VM_VirtualBox_Extension_Pack-6.1.30.vbox-extpack
$ VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.1.30.vbox-extpack
# 如果安错了版本需要卸载扩展包:
$ VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"

2.网络配置:

 

创建网卡

1
2
3
4
# 创建 hostonly模式interface vboxnet0
$ VBoxManage hostonlyif create
# 配置vboxnet0,在cuckoo.conf中[resultserver] 中的 ip 和 port分别是192.168.56.1和2042
$ VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0

 

3.转发规则

 

基于 iptables 规则设置全局路由(也可针对不同的待分析样本设置不同的路由规则,但更复杂

 

假设分配给 VirtualBox 虚拟机的网络是 vboxnet0 , 虚拟机的网络是 192.168.56.101 子网 /24 , 出口网卡是 ens33 。 下面的 iptables 规则设置,将会允许虚拟机访问 Cuckoo 的宿主机以及互联网。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 设置host与guest的转发规则
# ifconfig可查看对应网卡
$ sudo iptables -t nat -A POSTROUTING -o ens33 -s 192.168.56.0/24 -j MASQUERADE
 
# Default drop.
$ sudo iptables -P FORWARD DROP
 
# Existing connections.
$ sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
 
# Accept connections from vboxnet to the whole internet.
$ sudo iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPT
 
# Internal traffic.
$ sudo iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.56.0/24 -j ACCEPT
 
# Log stuff that reaches this point (could be noisy).
$ sudo iptables -A FORWARD -j LOG

不过这个配置是临时生效的,如果需要一直生效,需要在开机启动的时候自动执行下面两条命令:

1
2
$ echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
$ sudo sysctl -w net.ipv4.ip_forward=1

Iptables 规则也是临时的,重启后失效,如果需要一直生效可以安装 iptables-persistent 或者使用自启动脚本。

 

4.打开iproute2

 

由于Linux 内核对于 TCP/IP 源路由需要注册所有的网卡信息, 所以需要使用 iproute2

 

打开 /etc/iproute2/rt_tables 文件,选个文件中没有的数字, 在文件末尾新建一行,填入数字 加 网卡名称

 

如:400 ens33

3.1.2 win7 ip

安装win7:

 

参考链接:

设置win7 ip

 

将win7虚拟机设置成Host模式;设置win7静态ip,192.168.56.x(与cuckoo.conf的resultServer的IP同一局域网)

 

关闭windows防火墙和自动更新

 

PS:

  • 注意关闭win7防火墙,否则win7可以ping通主机(ubuntu),但主机(ubuntu)ping不通win7
  • 若想要浏览器访问网页,需要配置DNS服务器(如8.8.8.8

效果:Host可以ping通虚拟网卡,Guest也可以ping通虚拟网卡,Host和Guest可以互相ping通

3.1.3 cuckoo配置文件

需要配置auxiliary.conf cuckoo.conf virtualbox.conf

  • auxiliary.conf:确认tcpdump路径要对,/usr/sbin/tcpdump
  • cuckoo.conf:确认resultserver的虚拟网卡ip和端口
  • virtualbox.conf:确认虚拟网卡名称interface = vboxnet0,客户机名、label、platform和静态ipmachines = cuckoo1,[cuckoo1]label = cuckoo1, platfrom = windows, ip = 192.168.56.x

3.2 安装python

安装python2.7:https://www.python.org/downloads/windows/

 

安装cuckoo客户端依赖的python库

1
2
3
4
5
6
7
8
## cmd命令行转到C:\Python27\Scripts然后执行
easy_install.exe pip
 
## 然后升级pip
python -m pip install --upgrade pip
 
安装
pip install pillow

cuckoo客户端

在 $CWD/agent/ 目录中,可以找到 agent.py 文件。 把文件拷贝到虚拟机中, 然后将脚本启动起来。 客户端会启动一个小型的API服务,用于与宿主机通信。

 

在Windows系统中, 只要将脚本名称 从 agent.py 改为 agent.pyw , 可以在运行的时候不显示终端的窗口。

 

将脚本拷贝到 启动 目录, 即可实现脚本开机自启动。

  • win7启动目录:C:\Users\用户名\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup

    通过开始菜单==>所有程序-->启动能打开该文件夹

  • 重启后可以看到进程中存在pythonw,在命令行输入netstat -na可以看到8000端口处于监听状态

4. cuckoo使用

每次重启ubuntu需要重新进行以下设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 设置CUCKOO的工作目录
export CUCKOO=/opt/cuckoo
# 开启virtualenv环境(该目录在对应用户的~文件夹下)
. venv/bin/activate
# 设置网卡ip
vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1
# 设置host与guest的转发规则
sudo iptables -t nat -A POSTROUTING -o ens33 -s 192.168.56.0/24 -j MASQUERADE
sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.56.0/24 -j ACCEPT
# sudo iptables -A FORWARD -j LOG
# 开启路由转发
echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
sudo sysctl -w net.ipv4.ip_forward=1
# 开启mongodb
sudo service mongod start

运行

1
2
3
4
# 启动
cuckoo -d
# 打开web界面
cuckoo web

如图所示:
图片描述


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回