Posodobitve za posredovanje TGT v dohodnih zaupanjih v Windows Server

Velja za
Windows Server 2008 Windows Server 2008 R2 Windows Server 2012 Windows Server 2012 R2 Windows Server 2016 Windows Server 2019, all editions

Povzetek

Zaupanja gozdov virom v gozd Active Directory omogočajo, da zaupajo identitetam iz drugega gozda. To zaupanje je mogoče konfigurirati v obeh smereh. Zaupanja vreden gozd je vir identitete uporabnika. Gozd zaupanja vsebuje vir, za katerega uporabniki izvajajo preverjanje pristnosti. Zaupanja vreden gozd lahko preveri pristnost uporabnikov za gozd zaupanja, ne da bi omogočil obratno dejanje.

Neomejeno posredovanje protokola Kerberos je mehanizem, s katerim uporabnik pošlje svoje poverilnice storitvi, da storitvi omogoči dostop do virov v imenu uporabnika. Če želite omogočiti neomejeno posredovanje protokola Kerberos, mora biti račun storitve v imeniku Active Directory označen kot zaupanja vreden za posredovanje. To ustvari težavo, če uporabnik in storitev pripadata različnim gozdovom. Gozd storitve je odgovoren za omogočanje pooblastitve. Pooblastitev vključuje poverilnice uporabnikov iz gozda uporabnika.

Če enemu gozdu dovolite, da sprejema varnostne odločitve, ki vplivajo na račune drugega gozda, kršite varnostno mejo med gozdovi. Napadalec, ki je lastnik zaupanja vrednega gozda, lahko zahteva pooblastitev TGT za identiteto iz zaupanja vrednega gozda in mu tako omogoči dostop do virov v zaupanja vrednem gozdu. To ne velja za omejeno posredovanje Kerberos (KCD).

V sistemu Windows Server 2012 je bilo uvedeno uveljavljanje omejitve gozda za polno pooblastitev protokola Kerberos. S to funkcijo je zaupanja vredni domeni dodan pravilnik za onemogočanje neomejenega posredovanja na podlagi zaupanja. Privzeta nastavitev za to funkcijo omogoča neomejeno posredovanje in ni varna.

Posodobitve, ki omogočajo utrjevanje varnosti, obstajajo za naslednje različice sistema Windows Server:

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

Ta funkcija je bila skupaj s spremembami utrjevanja varnosti podprta v teh različicah:

  • Windows Server 2008 R2
  • Windows Server 2008

Te varnostne posodobitve uvajajo naslednje spremembe:

  • Neomejeno posredovanje protokola Kerberos je po namestitvi posodobitve iz 14. maja in novejših posodobitev privzeto onemogočeno v novem gozdu in novih zunanjih zaupanjih.
  • Neomejeno posredovanje protokola Kerberos je onemogočeno za gozdove (nove in obstoječe) in zunanje zaupanja po namestitvi posodobitve z dne 9. julija 2019 in novejših posodobitev.
  • Skrbniki lahko omogočijo neomejeno posredovanje protokola Kerberos z majsko ali novejšo različico modula NETDOM in AD PowerShell.

Posodobitve lahko povzročijo spore z združljivostjo pri aplikacijah, ki trenutno zahtevajo neomejeno posredovanje v odnosu do zaupanja med gozdovi ali zunanjimi zaupanji. To še posebej velja za zunanje zaupanje, za katerega je zastavica karantene (imenovana tudi filtriranje SID) privzeto omogočena. Natančneje, zahteve za preverjanje pristnosti za storitve, ki uporabljajo neomejeno posredovanje v odnosu do navedenih vrst zaupanja, ne bodo uspele, ko boste zahtevali nove vstopnice.

Če si želite ogledati datume izdaje, glejte časovnico Posodobitve.

Rešitev

Če želite zagotoviti varnost podatkov in računov v različici sistema Windows Server, ki ima funkcijo uveljavitve omejitve gozda za polno pooblastilo Kerberos, lahko pooblastitev TGT blokirate po namestitvi posodobitev iz marca 2019 v prihajajočem zaupanju tako, da zastavico netdom EnableTGTDelegation nastavite na »Ne«, in sicer tako:


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

Pooblastilo TGT je blokirano za nova in obstoječa zaupanja med gozdovi in zunanjega zaupanja po namestitvi posodobitev iz maja oziroma julija 2019.

