Applies ToWindows Server 2008 Windows Server 2008 R2 Windows Server 2012 Windows Server 2012 R2 Windows Server 2016 Windows Server 2019, all editions

Riepilogo

Trust tra foreste rappresentano un modo per le risorse in un insieme di strutture di Active Directory per considerare attendibile l'identità di un altro insieme di strutture. Questa relazione di trust possono essere configurate in entrambe le direzioni. Insieme di strutture trusted è l'origine dell'identità utente. Insieme di strutture trusting contiene la risorsa a cui gli utenti autenticati. Insieme di strutture trusted è possibile autenticare gli utenti all'insieme di strutture trusting senza consentire il contrario si verifica.

La delega non vincolata Kerberos è un meccanismo in cui un utente invia le credenziali a un servizio per consentire al servizio di accesso alle risorse per conto dell'utente. Per attivare la delega non vincolata Kerberos, l'account del servizio Active Directory deve essere contrassegnato come trusted per delega. Questo costituisce un problema se il servizio e l'utente appartiene a insiemi di strutture diversi. L'insieme di strutture di servizio è responsabile per consentire la delega. La delega include le credenziali degli utenti dalla foresta dell'utente.

Consentendo a un insieme di strutture per le decisioni di protezione che interessa gli account di un altro insieme di strutture viola il limite di protezione tra insiemi di strutture. Un utente malintenzionato che possiede l'insieme di strutture trusting può richiedere la delega di un TGT per un'identità dall'insieme di strutture trusted, attribuendogli l'accesso alle risorse nella foresta trusted. Ciò non si applica alla delega vincolata Kerberos (KCD).

Windows Server 2012 introdotto imposizione per limite di insieme di strutture per la delega di Kerberos completo. Questa funzionalità aggiunta di un criterio per il dominio trusted per disattivare la delega non vincolata in base al attendibilità. L'impostazione predefinita per questa funzionalità consente la delega non vincolata e non è sicura.

Per le seguenti versioni di Windows Server sono disponibili gli aggiornamenti che forniscono protezione avanzata:

  • Windows Server 2019

  • Windows Server 2016

  • Windows Server 2012 R2

  • Windows Server 2012

Questa funzionalità e modifiche per il rafforzamento della protezione sono stati backported alle seguenti versioni:

  • Windows Server 2008 R2

  • Windows Server 2008

Questi aggiornamenti della protezione effettuare le seguenti modifiche:

  • La delega vincolata Kerberos è disabilitata per impostazione predefinita sul nuovo insieme di strutture e nuovi trust esternidopo l'installazioneil 14 maggio update e aggiornamenti successivi.

  • La delega non vincolata Kerberos è disattivata in insiemi di strutture (sia nuovi che esistenti) e i trust esterni dopo l'installazione di luglio 9, 2019, update e aggiornamenti successivi.

  • Gli amministratori possono abilitare la delega non vincolata di Kerberos mediante l'utilizzo di maggio o versioni successive del modulo NETDOM e PowerShell di Active Directory.

Gli aggiornamenti potrebbero causare conflitti di compatibilità per le applicazioni che richiedono la delega non vincolata tra insiemi di strutture o trust esterni. Ciò è particolarmente vero di trust esterno per cui il flag di quarantena (noto anche come il filtraggio dei SID) è abilitato per impostazione predefinita. In particolare, le richieste di autenticazione per i servizi che utilizzano la delega non vincolata su tipi di trust elencati avrà esito negativo quando si richiede nuovi ticket.

Per le date di rilascio, vedere aggiornamenti timeline.

Soluzione alternativa

Per garantire la protezione dei dati e account su una versione di Windows Server e la funzione di imposizione per limite di insieme di strutture per la delega di Kerberos completo , è possibile bloccare la delega TGT dopo aver installato gli aggiornamenti di marzo 2019 attraverso un trust in ingresso mediante l'impostazione di flag Netdom EnableTGTDelegation a No, come segue:

netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No

Delega TGT viene bloccata su insiemi di strutture nuovi ed esistenti e i trust esterni dopo l'installazione di maggio e luglio 2019 Aggiorna rispettivamente.

Per riattivare la delega attraverso trust e tornare alla configurazione originale unsafe fino a quando non può essere attivata la delega vincolata o basate sulle risorse, impostare il flag EnableTGTDelegation su .

