
非公式のlibvirtパッチ:無料のSpecterOps Kubernetes for Red Teamersラボ向け
無料のSpecterOps Kubernetes for Red Teamersコース向けの非公式libvirtおよびQEMU/KVMパッチです。元のネットワークアドレス、Kubernetesトポロジー、Mythicコールバック、ラボの動作は変更されません。
LinuxでVirtualBoxを実行するのは、すでに電力網に接続されている家にポータブル発電機を持ち込むようなものです。カーネルがすでに提供しているものに対して二重に支払い、さらに別のハイパーバイザーとカーネルモジュールの攻撃面を追加することになります。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サポートを追加するために必要な変更のみが含まれています。元のアーカイブ、内部変換計画、レビューレポート、ローカルテストハーネス、生成された認証情報、VM状態は含まれていません。
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は、後続のマシンがコントロールプレーンによって生成されたファイルを消費するため、並列起動を自動的に無効にします。

コース図に示されている機能トポロジーは維持されます:
ネットワーク実装には意図的な違いが1つあります:
k8s-workshop-mgmt NATネットワーク(通常は 192.168.157.0/24)に接続します。したがって、libvirt VMはアダプター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
3つのKubernetesノードはすべて、内部アドレス .20、.30、.31 で Ready 状態になるはずです。Mythicログインページは、転送されたホストポートおよび https://192.168.56.10:7443 で直接アクセスできるはずです。2つのコースコールバックは、公式コース教材に記載されているようにMythicに表示されるはずです。
テスト環境を破棄するには:
vagrant destroy -f
このリポジトリのオリジナル作品はApache License 2.0の下でライセンスされています。
このライセンスは、このリポジトリによって提供されたオリジナルのコードとドキュメントにのみ適用されます。SpecterOpsコース、ダウンロードしたアーカイブ、その他のアップストリーム教材に対する権利は付与されません。
| 図の要素 | Libvirt変換 |
|---|
| Teamserver | 192.168.56.10、DNS teamserver |
| コントロールプレーン | 192.168.56.20、TCP 6443のAPIサーバー |
| 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経由で維持 |
| ホスト名解決 | 4つのVMすべてで維持 |
| code-serverおよびラボマニフェスト | アップストリームから変更なし |