Če želite znova omogočiti posredovanje v zaupanja in se vrniti na izvirno nevarno konfiguracijo, dokler ne bo omogočeno omejeno posredovanje ali posredovanje, ki temelji na virih, nastavite zastavico EnableTGTDelegation na »Da«.

Ukazna vrstica NETDOM za omogočanje pooblastila TGT je takšna:


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

Sintakso omrežja NETDOM za omogočanje pooblastila TGT si lahko predstavljate tako:


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

Sintaksa NETDOM, ki omogoča pooblastitev TGT za fabrakam.com uporabnikov v contoso.com strežnikih, je videti tako:


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

         Opombe

  • Zastavico EnableTGTDelegation je treba nastaviti v zaupanja vredni domeni (fabrikam.com v tem primeru) za vsako zaupanja vredno domeno (kot je contoso.com). Ko je zastavica nastavljena, zaupanja vredna domena ne bo več dopuščala dodeljevanja TGT-jev v zaupanja vredno domeno.
  • Varno stanje za EnableTGTDelegation je »Ne«.
  • Vsaka aplikacija ali storitev, ki temelji na neomejenem posredovanju v gozdovih, ne bo uspela, če je parameter EnableTGTDelegation ročno ali programsko nastavljen na »Da«. Ko namestite posodobitve iz maja 2019 in julija 2019, je funkcija EnableTGTDelegation privzeto NO za nova in obstoječa zaupanja. Če želite več informacij o zaznavanju te napake, si oglejte razdelek »Iskanje storitev, ki so odvisne od neomejenega posredovanja«. Oglejte si časovnico Posodobitve za časovnico sprememb, ki vplivajo na to, kako je mogoče uporabiti to rešitev.
  • Če želite več informacij o storitvi NETDOM, glejte dokumentacijoNetdom.exe.
  • Če morate za zaupanje omogočiti posredovanje TGT, priporočamo, da zmanjšate to tveganje tako, da v odjemalskih računalnikih omogočite Windows Defender Credential Guard. To preprečuje neomejeno posredovanje iz računalnika, v katerem je omogočena in se izvaja funkcija Windows Defender Credential Guard.
  • Če imate zaupanje med gozdovi ali zunanje nastavitve in sta oba konfigurirana kot v karanteni, pooblastila TGT ni mogoče omogočiti, ker imata zastavici nasprotno semantiko. Bit karantene krepi varnostno mejo med sodelujočimi domenami. Če omogočite posredovanje TGT, izbrišete varnostne meje med domenami tako, da zaupanja vredni domeni omogočite dostop do poverilnic uporabnikov iz zaupanja vredne domene. Ne morete imeti obojega.
    Dodajte zastavico quarantine:no v sintakso ukazne vrstice NETDOM, če je zastavica karantene trenutno omogočena.
  • Če ste spremenili EnableTGTDelegation na »Da«, po potrebi izbrišite naročila Kerberos za začetne in vmesne klicatelje. Ustrezna vstopnica, ki jo je treba izbrisati, je napotitev odjemalca TGT v ustreznem zaupanju. To lahko vključuje več kot eno napravo, odvisno od števila skokov pooblastitve v danem okolju.

Če želite več informacij o tem postopku, glejte ta članek središča Windows IT Pro Center:

Zaščita poverilnic izpeljanih domen s funkcijo Windows Defender Credential Guard

Posodobitve časovnice

12. marec 2019

Uveljavljanje omejitve gozda za polno posredovanje protokola Kerberos bo na voljo kot posodobitev, ki omogoča, da bo to funkcijo mogoče omogočiti v vseh podprtih različicah sistema Windows Server, ki so navedene v razdelku Velja za na vrhu tega članka. Priporočamo, da nastavite funkcijo za dohodna zaupanja med gozdovi.

S posodobitvijo boste funkcijo polnega pooblastitve dodali funkcijo polnega pooblastitve omejitve gozda za Kerberos v te sisteme:

  • Windows Server 2008 R2
  • Windows Server 2008

14. maj 2019

