首页
社区
课程
招聘
[原创]在个人 PC Windows 不套娃搭建恶意软件沙箱:CAPEv2 VMware Workstation 流畅运行完整实战
发表于: 2026-3-11 18:06 689

[原创]在个人 PC Windows 不套娃搭建恶意软件沙箱:CAPEv2 VMware Workstation 流畅运行完整实战

2026-3-11 18:06
689

写在前面

想在本地搭个恶意软件沙箱?网上教程一堆,但大多是 Linux + KVM 的方案。
如果你和我一样,主力机是 Windows,又不想让windows套vmware套ubuntu套kvm套windows或买服务器,这篇文章就是给你写的。

核心痛点:

  • CAPEv2 官方推荐 Linux + KVM,但 Windows 物理机无法直接运行 KVM
  • 如果使用windows + KVM 如前言的多层套娃,又会导致内层系统卡顿不已
  • VMware Workstation 在 Windows 上很成熟,但 CAPEv2 控制 VMware 需要跨系统通信
  • 网上大部分教程都是理想环境(独立 Linux 服务器或直接物理机装 Ubuntu)或者直接上VMware ESXi(企业级),实际部署会遇到各种坑

本文方案:

  • 物理机:Windows 11
  • 虚拟化:VMware Workstation
  • 沙箱系统:Ubuntu VM 运行 CAPEv2
  • 分析机:Windows 10 VM

通过 SSH + bridge.bat 中转,让 Ubuntu VM 能控制 Windows 上的 VMware,实现完整的自动化分析流程。


架构设计

最终稳定架构

1
2
3
4
物理机 Windows 11
  └─ VMware Workstation(运行在 ADMIN 桌面会话)
       ├─ Ubuntu VM(运行 CAPEv2)
       └─ Windows 分析机 VM(cape.vmx)

通信流程

1
2
3
4
5
6
7
8
9
Ubuntu → SSH → Windows ADMIN
            
     写 command.txt
            
   桌面 Session 中 bridge.bat 执行 vmrun
            
       输出写入 result.txt
            
Ubuntu 读取 result.txt

核心原则

  • VMware 必须在 ADMIN 桌面 Session 运行
  • SSH 也必须登录 ADMIN
  • vmrun 必须在桌面 Session 执行(通过 bridge)
  • Ubuntu VM、Windows VM、Windows 物理机彼此必须网络相互可达(ping 通即可)

为什么这么设计?

VMware Workstation 的 vmrun 命令必须在有桌面会话的环境下执行,否则会报错。而 SSH 默认是无桌面会话的,所以需要通过 bridge.bat 这个中转脚本,在桌面会话中执行 vmrun 命令。
VMware Workstation 的虚拟机采用会话绑定锁的方式,因此 SSH 、bridge、Windows VM 必须在同一个会话


部署步骤

一、Windows 物理机配置

1. 配置 SSH 免密登录

为什么要用 ADMIN 账户?

因为 VMware 需要管理员权限,使用普通账户会遇到权限问题。

Ubuntu 端生成 SSH 公钥:

1
ssh-keygen -t ed25519

一路回车,不设置 passphrase(自动化必须留空)。

复制公钥内容:

1
cat ~/.ssh/id_ed25519.pub

Windows 端配置公钥:

⚠️ 重要: 因为 ADMIN 属于 Administrators 组,Windows OpenSSH 不会读取用户目录下的 authorized_keys,而是读取:

1
C:\ProgramData\ssh\administrators_authorized_keys

创建文件并粘贴公钥内容,然后设置权限:

1
2
3
icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r
icacls C:\ProgramData\ssh\administrators_authorized_keys /grant:r "SYSTEM:(F)"
icacls C:\ProgramData\ssh\administrators_authorized_keys /grant:r "Administrators:(F)"

重启 SSH 服务:

1
Restart-Service sshd

测试免密登录:

1
ssh admin@192.168.1.1

如果直接进入 shell,不再要求密码,说明成功。

2. 创建 bridge 执行器

C:\Users\ADMIN\Desktop\vmrun\ 创建 bridge.bat

@echo off
setlocal enabledelayedexpansion

set "CMD_FILE=C:\Users\ADMIN\Desktop\vmrun\command.txt"
set "RES_FILE=C:\Users\ADMIN\Desktop\vmrun\result.txt"

