-
-
[分享]Windows平台利用虚拟机搭建Cuckoo沙箱
-
发表于: 2022-2-4 19:11 8610
-
1. 概述
参考链接:
- 官方文档:https://cuckoo-sandbox.readthedocs.io/zh_CN/latest/installation/index.html
- 参考文章:https://xz.aliyun.com/t/6369
实验环境:
- 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:
1234# 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:
参考链接:
VirtualBox中安装:http://www.xitongcheng.com/jiaocheng/xtazjc_article_26588.html
实际安装:https://zh.wikihow.com/%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%AE%89%E8%A3%85-Windows-7
设置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 |
如图所示:
赞赏
- [个人备忘]通过vcpkg在windows平台构建Triton 6328
- IDA插件Ponce的使用 10182
- [分享]Windows平台利用虚拟机搭建Cuckoo沙箱 8611