Active Directory: perché i Domain Controller restano “Trusted for delegation” (e come mitigare i rischi)

I Domain Controller di Active Directory risultano sempre “Trusted for delegation”. È normale? In questo articolo spieghiamo perché non puoi disattivare l’unconstrained delegation sui DC, i rischi reali e le mitigazioni operative da applicare subito.

Indice

Panoramica del problema

Per impostazione predefinita, tutti i Domain Controller (DC) di Active Directory sono contrassegnati come Trusted for delegation, ossia abilitati alla delegazione non vincolata (unconstrained delegation). Amministratori e team di sicurezza si chiedono spesso se sia possibile disattivare questa impostazione per “chiudere” una superficie d’attacco. La risposta breve è: no, non in modo supportato o sostenibile. La risposta utile è: mitiga i rischi dove serve davvero e rinforza i controlli intorno ai DC.

Cos’è la delegazione in Kerberos (e perché interessa i DC)

Kerberos è il protocollo di autenticazione nativo di Active Directory. Il flusso più importante consiste in:

  1. Il client ottiene un TGT (Ticket-Granting Ticket) dal KDC (che nei domini AD è eseguito sui DC).
  2. Il client scambia il TGT per uno o più TGS (service ticket) verso i servizi di destinazione (LDAP, SMB, HTTP, MSSQL, ecc.).
  3. In scenari “a salto” (il cosiddetto double hop), un servizio intermedio deve agire a nome dell’utente verso un altro servizio. È qui che entra in gioco la delegazione.

Esistono tre modelli di delegazione:

  • Unconstrained delegation: il servizio può impersonare l’utente verso qualunque altro servizio. È il comportamento dei DC, by design.
  • Constrained Delegation (KCD): la delegazione è limitata a una lista di SPN (service principal) predefiniti.
  • Resource‑Based Constrained Delegation (RBCD): è la risorsa di destinazione a definire chi è autorizzato a delegare verso di essa, modello consigliato per i workload moderni perché più granulare e più vicino al principio del least privilege.

La realtà tecnica sui Domain Controller

Su un DC, la delegazione non vincolata non è un optional: è un requisito funzionale. Ecco i punti chiave da conoscere:

  • Non è possibile rimuoverla in modo supportato. Il bit TRUSTEDFORDELEGATION sull’oggetto computer del DC viene ripristinato automaticamente dai servizi di base (NetLogon/KDC) a ogni avvio del sistema.
  • Le modifiche manuali vengono annullate. Se imposti “Do not trust this computer for delegation” su un DC, l’opzione viene sovrascritta nel giro di pochi secondi; il comportamento è voluto e documentato.
  • Perché? Il DC non è solo KDC: esegue LDAP, replica AD, DFS/SYSVOL, spesso DNS integrato. Per erogare questi servizi deve poter presentare credenziali a nome degli utenti e dei servizi, operando con ticket FORWARDABLE. Senza, molte operazioni di base fallirebbero (autenticazione Kerberos, trust inter-foreste, gestione remota, double hop di strumenti Microsoft, ecc.).

Cosa succede se provi a disattivarla

Puoi disattivare temporaneamente il flag da interfaccia (ADUC) o via PowerShell, ma:

  • Il DC torna “Trusted for delegation” automaticamente.
  • L’eventuale forzatura con procedure non supportate può rompere autenticazioni e servizi di dominio fondamentali.
  • La riduzione del rischio percepita è illusoria: se un attore minaccia ha esecuzione codice su un DC, ha già raggiunto il livello Tier‑0.

Da qui la regola d’oro: non cercare di disattivare l’unconstrained delegation sui DC. Concentrati invece sulla mitigazione a più livelli (host, identità, rete, monitoraggio).

Rischi di sicurezza: cosa temere (e cosa no)

La delegazione non vincolata espone a rischio soprattutto quando un server non di fiducia riceve TGT/TGS forwardable e un attaccante può estrarre ticket dalla memoria per impersonare utenti verso altri servizi. Tuttavia, per i DC il discorso è diverso:

  • Il DC è già Tier‑0. Se compromesso, l’attaccante ha la chiave del regno, a prescindere dalla delegazione. Il focus deve essere prevenire l’accesso al DC e isolare il Tier‑0.
  • I rischi più concreti sono laterali: sessioni privilegiate aperte dal DC verso altri sistemi, con possibilità di riutilizzo dei ticket se questi sono estraibili dai server intermedi.

Conclusione: trattiamo i DC come asset ultra‑sensibili, riducendo al minimo accessi e movimenti di credenziali, e portiamo la delegazione granulare (KCD/RBCD) sui server applicativi.

