
Unofficial libvirt patch per il laboratorio gratuito Kubernetes per Red Teamers di SpecterOps
Una patch non ufficiale per libvirt e QEMU/KVM per il corso gratuito Kubernetes for Red Teamers di SpecterOps. Gli indirizzi di rete originali, la topologia Kubernetes, i callback Mythic e il comportamento del laboratorio rimangono invariati.
Perché eseguire VirtualBox su Linux è come portare un generatore portatile in una casa già collegata alla rete elettrica; paghi due volte per qualcosa che il kernel ti offre già, aggiungendo al contempo un altro hypervisor e una superficie d'attacco per i moduli del kernel. KVM fa parte di Linux, mentre QEMU e libvirt forniscono i livelli di macchina virtuale e di gestione attorno ad esso. Questo evita di aggiungere uno stack di moduli hypervisor di terze parti separato su un host Linux.
VirtualBox risolve il problema di distribuzione multipiattaforma del corso; libvirt risolve il problema dell'host Linux. Il provider VirtualBox originale rimane intatto per gli utenti Windows e macOS, mentre questa patch consente agli utenti Linux di eseguire lo stesso laboratorio su KVM.
Questo repository non contiene intenzionalmente l'archivio del laboratorio SpecterOps né una copia del suo albero sorgente. Ottieni il materiale originale tramite il corso ufficiale:
README.md
ARCHITECTURE.md
LICENSE
NOTICE.md
UPSTREAM_SHA256SUMS
docs/
libvirt-lab-provisioned.png
patches/
libvirt.patch
SHA256SUMS
patches/libvirt.patch contiene solo le modifiche necessarie per aggiungere il supporto libvirt. Non contiene l'archivio originale, i piani di conversione interni, i report di revisione, l'harness di test locale, le credenziali generate o lo stato delle VM.
vagrant-libvirt;Scarica k8s-attack-path-part-1-lab-assets.tar.gz dalla
sezione Lab Infrastructure and Configuration del corso gratuito SpecterOps.
Estrai i file originali 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 il repository della patch:
cd ~
git clone https://github.com/GregDurys/specterops-k8s-red-teamers-libvirt-patch.git
Verifica la patch:
cd ~/specterops-k8s-red-teamers-libvirt-patch
sha256sum -c patches/SHA256SUMS
Il risultato dovrebbe essere:
patches/libvirt.patch: OK
Facoltativamente, verifica l'archivio scaricato rispetto alla versione utilizzata per testare questa patch:
cd ~/Downloads
sha256sum -c ~/specterops-k8s-red-teamers-libvirt-patch/UPSTREAM_SHA256SUMS
Se il checksum differisce, SpecterOps potrebbe aver aggiornato i file del laboratorio.
Applica la patch:
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 configurazione:
vagrant validate
Il risultato dovrebbe essere:
Vagrantfile validated successfully.
La patch aggiunge un proprio README di utilizzo del laboratorio e un documento di architettura alla directory estratta.
Avvia il laboratorio dalla directory del corso patchata:
vagrant up --provider=libvirt
Il Vagrantfile disabilita automaticamente l'avvio parallelo perché le macchine successive consumano file generati dal control plane.

La topologia funzionale mostrata nel diagramma del corso è preservata:
| Elemento del diagramma | Conversione libvirt |
|---|---|
| Teamserver | 192.168.56.10, DNS teamserver |
| Control plane | 192.168.56.20, server API su TCP 6443 |
| Worker 1 | 192.168.56.30 |
| Worker 2 | 192.168.56.31 |
| Interfaccia Mythic | TCP 7443 |
| Porta callback | TCP 8081 |
| Registry TLS | TCP 5000, attendibile dai nodi del cluster |
| Callback Mythic | Callback developer e noaccess mantenuti |
| Accesso host | Vagrant inoltra le porte 7443 e 8081 al teamserver |
| Traffico privato del laboratorio | Rimane sulla rete isolata 192.168.56.0/24 |
| Accesso a Internet | Mantenuto tramite l'adattatore 1 |
| Risoluzione dei nomi host | Mantenuta su tutte e quattro le VM |
| Code-server e manifest del laboratorio | Invariati rispetto all'upstream |
L'implementazione di rete ha una differenza deliberata:
k8s-workshop-mgmt, normalmente 192.168.157.0/24.Le VM libvirt possono quindi comunicare tramite l'adattatore 1, mentre gli adattatori NAT separati di VirtualBox non forniscono quel percorso. Kubernetes, Calico, i callback Mythic, il registry e la risoluzione dei nomi host del laboratorio sono esplicitamente vincolati all'adattatore 2, quindi la topologia del laboratorio rimane invariata.
Leggi ARCHITECTURE.md per i dettagli sulla topologia, la gestione delle collisioni e la logica delle cartelle sincronizzate.
Dopo il completamento del provisioning:
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
Tutti e tre i nodi Kubernetes dovrebbero essere Ready con indirizzi interni .20, .30 e .31. La pagina di accesso Mythic dovrebbe essere raggiungibile tramite la porta host inoltrata e direttamente all'indirizzo https://192.168.56.10:7443. I due callback del corso dovrebbero apparire in Mythic come descritto dal materiale ufficiale del corso.
Per smantellare l'ambiente di test:
vagrant destroy -f
Il lavoro originale in questo repository è concesso in licenza sotto Apache License 2.0.
Questa licenza si applica solo al codice originale e alla documentazione contribuita da questo repository. Non concede alcun diritto sul corso SpecterOps, sull'archivio scaricato o su altro materiale upstream.