Ažuriranja delegiranja TGT-a u dolaznim odnosima pouzdanosti u sustavu Windows Server

Primjenjuje se na
Windows Server 2008 Windows Server 2008 R2 Windows Server 2012 Windows Server 2012 R2 Windows Server 2016 Windows Server 2019, all editions

Sažetak

Pouzdanost šume omogućuje resursima iz šuma za Active Directory pouzdane identitete iz druge šume. To se povjerenje može konfigurirati u oba smjera. Pouzdana šuma izvor je korisničkog identiteta. Pouzdana šuma sadrži resurs čiju autentičnost korisnici provjeravaju. Pouzdana šuma može provjeravati autentičnost korisnika u pouzdanoj šumi bez dopuštanja da se dogodi obrnuto.

Neograničeno delegiranje protokolom Kerberos mehanizam je u kojem korisnik šalje svoje vjerodajnice servisu da bi servisu omogućio pristup resursima u ime korisnika. Da biste omogućili neograničeno delegiranje putem protokola Kerberos, račun servisa u servisu Active Directory mora biti označen kao pouzdan za delegiranje. To stvara problem ako korisnik i servis pripadaju različitim šumama. Servisna šuma odgovorna je za dopuštanje delegiranja. Delegiranje obuhvaća vjerodajnice korisnika iz korisničke šume.

Ako jednoj šumi dopustite donošenje sigurnosnih odluka koje utječu na račune druge šume, krše se sigurnosne granice između šuma. Napadač koji je vlasnik pouzdane šume može iz pouzdane šume zatražiti delegiranje TGT-a za identitet i tako mu omogućiti pristup resursima u pouzdanoj šumi. To se ne odnosi na ograničeno delegiranje sustava Kerberos (KCD).

Windows Server 2012 uveo je provedbu granice šume za potpuno delegiranje protokola Kerberos. Tom je značajkom u pouzdanu domenu dodan pravilnik kojim se onemogućuje neograničeno delegiranje na temelju pouzdanosti. Zadana postavka za tu značajku omogućuje neograničeno delegiranje te nije sigurna.

Ažuriranja koja pružaju jačanje sigurnosti postoje za sljedeće verzije sustava Windows Server:

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

Ta je značajka zajedno s promjenama u jačanju sigurnosti prilagođena sljedećim verzijama:

  • Windows Server 2008 R2
  • Windows Server 2008

Ta sigurnosna ažuriranja sadrže sljedeće promjene:

  • Neograničeno delegiranje protokola Kerberos onemogućeno je po zadanom u novim šumama i novim vanjskim pouzdanim odnosima nakon instalacije ažuriranja od 14. svibnja i novijih ažuriranja.
  • Nekontrolirano delegiranje protokola Kerberos onemogućeno je na šumama (novim i postojećim) i vanjskim pouzdanim sadržajima nakon instalacije ažuriranja od 9. srpnja 2019. i novijih ažuriranja.
  • Administratori mogu omogućiti neograničeno delegiranje protokola Kerberos pomoću modula NETDOM i AD PowerShell iz svibnja ili novijih.

Ažuriranja mogu uzrokovati sukobe u kompatibilnosti za aplikacije koje trenutno zahtijevaju neograničeno delegiranje u pouzdanosti šume ili vanjskim pouzdanim odnosima. To osobito vrijedi za vanjsko povjerenje za koje je oznaka karantene (poznata i kao SID filtriranje) omogućena po zadanom. Konkretno, zahtjevi za provjeru autentičnosti za usluge koje koriste nekontroliranu delegaciju putem navedenih vrsta pouzdanosti neće uspjeti prilikom zatraživanja potvrde za provjeru autentičnosti.

Datume izdanja potražite u vremenskoj crti Ažuriranja.

Zaobilazno rješenje

Da biste omogućili sigurnost podataka i računa u verziji sustava Windows Server koja ima značajku provođenja granice šume za Kerberos Full Delegation, možete blokirati delegiranje TGT-a nakon instalacije ažuriranja za ožujak 2019. u nadolazećoj pouzdanosti tako da postavite zastavicu netdom EnableTGTDelegation na Ne, na sljedeći način:


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

Delegiranje TGT-a blokirano je za nove i postojeće pouzdanosti šume i vanjske pouzdanosti nakon instalacije ažuriranja za svibanj odnosno srpanj 2019.

