Last reviewed 17 min read

Lab Methodology
Intermediate

Lab Cost, Licensing and Hardware

Lab cost is three budgets, not one: the hardware you already own, the licences that expire while you are not looking, and the cloud resources that outlive the exercise. This page puts the ten lab profiles on one hardware envelope, compares the hypervisors that can run them, and shows where the money goes after the terminal closes.

Prices Checked 17 October 2026

Every figure below is a vendor list price in the currency the vendor publishes (USD unless stated), excluding tax, checked on 17 October 2026 against the page named in the text; cloud figures use AWS us-east-1 and a 730-hour month. Vendors change prices and licence terms without notice, so re-check before you buy. Where a vendor does not publish a number — enterprise support, or Caido's paid seats — this page says so rather than guessing.

Hardware Envelope

These are the per-lab figures from the lab profiles, not a shopping list. They describe one lab running at a time, and the hardware is shared: the Kali VM you built for the web lab is the attack host for the AD lab, and the same 80 GB disk is not multiplied by ten.

Lab RAM Disk CPU / Virtualisation Nested Virt What That Actually Means
Kali Linux 4 GB min, 8 GB preferred 80 GB 64-bit CPU with VT-x or AMD-V; 2 vCPU No One guest. The baseline every other lab borrows.
Web application 2-6 GB 10-30 GB Any x86-64 host running Docker No Containers share the host kernel; no hypervisor needed.
Vulnerable VMs 4-12 GB 40-120 GB VT-x/AMD-V; 4 vCPU if two targets run No Kali plus one or two targets.
Active Directory 16 GB min, 32 GB preferred 160 GB+ VT-x/AMD-V; 4+ physical cores Only if the Windows host is itself a VM DC01, WS01 and Kali are three guests, not two.
Malware analysis 8-24 GB 100 GB+ VT-x/AMD-V; 4 cores No REMnux plus a victim with exactly one adapter.
Cloud security 4 GB local attack host; 0 GB for the scenario 20 GB local Any; the provider runs the workload No The 4 GB is the machine you drive it from, not the lab.
Purple team / SIEM 32 GB+ 200 GB+ 8 cores; SSD strongly preferred No SIEM plus a victim, with an optional domain controller.
Wireless 4 GB 20 GB USB passthrough for the monitor-mode adapter No One VM and one radio you own.
CI/CD pipeline 8-16 GB 50 GB+ 4 cores; SSD No A Compose stack, not virtual machines.
Kali NetHunter N/A — no local VM 4 GB downloads plus backups USB port and a supported phone No No guest at all; the device is the lab.

Host Overhead and the Two-VM Floor

The guest RAM figures are not the whole bill. The host OS needs 4-6 GB, the hypervisor 1-2 GB, and Windows guests grow after updates. A working rule is to sum the guest RAM and add 6 GB; if that exceeds physical RAM, the host swaps and snapshot rollbacks become unreliable. The AD lab is the honest test: 16 GB is the stated minimum, but a 16 GB laptop running DC01, WS01, Kali and a browser is at the edge, and 32 GB is the figure that makes the lab pleasant rather than painful. Malware analysis has the same shape — two guests plus the host — with the added rule that the victim never gets a second adapter.

Running two VMs plus the host is the realistic floor for the AD and malware labs. Everything else fits in one guest, in containers, or in the provider's account.

What the Table Does Not Count

  • • Snapshots. A retained snapshot can approach the disk size. A 160 GB AD disk with three snapshots can consume 400 GB or more.
  • • Images and updates. ISOs, OVAs and Windows updates cost 10-20 GB before the lab is useful.
  • • SIEM indices. Retention is a disk decision; 200 GB fills faster than the profile suggests once agents are enrolled.
  • • Evidence. BloodHound exports, pcaps and password-protected malware archives belong outside the VM disk.

Choosing a Hypervisor

Pick by host OS and guest architecture before anything else. This comparison is about running these labs, not about production virtualisation: a desktop hypervisor and a type-1 hypervisor both do the job, and the expensive choice is the one that cannot run your guest.

