
Parche no oficial de libvirt para el laboratorio gratuito Kubernetes for Red Teamers de SpecterOps
Un parche no oficial de libvirt y QEMU/KVM para el curso gratuito Kubernetes for Red Teamers de SpecterOps. Las direcciones de red originales, la topología de Kubernetes, los callbacks de Mythic y el comportamiento del laboratorio permanecen sin cambios.
Porque ejecutar VirtualBox en Linux es como llevar un generador portátil a una casa que ya está conectada a la red eléctrica; estás pagando dos veces por algo que el kernel ya te proporciona, mientras añades otro hipervisor y una superficie de ataque de módulos del kernel. KVM es parte de Linux, mientras que QEMU y libvirt proporcionan las capas de máquina virtual y gestión a su alrededor. Esto evita añadir una pila de módulos de hipervisor de terceros a un host Linux.
VirtualBox resuelve el problema de distribución multiplataforma del curso; libvirt resuelve el problema del host Linux. El proveedor original de VirtualBox permanece intacto para usuarios de Windows y macOS, mientras que este parche permite a los usuarios de Linux ejecutar el mismo laboratorio en KVM.
Este repositorio intencionalmente no contiene el archivo del laboratorio de SpecterOps ni una copia de su árbol fuente. Obtén el material original a través del curso oficial:
README.md
ARCHITECTURE.md
LICENSE
NOTICE.md
UPSTREAM_SHA256SUMS
docs/
libvirt-lab-provisioned.png
patches/
libvirt.patch
SHA256SUMS
patches/libvirt.patch contiene solo los cambios necesarios para añadir soporte de libvirt. No contiene el archivo original, planes de conversión internos, informes de revisión, entorno de pruebas local, credenciales generadas ni estado de las máquinas virtuales.
vagrant-libvirt;Descarga k8s-attack-path-part-1-lab-assets.tar.gz desde la
sección Lab Infrastructure and Configuration del curso gratuito de SpecterOps.
Extrae los archivos originales del laboratorio:
mkdir -p ~/kubernetes-for-red-teamers
cd ~/Downloads
tar xzvf k8s-attack-path-part-1-lab-assets.tar.gz -C ~/kubernetes-for-red-teamers
Clona el repositorio del parche:
cd ~
git clone https://github.com/GregDurys/specterops-k8s-red-teamers-libvirt-patch.git
Verifica el parche:
cd ~/specterops-k8s-red-teamers-libvirt-patch
sha256sum -c patches/SHA256SUMS
El resultado debería ser:
patches/libvirt.patch: OK
Opcionalmente, verifica el archivo descargado contra la versión utilizada para probar este parche:
cd ~/Downloads
sha256sum -c ~/specterops-k8s-red-teamers-libvirt-patch/UPSTREAM_SHA256SUMS
Si la suma de verificación difiere, SpecterOps puede haber actualizado los archivos del laboratorio.
Aplica el parche:
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
Valida la configuración:
vagrant validate
El resultado debería ser:
Vagrantfile validated successfully.
El parche añade su propio README de uso del laboratorio y un documento de arquitectura al directorio extraído.
Inicia el laboratorio desde el directorio del curso parcheado:
vagrant up --provider=libvirt
El Vagrantfile desactiva automáticamente el arranque paralelo porque las máquinas posteriores consumen archivos generados por el plano de control.

La topología funcional mostrada en el diagrama del curso se conserva:
| Elemento del diagrama | Conversión a libvirt |
|---|---|
| Teamserver | 192.168.56.10, DNS teamserver |
| Plano de control | 192.168.56.20, servidor API en TCP 6443 |
| Worker 1 | 192.168.56.30 |
| Worker 2 | 192.168.56.31 |
| Interfaz de Mythic | TCP 7443 |
| Puerto de callback | TCP 8081 |
| Registro TLS | TCP 5000, confiable para los nodos del clúster |
| Callbacks de Mythic | Se conservan los callbacks developer y noaccess |
| Acceso del host | Vagrant reenvía los puertos 7443 y 8081 al teamserver |
| Tráfico privado del laboratorio | Permanece en la red aislada 192.168.56.0/24 |
| Acceso a Internet | Se conserva a través del adaptador 1 |
| Resolución de nombres de host | Se conserva en las cuatro máquinas virtuales |
| Code-server y manifiestos del laboratorio | Sin cambios respecto al upstream |
La implementación de red tiene una diferencia deliberada:
k8s-workshop-mgmt, normalmente 192.168.157.0/24.Por lo tanto, las máquinas virtuales de libvirt pueden comunicarse a través del adaptador 1, mientras que los adaptadores NAT separados de VirtualBox no proporcionan esa ruta. Kubernetes, Calico, los callbacks de Mythic, el registro y la resolución de nombres de host del laboratorio están explícitamente fijados al adaptador 2, por lo que la topología del laboratorio permanece sin cambios.
Lee ARCHITECTURE.md para conocer los detalles de la topología, el manejo de colisiones y la justificación de la carpeta sincronizada.
Después de que el aprovisionamiento se complete:
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
Los tres nodos de Kubernetes deberían estar Ready con direcciones internas .20, .30 y .31. La página de inicio de sesión de Mythic debería ser accesible a través del puerto reenviado del host y directamente en https://192.168.56.10:7443. Los dos callbacks del curso deberían aparecer en Mythic como se describe en el material oficial del curso.
Para desmontar el entorno de prueba:
vagrant destroy -f
El trabajo original en este repositorio está licenciado bajo la Apache License 2.0.
Esta licencia se aplica solo al código y la documentación originales aportados por este repositorio. No otorga ningún derecho sobre el curso de SpecterOps, el archivo descargado ni otro material upstream.