Oppdateringer for TGT-delegering på tvers av innkommende klareringer i Windows Server

Gjelder for
Windows Server 2008 Windows Server 2008 R2 Windows Server 2012 Windows Server 2012 R2 Windows Server 2016 Windows Server 2019, all editions

Sammendrag

Skogklareringer gjør det mulig for ressurser i en Active Directory-skog å klarere identiteter fra en annen skog. Denne klareringen kan konfigureres i begge retninger. Den klarerte skogen er kilden til brukeridentiteten. Den klarerte skogen inneholder ressursen som brukerne godkjenner for. Den klarerte skogen kan godkjenne brukere til den klarerte skogen uten å tillate at det motsatte skjer.

Ubegrenset Kerberos-delegering er en mekanisme der en bruker sender legitimasjonen sin til en tjeneste for å aktivere tjenesten for tilgang til ressurser på vegne av brukeren. Hvis du vil aktivere ubegrenset Kerberos-delegering, må tjenestens konto i Active Directory være merket som klarert for delegering. Dette skaper et problem dersom brukeren og tjenesten tilhører ulike skoger. Serviceskogen er ansvarlig for å tillate delegering. Delegeringen omfatter legitimasjonen til brukere fra brukerens skog.

Hvis du lar én skog ta sikkerhetsbeslutninger som påvirker kontoene til en annen skog, bryter dette sikkerhetsgrensen mellom skoger. En angriper som eier den klarerte skogen, kan be om delegering av en TGT for en identitet fra den klarerte skogen, noe som gir den tilgang til ressurser i den klarerte skogen. Dette gjelder ikke for Kerberos-begrenset delegering (KCD).

Windows Server 2012 introduserte håndhevelse for skoggrense for Kerberos fullstendig delegering. Denne funksjonen la til en policy for det klarerte domenet for å deaktivere ubegrenset delegering per klarering. Standardinnstillingen for denne funksjonen tillater ubegrenset delegering og er usikker.

Oppdateringer med sikkerhetsherding finnes for følgende versjoner av Windows Server:

  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2012

Denne funksjonen sammen med endringer i sikkerhetsherding ble tilbakeportert til følgende versjoner:

  • Windows Server 2008 R2
  • Windows Server 2008

Disse sikkerhetsoppdateringene gjør følgende endringer:

  • Ubegrenset Kerberos-delegering deaktiveres som standard for ny skog og nye eksterne klareringer når du har installert oppdateringen fra 14. mai og nyere oppdateringer.
  • Ubegrenset Kerberos-delegering deaktiveres for skoger (både nye og eksisterende) og eksterne klareringer når du har installert oppdateringen fra 9. juli 2019 og nyere oppdateringer.
  • Administratorer kan aktivere ubegrenset Kerberos-delegering ved hjelp av mai eller nyere versjoner av NETDOM og AD PowerShell-modulen.

Oppdateringene kan føre til kompatibilitetskonflikter for programmer som for øyeblikket krever ubegrenset delegering på tvers av skog eller eksterne klareringer. Dette gjelder spesielt for ekstern klarering der karanteneflagget (også kjent som SID-filtrering) er aktivert som standard. Mer spesifikt vil godkjenningsforespørsler for tjenester som bruker ubegrenset delegering over de angitte klareringstypene, mislykkes når du ber om nye billetter.

Se tidslinjen for Oppdateringer for utgivelsesdatoer.

Midlertidig løsning

Hvis du vil sørge for data- og kontosikkerhet på en Windows Server-versjon som har funksjonen håndhevelse for skoggrense for Kerberos Full delegering, kan du blokkere TGT-delegering etter at du har installert oppdateringene for mars 2019 på tvers av en innkommende klarering ved å angi netdom-flagget EnableTGTDelegation til Nei, slik:


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

TGT-delegering blokkeres for ny og eksisterende skog og eksterne klareringer etter at du har installert oppdateringene for henholdsvis mai og juli 2019.