Hypervisor Host OS Licence / Cost Snapshots and Performance Notes
VirtualBox 7.x Windows, Linux, macOS (Intel and Apple silicon), Solaris Free (GPLv3 base); Extension Pack free for personal and education, commercial needs a 100-seat Enterprise licence (quote). Branched disk and memory snapshots; reliable at lab scale, slower as the chain grows. Weakest type-2 performance. Nested VT-x on x86 only; no x86 guests on Apple silicon. Under Hyper-V, WSL2 or Device Guard it runs on the Windows Hypervisor Platform and loses nested VT-x and speed. Oracle says not to run two hypervisors at once.
VMware Workstation Pro / Fusion Pro Workstation on Windows and Linux; Fusion on macOS Free for personal, educational and commercial use since 11 November 2024; no key required. Optional support subscription is a quote. Best-in-class desktop snapshots and type-2 performance, with strong Windows guests and 3D; long chains still cost speed. Nested VT-x on x86; Fusion on Apple silicon is Arm-only. Broadcom account and entitlement friction; no support entitlement on the free tier.
Hyper-V Windows Pro, Enterprise, Education and Server only Included with the Windows licence; no separate hypervisor fee. Checkpoints: standard includes memory, production uses VSS and is application-consistent. Near-native type-1. Nested virt with extensions exposed. Turns the host into a hypervisor, which changes how VirtualBox and VMware behave; Windows-only, unavailable on Apple silicon.
KVM / QEMU Linux Free software (GPLv2); no per-seat cost. qcow2 internal or external snapshots plus libvirt; powerful, but you own the workflow. Near-native with virtio and KVM, the best option on a Linux desktop. Nested virt when the CPU exposes it. Needs libvirt literacy; USB and GPU passthrough are fiddly; virt-manager is not a polished desktop app.
Proxmox VE Bare metal (Debian-based); not a desktop application Free (AGPLv3); support €370 Basic, €550 Standard or €1,100 Premium per socket per year, net of VAT, checked 17 October 2026. ZFS or LVM snapshots with fast rollback and optional VM state; excellent for lab resets. Near-native, and the best choice if you have a spare server. Nested virt yes. Wants a dedicated machine and a second device to administer it; overkill for one laptop.
UTM macOS on Apple silicon and Intel; iOS Apache 2.0, free; UTM SE is free on the App Store. QEMU snapshots; functional, but the UI is thinner than the desktop hypervisors. Near-native for Arm guests; x86 through TCG emulation is very slow. Not practical for an x86 lab: on Apple silicon the only route to x86 guests is emulation, too slow for an AD lab. Use an x86 host or a cloud VM.

Windows: Hyper-V, WSL2 and VirtualBox on One Machine

On Windows the hypervisor is a host-wide switch, not a per-application setting. Enabling Hyper-V — or WSL2, Windows Sandbox, Device Guard/Credential Guard, or the Android subsystem — puts Windows itself under the Microsoft hypervisor. VirtualBox and VMware can still run, but they run on the Windows Hypervisor Platform rather than raw VT-x, which costs performance and removes nested VT-x. If you need WSL2 every day, run the lab on Hyper-V and keep VirtualBox for the guest that needs it; do not assume you can switch per VM.

# Is the Microsoft hypervisor present?
Get-ComputerInfo -Property HyperVisorPresent, HyperVRequirementVirtualizationFirmwareEnabled
bcdedit /enum "{current}" | Select-String hypervisorlaunchtype

# Which engine did VirtualBox actually use for the VM?
VBoxManage showvminfo "Kali" | Select-String "Execution engine"

Apple Silicon: Arm Guests Only

Apple silicon is Arm64, and that is the end of the x86 story. VirtualBox's manual lists only Arm64 guests on Arm64 hosts — Windows 11 Arm is supported, x86 guests are not — and Fusion on Apple silicon likewise runs Arm guests. UTM can emulate x86 through QEMU, but an AD lab built on emulated domain controllers is not a lab you will enjoy. Use an x86 laptop or a small server for the AD, malware and purple-team labs; use the Mac for the Docker labs, the cloud lab and Arm Windows work.

Do Not Buy a Mac for the Windows Labs

There is no supported x86 virtualisation path on Apple silicon. The Microsoft evaluation media for Windows Server is x86-64, so it will not boot natively in Fusion or VirtualBox on an M-series Mac. Emulation exists; it is not a usable AD lab.

Windows and Other Evaluation Licences

Evaluation media is a licence with a clock. Microsoft's Evaluation Center publishes the Windows Server 2025 evaluation. The evaluation is 180 days and can be rearmed, but the rearm count depends on the edition and the installation media. Plan on one 180-day term; do not build a lab that needs more.

Image Evaluation Period What It Is For
Windows Server 2025 Standard / Datacenter 180 days from installation DC01, WS01 and member servers in the AD and purple-team labs.
Windows Server 2022 180 days from installation Legacy AD lab only; do not build new material on it.
Windows 11 Enterprise Time-limited client evaluation, shorter than Server A disposable victim in the malware and purple-team labs; not a long-term lab base.

What Expiry Actually Does — and What You Have to Do