Linee guida di mitigazione (soluzioni pratiche)

ObiettivoAzioni consigliate
Ridurre la superficie d’attacco sui DC• Impedire il logon interattivo, RDP o con credenziali privilegiate direttamente sui DC; usare jump server sicuri.
• Applicare il criterio GPO “Deny log on locally” ai gruppi d’utente non necessari.
Proteggere gli account ad alto privilegio• Impostare “Account is sensitive and cannot be delegated” su Enterprise Admins, Domain Admins, account di service tier‑0.
• Inserire tali account nel gruppo Protected Users dove possibile.
Limitare la delegazione sugli altri server• Per server applicativi, usare Constrained Delegation (KCD) o, meglio, Resource‑Based Constrained Delegation (RBCD) anziché unconstrained. I DC continueranno a essere unconstrained, ma i workload rimarranno confinati.
Proteggere le credenziali in memoria• Abilitare Windows Defender Credential Guard o Remote Credential Guard per impedire il furto di ticket su host non DC.
• Aggiornare i sistemi per usufruire di Kerberos FAST/KDC Armoring.
Monitorare e reagire• Abilitare l’audit avanzato di Kerberos (Event ID 4768, 4769, 4742).
• Implementare un SIEM che allerti su emissioni di TGT/TGS con flag FORWARDABLE anomali e su logon privilegiati ai DC.
Aggiornamento & hardening• Applica patch regolarmente.
• Obbliga LDAPS con firma e sigillo.
• Implementa criteri di scadenza‑rapida dei ticket su account privilegiati se supportabile.

Procedure passo‑passo consigliate

Isolare l’accesso ai DC con jump server

  1. Allestisci una PAW/SAW (Privileged/ Secured Admin Workstation) o jump server per amministrare il Tier‑0.
  2. Configura un GPO su tutti i DC che nega il logon locale e RDP a chiunque non appartenga a gruppi amministrativi strettamente necessari.
  3. Implementa Just‑Enough Administration e Just‑In‑Time dove applicabile (ad esempio con PAM o PIM), evitando account permanenti sempre privilegiati.

Proteggere gli account privilegiati

  • Per gli account Enterprise Admins, Domain Admins, KRBTGT e per i servizi Tier‑0, imposta l’attributo Account is sensitive and cannot be delegated.
  • Valuta l’inserimento nel gruppo Protected Users per disabilitare automaticamente meccanismi meno sicuri (es. NTLM, delegazione, DES) e ridurre la durata del TGT.

Esempi PowerShell

# Segna un account come "non delegabile"
Set-ADAccountControl -Identity "admin-tier0" -AccountNotDelegated $true

Applica a tutti gli utenti del gruppo "Domain Admins"

Get-ADGroupMember "Domain Admins" -Recursive |
Where-Object {$*.objectClass -eq 'user'} |
ForEach-Object { Set-ADAccountControl -Identity $*.DistinguishedName -AccountNotDelegated $true }

Aggiungi utenti privilegiati a "Protected Users"

Add-ADGroupMember -Identity "Protected Users" -Members "admin-tier0","svc-backup-tier0" 

Portare la delegazione granulare nei workload (KCD/RBCD)

Nei server applicativi non‑DC, evita l’unconstrained delegation: preferisci RBCD (prima scelta) o KCD.

Esempi amministrativi

# Constrained Delegation (KCD): consenti a WEBAPP1 di delegare solo verso lo SPN MSSQLSvc di BACKEND1
Set-ADComputer -Identity "WEBAPP1" -Add @{
  "msDS-AllowedToDelegateTo" = "MSSQLSvc/BACKEND1.contoso.local:1433"
}

Resource-Based Constrained Delegation (RBCD):

è la RISORSA di destinazione a definire chi può delegare verso di lei

Set-ADComputer -Identity "BACKEND1" -PrincipalsAllowedToDelegateToAccount "WEBAPP1$" 

Con RBCD il controllo è decentrato sul server di destinazione; si riducono blast radius e complessità, ed è più facile automatizzare in pipeline di deployment.

Proteggere le credenziali in memoria

  • Windows Defender Credential Guard: isola segreti di LSASS con virtualizzazione (VBS) per impedire estrazioni di ticket/password da host compromessi.
  • Remote Credential Guard: quando usi RDP verso server amministrativi, evita che le tue credenziali vengano delegate al server remoto.

Abilitazione via GPO

  • Credential Guard: Computer Configuration > Administrative Templates > System > Device Guard > Turn On Virtualization Based Security → Abilita, quindi imposta Credential Guard (consigliato “Enabled with UEFI lock”).
  • Remote Credential Guard: Computer Configuration > Administrative Templates > System > Credentials Delegation > Restrict delegation of credentials to remote servers → “Require Remote Credential Guard”.

