这是针对免费的 SpecterOps Kubernetes for Red Teamers 课程的非官方 libvirt 和 QEMU/KVM 补丁。原始网络地址、Kubernetes 拓扑、Mythic 回连和实验环境行为均保持不变。
因为在 Linux 上运行 VirtualBox 就像给已经接入电网的房子带一台便携式发电机;你为内核已经提供的东西付了两次钱,同时还增加了另一个虚拟机监控程序和内核模块攻击面。KVM 是 Linux 的一部分,而 QEMU 和 libvirt 提供了围绕它的虚拟机和管控层。这避免了在 Linux 主机上添加额外的第三方虚拟机监控程序模块栈。
VirtualBox 解决了课程跨平台分发的问题;libvirt 解决了 Linux 主机的问题。原始的 VirtualBox provider 对 Windows 和 macOS 用户保持不变,而这个补丁让 Linux 用户可以在 KVM 上运行相同的实验环境。
本仓库有意不包含 SpecterOps 实验环境归档文件或其源代码树的副本。请通过官方课程获取原始材料:
README.md
ARCHITECTURE.md
LICENSE
NOTICE.md
UPSTREAM_SHA256SUMS
docs/
libvirt-lab-provisioned.png
patches/
libvirt.patch
SHA256SUMS
patches/libvirt.patch 仅包含添加 libvirt 支持所需的更改。它不包含原始归档文件、内部转换计划、审查报告、本地测试工具、生成的凭据或虚拟机状态。
vagrant-libvirt 插件;从免费 SpecterOps 课程的 Lab Infrastructure and Configuration 部分下载 k8s-attack-path-part-1-lab-assets.tar.gz。
解压原始实验文件:
mkdir -p ~/kubernetes-for-red-teamers
cd ~/Downloads
tar xzvf k8s-attack-path-part-1-lab-assets.tar.gz -C ~/kubernetes-for-red-teamers
克隆补丁仓库:
cd ~
git clone https://github.com/GregDurys/specterops-k8s-red-teamers-libvirt-patch.git
验证补丁:
cd ~/specterops-k8s-red-teamers-libvirt-patch
sha256sum -c patches/SHA256SUMS
结果应为:
patches/libvirt.patch: OK
可选地,将下载的归档文件与用于测试此补丁的版本进行校验:
cd ~/Downloads
sha256sum -c ~/specterops-k8s-red-teamers-libvirt-patch/UPSTREAM_SHA256SUMS
如果校验和不匹配,SpecterOps 可能已更新实验文件。
应用补丁:
cd ~/kubernetes-for-red-teamers
git apply --check ~/specterops-k8s-red-teamers-libvirt-patch/patches/libvirt.patch
git apply ~/specterops-k8s-red-teamers-libvirt-patch/patches/libvirt.patch
验证配置:
vagrant validate
结果应为:
Vagrantfile validated successfully.
补丁会向解压目录添加自己的实验使用 README 和架构文档。
从打过补丁的课程目录启动实验环境:
vagrant up --provider=libvirt
Vagrantfile 会自动禁用并行启动,因为后面的机器会使用控制平面生成的文件。

课程图中展示的功能拓扑得以保留:
网络实现有一个有意为之的差异:
k8s-workshop-mgmt NAT 网络,通常为 192.168.157.0/24。因此,libvirt 虚拟机可以通过适配器 1 相互通信,而 VirtualBox 的独立 NAT 适配器不提供该路径。Kubernetes、Calico、Mythic 回连、仓库和实验主机名解析均明确绑定到适配器 2,因此实验拓扑保持不变。
阅读 ARCHITECTURE.md 了解拓扑、冲突处理和同步文件夹设计原理的详细信息。
配置完成后:
vagrant status
vagrant ssh control-plane-1 -c 'kubectl get nodes -o wide'
vagrant port --guest 7443 teamserver
curl --insecure --head https://192.168.56.10:7443
所有三个 Kubernetes 节点都应处于 Ready 状态,内部地址分别为 .20、.30 和 .31。Mythic 登录页面应可通过转发的主机端口以及直接访问 https://192.168.56.10:7443 到达。两个课程回连应按照官方课程材料的描述出现在 Mythic 中。
要拆除测试环境:
vagrant destroy -f
本仓库中的原始作品根据 Apache License 2.0 许可。
此许可证仅适用于本仓库贡献的原始代码和文档。它不授予对 SpecterOps 课程、下载的归档文件或其他上游材料的任何权利。
| 图表元素 | Libvirt 转换 |
|---|
| Teamserver | 192.168.56.10,DNS teamserver |
| 控制平面 | 192.168.56.20,API 服务器位于 TCP 6443 |
| Worker 1 | 192.168.56.30 |
| Worker 2 | 192.168.56.31 |
| Mythic UI | TCP 7443 |
| 回连端口 | TCP 8081 |
| TLS 仓库 | TCP 5000,受集群节点信任 |
| Mythic 回连 | 保留 developer 和 noaccess 回连 |
| 主机访问 | Vagrant 将端口 7443 和 8081 转发到 teamserver |
| 私有实验流量 | 保留在隔离的 192.168.56.0/24 网络中 |
| 互联网访问 | 通过适配器 1 保留 |
| 主机名解析 | 在所有四个虚拟机中保留 |
| Code-server 和实验清单 | 与上游保持一致 |