Hvis du vil aktivere delegering på nytt på tvers av klareringer og gå tilbake til den opprinnelige usikre konfigurasjonen inntil begrenset eller ressursbasert delegering kan aktiveres, setter du EnableTGTDelegation-flagget til Ja.

NETDOM-kommandolinjen for å aktivere TGT-delegering er som følger:


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

Du kan konseptuelt tenke på NETDOM-syntaksen for aktivering av TGT-delegering slik:


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

NETDOM-syntaksen for å aktivere TGT-delegering av fabrakam.com brukere på contoso.com-servere er som følger:


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

         Obs!

  • Flagget EnableTGTDelegation skal angis i det klarerte domenet (fabrikam.com i dette tilfellet) for hvert klarerende domene (for eksempel contoso.com). Når flagget er angitt, vil ikke det klarerte domenet lenger tillate at TGT-er delegeres til det klarerte domenet.
  • Den sikre tilstanden for EnableTGTDelegation er Nei.
  • Alle programmer eller tjenester som er avhengige av ubegrenset delegering på tvers av skoger, vil mislykkes når EnableTGTDelegation er satt til Ja manuelt eller programmatisk . EnableTGTDelegation bruker som standard NEI på nye og eksisterende klareringer etter at du har installert oppdateringene for mai 2019 og juli 2019. Hvis du vil ha mer informasjon om hvordan du oppdager denne feilen, kan du se Finne tjenester som krever ubegrenset delegering. Se tidslinjen for Oppdateringer for en tidslinje over endringer som påvirker hvordan denne midlertidige løsningen kan brukes.
  • Hvis du vil ha mer informasjon om NETDOM, kan du se dokumentasjonen forNetdom.exe.
  • Hvis du må aktivere TGT-delegering på en klarering, anbefaler vi at du reduserer denne risikoen ved å aktivere Windows Defender Credential Guard på klientdatamaskiner. Dette hindrer all ubegrenset delegering fra en datamaskin som har Windows Defender Credential Guard aktivert og kjører.
  • Hvis du har en skog eller ekstern klarering, og begge er konfigurert som satt i karantene, kan ikke TGT-delegering aktiveres fordi de to flaggene har motsatt semantikk. Karantenebiten styrker sikkerhetsgrensen mellom deltakende domener. Når du aktiverer TGT-delegering, slettes sikkerhetsgrensene mellom domener ved at det klarerte domenet får tilgang til legitimasjonen til brukere fra det klarerte domenet. Du kan ikke ha både i pose og sekk.
    Legg til quarantine:no-flagget i NETDOM-kommandolinjesyntaksen hvis karanteneflagget er aktivert.
  • Hvis du endret EnableTGTDelegation til Ja, sletter du Kerberos-billetter for innringere som ringer videre. Den relevante billetten som skal slettes, er klientens henvisnings-TGT på tvers av den aktuelle trusten. Dette kan involvere mer enn én enhet, avhengig av antall delegeringshopp i et gitt miljø.

Hvis du vil ha mer informasjon om denne fremgangsmåten, kan du se følgende artikkel i Windows IT Pro Center:

Beskytt legitimasjonen for avledede domener med Windows Defender Credential Guard

Oppdateringer tidslinje

12. mars 2019

Håndhevelse av skoggrense for Kerberos fullstendig delegering blir tilgjengelig som en oppdatering for å aktivere denne funksjonen på alle støttede versjoner av Windows Server som er oppført i Gjelder for-delen øverst i denne artikkelen. Vi anbefaler at du angir funksjonen på innkommende skogklareringer.

Oppdateringen legger til funksjonen håndhevelse for skoggrense for Kerberos fullstendig delegering i følgende systemer:

  • Windows Server 2008 R2
  • Windows Server 2008

14. mai 2019