Rafforzare Kerberos: FAST/KDC Armoring e policy

  • Abilita Kerberos FAST (KDC Armoring) su DC e client per proteggere lo scambio di pre-autenticazione e ridurre rischi di ticket fishing e manipolazioni.
  • Valuta Authentication Policies & Silos (dalla funzionalità AD DS avanzata) per imporre orari, postazioni e durata dei ticket differenti per account privilegiati.

GPO rilevanti

  • Computer Configuration > Policies > Administrative Templates > System > KDC → abilita il supporto per claims, compound auth e armoring.
  • Computer Configuration > Policies > Windows Settings > Security Settings > Account Policies > Kerberos Policy → valuta la riduzione delle durate dei ticket, tenendo conto dell’impatto su servizi legacy.

Audit e rilevazione (SIEM)

Attiva l’audit Kerberos e invia i log al SIEM. Eventi chiave:

  • 4768 – TGT rilasciato (Authentication Service).
  • 4769 – TGS rilasciato (Service Ticket). Verifica l’opzione FORWARDABLE e anomalie di volume/origine.
  • 4742 – Modifica di oggetto computer (utile per cambi di delegazione).

Esempi di query (indicative)

# Microsoft Sentinel (KQL) – picchi di TGS FORWARDABLE
SecurityEvent
| where EventID == 4769
| extend TicketOptions = tostring(AdditionalFields)
| where TicketOptions has_cs "FORWARDABLE"
| summarize count() by TargetUserName, Computer, bin(TimeGenerated, 1h)
| order by count_ desc

Splunk – logon privilegiati sui DC

index=wineventlog sourcetype="WinEventLog:Security" EventCode=4624 host=
| search Account_Type=User (TargetUserName="Admin" OR TargetUserName="svc")
| stats count by TargetUserName, Logon_Type, src, host 

LDAP sicuro, patch e configurazioni baseline

  • LDAPS + firma/sigillo: richiedi la firma per server e client LDAP e l’uso di LDAPS ove possibile. Abilita il requisito di channel binding per mitigare attacchi man-in-the-middle.
  • Patching rigoroso: mantieni aggiornati DC, membri del dominio e applicazioni Kerberos‑aware.
  • Baseline di sicurezza: adotta baseline hardening coerenti (CIS, Microsoft Security Baselines) come partenza, poi personalizza per il tuo ambiente.

Visibilità: verificare lo stato attuale

Prima di cambiare, fotografa lo stato. Ecco comandi utili:

# Elenca tutti i DC e mostra se sono marcati "TrustedForDelegation"
Get-ADDomainController -Filter * |
  ForEach-Object { Get-ADComputer $_.ComputerObjectDN -Properties userAccountControl } |
  Select-Object Name, @{Name="TrustedForDelegation";Expression={($_.userAccountControl -band 0x80000) -ne 0}}

Trova computer (non-DC) con unconstrained delegation attiva (attenzione!)

Get-ADComputer -Filter * -Properties userAccountControl |
Where-Object { ($.userAccountControl -band 0x80000) -ne 0 -and $.PrimaryGroupID -ne 516 } |
Select-Object Name, DNSHostName 

Nota: PrimaryGroupID = 516 è tipicamente usato dai DC. Il secondo comando aiuta a individuare server applicativi che non dovrebbero avere delegazione non vincolata.

Perché non si può disattivare del tutto la delegazione sui DC

I DC fungono contemporaneamente da Key Distribution Center (KDC) e da endpoint di molti servizi di dominio (replica SYSVOL/DFS, DNS integrato in AD, LDAP, gestione trust, ecc.). Per erogare questi servizi devono:

  1. Ricevere un TGT dal client.
  2. Presentarsi essi stessi verso altri servizi a nome dell’utente.

Questo flusso richiede ticket FORWARDABLE e quindi la delegazione non vincolata. Disabilitarla impedirebbe operazioni di base di Active Directory, rompendo autenticazioni Kerberos, trust di foresta e il double hop di molti strumenti e funzioni interne.

Domande frequenti (FAQ)

Posso forzare “Do not trust this computer for delegation” su un DC?
Puoi impostarlo, ma sarà sovrascritto automaticamente dai servizi di sistema. Non è una via praticabile né supportata.

Se lascio tutto com’è sui DC, non sto aumentando il rischio?
Il rischio principale è consentire la delega non vincolata su server applicativi. I DC devono rimanere unconstrained; la sicurezza si ottiene isolando il Tier‑0, proteggendo le credenziali e monitorando l’uso dei ticket.