Expiry does not brick the VM. Windows Server enters an hourly shutdown cycle and keeps booting between shutdowns; the client SKU nags and shuts down periodically. That is the trap: the lab still looks usable, so it stays in rotation long after it stopped being licensed. An expired evaluation is out of compliance, has no support entitlement, and is a bad template to clone.

Do this before day 150: check the clock, rearm only if your edition and media allow it, and otherwise rebuild from fresh media or activate with a licence you own. Keep the build steps in version control so a rebuild is a script, not an archaeology project.

# Remaining time and licence state (elevated)
slmgr /dlv

# Rearm if this edition and media allow it; reboot afterwards
slmgr /rearm

Expired Is Not the Same as Broken

An expired evaluation still runs, which is exactly why it ends up in a snapshot and gets reused for months. Treat the expiry date as a rebuild date. Never keep a snapshot of an expired evaluation as your clean baseline, and never hand one to a client as a lab image.

Cloud Spend: What the Free Tiers Actually Are

The free tier is a trial with an end date, not a budget. All three providers now give new accounts a credit with a clock and then either close the account or start billing. None of them gives you a permanent allowance that covers an intentionally vulnerable scenario.

Provider Signup Credit Clock Always-Free Hook What Happens at the End
AWS $100 immediately, up to $100 more 6 months or credits exhausted None that covers a lab scenario; check the current plan terms Account closes unless you convert to a Paid plan
Azure $200 30 days 65+ always-free services; 12 months on selected services Move to pay-as-you-go within 30 days or when credit ends; otherwise services are disabled
GCP $300 90 days 20+ products, including one e2-micro in us-west1, us-central1 or us-east1, 30 GB persistent disk, 5 GB storage Billing account closes, resources stop, then are deleted after a 30-day grace period

Two caveats the table does not carry. The old AWS 12-month per-service allowance is gone, so check the plan terms on your own account rather than following an older tutorial. On GCP, upgrade the billing account before the trial ends if you want to keep anything — without the upgrade, the resources are stopped and then deleted after the 30-day grace period.

Wire the Budget Alert Before the First Apply

Create the budget before the first terraform apply, not after the first bill. A budget is a notification, not a hard cap: AWS Budgets, Azure Cost Management budgets and GCP Cloud Billing budgets all send alerts at thresholds you set, and none of them stops a resource by itself. Set at least two thresholds — 50% and 80% of your comfort limit — and make the first one low enough that you can still act. AWS Budgets actions can stop or terminate instances, but that is an action you configure, not a default.

# Create the guardrail before deploying anything. Change the amount and address.
aws budgets create-budget \
  --account-id "$(aws sts get-caller-identity --query Account --output text)" \
  --budget '{"BudgetName":"lab-monthly","BudgetLimit":{"Amount":"25","Unit":"USD"},"TimeUnit":"MONTHLY","BudgetType":"COST"}' \
  --notifications-with-subscribers '[{"Notification":{"NotificationType":"ACTUAL","ComparisonOperator":"GREATER_THAN","Threshold":80,"ThresholdType":"PERCENTAGE"},"Subscribers":[{"SubscriptionType":"EMAIL","Address":"you@example.com"}]}]'

# Prove it exists before you deploy
aws budgets describe-budgets --account-id "$(aws sts get-caller-identity --query Account --output text)"

Azure and GCP do the same job under Cost Management > Budgets and Cloud Billing > Budgets & alerts. Scope the budget to the lab subscription or project, not the whole tenant, and use an address you actually read.

Destroy, Then Verify

Write the teardown command before the setup command. terraform destroy only removes what is in the state file, and it stops at the first error; cloudgoat destroy only removes the scenario you name. Then verify the account, in every region you touched, because the CLI's configured region is not the same as "all regions".

# 1. Destroy what Terraform still tracks
terraform destroy -auto-approve

# 2. CloudGoat 2.x destroys one scenario at a time; "all" clears the rest
cloudgoat destroy iam_privesc_by_rollback
cloudgoat destroy all

# 3. Verify the account for every region you touched:
#    see Lab Lifecycle -> Proof of Teardown for the commands and what clean looks like

The verification commands live in Proof of Teardown so this page keeps one list instead of two that drift apart.

Read the destroy output. A bucket with objects, an RDS instance with deletion protection, or a prevent_destroy lifecycle block will fail the destroy, and Terraform leaves the rest of the stack in place. That is a command with a non-zero exit code, not a clean teardown — check both.

What a Forgotten Lab Costs per Month

These are the resources that most often outlive the lab. Figures are AWS us-east-1 list prices on 17 October 2026, assuming a 730-hour month.