Det ble utgitt en oppdatering som legger til en ny sikker standardkonfigurasjon i ny skog og eksterne klareringer. Hvis du krever delegering på tvers av klareringer, må EnableTGTDelegation-flagget settes til Ja før oppdateringen fra 9. juli 2019 blir installert. Hvis du ikke krever delegering på tvers av klareringer, bør du ikke angi flagget EnableTGTDelegation . EnableTGTDelegation-flagget ignoreres frem til 9. juli 2019-oppdateringen er installert for å gi administratorer tid til å aktivere ubegrenset Kerberos-delegering på nytt når det er nødvendig.

Som en del av denne oppdateringen settes EnableTGTDelegation-flagget til Nei som standard for alle nyopprettede klareringer. Dette er det motsatte av den forrige virkemåten. Vi anbefaler at administratorer i stedet konfigurerer de berørte tjenestene på nytt for å bruke ressursbasert delegering.

Hvis du vil ha mer informasjon om hvordan du oppdager kompatibilitetsproblemer, kan du se Finne tjenester som krever ubegrenset delegering.

9. juli 2019

En oppdatering ble utgitt som håndhever den nye standardvirkemåten på innsiden av skog og eksterne klareringer. Godkjenningsforespørsler for tjenester som bruker ubegrenset delegering over de angitte klareringstypene, godkjennes, men uten delegering. Tjenesten vil mislykkes når den prøver å kjøre delegerte operasjoner.

Se delen «Midlertidig løsning» for å løse problemet.

Finne tjenester som krever ubegrenset delegering

Hvis du skal søke etter skoger som har innkommende klareringer som tillater TGT-delegering, og finne eventuelle sikkerhetsprinsipper som tillater ubegrenset delegering, kjører du følgende PowerShell-skript i en skriptfil (for eksempel Get-RiskyServiceAccountsByTrust.ps1 -Collect):

Obs!

Du kan også sende -ScanAll-flagget for å søke på tvers av klareringer som ikke tillater TGT-delegering.

PowerShell-skript

[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 
}

Utdataene fra PowerShell-skriptene lister opp Active Directory-sikkerhetsprinsipper i domener som er konfigurert for en innkommende klarering fra det kjørende domenet som har konfigurert ubegrenset delegering. Utdataene vil ligne på følgende eksempel.

domene sAMAccountName objectClass
partner.fabrikam.com farlig bruker
partner.fabrikam.com labsrv$ datamaskin

Oppdager ubegrenset delegering gjennom Windows-hendelser

Når en Kerberos-billett utstedes, logger en Active Directory-domenekontroller følgende sikkerhetshendelser. Hendelsene inneholder informasjon om måldomenet. Du kan bruke hendelsene til å finne ut om ubegrenset delegering brukes på tvers av innkommende klareringer.

Obs!

Se etter hendelser som inneholder en TargetDomainName-verdi som samsvarer med det klarerte domenenavnet.

Hendelseslogg Hendelseskilde Hendelses-ID Detaljer
Sikkerhet Microsoft-Windows-Security-Auditing 4768 En Kerberos TGT ble utstedt.
Sikkerhet Microsoft-Windows-Security-Auditing 4769 Det ble utstedt en Kerberos-servicebillett.
Sikkerhet Microsoft-Windows-Security-Auditing 4770 En Kerberos-servicebillett ble fornyet.

Feilsøke godkjenningsfeil

Når ubegrenset delegering er deaktivert, kan programmer ha kompatibilitetsproblemer med disse endringene hvis programmene er avhengige av ubegrenset delegering. Disse programmene må konfigureres til å bruke begrenset delegering eller begrenset delegering som er ressursbasert. Hvis du vil ha mer informasjon, kan du se Oversikt over begrenset delegering av Kerberos.

Programmer som er avhengige av rundturgodkjenning på tvers av klareringer, støttes ikke ved bruk av begrenset delegering. En delegering mislykkes for eksempel hvis en bruker i skog A godkjenner til et program i skog B, og programmet i skog B prøver å delegere en billett tilbake til skog A.