Da biste ponovno omogućili delegiranje u odnosima pouzdanosti i vratili se na izvornu nesigurnu konfiguraciju dok se ne omogući ograničeno delegiranje ili delegiranje utemeljeno na resursima, postavite zastavicu EnableTGTDelegation na Da.

Naredbeni redak NETDOM za omogućivanje delegiranja TGT-a je sljedeći:


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

Sintaksu NETDOM-a za omogućivanje delegiranja TGT-a možete konceptualno zamisliti na sljedeći način:


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

NETDOM sintaksa za omogućavanje TGT delegiranja fabrakam.com korisnika na contoso.com poslužiteljima jest sljedeća:


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

         Napomene

  • Zastavica EnableTGTDelegation trebala bi biti postavljena u pouzdanoj domeni (fabrikam.com u ovom slučaju) za svaku pouzdanu domenu (kao što je contoso.com). Nakon postavljanja zastavice pouzdana domena više neće dopuštati delegiranje TGT-ova pouzdanoj domeni.
  • Sigurno stanje za EnableTGTDelegation je br.
  • Aplikacije ili servisi koji se oslanjaju na neograničeno delegiranje u šumama neće uspjeti kada se EnableTGTDelegation ručno ili programski postavi na Da. Nakon instalacije ažuriranja od svibnja 2019. i srpnja 2019. funkcija EnableTGTDelegation po zadanom je postavljena na NE za nove i postojeće pouzdanosti. Dodatne informacije o otkrivanju te pogreške potražite u članku Pronalaženje servisa koji se oslanjaju na neograničeno delegiranje. Pogledajte vremensku crtu Ažuriranja da biste vidjeli vremensku crtu promjena koje utječu na način primjene ovog zaobilaznog rješenja.
  • Dodatne informacije o NETDOM-u potražite u dokumentacijiNetdom.exe.
  • Ako morate omogućiti delegiranje TGT-a za pouzdanost, preporučuje se da umanjite taj rizik omogućivanjem programa Windows Defender Credential Guard na klijentskim računalima. Time se sprječava svako neograničeno delegiranje s računala na kojem je omogućen i pokrenut Windows Defender Credential Guard.
  • Ako imate šumu ili vanjsku pouzdanost i bilo koja od njih je konfigurirana kao mjesto u karanteni, delegiranje TGT-a nije moguće omogućiti jer te dvije zastavice imaju suprotnu semantiku. Karantena bit jača sigurnosnu granicu između uključenih domena. Omogućivanjem delegiranja TGT-a brišu se sigurnosne granice između domena jer se pouzdanoj domeni omogućuje pristup vjerodajnicama korisnika iz pouzdane domene. Ne možete imati oba načina.
    Dodajte oznaku karantena:no u sintaksu naredbenog retka NETDOM-a ako je zastavica karantene trenutno omogućena.
  • Ako ste postavku EnableTGTDelegation promijenili u Da, prema potrebi izbrišite potvrde za provjeru autentičnosti protokola Kerberos na izvornim i posrednim pozivateljima. Relevantna potvrda za brisanje je TGT preporuke klijenta preko relevantnog trusta. To može uključivati više uređaja, ovisno o broju prijelaza delegiranja u određenom okruženju.

Dodatne informacije o tom postupku potražite u sljedećem članku o centru Windows IT Pro Center:

Zaštitite izvedene vjerodajnice domene pomoću programa Windows Defender Credential Guard

Ažuriranja vremenske crte

12. ožujka 2019.

Provedba granice šume za potpuno delegiranje putem protokola Kerberos bit će dostupna kao ažuriranje kako bi se ta značajka omogućila na svim podržanim verzijama sustava Windows Server koje su navedene u odjeljku Odnosi se na pri vrhu ovog članka. Preporučujemo da tu značajku postavite za dolazne pouzdanosti šume.

Ažuriranje će dodati značajku nametanja granice šume za potpuno delegiranje Kerberos sljedećim sustavima:

  • Windows Server 2008 R2
  • Windows Server 2008

14. svibnja 2019.