La riga di comando NETDOM per abilitare la delega TGT è la seguente:

netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes

Può essere considerato concettualmente la sintassi NETDOM per abilitare la delega TGT come segue:

netdom trust <domain that you are administering> /domain:<domain whose trust NETDOM is modifying> /EnableTgtDelegation:Yes

La sintassi NETDOM per abilitare la delega TGT di fabrakam.com utenti sui server contoso.com è il seguente:

netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes

Note

  • Impostare il flag EnableTGTDelegation nel dominio trusted (fabrikam.com in questo caso) per ogni dominio trusting (ad esempio contoso.com). Dopo aver impostato il flag, il dominio trusted non consentirà TGT la delega per il dominio trusting.

  • Lo stato di EnableTGTDelegation protezione è No.

  • Qualsiasi applicazione o servizio da cui dipende la delega non vincolata tra insiemi di strutture non riuscirà quando EnableTGTDelegation è impostata a livello di codice o manualmente su Sì. Impostazioni predefinite di EnableTGTDelegation a NO sui trust nuovi ed esistenti dopo l'installazione degli aggiornamenti maggio 2019 e luglio 2019. Per ulteriori informazioni su come rilevare questo errore, vedere ricerca di servizi che utilizzano la delega non vincolata. Per una cronologia delle modifiche che influenzano il modo in cui può essere applicata questa soluzione, vedere aggiornamenti timeline .

  • Per ulteriori informazioni su NETDOM, vedere la documentazione di Netdom.exe.

  • Se è necessario attivare la delega TGT in una relazione di trust, è consigliabile ridurre tale rischio attivando Windows Defender credenziali Guard sui computer client. Ciò impedisce a tutti la delega non vincolata da un computer con Windows Defender credenziali Guard attivati e in esecuzione.

  • Se è un insieme di strutture o di un trust esterno che entrambi siano configurate come messi in quarantena, due flag è opposto alla semantica Impossibile abilitare la delega TGT. Il bit di quarantena aumenta il limite di protezione tra domini partecipanti. Attivazione della delega TGT Cancella i confini di protezione tra domini fornendo l'accesso al dominio trusting per le credenziali degli utenti dal dominio trusted. È possibile che entrambi i modi.

    Se il flag di quarantena è attiva, aggiungere il flag di quarantena: no per la sintassi della riga di comando NETDOM.

  • Se si modifica EnableTGTDelegation a , eliminare i ticket Kerberos sui chiamanti di originari e di livello intermedi come richiesto. Il ticket pertinente da eliminare è il riferimento del client TGT all'interno del trust rilevante. Potrebbe essere necessario più di un dispositivo, in base al numero di hop di delega in un determinato ambiente.

Per ulteriori informazioni su questa procedura, vedere il seguente articolo Windows IT Pro Center:

Proteggere le credenziali di dominio derivati con guardia credenziali di Windows Defender

Cronologia aggiornamenti

12 marzo 2019

L'applicazione per il limite di insieme di strutture per Kerberos delega completa sarà disponibile come aggiornamento per attivare questa funzionalità in tutte le versioni supportate di Windows Server elencati nella sezione nella parte superiore di questo articolo si applica a . Si consiglia di impostare la funzionalità per i trust tra insiemi di strutture in ingresso.

L'aggiornamento aggiungerà la funzionalità di imposizione per limite di insieme di strutture per la delega di Kerberos completo per i seguenti sistemi:

  • Windows Server 2008 R2

  • Windows Server 2008

14 maggio 2019.

È stato rilasciato un aggiornamento aggiungendo una nuova impostazione predefinita sicura configurazione al nuovo insieme di strutture e trust esterni. Se è necessaria la delega relazioni di trust, il flag EnableTGTDelegation deve essere impostato su prima di installata l'aggiornamento del 9 luglio 2019. Se non è necessaria la delega relazioni di trust, non impostare il flag EnableTGTDelegation . Il flag EnableTGTDelegation verrà ignorato finché non viene installato l'aggiornamento del 9 luglio 2019 per fornire agli amministratori di tempo per riattivare la delega non vincolata Kerberos quando è necessario.

Come parte di questo aggiornamento, imposterà il flag EnableTGTDelegation su No per impostazione predefinita per tutte le relazioni di trust appena create. Questo è l'opposto del comportamento precedente. È consigliabile che gli amministratori di riconfigurare invece i servizi interessati per utilizzare la delega vincolata in base a risorsa.