:loop
if exist "%CMD_FILE%" (
    del "%RES_FILE%" >nul 2>&1

    for /f "usebackq delims=" %%A in ("%CMD_FILE%") do (
        set "VM_CMD=%%A"
    )

    echo Running: !VM_CMD!

    cmd /c "!VM_CMD!" > "%RES_FILE%" 2>&1

    del "%CMD_FILE%"
)

timeout /t 1 >nul
goto loop

这个脚本做什么?

它会不断检查 command.txt 文件,如果存在就执行里面的命令,并把结果写入 result.txt。这样 Ubuntu 就可以通过 SSH 写入命令,然后读取结果。

3. 让 bridge 后台运行

创建 start_hidden.vbs

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c C:\Users\ADMIN\Desktop\vmrun\bridge.bat", 0, False

把这个文件放入启动文件夹(Win+R 输入 shell:startup),确保开机自动运行。


二、Ubuntu VM 配置

1. 创建 vmrun 中转脚本

/usr/local/bin/vmrun 创建脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
 
WINDOWS_HOST="192.168.1.1"
WINDOWS_USER="admin"
 
CMD="path/to/vmrun.exe"
REAL_VMX="path/to/vmx"
 
FULL="$CMD"
 
for arg in "$@"; do
    if [[ "$arg" == *.vmx ]]; then
        FULL="$FULL \"$REAL_VMX\""
    else
        FULL="$FULL \"$arg\""
    fi
done
 
ssh ${WINDOWS_USER}@${WINDOWS_HOST} "echo $FULL > C:\\Users\\ADMIN\\Desktop\\vmrun\\command.txt"
 
sleep 2
 
ssh ${WINDOWS_USER}@${WINDOWS_HOST} "type C:\\Users\\ADMIN\\Desktop\\vmrun\\result.txt"

设置可执行权限:

1
sudo chmod +x /usr/local/bin/vmrun

测试链路:

1
2
3
vmrun list
vmrun start "path/to/vmx" nogui
vmrun stop "path/to/vmx" hard

如果返回正常,说明 SSH、bridge、vmrun 都正常工作。


三、安装 CAPEv2

1. 安装系统依赖

1
2
3
sudo apt update
sudo apt install -y git mongodb redis-server tcpdump \
    libffi-dev libssl-dev build-essential p7zip-full

启动 MongoDB:

1
2
sudo systemctl enable mongod
sudo systemctl start mongod

2. 使用 Python 3.10(重要)

⚠️ 踩坑警告: Python 3.12 下 multiprocessing 行为不稳定,processing 线程不触发。建议使用 Python 3.10。

1
sudo apt install python3.10 python3.10-venv python3.10-dev

3. 克隆并配置 CAPEv2

1
2
3
4
5
6
git clone https://github.com/kevoreilly/CAPEv2.git
cd CAPEv2
python3.10 -m venv cape310
source cape310/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

四、配置 Windows 分析虚拟机

在 Windows 分析机 VM 中执行以下操作:

  1. 设置静态 IP(如 192.168.1.1)
  2. 关闭防火墙
  3. 安装 Python 3.10-3.14(必须 32 位)
  4. 复制 CAPEv2 到分析机

运行 Agent:

1
python agent/agent.py

应显示监听端口:0.0.0.0:8000

设置开机自启:

建议使用计划任务,确保每次启动都自动运行 agent。

创建快照:

关机并创建名为 clean 的快照(名称必须与后续 Ubuntu 配置文件中的 snapshot 一致)。


五、配置 CAPE 核心

1. 修改 ResultServer IP

编辑 conf/cuckoo.conf

[resultserver]
ip = 192.168.1.2
port = 2042

这个 IP 是 Ubuntu VM 的 IP,分析机会通过这个 IP 回传数据。

2. 配置 VMware

编辑 conf/vmware.conf

[vmware]
mode = nogui
path = /usr/local/bin/vmrun

[win10]
label = win10
platform = windows
ip = 192.168.1.1
snapshot = clean
vmx_path = /home/username/VMs/win10/win10.vmx

⚠️ 注意:

  • vmx_path 必须是真实 Linux 路径,只要文件存在即可(用于欺骗 CAPE),需要自己手动创建
  • snapshot 必须提前在 VMware 中创建关机镜像
  • ip 必须是 Win10 的 ip 地址

3. 调整剩余空间要求

CAPE 默认要求剩余空间 50G,如果不够可以修改 conf/cuckoo.conf(推荐大一点):