Izdana je bila posodobitev, ki dodaja novo varno privzeto konfiguracijo novemu gozdu in zunanjim zaupanjem. Če zahtevate pooblastitev v več zaupanja, mora biti zastavica EnableTGTDelegation nastavljena na »Da« , preden se namesti posodobitev z dne 9. julija 2019. Če ne zahtevate pooblastitve v zaupanja, ne nastavite zastavice EnableTGTDelegation . Zastavica EnableTGTDelegation bo prezrta, dokler ne bo nameščena posodobitev z dne 9. julija 2019, kar bo skrbnikom dalo dovolj časa, da znova omogoči neomejeno posredovanje protokola Kerberos, ko bo to potrebno.

Kot del te posodobitve bo zastavica EnableTGTDelegation privzeto nastavljena na »Ne« za vsa novo ustvarjena zaupanja. To je ravno nasprotno od prejšnjega vedenja. Priporočamo, da skrbniki namesto tega znova konfigurirajo prizadete storitve tako, da bodo uporabljale omejeno posredovanje, ki temelji na virih.

Če želite več informacij o odkrivanju težav z združljivostjo, glejte Iskanje storitev, ki so odvisne od neomejenega posredovanja.

9. julij 2019

Izdana je bila posodobitev, ki vsili novo privzeto vedenje na dohodni strani gozda in zunanjih zaupanj. Pri zahtevah za preverjanje pristnosti za storitve, ki uporabljajo neomejeno posredovanje v odnosu do navedenih vrst zaupanja, bo preverjena pristnost, vendar brez pooblastitve. Storitev ne bo uspela, ko bo poskušala zagnati delegirane operacije.

Če želite ublažiti posledice, glejte razdelek »Nadomestna rešitev«.

Iskanje storitev, ki so odvisne od neomejenega posredovanja

Če želite poiskati gozdove z dohodnimi zaupanji, ki dovoljujejo prenos TGT, in poiskati morebitna varnostna sredstva, ki omogočajo neomejeno posredovanje, zaženite te skripte PowerShell v datoteki skripta (na primer Get-RiskyServiceAccountsByTrust.ps1 -Collect):

Opomba

Zastavico »Optično preberi« lahko posredujete tudi za iskanje v zaupanja, ki ne dovoljujejo posredovanja TGT.

Skripti PowerShell

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

Izhod skriptov ogrodja PowerShell navaja varnostnega upravnika varnosti imenika Active Directory v domenah, ki so konfigurirane za dohodno zaupanje iz domene za izvajanje, ki ima konfigurirano neomejeno posredovanje. Rezultat bo podoben spodnjemu primeru.

domena sAMAccountName Razred predmeta
partner.fabrikam.com nevarno uporabnik
partner.fabrikam.com labsrv$ računalnik

Zaznavanje neomejenega posredovanja prek dogodkov sistema Windows

Ko je izdano naročilo Kerberos, krmilnik domene imenika Active Directory zabeleži te varnostne dogodke. Dogodki vsebujejo informacije o ciljni domeni. Z dogodki lahko določite, ali je neomejeno posredovanje uporabljeno v dohodnih zaupanjih.

Opomba

Poiščite dogodke, ki vsebujejo vrednost TargetDomainName , ki se ujema z zaupanja vrednim imenom domene.

Dnevnik dogodkov Vir dogodka ID dogodka Podrobnosti
Varnost Microsoft-Windows-Security-Auditing 4768 Izdan je bil Kerberos TGT.
Varnost Microsoft-Windows-Security-Auditing 4769 Izdana je bila vstopnica za storitev Kerberos.
Varnost Microsoft-Windows-Security-Auditing 4770 Vstopnica za storitev Kerberos je bila obnovljena.

Odpravljanje težav z napakami pri preverjanju pristnosti

Če je neomejeno posredovanje onemogočeno, lahko pride do težav z združljivostjo aplikacij s temi spremembami, če so pri njih odvisni od neomejenega posredovanja. Te aplikacije je treba konfigurirati tako, da uporabljajo omejeno posredovanje ali omejeno posredovanje, ki temelji na virih. Če želite več informacij, glejte Pregled omejenega posredovanja Kerberos.

Aplikacije, ki temeljijo na povratnem preverjanju pristnosti v zaupanjah, niso podprte z uporabo omejenega posredovanja. Pooblastitev na primer ne uspe, če uporabnik v gozdu A izvede preverjanje pristnosti za program v gozdu B in če aplikacija v gozdu B poskuša dodeliti vstopnico nazaj v gozd A.