Per ulteriori informazioni su come rilevare problemi di compatibilità, vedere ricerca di servizi che utilizzano la delega non vincolata.

9 luglio 2019

È stato rilasciato un aggiornamento che consente di applicare il nuovo comportamento predefinito sul lato in ingresso dell'insieme di strutture e trust esterni. Le richieste di autenticazione per i servizi che utilizzano la delega non vincolata su tipi di trust elencati verranno autenticati ma senza la delega. Il servizio avrà esito negativo durante il tentativo di eseguire operazioni delegate.

Per l'attenuazione, vedere la sezione "Workaround".

Ricerca di servizi che si affidano la delega non vincolata

Per analizzare gli insiemi di strutture che dispongono di trust in ingresso che consentono la delega TGT e per individuare qualsiasi protezione principali che consentono la delega non vincolata, esecuzione di PowerShell seguente script in uno script di file (ad esempio, Get-RiskyServiceAccountsByTrust.ps1 - Raccogliere):

Nota

È inoltre possibile passare il flag - ScanAll per la ricerca di relazioni di trust che non consentono la delega TGT.


[CmdletBinding()]  
Param  
(  
    [switch]$Collect, 
    [switch]$ScanAll 
) 
 
if ($Debug) {  
    $DebugPreference = 'Continue'  
} 
else { 
    $DebugPreference = 'SilentlyContinue'  
} 

function Get-AdTrustsAtRisk 
{ 
    [CmdletBinding()]  
    Param  
    (  
        [string]$Direction = "Inbound", 
        [switch]$ScanAll 
    ) 
 
    if ($ScanAll) { 
        return get-adtrust -filter {Direction -eq $Direction} 
    } 
    else { 
        return get-adtrust -filter {Direction -eq $Direction -and TGTDelegation -eq $false} 
    } 
} 
 
function Get-ServiceAccountsAtRisk 
{ 
    [CmdletBinding()]  
    Param  
    (  
        [string]$DN = (Get-ADDomain).DistinguishedName, 
        [string]$Server = (Get-ADDomain).Name 
    ) 
 
    Write-Debug "Searching $DN via $Server" 
 
    $SERVER_TRUST_ACCOUNT = 0x2000  
    $TRUSTED_FOR_DELEGATION = 0x80000  
    $TRUSTED_TO_AUTH_FOR_DELEGATION= 0x1000000  
    $PARTIAL_SECRETS_ACCOUNT = 0x4000000    
 
    $bitmask = $TRUSTED_FOR_DELEGATION -bor $TRUSTED_TO_AUTH_FOR_DELEGATION -bor $PARTIAL_SECRETS_ACCOUNT  
  
$filter = @"  
(& 
  (servicePrincipalname=*) 
  (| 
    (msDS-AllowedToActOnBehalfOfOtherIdentity=*) 
    (msDS-AllowedToDelegateTo=*) 
    (UserAccountControl:1.2.840.113556.1.4.804:=$bitmask) 
  ) 
  (| 
    (objectcategory=computer) 
    (objectcategory=person) 
    (objectcategory=msDS-GroupManagedServiceAccount) 
    (objectcategory=msDS-ManagedServiceAccount) 
  ) 
) 
"@ -replace "[\s\n]", ''  
  
    $propertylist = @(  
        "servicePrincipalname",   
        "useraccountcontrol",   
        "samaccountname",   
        "msDS-AllowedToDelegateTo",   
        "msDS-AllowedToActOnBehalfOfOtherIdentity"  
    )  
 
    $riskyAccounts = @() 
 
    try { 
        $accounts = Get-ADObject -LDAPFilter $filter -SearchBase $DN -SearchScope Subtree -Properties $propertylist -Server $Server 
    } 
    catch { 
        Write-Warning "Failed to query $Server. Consider investigating seperately. $($_.Exception.Message)" 
    } 
              
    foreach ($account in $accounts) {  
        $isDC = ($account.useraccountcontrol -band $SERVER_TRUST_ACCOUNT) -ne 0  
        $fullDelegation = ($account.useraccountcontrol -band $TRUSTED_FOR_DELEGATION) -ne 0  
        $constrainedDelegation = ($account.'msDS-AllowedToDelegateTo').count -gt 0  
        $isRODC = ($account.useraccountcontrol -band $PARTIAL_SECRETS_ACCOUNT) -ne 0  
        $resourceDelegation = $account.'msDS-AllowedToActOnBehalfOfOtherIdentity' -ne $null  
      
        $acct = [PSCustomobject] @{  
            domain = $Server 
            sAMAccountName = $account.samaccountname  
            objectClass = $account.objectclass          
            isDC = $isDC  
            isRODC = $isRODC  
            fullDelegation = $fullDelegation  
            constrainedDelegation = $constrainedDelegation  
            resourceDelegation = $resourceDelegation  
        }  
 
        if ($fullDelegation) {  
            $riskyAccounts += $acct    
        } 
    }  
 
    return $riskyAccounts 
} 
 