Izdano je ažuriranje kojim se dodaje nova sigurna zadana konfiguracija u novu šumu i vanjske pouzdanosti. Ako zahtijeva delegiranje u svim odnosima pouzdanosti, oznaka EnableTGTDelegation trebala bi biti postavljena na Da prije instalacije ažuriranja od 9. srpnja 2019. Ako ne zahtijeva delegiranje u odnosu na pouzdanost, nemojte postavljati zastavicu EnableTGTDelegation . Zastavica EnableTGTDelegation zanemarit će se do instalacije ažuriranja od 9. srpnja 2019. kako bi se administratorima dalo dovoljno vremena da ponovno omoguće neograničeno delegiranje protokola Kerberos kada je to potrebno.

Kao dio ovog ažuriranja oznaka EnableTGTDelegation bit će prema zadanim postavkama postavljena na Ne za sve novostvorene pouzdanosti. To je suprotno od prethodnog ponašanja. Administratorima preporučujemo da umjesto toga ponovno konfiguriraju zahvaćene poslužitelje tako da upotrebljavaju ograničeno delegiranje koje se temelji na resursima.

Dodatne informacije o otkrivanju problema s kompatibilnošću potražite u članku Pronalaženje servisa koji se oslanjaju na neograničeno delegiranje.

9. srpnja 2019.

Objavljeno je ažuriranje koje nameće novo zadano ponašanje na ulaznoj strani pouzdanosti šume i vanjskih pouzdanosti. Provjerit će se autentičnost zahtjeva za provjeru autentičnosti za usluge koje koriste nekontroliranu delegaciju putem navedenih vrsta pouzdanosti, ali bez delegiranja. Servis neće uspjeti kada pokuša pokrenuti delegirane operacije.

Za ublažavanje situacije pogledajte odjeljak "Zaobilazno rješenje".

Pronalaženje servisa koji se oslanjaju na neograničeno delegiranje

Da biste potražili šume koje imaju dolazne pouzdanosti koje omogućuju delegiranje TGT-a i pronašli upravitelje sigurnosti koji omogućuju neograničeno delegiranje, u datoteci skripte pokrenite sljedeće skripte komponente PowerShell (primjerice, Get-RiskyServiceAccountsByTrust.ps1 -Collect):

Napomena

Možete i proslijediti zastavicu -ScanAll za pretraživanje u odnosu na pouzdanost koja ne dopušta delegiranje TGT-a.

Skripte komponente 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 
}

U izlazu skripti komponente PowerShell navedeni su upravitelji sigurnosti servisa Active Directory u domenama koje su konfigurirane za dolaznu pouzdanost iz izvršne domene za koju je konfigurirano neograničeno delegiranje. Izlaz će izgledati kao u sljedećem primjeru.

domena sAMAccountName objectClass
partner.fabrikam.com opasan korisnik
partner.fabrikam.com labsrv$ računalo

Otkrivanje neograničenog delegiranja kroz događaje sustava Windows

Kada se izda potvrda za provjeru autentičnosti protokola Kerberos, kontrolor domene servisa Active Directory evidentira sljedeće sigurnosne događaje. Događaji sadrže informacije o ciljnoj domeni. Događaje možete koristiti da biste utvrdili koristi li se neograničeno delegiranje u svim dolaznim odnosima pouzdanosti.

Napomena

Provjerite sadrže li događaji vrijednost TargetDomainName koja odgovara nazivu pouzdane domene.

Zapisnik događaja Izvor događaja ID događaja Detalji
Sigurnost Microsoft-Windows-Security-Auditing 4768 Izdan je Kerberos TGT.
Sigurnost Microsoft-Windows-Security-Auditing 4769 Izdana je potvrda o prijavi servisa Kerberos.
Sigurnost Microsoft-Windows-Security-Auditing 4770 Obnovljena je potvrda o prijavi servisa Kerberos.

Otklanjanje poteškoća s provjerom autentičnosti

Kada je neograničeno delegiranje onemogućeno, aplikacije mogu imati problema s kompatibilnošću s tim promjenama ako se oslanjaju na neograničeno delegiranje. Te aplikacije moraju biti konfigurirane tako da koriste ograničeno delegiranje ili ograničeno delegiranje utemeljeno na resursima. Dodatne informacije potražite u članku Pregled ograničenog delegiranja sustava Kerberos.

Korištenje ograničenog delegiranja ne podržava aplikacije koje se oslanjaju na povratnu provjeru autentičnosti u odnosu na pouzdanost. Delegiranje, na primjer, nije uspješno ako korisnik u šumi A provjerava autentičnost aplikacije u šumi B, a aplikacija u šumi B pokušava delegirati potvrdu za provjeru autentičnosti natrag u šumu A.