zahid-marwat/Malware-Lifecycle-Lab
GitHub: zahid-marwat/Malware-Lifecycle-Lab
一个用于 Windows 11 恶意软件生命周期自动编排的 forensic 框架,在沙箱中并行采集 RAM、磁盘与注册表工件并输出结构化数据集。
Stars: 0 | Forks: 0
# 恶意软件生命周期实验室
该项目编排一个受控的虚拟机生命周期,以收集 RAM、磁盘和注册表工件,并将其转换为结构化的数据集输出,用于后续的机器学习训练。
## 1) 当前能力
- 在虚拟机池中进行并行样本调度
- 基于主机预算的容量规划
- 快照恢复 -> 运行 -> 观察 -> 捕获 -> 关机 周期
- 每个样本的工件清单和派生特征文件
- 用于安全开发和验证的干运行模式
- 支持挂载主机提取的 VirtualBox 模式
- 在 `context.txt` 中持久化进度与交接上下文
## 2) 仓库结构
- `config.example.json`: 基准运行时配置
- `src/malware_lifecycle_lab/cli.py`: CLI 入口
- `src/malware_lifecycle_lab/orchestrator.py`: 生命周期与调度逻辑
- `src/malware_lifecycle_lab/vm.py`: 虚拟机后端(干运行与 VirtualBox)
- `src/malware_lifecycle_lab/features.py`: 轻量级特征提取
- `tests/test_pipeline.py`: 单元测试
- `context.txt`: 实现与交接上下文日志
## 3) 快速开始
1. 从 `config.example.json` 创建/更新运行时配置。
2. 将样本文件放入配置的 `samples_dir`。
3. 干运行计划:
- `malware-lifecycle-lab --config config.example.json plan`
4. 在执行前验证运行时权限:
- `malware-lifecycle-lab --config config.example.json check`
5. 干运行执行:
- `malware-lifecycle-lab --config config.example.json --backend dry-run run`
6. VirtualBox 执行(配置实验室路径后):
- `malware-lifecycle-lab --config config.example.json --backend virtualbox run`
### 3.1) 从 ISO 创建 Windows 11 VM(后续添加时)
当将 Windows 11 ISO 放置在磁盘上时,请使用辅助脚本:
- `pwsh -ExecutionPolicy Bypass -File scripts/setup-windows11-vm.ps1 -IsoPath "C:\path\to\Windows11.iso" -VMName "ForensicNode"`
该脚本执行以下操作:
- 创建 VirtualBox 虚拟机(`Windows11_64`)
- 分配基准资源(RAM/CPU/磁盘)
- 挂载 ISO 作为 DVD
- 设置安装引导顺序
- 打印用于 `Clean_Base` 的快照命令
安装完成后推荐后续步骤:
- 在虚拟机中完成 Windows 安装与更新
- 安装工作流所需的来宾工具
- 根据需要加固并隔离网络
- 创建名为 `Clean_Base` 的干净快照
### 3.2) 在虚拟机内安装浏览器(Chrome、Firefox、Edge)
在 Windows 安装完成且虚拟机运行后,从主机安装浏览器:
- `pwsh -ExecutionPolicy Bypass -File scripts/install-browsers-in-vm.ps1 -VMName "ForensicNode" -GuestUsername "Admin" -GuestPassword ""`
- 可选:安装浏览器并立即拍摄/更新基准快照:
- `pwsh -ExecutionPolicy Bypass -File scripts/install-browsers-in-vm.ps1 -VMName "ForensicNode" -GuestUsername "Admin" -GuestPassword "" -TakeSnapshot -SnapshotName "Clean_Base"`
说明:
- 使用 `VBoxManage guestcontrol` 在来宾中运行 PowerShell。
- 通过 `winget` 安装 `Google.Chrome`、`Mozilla.Firefox` 和 `Microsoft.Edge`。
- 如果来宾账户已加入域,请同时传递 `-GuestDomain`。
- 如果使用 `-TakeSnapshot`,则在成功安装后创建 VirtualBox 快照。
## 4) 配置指南
### 核心运行时
- `backend`: `dry-run` 或 `virtualbox`
- `observation_seconds`: 捕获前的等待窗口
- `compress_artifacts`: 压缩原始捕获输出
- `gpu_postprocess_enabled`: 启用 CUDA/CuPy 后处理阶段
- `gpu_min_file_size_mb`: GPU 阶段的最小文件大小阈值
### 主机预算(控制并发)
- `host_budget.total_ram_gb`
- `host_budget.total_disk_gb`
- `host_budget.reserved_ram_gb`
- `host_budget.reserved_disk_gb`
- `host_budget.max_parallel_vms`
### 虚拟机配置
- `vm_profile.names`: 虚拟机池列表
- `vm_profile.ram_gb`、`vm_profile.disk_gb`: 每个虚拟机预估成本
- `vm_profile.snapshot_name`: 干净还原点
### VirtualBox 设置
- `virtualbox.vboxmanage`: VBoxManage 可执行文件名/路径
- `virtualbox.powershell`: 用于自动挂载操作的 PowerShell 命令
- `virtualbox.guest_username`、`guest_password`、`guest_domain`: guestcontrol 认证
- `virtualbox.guest_sample_runner`: 虚拟机内的启动器
- `virtualbox.auto_mount_enabled`: 自动挂载磁盘镜像(当挂载根未预先提供时)
- `virtualbox.vm_disk_image_path`: 感染型虚拟机磁盘镜像路径(`.vdi`、`.vmdk`、`.vhd`、`.vhdx`)
- `virtualbox.baseline_disk_image_path`: 清洁基准磁盘镜像路径(用于磁盘差分)
- `virtualbox.mount_work_dir`: 临时转换挂载镜像的工作目录
- `virtualbox.host_disk_artifact_dir`: 主机上挂载的来宾 C 盘根目录
- `virtualbox.host_registry_artifact_dir`: 主机上挂载的来宾注册表根目录
- `virtualbox.baseline_disk_artifact_dir`: 用于磁盘差分的清洁基准 C 盘挂载根目录
- `virtualbox.baseline_registry_artifact_dir`: 用于注册表差分的清洁基准注册表根目录
- `virtualbox.disk_target_paths`: 虚拟机内要提取的磁盘目标路径
- `virtualbox.registry_target_paths`: 虚拟机内要提取的注册表 hive 目标路径
## 5) 挂载提取行为
在每次样本运行期间:
- 磁盘目标被复制到 `dataset//raw/disk_artifacts/`
- 注册表目标被复制到 `dataset//raw/registry_artifacts/`
- 提取清单写入:
- `dataset//raw/disk.txt(.gz)`
- `dataset//raw/registry.txt(.gz)`
如果配置了基准根目录,则清单包含每个目标的差分状态(`same`、`changed`、`added`、`removed`、`missing`)以及文件级变更列表。
如果某个配置的目标不存在,则在清单中标记为缺失(不会单独视为崩溃)。
当 `auto_mount_enabled=true` 时,流水线会自动挂载配置的磁盘镜像并在提取完成后卸载。
## 6) 每个样本产生的输出
- `dataset//raw/` 下的原始捕获
- `dataset//labels/run_manifest.json` 中的运行元数据
- `dataset//parsed/features.json` 中的派生特征
- 可选的 GPU 分析结果:`dataset//parsed/gpu_postprocess.json`
- 聚合行数据:`dataset/dataset.csv`
## 7) 测试与验证
运行单元测试:
- `python -m unittest discover -s tests`
在真实运行前推荐检查:
- 确认 `plan` 命令返回预期的虚拟机容量
- 确认挂载路径在主机上存在且可读
- 确认快照名称与 VirtualBox 虚拟机匹配
- 使用 `check` 命令验证所需权限与访问环境
如需跳过预检检查:
- `malware-lifecycle-lab --config config.example.json --skip-permission-check run`
## 8) 故障排查
- `No samples found`:检查 `samples_dir` 路径与文件放置
- `snapshot restore failed`:检查虚拟机名称与快照名称
- `VBoxManage` 命令错误:检查 `virtualbox.vboxmanage` 路径与权限
- 缺失提取的工件:检查挂载根目录与目标路径的大小写/拼写
- 虚拟机创建脚本失败:确认 VirtualBox 已安装且 `VBoxManage` 在 `PATH` 中(或通过 `-VBoxManagePath` 指定)
## 9) 未来变更操作清单
每当需求变更时使用此清单。
### 如果更改虚拟机用户名
- 更新 `_target_paths` 与 `registry_target_paths` 中依赖用户的路径
### 如果添加浏览器/工件源
- 向 `disk_target_paths` 添加新的来宾相对路径
- 在 `features.py` 中添加对新工件格式的解析规则
### 如果扩展到更多虚拟机
- 向 `vm_profile.names` 添加名称
- 重新计算主机预留值以避免磁盘/RAM 耗尽
### 如果需要更强的可靠性
- 在 VirtualBox 命令执行中添加重试/退避机制
- 添加恢复检查点以跳过已完成的样本
### 如果需要更丰富的机器学习数据
- 在 `features.py` 中扩展领域特定解析器
- 添加标签流水线与训练/验证集划分生成
## 10) 安全与运维说明
- 仅在此隔离且已授权的分析环境中运行该流水线。
- 在有意义的变更后更新 `context.txt`,以便快速恢复或交接。
- 在操作真实虚拟机前,优先使用干运行模式验证新逻辑。
标签:AI合规, Caido项目解析, CLI, DAST, Homebrew安装, Ruby on Rails, VirtualBox, WiFi技术, Windows 11, 上下文日志, 主机资源感知, 内存转储, 功能提取, 单元测试, 取证, 容量规划, 干运行, 并行执行, 快照恢复, 恶意软件分析, 批量调度, 数字取证, 机器学习数据集, 沙箱, 注册表转储, 特征提取, 生命周期管理, 生成式AI安全, 磁盘取证, 编排引擎, 网络调试, 自动化, 自动化脚本, 虚拟机, 进程持久化, 逆向工具