function Get-RiskyServiceAccountsByTrust  
{ 
    [CmdletBinding()]  
    Param  
    ( 
        [switch]$ScanAll 
    ) 
     
    $riskyAccounts = @() 
 
    $trustTypes = $("Inbound", "Bidirectional") 
 
    foreach ($type in $trustTypes) { 
 
        $riskyTrusts = Get-AdTrustsAtRisk -Direction $type -ScanAll:$ScanAll 
 
        foreach ($trust in $riskyTrusts) { 
            $domain = $null 
     
            try { 
                $domain = Get-AdDomain $trust.Name -ErrorVariable eatError -ErrorAction Ignore 
            } catch { 
                write-debug $_.Exception.Message 
            } 
 
            if($eatError -ne $null) { 
                Write-Warning "Couldn't find domain: $($trust.Name)" 
            } 
 
            if ($domain -ne $null) { 
                $accts = Get-ServiceAccountsAtRisk -DN $domain.DistinguishedName -Server $domain.DNSRoot 
 
                foreach ($acct in $accts) { 
                    Write-Debug "Risky: $($acct.sAMAccountName) in $($acct.domain)" 
                }             
 
                $risky = [PSCustomobject] @{  
                    Domain = $trust.Name 
                    Accounts = $accts 
                } 
 
                $riskyAccounts += $risky 
            } 
        } 
    } 
 
    return $riskyAccounts 
} 
 
if ($Collect) { 
   Get-RiskyServiceAccountsByTrust -ScanAll:$ScanAll | Select-Object -expandProperty Accounts | format-table 
}

L'output degli script di PowerShell elenco identità di protezione di Active Directory nei domini che sono configurati per un trust in ingresso dal dominio in esecuzione che è non vincolato delega configurata. L'output sarà simile all'esempio seguente.

dominio

sAMAccountName

objectClass

partner.fabrikam.com

pericolose

utente

partner.fabrikam.com

labsrv$

computer

Delega non vincolata rilevamento tramite gli eventi di Windows

Quando viene emesso un ticket Kerberos, un controller di dominio Active Directory registra i seguenti eventi di protezione. Gli eventi contengono informazioni relative al dominio di destinazione. È possibile utilizzare gli eventi per determinare se viene utilizzata la delega non vincolata relazioni di trust in ingresso.

Nota

Controllare gli eventi che contengono un valore TargetDomainName che corrisponde al nome di dominio trusted.

Registro eventi

Origine eventi

ID evento

Dettagli

Protezione

Microsoft-Windows-controllo della sicurezza

4768

È stato emesso un TGT Kerberos.

Protezione

Microsoft-Windows-controllo della sicurezza

4769

È stato rilasciato un Ticket di servizio Kerberos.

Protezione

Microsoft-Windows-controllo della sicurezza

4770

È stato rinnovato un Ticket di servizio Kerberos.

Risoluzione dei problemi relativi a errori di autenticazione

Quando viene disattivata la delega non vincolata, applicazioni potrebbero avere problemi di compatibilità con le modifiche se le applicazioni si basano sulla delega non vincolata. Queste applicazioni devono essere configurate per l'uso vincolato delega o delega basato su risorsa vincolata. Fo ulteriori informazioni, see Panoramica di delega vincolata Kerberos.

Applicazioni che si basano sull'autenticazione di andata e ritorno relazioni di trust non sono supportate tramite la delega vincolata. Ad esempio, una delega ha esito negativo se autentica un utente nell'insieme di strutture a un'applicazione in foresta B e l'applicazione in foresta B tenta di delegare un ticket in foresta A.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.