freespace = 10240

根据实际磁盘空间调整该值(单位 MB)。

4. 启用 MongoDB reporting

编辑 conf/reporting.conf,确保启用:

[mongodb]
enabled = yes

5. 修复 tcpdump 权限

1
2
3
4
sudo groupadd pcap
sudo usermod -a -G pcap $USER
sudo chgrp pcap /usr/bin/tcpdump
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump

重新登录生效。

6. 修复 VM 强制关闭逻辑

⚠️ 踩坑警告: 使用路径中转(dummy vmx),_is_running() 判断永远为 False,导致 VM 无法正常关闭。

解决方法: 修改 modules/machinery/vmware.py,去掉 _is_running() 判断,强制执行 vmrun stop <vmx> hard,忽略返回码。


六、配置 Web 界面

1. 删除 daphne(使用标准 WSGI)

1
pip uninstall daphne

编辑 web/web/settings.py,从 INSTALLED_APPS 中删除 "daphne"

2. 固定 SQLite 数据库路径

web/web/settings.py 中设置:

1
2
3
4
5
6
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": os.path.join(BASE_DIR, "siteauth.sqlite"),
    }
}

3. 配置静态文件

确保配置如下:

1
2
3
STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

4. 初始化数据库

1
2
3
python web/manage.py migrate
python web/manage.py createsuperuser
python web/manage.py collectstatic

5. 启动 Web

1
python web/manage.py runserver 0.0.0.0:8000

访问:http://UbuntuIP:8000

图片描述


正常启动顺序

每次运行需要启动三个终端,都不要用管理员权限启动

终端 1 - CAPE 核心:

1
2
source cape310/bin/activate
python cuckoo.py

终端 2 - Process 进程:

1
2
source cape310/bin/activate
python utils/process.py auto -p 1

终端 3 - Web 界面:

1
2
source cape310/bin/activate
python web/manage.py runserver 0.0.0.0:8000

Windows 上的 agent 由开机自启启动。


验证链路

提交样本

1
python cuckoo.py submit sample.exe

或在前端提交样本分析即可

正常流程

  1. VM 启动
  2. 恢复 snapshot
  3. agent 通信
  4. 分析完成
  5. Web 显示报告

图片描述


踩坑总结

1. Python 3.12 的 multiprocessing 问题

现象: processing 线程不触发,任务一直卡在队列中。

解决: 使用 Python 3.10。

2. vmrun 必须在桌面 Session 执行

现象: SSH 执行 vmrun 报错。

解决: 通过 bridge.bat 在桌面 Session 中执行。

3. _is_running() 判断问题

现象: VM 无法正常关闭,machine 状态一直被占用。

解决: 修改 vmware.py,强制执行 vmrun stop 并忽略返回码。


系统要求

Ubuntu VM 推荐配置:

  • 内存:≥ 4GB(否则 Process 可能无法启动)
  • 存储:≥ 50GB

Windows 分析机推荐配置:

  • 内存:≥ 2GB
  • 存储:≥ 20GB

效果

部署成功后,你可以:

  1. 通过 Web 界面提交样本
  2. 自动启动分析机、恢复快照
  3. 监控样本行为(进程、网络、文件操作等)
  4. 生成详细的分析报告
  5. 运行自定义脚本、yara

写在最后

这套方案的核心价值在于:

  1. 解决了 VMware Workstation + Windows 物理机的架构问题 —— 通过 SSH + bridge.bat 中转,让 Ubuntu VM 能控制 Windows 上的 VMware
  2. 踩坑记录很实用 —— 都是笔者血泪教训
  3. 架构清晰 —— 一眼就能看懂整体结构和通信流程

相关资源:

  • CAPEv2 官方仓库:f76K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6C8k6i4k6G2M7X3g2A6L8r3I4&6i4K6u0r3b7@1q4b7c8i4j5J5
  • VMware Workstation:0abK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2$3L8i4N6S2M7X3g2Q4x3X3g2U0L8$3#2Q4x3V1k6H3M7X3!0V1N6h3y4@1M7#2)9J5c8Y4N6G2M7X3E0K6N6r3q4@1K9h3!0F1i4K6u0V1M7s2u0G2i4K6u0W2K9s2c8E0L8l9`.`.
  • 我的仓库:f81K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0K9i4g2F1j5i4y4#2

传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回