What Is Left Behind Why It Survives Monthly List Cost Survives terraform destroy?
One t3.micro still running Never stopped, or created outside the state file $7.59 ($0.0104/hr) Yes, if it is not in state
20 GB gp3 volume Stopping an instance does not delete its storage $1.60 ($0.08/GB-month) Yes, while the volume exists
100 GB EBS snapshot Snapshots are independent of the volume they came from $5.00 ($0.05/GB-month) Yes
50 GB S3 Standard with objects A non-empty bucket blocks deletion unless force_destroy is set $1.15 ($0.023/GB-month) Yes
One idle Elastic IP Account-level allocation, billed attached or idle $3.65 ($0.005/hr) Yes, if it is not released
One NAT gateway Billed for every hour it exists, plus data processed $32.85 ($0.045/hr) + $0.045/GB Yes
10 GB CloudWatch Logs retained Log groups do not expire unless you set retention $0.30 storage ($0.03/GB-month); ingestion $0.50/GB Yes

About $52 a Month for a Lab Nobody Is Using

Add the seven rows above and a forgotten lab costs roughly $52 per month: t3.micro $7.59, gp3 $1.60, snapshot $5.00, S3 $1.15, Elastic IP $3.65, NAT gateway $32.85 and logs $0.30. Remove the NAT gateway and it drops to about $19; leave a copy in a second region and it doubles.

Nothing in the ten labs requires a paid tool. The paid tiers buy scanning, reporting, team features or a GUI. The free tools are enough to complete the lab, and the licence question only becomes real when you use them for paid work or inside a company.

Tool What the Paid Tier Adds Price (Checked 17 Oct 2026) Free Alternative When the Free Option Is Enough
Burp Suite Professional Automated scanner, unthrottled Intruder, full BApp set, report generation $499 per user per year; PortSwigger list price at check time, excluding tax Burp Suite Community, OWASP ZAP, Caido Basic, mitmproxy Community is enough for manual proxy work in the web lab; Pro matters when you need the scanner or client-ready reports.
Caido Individual and Team add unlimited projects and workflows, AI assistant, shared instances and reassignable seats Caido does not publish a list price on the page; plans are Basic (free), Individual, Team and a free one-year Education plan — check current pricing. Burp Suite Community, OWASP ZAP, mitmproxy Basic allows two projects and seven workflows, which covers a single lab project.
Docker Desktop GUI, extensions, SSO/SCIM, hardened desktop and central management Personal free. Pro $9/user/month annual ($11 monthly); Team $15 annual ($16 monthly); Business $24/user/month (Docker list). Podman Desktop or Podman; Docker Engine on Linux If you only need docker and compose on Linux, Engine is free. Desktop's licence only bites on Windows or macOS at a larger employer.

The Docker Desktop Threshold

Docker Desktop is free for personal use, education, non-commercial open source, and small businesses with fewer than 250 employees and less than $10 million in annual revenue. Above either threshold it needs a paid subscription for every user who runs it. Docker Engine on Linux is Apache 2.0 and does not carry the Desktop licence, which is why the web, CI/CD and purple-team labs can run entirely free on a Linux host.

What the Free Alternatives Actually Give You

Burp Community is not a demo: it proxies, repeats, decodes and runs extensions, but it has no scanner and throttles Intruder. ZAP is Apache 2.0 and includes an active scanner. mitmproxy is a scriptable CLI and TUI proxy that is excellent for automation. Podman is a daemonless, rootless container engine with a desktop equivalent. For the web lab, Burp Community or ZAP is enough; the paid proxy is a work tool, not a lab requirement.

Budgeting Checklist

Five things to do before you deploy anything billable. The list below is numbered for reference; if any one of the five is missing, you are not ready to run the scenario.

  1. 1

    Separate Account, Confirmed Identity

    Use a dedicated AWS account, Azure subscription or GCP project. Run aws sts get-caller-identity, az account show or gcloud config get-value project and confirm it is the lab, not production or your personal account.

  2. 2

    Budget and Alerts Before the First Apply

    Two thresholds, an address you read, and the understanding that a budget alert does not stop spend. If you need a hard stop, configure a Budgets action or a scheduled teardown, and test it.

  3. 3

    One Region, Written Down

    Check the module's default region and pass the provider's region flag explicitly. Resources in a second region are the classic survivor, and the console's region selector will happily hide them from you.

  4. 4

    Teardown Command Written and Tested

    terraform destroy plus the scenario's own destroy. Know which resources are outside the state file, and what a non-zero exit code leaves behind.

  5. 5

    Calendar Entry and Evidence Export

    Destroy at the end of the session, not "later". Export logs, screenshots and findings first: on the AWS Free plan the account closes at six months, and a closed account is not a storage service.

The cheapest lab is the one you can destroy in one command. The most expensive is the one you forgot in a second region.