-
-
[分享]Windows平台利用虚拟机搭建Cuckoo沙箱
-
发表于: 2022-2-4 19:11 9604
-
1. 概述
参考链接:
- 官方文档:23bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0N6h3y4C8L8$3!0Q4x3X3c8K6j5h3&6V1j5X3!0^5i4K6u0W2M7X3g2S2k6s2c8Z5k6h3c8G2j5%4y4Q4x3X3g2A6L8#2)9J5c8Y4A6Z5i4K6g2X3b7@1&6Q4x3V1k6D9j5i4c8W2M7%4c8Q4x3V1k6A6L8Y4y4@1j5h3I4D9j5i4c8A6L8$3&6Q4x3V1k6A6L8X3c8W2P5q4)9J5k6h3S2@1L8h3H3`.
- 参考文章:177K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5P5W2)9J5k6h3q4D9K9i4W2#2L8W2)9J5k6h3y4G2L8g2)9J5c8Y4c8Q4x3V1j5$3x3K6j5&6
实验环境:
- 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 的 keysudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4# 创建版本列表文件echo "deb [ arch=amd64,arm64 ] 51fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5k6i4m8G2i4K6u0W2L8h3!0F1k6$3!0V1j5W2)9J5k6h3!0J5k6#2)9J5c8X3q4H3N6q4)9J5c8Y4g2T1N6h3&6@1N6b7`.`. 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 startsudo service mongod restartsudo 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: c9eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2G2M7X3q4U0L8r3g2Q4x3X3g2U0L8$3#2Q4x3V1k6@1k6h3y4Z5L8X3g2@1N6$3!0J5K9#2)9J5c8Y4y4W2j5%4g2J5K9i4c8&6i4K6u0V1j5h3c8$3K9i4y4G2M7Y4W2Q4x3V1k6U0M7s2g2S2M7s2t1J5x3o6p5&6i4K6u0V1y4e0l9%4x3U0R3I4x3#2)9J5k6h3S2@1L8h3H3`.#$ 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] 6f2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2N6X3W2J5N6s2g2S2L8r3u0G2P5q4)9J5k6h3!0J5k6#2)9J5c8Y4k6A6M7Y4c8#2j5h3I4T1L8%4S2Q4x3V1k6V1k6h3u0A6j5h3^5`. $(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:
1234# python2sudo pip install virtualenv# aptsudo 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
安装cuckoo客户端依赖的python库
1 2 3 4 5 6 7 8 | ## cmd命令行转到C:\Python27\Scripts然后执行easy_install.exe pip## 然后升级pippython -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# 设置网卡ipvboxmanage 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 MASQUERADEsudo iptables -P FORWARD DROPsudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPTsudo iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPTsudo 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_forwardsudo sysctl -w net.ipv4.ip_forward=1# 开启mongodbsudo service mongod start |
运行
1 2 3 4 | # 启动cuckoo -d# 打开web界面cuckoo web |
如图所示:

赞赏
- [个人备忘]通过vcpkg在windows平台构建Triton 6825
- IDA插件Ponce的使用 11284
- [分享]Windows平台利用虚拟机搭建Cuckoo沙箱 9605