Active Directory Lab Bouwen

Een eigen Active Directory-lab is onmisbaar voor het oefenen van aanvalstechnieken. In deze tutorial bouwen we stap voor stap een kwetsbare AD-omgeving op met VirtualBox. Het lab bevat een Domain Controller, een werkstation, en diverse misconfiguraties die je kunt aanvallen met tools als Rubeus, BloodHound en PowerView.

Niveau: Gevorderd

Let op — Dit lab is uitsluitend bedoeld voor educatieve doeleinden op je eigen hardware. Verbind het lab NOOIT met een productie-netwerk.

Vereisten

Lab Architectuur

Netwerk-overzicht

[Internet] --- [Host machine]
                    |
            [VirtualBox Host-Only Network: 10.10.10.0/24]
                    |
        +-----------+-----------+
        |           |           |
    [DC01]      [WS01]      [Kali]
  10.10.10.10  10.10.10.20  10.10.10.50

  DC01: Windows Server 2022 - Domain Controller
  WS01: Windows 10 Enterprise - Werkstation
  Kali: Kali Linux - Aanvalsmachine

VMs overzicht

VM OS RAM Disk Rol
DC01 Windows Server 2022 4 GB 40 GB Domain Controller, DNS, ADCS
WS01 Windows 10 Enterprise 4 GB 40 GB Domeinwerkstation
Kali Kali Linux 4 GB 30 GB Aanvalsmachine

Stap 1: VirtualBox Netwerk Configureren

Host-Only Netwerk aanmaken

# Maak een Host-Only netwerk aan (VBoxManage)
VBoxManage hostonlynet add --name=LabNet --netmask=255.255.255.0 --lower-ip=10.10.10.1 --upper-ip=10.10.10.254

# Of via de GUI:
# VirtualBox > File > Host Network Manager > Create
# Stel in: IPv4 Address 10.10.10.1, Mask 255.255.255.0
# DHCP Server: uitschakelen (we gebruiken statische IPs)

Netwerkinstellingen per VM

Elke VM krijgt twee netwerkadapters:

  1. Adapter 1: NAT (voor internettoegang tijdens installatie)
  2. Adapter 2: Host-Only Adapter (voor lab-communicatie)

Na installatie schakel je Adapter 1 (NAT) uit zodat het lab geisoleerd is.

Stap 2: Domain Controller Installeren (DC01)

Windows Server 2022 installatie

  1. Maak een nieuwe VM aan: 4 GB RAM, 40 GB disk, 2 CPU cores
  2. Installeer Windows Server 2022 (Desktop Experience)
  3. Stel het administratorwachtwoord in: Lab@dmin2024!

Netwerk configureren

# Hernoem de computer
Rename-Computer -NewName DC01 -Restart

# Na herstart: stel een statisch IP in
New-NetIPAddress -InterfaceAlias "Ethernet 2" -IPAddress 10.10.10.10 -PrefixLength 24
Set-DnsClientServerAddress -InterfaceAlias "Ethernet 2" -ServerAddresses 10.10.10.10

# Schakel de firewall uit voor het lab (ALLEEN in lab-omgevingen!)
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

Active Directory Domain Services installeren

# Installeer AD DS rol
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools

# Promoveer tot Domain Controller
Install-ADDSForest `
    -DomainName "lab.local" `
    -DomainNetBIOSName "LAB" `
    -ForestMode "WinThreshold" `
    -DomainMode "WinThreshold" `
    -InstallDns:$true `
    -SafeModeAdministratorPassword (ConvertTo-SecureString "Dsrm@P4ss!" -AsPlainText -Force) `
    -Force:$true
# De server herstart automatisch

DNS configureren

# Controleer DNS na herstart
Get-DnsServerZone
Resolve-DnsName lab.local

# Voeg een reverse lookup zone toe
Add-DnsServerPrimaryZone -NetworkID "10.10.10.0/24" -ReplicationScope Domain

Stap 3: Gebruikers en Groepen Aanmaken

Organisational Units (OUs)

# Maak OUs aan
New-ADOrganizationalUnit -Name "Lab Users" -Path "DC=lab,DC=local"
New-ADOrganizationalUnit -Name "Lab Admins" -Path "DC=lab,DC=local"
New-ADOrganizationalUnit -Name "Lab Servers" -Path "DC=lab,DC=local"
New-ADOrganizationalUnit -Name "Lab Workstations" -Path "DC=lab,DC=local"
New-ADOrganizationalUnit -Name "Service Accounts" -Path "DC=lab,DC=local"

Gebruikers aanmaken

# Functie voor het aanmaken van gebruikers
function New-LabUser {
    param($Name, $SamAccount, $Password, $OU, $Description)
    New-ADUser `
        -Name $Name `
        -SamAccountName $SamAccount `
        -UserPrincipalName "$SamAccount@lab.local" `
        -Path "OU=$OU,DC=lab,DC=local" `
        -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -Force) `
        -Enabled $true `
        -Description $Description `
        -ChangePasswordAtLogon $false `
        -PasswordNeverExpires $true
}

