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

Sammanfattning

Skogsförtroenden är ett sätt för resurser i en Active Directory-skog till betrodda identiteter från en annan skog. Detta förtroende kan konfigureras i båda riktningarna. Den betrodda skogen är källan till användarens identitet. Den betroende skogen innehåller resurser som användare autentiseras. Den betrodda skogen kan autentisera användare till den betroende skogen utan att omvänt inträffar.

Obegränsad Kerberos-delegering är en mekanism som en användare skickar sina behörigheter till en tjänst för att aktivera tjänsten åtkomst till resurser från användare. Om du vill aktivera obegränsad Kerberos-delegering tjänstkonto i Active Directory måste märkas som betrodd för delegering. Detta skapar ett problem om användaren och tjänsten tillhör olika skogar. Service-skog är ansvarig för att tillåta delegering. Delegeringen har autentiseringsuppgifter för användare från användarens skog.

Gör att en skog att fatta beslut om säkerhet som påverkar konton i en annan skog bryter mot säkerhetsgräns mellan skogar. En angripare som äger den betroende skogen kan begära delegering av TGT för en identitet från den betrodda skogen ger åtkomst till resurser i den betrodda skogen. Detta gäller inte för Kerberos-begränsad delegering (KCD).

Windows Server 2012 introducerade tvingande för skogen gräns för fullständig Kerberos-delegering. Den här funktionen läggs en princip till den betrodda domänen att inaktivera obegränsad delegering per förvaltningsuppdrag. Standardinställningen för den här funktionen tillåter obegränsad delegering och är osäkra.

Det finns en uppdatering som ger skärpning av säkerheten för följande versioner av Windows Server:

  • Windows Server 2019

  • Windows Server 2016

  • Windows Server 2012 R2

  • Windows Server 2012

Den här funktionen ändringar i security hardening har anpassats för följande versioner:

  • Windows Server 2008 R2

  • Windows Server 2008

Dessa säkerhetsuppdateringar göra följande ändringar:

  • Obegränsad Kerberos-delegering är inaktiverat som standard i en ny skog och nya externa förtroendennär du har installerat14 maj update och senare uppdateringar.

  • Obegränsad Kerberos-delegering är inaktiverat på skogar (både nya och existerande) och externa förtroenden när du har installerat den juli 9 2019, uppdatering och senare uppdateringar.

  • Administratörer kan aktivera obegränsad Kerberos-delegering genom att använda maj eller senare versioner av NETDOM och AD PowerShell-modul.

Uppdateringarna kan orsaka konflikter kompatibilitet för program som för närvarande kräver obegränsad delegering över skogen eller externa förtroenden. Detta gäller särskilt för externt förtroende som flaggan quarantine (kallas även SID-filtrering) är aktiverad som standard. I synnerhet misslyckas autentiseringsbegäranden för tjänster som använder obegränsad delegering över listade förtroendetyper när du begär nya biljetter.

Release-datum i avsnittet uppdaterar tidslinjen.

Lösning

För data- och säkerhet på en Windows Server-version som har en funktion för tvingande NAP för skogen gräns för fullständig Kerberos-delegering kan du blockera TGT delegering när du installerar uppdateringar för mars 2019 över ett inkommande förtroende genom att ange den Netdom flaggan EnableTGTDelegationnr på följande sätt:

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

TGT delegering är blockerad på nya och befintliga skogen och externa förtroenden när du installerar maj och juli 2019 respektive uppdateras.

Ange flaggan EnableTGTDelegation till Jaom du vill aktivera delegering över förtroenden och gå tillbaka till den ursprungliga konfigurationen för osäkra förrän begränsade eller resurs-baserad delegering kan aktiveras.

NETDOM kommandoraden för att aktivera TGT delegering är följande:

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

Begreppsmässigt kan jämföras med NETDOM syntaxen för att aktivera TGT delegering enligt följande:

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

NETDOM syntaxen att TGT delegering av fabrakam.com användare på contoso.com servrar är:

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

Kommentarer

  • EnableTGTDelegation -flaggan ska anges i den betrodda domänen (hjälp i detta fall) för varje betrodd domän (till exempel contoso.com). När du har angett flaggan den betrodda domänen inte längre att tillåta Tickets delegeras till domänen med förtroende.

  • Säkerhetsstatus för EnableTGTDelegation är Nej.

  • Ett program eller en tjänst som kräver obegränsad delegering mellan skogar misslyckas när EnableTGTDelegation är manuellt eller programmatiskt Ja. EnableTGTDelegation som standard nr för nya och befintliga förtroenden när du installera uppdateringarna maj 2019 och juli 2019. Mer information om hur du identifierar felet finns i söka efter tjänster som är beroende av obegränsad delegering. En tidslinje för ändringar som påverkar hur lösningen kan användas finns i uppdaterar tidslinje .

  • Mer information om NETDOM finns i dokumentationen Netdom.exe.

  • Om du måste aktivera TGT delegering på ett förtroende, rekommenderas du att minska denna risk genom att aktivera Windows Defender Credential Guard på klientdatorer. Detta innebär att alla obegränsad delegering från en dator med Windows Defender Credential Guard aktiverad och kör.

  • Om du har en skog eller ett externt förtroende och antingen har konfigurerats som satts i karantän, kan inte TGT delegering aktiveras eftersom två flaggor har motsatt semantik. Karantän-bitars stärker säkerhetsgräns mellan deltagande domäner. Aktivera delegering TGT raderar säkerhetsgränser mellan domäner genom att ge den betroende domänåtkomsten till autentiseringsuppgifter för användare från den betrodda domänen. Du kan inte ha det på båda sätten.

    Lägg till flaggan karantän: no NETDOM kommandoradens syntax om karantän flagga är aktiverad.

  • Om du har ändrat EnableTGTDelegationJabort Kerberos-biljetter på ursprungsvaror och mellanliggande anropare som krävs. Ta bort relevanta biljetten är klientens mottagits TGT genom relevanta förtroendet. Detta kan innebära mer än en enhet, beroende på antalet hopp delegering i en given miljö.

