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
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
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 /rearmExpired Is Not the Same as Broken
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 likeThe 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
Paid Tooling Inside the Lab
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
Separate Account, Confirmed Identity
Use a dedicated AWS account, Azure subscription or GCP project. Run
aws sts get-caller-identity,az account showorgcloud config get-value projectand confirm it is the lab, not production or your personal account. -
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
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
Teardown Command Written and Tested
terraform destroyplus the scenario's own destroy. Know which resources are outside the state file, and what a non-zero exit code leaves behind. -
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.