# Normale gebruikers
New-LabUser -Name "Jan de Vries"    -SamAccount "jdevries"  -Password "Welkom01"      -OU "Lab Users"    -Description "Standaard gebruiker"
New-LabUser -Name "Piet Jansen"     -SamAccount "pjansen"   -Password "Welkom02"      -OU "Lab Users"    -Description "Standaard gebruiker"
New-LabUser -Name "Anna Bakker"     -SamAccount "abakker"   -Password "Winter2024!"   -OU "Lab Users"    -Description "Standaard gebruiker"

# IT-beheerders
New-LabUser -Name "Bob Admin"       -SamAccount "badmin"    -Password "Adm1n@Lab!"    -OU "Lab Admins"   -Description "IT Beheerder"
New-LabUser -Name "Server Admin"    -SamAccount "srvadmin"  -Password "Server2024!"   -OU "Lab Admins"   -Description "Server beheerder"

# Service accounts (met zwakke wachtwoorden voor Kerberoasting)
New-LabUser -Name "SQL Service"     -SamAccount "svc_sql"   -Password "Zomer2024"     -OU "Service Accounts" -Description "SQL Server service"
New-LabUser -Name "Web Service"     -SamAccount "svc_web"   -Password "Welcome1"      -OU "Service Accounts" -Description "IIS service account"
New-LabUser -Name "Backup Service"  -SamAccount "svc_backup" -Password "Backup123!"   -OU "Service Accounts" -Description "Backup service"

Groepen en lidmaatschappen

# Maak groepen aan
New-ADGroup -Name "IT Beheer" -GroupScope Global -Path "OU=Lab Admins,DC=lab,DC=local"
New-ADGroup -Name "Database Admins" -GroupScope Global -Path "OU=Lab Admins,DC=lab,DC=local"

# Voeg leden toe
Add-ADGroupMember -Identity "IT Beheer" -Members badmin, srvadmin
Add-ADGroupMember -Identity "Database Admins" -Members svc_sql, badmin
Add-ADGroupMember -Identity "Domain Admins" -Members srvadmin

# Voeg badmin toe als lokale admin op werkstations (via GPO of handmatig)
Add-ADGroupMember -Identity "Remote Desktop Users" -Members "IT Beheer"

Stap 4: Kwetsbare Configuraties Opzetten

Kerberoastable Accounts (SPNs)

# Stel SPNs in op service accounts
Set-ADUser -Identity svc_sql -ServicePrincipalNames @{Add="MSSQLSvc/sqlserver.lab.local:1433"}
Set-ADUser -Identity svc_web -ServicePrincipalNames @{Add="HTTP/webserver.lab.local"}
Set-ADUser -Identity svc_backup -ServicePrincipalNames @{Add="CIFS/backup.lab.local"}

# Verifieer
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName |
    Select-Object Name, ServicePrincipalName

AS-REP Roastable Account

# Schakel pre-authenticatie uit voor een gebruiker
Set-ADAccountControl -Identity abakker -DoesNotRequirePreAuth $true

Unconstrained Delegation

# Stel unconstrained delegation in op het werkstation
Set-ADComputer -Identity "WS01" -TrustedForDelegation $true

Kwetsbare ACLs