Che differenza c’è fra KCD e RBCD?
KCD limita la delega a SPN elencati sul caller; RBCD sposta il controllo sulla risorsa di destinazione, è più flessibile e si integra meglio con scenari DevOps/Cloud.

Il gruppo Protected Users è sufficiente?
È un ottimo rinforzo, ma non sostituisce jump server, hardening degli host, patching e audit.

Checklist operativa rapida

  • ☑ Blocca logon locale/RDP ai DC per account non Tier‑0.
  • ☑ Segna gli account privilegiati come non delegabili e aggiungili a Protected Users.
  • ☑ Mappa e migra le deleghe applicative da unconstrained a RBCD/KCD.
  • ☑ Abilita Credential Guard e Remote Credential Guard sui sistemi amministrativi.
  • ☑ Abilita Kerberos FAST/KDC Armoring e ottimizza le policy dei ticket.
  • ☑ Attiva audit Kerberos (4768/4769/4742) e allarmi su FORWARDABLE anomali.
  • ☑ Enforce LDAPS con firma/sigillo e channel binding.
  • ☑ Mantieni patch e baseline di sicurezza aggiornate.

Antipattern da evitare

  • RDP diretto ai DC da workstation generiche o contesti non Tier‑0.
  • Server applicativi con delegazione non vincolata “per comodità”. È una scorciatoia pericolosa.
  • Account di servizio onnipotenti condivisi fra applicazioni diverse.
  • Disabilitare forzatamente la delegazione sui DC: non solo inutile, potenzialmente dannoso.

Impatto e compatibilità: cosa testare prima

Alcune mitigazioni possono influenzare applicazioni legacy:

  • FAST/KDC Armoring: verifica compatibilità di applicazioni Kerberos‑aware più datate.
  • Riduzione della durata dei ticket: aumentare l’overhead di rinnovo può impattare job di lunga durata o servizi che assumono TGT “lunghi”. Valuta “Authentication Policies” per target selettivi.
  • LDAPS obbligatorio e firma: assicurati che tutti i client e i connettori LDAP supportino le impostazioni richieste e abbiano trust CA corretti.

Governance e processo

La sicurezza dei DC è un programma, non un progetto “una tantum”. Adotta pratiche di governance:

  • Asset inventory dei sistemi Tier‑0 e delle catene di delega applicativa.
  • Change control per ogni modifica di SPN, deleghe KCD/RBCD e privilegi degli account.
  • Continuous monitoring: dashboard SIEM con trend di TGT/TGS, logon privilegiati e modifiche agli oggetti computer/utente critici.
  • Runbook di risposta per reset rapido della password KRBTGT (doppio reset, finestre coordinate), account disable e isolamento host compromessi.

Conclusioni

  • No, i Domain Controller non possono funzionare senza delegazione unconstrained; qualsiasi tentativo di rimuoverla viene annullato dal sistema operativo.
  • , è possibile (e necessario) mitigare i rischi applicando hardening sugli account e limitando la delega su sistemi non‑DC.
  • Investire in Credential Guard, RBCD e audit dettagliato riduce in modo sostanziale l’esposizione, mantenendo la piena funzionalità di Active Directory.

Tratta i DC come il cuore della tua identità: pochi accessi, controllati e monitorati. Sposta la complessità della delega sui workload e rendila granulare. È qui che si gioca la differenza tra una foresta AD fragile e un’infrastruttura resiliente.


Appendice: altri esempi utili

Individuare host con delega KCD attiva e SPN

# Elenca i computer con KCD (msDS-AllowedToDelegateTo popolato) e relativi SPN
Get-ADComputer -Filter * -Properties msDS-AllowedToDelegateTo,servicePrincipalName |
  Where-Object { $_.msDS-AllowedToDelegateTo } |
  Select-Object Name, DNSHostName, msDS-AllowedToDelegateTo, servicePrincipalName

Verificare RBCD su una risorsa

# Mostra chi può delegare verso BACKEND1 (RBCD)
(Get-ADComputer -Identity "BACKEND1" -Properties PrincipalsAllowedToDelegateToAccount).
  PrincipalsAllowedToDelegateToAccount

Policy Kerberos – riferimento rapido

  • Maximum lifetime for user ticket (TGT): durata del TGT. Per ambienti ad alto rischio, valuta valori più conservativi, previa analisi impatto.
  • Maximum lifetime for service ticket (TGS) e renew‑until: definiscono la “longevità” e il rinnovo dei ticket.
  • Enforce user logon restrictions: dovrebbe essere abilitato per far rispettare i controlli di appartenenza ai gruppi durante le autenticazioni.
Indice