多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Cuckoo Sandbox 虚拟机快照保存指南:为 VirtualBox、KVM、VMware 与 XenServer 准备干净的沙箱镜像

Cuckoo Sandbox 虚拟机快照保存指南:为 VirtualBox、KVM、VMware 与 XenServer 准备干净的沙箱镜像 网络安全应用安全【免费下载链接】cuckooCuckoo Sandbox is an automated dynamic malware analysis system项目地址https://gitcode.com/gh_mirrors/cu/cuckoo点击查看免费下载本篇指南对应 Cuckoo Sandbox 官方安装文档中的 Saving the Virtual Machine 章节讲解在完成 Guest 虚拟机创建、网络配置与 Agent 安装 之后如何为四种主流虚拟化平台VirtualBox、KVM、VMware Workstation、XenServer保存一个干净、可随时回滚的虚拟机快照状态。读完本文你将掌握每种平台下从命令行拍摄/管理快照的完整操作、KVM 与 XenServer 两种特殊磁盘方案QCOW2 转换、on-bootreset的底层原理以及快照参数如何与 machinery 配置 和 machinery 模块源码 衔接最终让 Cuckoo 能在每次分析前自动把分析机恢复到基准状态。保存快照的前置条件先让 Guest 处于可交付状态在动手保存快照之前请务必确认以下三点缺一不可已经完成一次软重启soft reboot确保 Guest 内部不存在未落盘的临时状态、残留进程或半初始化服务虚拟机当前正在运行快照记录的是运行中的整机状态包含内存与磁盘Cuckoo 需要的是一个正在运行中的基准镜像Cuckoo Agent 已在 Guest 内运行、Windows 已完全启动Agent 是 Cuckoo Host 与 Guest 之间通信的桥梁它会在 Guest 内启动一个小型 API 服务器供 Host 调用详见 agent.rst。如果快照里没有 Agent后续分析任务将无法下发。只有满足上述条件并按下文各平台步骤操作虚拟机才算准备好交给 Cuckoo 使用。VirtualBox用 VBoxManage 命令行拍摄与回滚快照VirtualBox 既可以从图形界面GUI拍摄快照也可以使用命令行工具VBoxManage。命令行方式更适合批量脚本化操作命令如下$ VBoxManage snapshot Name of VM take Name of snapshot --pause--pause参数会在拍摄内存快照时暂停虚拟机保证内存镜像与磁盘状态一致。快照创建完成后即可关闭虚拟机电源并把虚拟机恢复回滚到快照状态$ VBoxManage controlvm Name of VM poweroff $ VBoxManage snapshot Name of VM restorecurrentcontrolvm ... poweroff相当于强制关机等价于拔掉电源线restorecurrent将虚拟机恢复到当前快照current snapshot也就是刚拍摄的那一个。Cuckoo 侧如何消费这个快照在 virtualbox.conf 中每个虚拟机小节都有一个可选的snapshot参数# (Optional) Specify the snapshot name to use. If you do not specify a snapshot # name, the VirtualBox MachineManager will use the current snapshot. # Example (Snapshot1 is the snapshot name): snapshot Snapshot1从源码 cuckoo/machinery/virtualbox.py 可以看到Cuckoo 的restore()方法会根据配置决定回滚目标配置了snapshot时执行VBoxManage snapshot label restore snapshot未配置时执行VBoxManage snapshot label restorecurrent即使用当前快照。更关键的是VirtualBox machinery 在_initialize_check()阶段就会对注册的所有机器逐一执行restore()见 virtualbox.py这意味着如果虚拟机没有快照Cuckoo 启动时会直接报错从而尽早暴露配置问题。每次分析任务开始前start()方法也会先调用restore()再启动虚拟机virtualbox.py确保分析环境始终是干净基准。KVMQCOW2 磁盘格式与 virsh 快照管理KVM 的沙箱方案与前者的关键区别在于磁盘格式libvirt 工具默认创建 RAW 格式虚拟磁盘而 RAW 磁盘不支持快照。因此必须改用支持快照的QCOW2或LVM。本指南以更易配置的QCOW2为例。第一步创建或转换 QCOW2 磁盘最简单的方式是直接用 libvirt 套件创建 QCOW2 格式磁盘工具二选一命令行virsh图形界面virt-manager如果手里已有 RAW 磁盘可以原地转换$ cd /your/disk/image/path $ qemu-img convert -O qcow2 your_disk.raw your_disk.qcow2第二步编辑 VM 定义指向新磁盘编辑虚拟机定义$ virsh edit Name of VM找到磁盘disk段原始 RAW 配置长这样disk typefile devicedisk driver nameqemu typeraw/ source file/your/disk/image/path/your_disk.raw/ target devhda buside/ address typedrive controller0 bus0 unit0/ /disk将driver的type改为qcow2并把source file指向新的 qcow2 镜像disk typefile devicedisk driver nameqemu typeqcow2/ source file/your/disk/image/path/your_disk.qcow2/ target devhda buside/ address typedrive controller0 bus0 unit0/ /disk第三步运行状态下拍摄快照先用修改后的定义测试虚拟机。确认一切正常后让虚拟机在 Cuckoo Agent 运行的状态下保持开机然后拍摄快照最后再关机$ virsh snapshot-create Name of VM快照的常见错误与快照管理虚拟机若存在多个快照可能触发如下错误ERROR: No snapshot found for virtual machine VM-Name这类问题的根源在于 Cuckoo 无法唯一定位应回滚的快照。快照日常管理命令如下$ virsh snapshot-list VM-Name $ virsh snapshot-delete VM-Name 1234567890snapshot-list列出该 VM 的全部快照第二参数为快照名称或 IDsnapshot-delete删除指定快照。Cuckoo 侧如何消费这个快照在 kvm.conf 中每个虚拟机同样支持可选的snapshot参数# (Optional) Specify the snapshot name to use. If you do not specify a snapshot # name, the KVM MachineManager will use the current snapshot. # Example (Snapshot1 is the snapshot name): snapshot Snapshot1KVM machinery 基于python-libvirt实现见 cuckoo/machinery/kvm.py。它通过 kvm.conf 中的dsn字段libvirt URI 连接串如qemu:///system建立连接底层复用LibVirtMachinery抽象类见 cuckoo/common/abstracts.py完成快照回滚、启动与停止。值得注意的是KVM 的_initialize_check()会校验dsn是否配置缺失时直接抛出CuckooMachineError这也是排障时最先要检查的点。VMware Workstationvmrun 命令行快照VMware Workstation 同样支持 GUI 与命令行两种方式。命令行使用 VMware 自带的vmrun工具$ vmrun snapshot /your/disk/image/path/wmware_image_name.vmx your_snapshot_name其中your_snapshot_name是你为快照取的名字。拍摄完成后从 GUI 或命令行关闭虚拟机电源$ vmrun stop /your/disk/image/path/wmware_image_name.vmx hardhard表示强制关机类似直接断电用于关闭运行中的分析机。Cuckoo 侧如何消费这个快照VMware 的配置方式与 VirtualBox 略有不同vmware.conf 中每个虚拟机的标识是vmx 文件路径vmx_path且snapshot为必填项# Specify the path to vmx file of this virtual machine. vmx_path /your/disk/image/path/wmware_image_name.vmx # Specify the snapshot name to use. snapshot your_snapshot_name从源码 cuckoo/machinery/vmware.py 可以看到Cuckoo 初始化时会做三重校验_check_vmx()vmx 路径必须以.vmx结尾且文件真实存在_check_snapshot()调用vmrun listSnapshots确认配置的快照名确实存在_snapshot_from_vmx()从数据库读取该 vmx 对应的快照名。分析开始时start()会先执行vmrun revertToSnapshot回滚vmware.py再以vmrun start启动分析结束则用vmrun stop ... hard强制关机vmware.py。任何一步失败都会抛出CuckooMachineError阻止任务继续。XenServer内存快照与磁盘重置两种方案XenServer 的 machinery 支持两种启动分析机的方式从磁盘启动或从内存快照启动。创建与回滚内存快照要求虚拟机内安装了 Xen guest tools。官方推荐优先使用内存快照因为它能大幅缩短分析时的虚拟机启动时间若无法安装 guest tools则改用磁盘开机即重置reset on boot方案确保恶意样本无法对虚拟机造成持久性修改。方案一内存快照Memory SnapshotsXen guest tools 可通过 XenServer 自带的 XenCenter 应用安装。安装完成后重启虚拟机并确认 Cuckoo Agent 正在运行。快照可以在 XenCenter 或控制域Dom0的命令行中创建XenCenter 方式创建快照时务必勾选Snapshot disk and memory快照磁盘与内存创建完成后右键点击快照记下快照 UUID命令行方式在 Dom0 上执行$ xe vm-checkpoint vmvm_uuid_or_name new-name-labelSnapshot Name/Descriptionvm-checkpoint会同时保存磁盘与内存状态与普通 snapshot 不同checkpoint 才能用于内存回滚。命令执行完成后快照 UUID 会打印到屏幕上。无论用哪种方式创建请把 UUID 记录到虚拟机的配置段中。快照创建完成后即可关闭虚拟机。方案二磁盘开机重置Booting from Disk如果无法安装 Xen guest tools、或不需要内存快照则必须确保虚拟机磁盘配置为开机时重置Cuckoo Agent 设置为开机自启在 Windows 中可将 agent 加入启动项例如放入Startup文件夹或参考 agent.rst 的做法。以下命令必须在虚拟机处于关机状态时执行。首先列出虚拟机挂载的所有磁盘$ xe vm-disk-list vmvm_name_or_uuid忽略所有 CD-ROM 和只读磁盘对其余每块磁盘执行以下命令将其行为改为开机重置$ xe vdi-param-set uuidvdi_uuid on-bootreset磁盘设置为on-bootreset之后虚拟机磁盘将不再允许任何持久性修改虚拟机运行期间产生的所有变更在关机后都不会留存从而保证每次分析都从干净状态开始。Cuckoo 侧如何消费快照或磁盘重置在 xenserver.conf 中虚拟机的snapshot参数是可选的且与磁盘重置方案二选一# Specify the virtual machine uuid. uuid VM-UUID # Specify the snapshot uuid to use. Snapshots are not required, but if they are # not used, the virtual machines disks must be configured to reset on boot. # Resetting the disks on boot ensures that samples cannot permanently modify the # analysis virtual machine past a shutdown. Refer to the Saving the Virtual # Machine section in the Cuckoo documentation for details on how to enable # disk resetting on boot. # Example: snapshot SNAPSHOT-UUID源码 cuckoo/machinery/xenserver.py 的_initialize_check()会逐一校验若配置了snapshot调用_check_snapshot()确认该 UUID 确实是快照is_a_snapshot为真、且snapshot_of指向的父虚拟机就是当前 VMxenserver.py若未配置快照则调用_check_disks_reset()遍历所有 VBD虚拟块设备对每个类型为Disk的 VDI 检查on_boot reset发现可写磁盘未重置会直接抛出CuckooMachineErrorxenserver.py。分析启动时start()若有快照则通过 XenAPI 执行VM.revertVM.resume回滚到内存快照否则直接VM.start冷启动xenserver.py分析结束用VM.hard_shutdown强制关机。整个交互通过 XenAPI XML-RPC 会话完成连接信息user、password、url均在 xenserver.conf 中配置。快照与 Cuckoo 配置的最终对接无论选择哪种虚拟化平台快照最终都要通过对应 machinery 配置文件注册给 Cuckoo才能被调度器使用平台配置文件关键字段快照消费方式源码位置VirtualBoxvirtualbox.conflabel/snapshot可选snapshot restore|restorecurrentvirtualbox.pyKVMkvm.conflabel/snapshot可选libvirt 快照回滚kvm.py基于LibVirtMachineryVMware Workstationvmware.confvmx_path/snapshot必填vmrun revertToSnapshotvmware.pyXenServerxenserver.confuuid/snapshot可选二选一VM.revertVM.resume或磁盘重置xenserver.py三个要点值得记住VirtualBox / KVM 的snapshot可选不配置时使用当前快照restorecurrent配置后则回滚到具名快照VMware 的snapshot必填_initialize_check()会调用vmrun listSnapshots验证快照存在不存在则拒绝启动XenServer 快照与磁盘重置二选一配置了快照 UUID 就走内存快照回滚否则启动时强制校验所有可写磁盘on-bootreset。另外多快照还可能引发ERROR: No snapshot found for virtual machine VM-Name之类的歧义问题建议每个分析机只保留一个基准快照并用virsh snapshot-list/virsh snapshot-delete定期清理。验证与排障快照是否正确生效快照保存后可按照以下思路验证手动回滚测试在 Host 上执行对应平台的回滚命令如VBoxManage snapshot VM restorecurrent、vmrun revertToSnapshot ...确认虚拟机能够回到 Agent 运行、Windows 完全启动的状态启动 Cuckoo 观察初始化VirtualBox 与 VMware 的 machinery 在初始化阶段就会校验并回滚快照若配置错误快照名不存在、vmx 路径非法、XenServer 磁盘未重置CuckooMachineError/CuckooCriticalError会立即抛出日志中会给出明确的修复提示提交一个测试任务使用cuckoo submit提交一个无害样本如纯文本文件观察调度器是否成功启动分析机、Agent 是否正常连接、分析结束后虚拟机是否被回滚到基准状态。按本指南完成上述全部步骤后你的分析机即处于干净、可回滚、Agent 就绪的状态可以正式投入 Cuckoo 的动态分析流程。赞分享网络安全应用安全【免费下载链接】cuckooCuckoo Sandbox is an automated dynamic malware analysis system项目地址https://gitcode.com/gh_mirrors/cu/cuckoo点击查看免费下载相关推荐Cuckoo Sandbox 虚拟机构建指南来宾机创建、系统选型与快照准备Cuckoo Sandbox 虚拟机构建指南来宾机创建、系统选型与快照准备 Cuckoo Sandbox 是一套自动化动态恶意软件分析系统其分析任务最终都要网络安全应用安全Cuckoo Sandbox 物理机部署指南用 FOG 保存与恢复 Guest 干净状态Cuckoo Sandbox 物理机部署指南用 FOG 保存与恢复 Guest 干净状态 本文是 Cuckoo Sandbox 物理机Physical Ma网络安全应用安全Cuckoo Sandbox 客户机Guest完整准备指南从虚拟机创建、Agent 部署到快照与克隆Cuckoo Sandbox 客户机Guest完整准备指南从虚拟机创建、Agent 部署到快照与克隆 本篇指南围绕 Cuckoo Sandbox 自动化动网络安全应用安全上一篇企业级微服务项目中Caffeine本地缓存的最佳实践指南下一篇3个技巧根治art-template内存泄漏大型应用必看的缓存管理方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表