# Geef jdevries GenericAll op svc_sql (voor targeted Kerberoasting)
$acl = Get-Acl "AD:CN=SQL Service,OU=Service Accounts,DC=lab,DC=local"
$user = New-Object System.Security.Principal.NTAccount("LAB\jdevries")
$ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
    $user, "GenericAll", "Allow"
)
$acl.AddAccessRule($ace)
Set-Acl "AD:CN=SQL Service,OU=Service Accounts,DC=lab,DC=local" $acl

# Geef pjansen GenericWrite op abakker
$acl2 = Get-Acl "AD:CN=Anna Bakker,OU=Lab Users,DC=lab,DC=local"
$user2 = New-Object System.Security.Principal.NTAccount("LAB\pjansen")
$ace2 = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
    $user2, "GenericWrite", "Allow"
)
$acl2.AddAccessRule($ace2)
Set-Acl "AD:CN=Anna Bakker,OU=Lab Users,DC=lab,DC=local" $acl2

Stap 5: ADCS Installeren (Certificate Services)

Active Directory Certificate Services is een veelvoorkomend doelwit in pentests. Diverse ESC-kwetsbaarheden zijn hier te oefenen.

# Installeer ADCS rol
Install-WindowsFeature AD-Certificate -IncludeManagementTools

# Configureer als Enterprise Root CA
Install-AdcsCertificationAuthority `
    -CAType EnterpriseRootCa `
    -CACommonName "Lab Root CA" `
    -KeyLength 2048 `
    -HashAlgorithmName SHA256 `
    -ValidityPeriod Years `
    -ValidityPeriodUnits 10 `
    -Force

# Installeer Certificate Enrollment Web Service
Install-WindowsFeature ADCS-Enroll-Web-Svc
Install-AdcsEnrollmentPolicyWebService -AuthenticationType UserName -SSLCertThumbprint (Get-ChildItem Cert:\LocalMachine\My | Select-Object -First 1).Thumbprint -Force

Kwetsbaar certificaattemplate (ESC1)

# Maak een kwetsbaar template aan (ESC1: Client Authentication + SAN)
# Dit is vereenvoudigd - in de praktijk kopieer je een bestaand template

$ConfigContext = ([ADSI]"LDAP://RootDSE").ConfigurationNamingContext
$ADSI = [ADSI]"LDAP://CN=Certificate Templates,CN=Public Key Services,CN=Services,$ConfigContext"

# Publiceer het standaard User-template met enrollment rechten voor Domain Users
certutil -dstemplate User msPKI-Certificate-Name-Flag +0x1

IB — Gebruik de IB-commando’s onder het adcs_ prefix om ADCS-kwetsbaarheden te enumereren en exploiteren. Het commando adcs_enum geeft een overzicht met Certify.

Stap 6: Werkstation Toevoegen (WS01)

Windows 10 installatie

  1. Maak een nieuwe VM aan: 4 GB RAM, 40 GB disk
  2. Installeer Windows 10 Enterprise
  3. Stel het lokale administratorwachtwoord in

Aan het domein toevoegen

# Stel DNS in naar de DC
Set-DnsClientServerAddress -InterfaceAlias "Ethernet 2" -ServerAddresses 10.10.10.10

# Stel statisch IP in
New-NetIPAddress -InterfaceAlias "Ethernet 2" -IPAddress 10.10.10.20 -PrefixLength 24 -DefaultGateway 10.10.10.10

# Hernoem de computer
Rename-Computer -NewName WS01 -Restart

# Voeg toe aan het domein
Add-Computer -DomainName "lab.local" -Credential (Get-Credential) -Restart
# Gebruik LAB\Administrator en het wachtwoord Lab@dmin2024!

Lokale configuratie voor het lab

# Schakel firewall uit (alleen in lab!)
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

# Schakel Windows Defender uit (voor ongestoord testen)
Set-MpPreference -DisableRealtimeMonitoring $true
Set-MpPreference -DisableIOAVProtection $true

# Schakel PowerShell remoting in
Enable-PSRemoting -Force

Stap 7: Kali Linux Configureren

Netwerk instellen

# Stel een statisch IP in op de Host-Only adapter
sudo ip addr add 10.10.10.50/24 dev eth1
sudo ip link set eth1 up

# Test connectiviteit
ping 10.10.10.10

DNS configureren

# Voeg de DC toe als DNS-server
echo "nameserver 10.10.10.10" | sudo tee /etc/resolv.conf

# Test DNS-resolutie
nslookup lab.local
nslookup dc01.lab.local

Benodigde tools installeren

# Impacket (vaak al geinstalleerd op Kali)
pip3 install impacket

# CrackMapExec / NetExec
pip3 install crackmapexec

# BloodHound
sudo apt install bloodhound neo4j

# Kerbrute
wget https://github.com/ropnop/kerbrute/releases/latest/download/kerbrute_linux_amd64
chmod +x kerbrute_linux_amd64
sudo mv kerbrute_linux_amd64 /usr/local/bin/kerbrute

Stap 8: Snapshots Maken

Maak nu snapshots van alle VMs in hun “schone” staat. Dit is essentieel zodat je het lab kunt herstellen na aanvallen.

# VBoxManage snapshots
VBoxManage snapshot DC01 take "Clean - Domain configured"
VBoxManage snapshot WS01 take "Clean - Joined to domain"
VBoxManage snapshot Kali take "Clean - Tools installed"

Snapshot-strategie

Moment Snapshot naam Doel
Na OS-installatie OS-installed Basis herstelpunt
Na domeinconfiguratie Domain-configured Lab gereed
Na kwetsbaarheden Vulns-configured Klaar voor aanval
Tijdens oefening Mid-exercise Tussentijds punt

Stap 9: Het Lab Testen met IB

Start Incompetent Bastard op je Kali-machine en verifieer dat alle kwetsbaarheden werken.

# Start IB
cd /pad/naar/incompetentbastard
flask --app app:create_app run --host 0.0.0.0 --port 5000

Verificatiechecklist

# 1. Netwerkconnectiviteit
ping 10.10.10.10
nmap -sV -p 88,389,445,636 10.10.10.10

# 2. Domeinauthenticatie
crackmapexec smb 10.10.10.10 -u jdevries -p 'Welkom01' -d lab.local

# 3. Kerberoasting test
impacket-GetUserSPNs lab.local/jdevries:Welkom01 -dc-ip 10.10.10.10

# 4. AS-REP Roasting test
impacket-GetNPUsers lab.local/ -usersfile users.txt -dc-ip 10.10.10.10

# 5. BloodHound collectie
bloodhound-python -u jdevries -p 'Welkom01' -d lab.local -dc dc01.lab.local -ns 10.10.10.10

IB — Gebruik de IB command library om snel aanvalcommando’s te genereren. De kerb_, ad_, enum_ en cred_ prefix-groepen bevatten alle relevante commando’s voor AD-aanvallen.

Lab Uitbreiden

Extra kwetsbaarheden toevoegen

# Op DC01 - LAPS niet geconfigureerd (standaard kwetsbaar)

# Constrained Delegation
Set-ADComputer -Identity WS01 -Add @{
    'msDS-AllowedToDelegateTo' = @('CIFS/dc01.lab.local','CIFS/dc01')
}

# Password in description (klassieke misconfiguratie)
Set-ADUser -Identity svc_backup -Description "Account voor backups. Wachtwoord: Backup123!"

# Zwak GPO-wachtwoordbeleid
Set-ADDefaultDomainPasswordPolicy -Identity lab.local -MinPasswordLength 6 -ComplexityEnabled $false

Tweede domein toevoegen (Forest Trust)

Voor geavanceerde oefeningen kun je een tweede domein toevoegen met een trust-relatie. Dit is nodig voor cross-forest attacks.

# Op een tweede DC (bijv. DC02, 10.10.10.11):
Install-ADDSForest -DomainName "dev.local" -DomainNetBIOSName "DEV"

# Stel een bidirectionele forest trust in
# Op DC01:
netdom trust lab.local /d:dev.local /add /twoway

Samenvatting

Je hebt nu een volledig functioneel Active Directory-lab met de volgende kwetsbaarheden:

Tips voor effectief labgebruik:

IB — Gebruik het IB findings-systeem om je laboefeningen te documenteren als bevindingen, compleet met CVSS-scores en evidence. Dit is uitstekende voorbereiding voor het schrijven van echte pentestrapporten.