Challenges come in three formats (see the **Format:** line at the top of each challenge README). What you need to install depends on the format and on your machine:
| Format | Windows | Linux | Intel Mac | Apple Silicon Mac (M1–M4) |
|---|---|---|---|---|
| Vagrant (Linux) | VirtualBox | VirtualBox | VirtualBox | VMware Fusion |
| Vagrant (Windows/AD) | VirtualBox + Packer | VirtualBox + Packer | VirtualBox + Packer | ❌ Not supported |
| Docker | Docker Desktop | Docker Engine | Docker Desktop | Docker Desktop |
Vagrant (Linux) challenges detect your CPU architecture automatically and pick VirtualBox or VMware for you. The Windows/AD challenges run a Windows Server 2022 x86 VM, which can't run on Apple Silicon. Use an x86 machine (Windows, Linux, or Intel Mac) for those.
Hardware: At least 16 GB RAM (the Windows/AD VM alone takes 4 GB) and at least 60 GB free disk space.
- Install VirtualBox.
- Install Vagrant.
- (Windows/AD challenges) Install Packer and make sure
packeris on yourPATH. - (Docker challenges) Install Docker Desktop.
- RDP is built in:
vagrant rdpopens the Remote Desktop client (mstsc).
If VirtualBox VMs fail to start or run very slowly, Hyper-V / WSL2 / Virtualization-Based Security may be holding the CPU's virtualization features. You can turn them off with
bcdedit /set hypervisorlaunchtype offin an admin prompt (then reboot), but WSL2 and Docker Desktop stop working until you switch it back withbcdedit /set hypervisorlaunchtype auto.
- Install VirtualBox.
- Install Vagrant.
- (Windows/AD challenges) Install Packer.
- (Docker challenges) Install Docker Engine and the Compose plugin.
- (Windows/AD challenges) Install an RDP client such as Remmina or
xfreerdp.
- Install VirtualBox.
- Install Vagrant.
- (Windows/AD challenges) Install Packer (
brew tap hashicorp/tap && brew install hashicorp/tap/packer). - (Docker challenges) Install Docker Desktop.
- (Windows/AD challenges) Install Microsoft's Windows App (formerly Microsoft Remote Desktop) from the Mac App Store to RDP into the VM.
On first install, macOS may block VirtualBox's kernel extension. Allow it under System Settings → Privacy & Security, then reboot.
VirtualBox does not work on Apple Silicon, so you must use VMware. Only Vagrant (Linux) and Docker challenges are supported.
⚠️ Windows/AD challenges can't run on Apple Silicon for now. Their Windows Server 2022 base box is x86-only and builds on VirtualBox only. Use an x86 machine (Windows, Linux, or Intel Mac) for any challenge whose README says**Format:** Vagrant (Windows/AD)orVagrant (Windows).
- Install VMware Fusion (free).
- Install Vagrant.
- Install the Vagrant VMware Utility. Download the macOS version, open the file, and run the standard installer.
- Link Vagrant to VMware by running this command in your Mac terminal:
vagrant plugin install vagrant-vmware-desktop
- (Docker challenges) Install Docker Desktop.
vagrant --version
vagrant plugin list # Apple Silicon only: should list vagrant-vmware-desktop
packer --version # Windows/AD challenges only
docker compose version # Docker challenges only- Clone this repo
cdinto any challenge directory- Read the challenge's README.md for setup and challenge goals
- Run
vagrant up(ordocker compose upfor Docker challenges — check the README) - Windows/AD challenges only: the first run auto-builds the base box with Packer (~20–30 min)
- Subsequent runs boot in ~2–3 minutes
cd challenges/01-domain-controller-incident
vagrant up # Start the challenge
vagrant rdp # Connect via RDP (or use your RDP client to 192.168.56.10)
vagrant suspend # Pause (saves state, fast resume)
vagrant resume # Resume from suspend
vagrant destroy -f # Delete and start over
vagrant up # Rebuild fresh| Role | Username | Password |
|---|---|---|
| Local Admin | vagrant |
vagrant |
| Domain Admin | CORP\Administrator |
P@ssw0rd! |
| Setting | Value |
|---|---|
| RDP Port | 3389 |
| IP Address | 192.168.56.10 (DC) |
Each challenge directory contains:
| File/Folder | Description |
|---|---|
Vagrantfile |
Defines the environment |
README.md |
Objectives, hints, scoring criteria |
scripts/ |
Challenge-specific setup scripts |
If you need to rebuild the base box (e.g., after an update):
vagrant box remove ccdc/dc-base
cd challenges/any-challenge
vagrant up
# Packer will auto-rebuildOr manually:
cd packer
packer init .
packer build .
vagrant box add ccdc/dc-base output/package.box --forceTo zip up a challenge for handing out (e.g. to screening candidates via Google Drive):
scripts/package-challenge.sh <challenge-dir-name> [--bundle candidate|instructor|both] [--offline] [--build-box]| Flag | Purpose |
|---|---|
--bundle candidate|instructor|both |
Which bundle(s) to produce (default: both) |
--offline |
Docker challenges only: bakes the built image(s) into the candidate bundle via docker save, so candidates don't need registry access |
--build-box |
Windows/AD and Linux-VM (Vagrant) challenges only: runs vagrant up + vagrant package to produce a pre-provisioned .box for the candidate bundle, since the provisioning script itself is the answer key. Slow — run once per challenge before its candidate bundle can be built |
Output lands in dist/ at the repo root (gitignored). Run with no args for full usage.