
Неофициальный патч libvirt для бесплатной лаборатории SpecterOps Kubernetes for Red Teamers
Неофициальный патч для libvirt и QEMU/KVM к бесплатному курсу SpecterOps Kubernetes for Red Teamers. Исходные сетевые адреса, топология Kubernetes, обратные вызовы Mythic и поведение лабораторной среды остаются без изменений.
Потому что запуск VirtualBox на Linux — это как приносить портативный генератор в дом, который уже подключён к электросети: вы платите дважды за то, что ядро уже предоставляет, добавляя при этом ещё один гипервизор и поверхность атаки в виде модулей ядра. KVM является частью Linux, а QEMU и libvirt обеспечивают уровни виртуальных машин и управления вокруг него. Это позволяет избежать установки отдельного стороннего стека гипервизорных модулей на хост Linux.
VirtualBox решает проблему кроссплатформенного распространения курса; libvirt решает проблему хоста Linux. Исходный провайдер VirtualBox остаётся нетронутым для пользователей 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;Скачайте k8s-attack-path-part-1-lab-assets.tar.gz из
раздела Lab Infrastructure and Configuration бесплатного курса SpecterOps.
Распакуйте исходные файлы лабораторной среды:
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 автоматически отключает параллельный запуск, поскольку более поздние машины используют файлы, сгенерированные control plane.

Функциональная топология, показанная на схеме курса, сохранена:
| Элемент схемы | Конвертация в libvirt |
|---|---|
| Teamserver | 192.168.56.10, DNS teamserver |
| Control plane | 192.168.56.20, API-сервер на TCP 6443 |
| Worker 1 | 192.168.56.30 |
| Worker 2 | 192.168.56.31 |
| Интерфейс Mythic | TCP 7443 |
| Порт обратных вызовов | TCP 8081 |
| TLS-реестр | TCP 5000, доверенный узлами кластера |
| Обратные вызовы Mythic | Обратные вызовы developer и noaccess сохранены |
| Доступ с хоста | Vagrant пробрасывает порты 7443 и 8081 на teamserver |
| Частный трафик лабораторной среды | Остаётся в изолированной сети 192.168.56.0/24 |
| Доступ в интернет | Сохранён через адаптер 1 |
| Разрешение имён хостов | Сохранено на всех четырёх ВМ |
| Code-server и манифесты лабораторной среды | Без изменений относительно исходной версии |
Реализация сети имеет одно намеренное отличие:
k8s-workshop-mgmt, обычно 192.168.157.0/24.Таким образом, ВМ libvirt могут взаимодействовать через адаптер 1, тогда как отдельные NAT-адаптеры VirtualBox не предоставляют такого пути. 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, скачанный архив или другие материалы вышестоящего проекта.