Mer information om den här proceduren finns i följande artikel i Windows IT Pro Center:

Skydda härledda domänautentiseringsuppgifter med Windows Defender Credential Guard

Tidslinje för uppdateringar

Den 12 mars 2019

Tvingande för skogen gräns för Kerberos fullständig delegering kommer att vara tillgänglig som en uppdatering att aktivera den här funktionen på alla versioner av Windows Server som nämns i avsnittet gäller överst i den här artikeln. Vi rekommenderar att du ställer in funktionen på inkommande skogsförtroenden.

Uppdateringen lägger till funktionen tvingande för skogen gräns för fullständig Kerberos-delegering i följande system:

  • Windows Server 2008 R2

  • Windows Server 2008

Den 14 maj 2019

En uppdatering släpptes lägger till en ny säker standard konfiguration till ny skog och externa förtroenden. Om du behöver delegera över förtroenden bör flaggan EnableTGTDelegation anges till Ja innan den 9 juli 2019-uppdateringen är installerad. Om delegering inte behöver över förtroenden kan ange du inte EnableTGTDelegation -flaggan. Flaggan EnableTGTDelegation ignoreras tills den 9 juli 2019 uppdateringen installeras för att ge administratörer att återaktivera obegränsad Kerberos-delegering när det krävs.

Som en del av den här uppdateringen kommer EnableTGTDelegation -flaggan anges till Nej som standard för alla nya förtroenden. Detta är motsatsen till den tidigare funktionen. Vi rekommenderar att administratörer i stället konfigurera tjänsterna för resurs-baserad begränsad delegering.

Mer information om hur du identifierar problem med programkompatibilitet finns i söka efter tjänster som är beroende av obegränsad delegering.

Den 9 juli 2019

En uppdatering släpptes som upprätthåller den nya standardfunktionen på inkommande sida i skogen och externa förtroenden. Autentiseringsbegäranden för tjänster som använder obegränsad delegering över listade förtroendetyper autentiseras utan delegering. Tjänsten misslyckas vid försök att köra delegerade åtgärder.

Säkerhetsfunktionen, finns i avsnittet ”lösning”.

Hitta tjänster som bygger på obegränsad delegering

Skanna för skogar som har inkommande förtroenden som får delegeras TGT och om du vill hitta alla säkerhet säkerhetsobjekt som tillåter obegränsad delegering, kör du följande PowerShell-skript i ett skript filen (till exempel Get-RiskyServiceAccountsByTrust.ps1- Mottagaren betalar):

Obs!

Du kan också skicka ScanAll - flagga för att söka i förtroenden som inte får delegeras 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 
}

Produktionen av PowerShell-skript lista över Active Directory-säkerhetsobjekt i domäner som har konfigurerats för ett inkommande förtroende från verkställande domänen som har obegränsad delegering konfigureras. Utdata ska likna följande exempel.

domän

sAMAccountName

objectClass

partner.fabrikam.com

farliga

användare

partner.fabrikam.com

labsrv$

dator

Identifiera obegränsad delegering via Windows-händelser

När Kerberos-biljetten utfärdas loggar en Active Directory-domänkontrollant följande säkerhetshändelser. Händelserna som innehåller information om måldomänen. Du kan använda händelser för att avgöra om obegränsad delegering används över inkommande förtroenden.

Obs!

Sök efter händelser som innehåller ett Måldomännamn värde som matchar namnet på betrodda domänen.

Händelseloggen

Händelsekällan

Händelse-ID

Detaljer

Säkerhet

Microsoft-Windows-Security-granskning

4768

Kerberos TGT utfärdades.

Säkerhet

Microsoft-Windows-Security-granskning

4769

En Kerberos-biljett för tjänsten har utfärdats.

Säkerhet

Microsoft-Windows-Security-granskning

4770

En Kerberos-biljett för tjänsten förnyades.

Felsökning av autentiseringsfel

När obegränsad delegering är inaktiverat har program kompatibilitetsproblem med dessa ändringar om program som förlitar sig på obegränsad delegering. Dessa program ska konfigureras att använda begränsad delegering eller begränsad delegering är resurs-baserad. Feller mer information, see Kerberos-begränsad delegering översikt.

Program som förlitar sig på fram och återfärd autentisering över förtroenden stöds inte med begränsad delegering. Till exempel misslyckas en delegering autentiseras av en användare i skog A till ett program i skog B och programmet i skog B försöker delegera en biljett tillbaka till skog A.

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.