Súhrn
Dôvery doménových štruktúr poskytujú zdrojom v doménová štruktúra služby Active Directory spôsob, ako dôverovať identitám z inej doménovej štruktúry. Tento vzťah dôvery možno nakonfigurovať v oboch smeroch. Dôveryhodná doménová štruktúra je zdrojom identity používateľa. Dôveryhodná doménová štruktúra obsahuje zdroj, v ktorom sa používatelia overujú. Dôveryhodná doménová štruktúra môže overiť používateľov v dôveryhodnej doménovej štruktúre bez toho, aby sa dopustil opak.
Neobmedzené delegovanie protokolu Kerberos je mechanizmus, v ktorom používateľ odošle svoje poverenia do služby, aby služba získala prístup k zdrojom v mene používateľa. Ak chcete povoliť neobmedzené delegovanie protokolu Kerberos, konto služby v službe Active Directory musí byť označené ako dôveryhodné na delegovanie. Vzniká tak problém, ak používateľ a služba patria do rôznych doménových štruktúr. Doménová štruktúra služby je zodpovedná za povolenie delegovania. Delegovanie zahŕňa poverenia používateľov z doménovej štruktúry používateľa.
Ak povolíte jednej doménovej štruktúre prijímať rozhodnutia o zabezpečení, ktoré majú vplyv na kontá inej doménovej štruktúry, porušujete ohraničenie zabezpečenia medzi doménovými štruktúrami. Útočník, ktorý vlastní dôveryhodnú doménovú štruktúru, môže požiadať o delegovanie TGT pre identitu z dôveryhodnej doménovej štruktúry, čím získa prístup k zdrojom v dôveryhodnej doménovej štruktúre. Nevzťahuje sa to na obmedzené delegovanie protokolom Kerberos (KCD).
Windows Server 2012 zaviedol vynútenie hranice lesovej štruktúry pre protokol Kerberos Úplné delegovanie. Táto funkcia pridala do dôveryhodnej domény politiku na zakázanie neobmedzeného delegovania pre jednotlivé vzťahy dôveryhodnosti. Predvolené nastavenie tejto funkcie povoľuje neobmedzené delegovanie a je nebezpečné.
Aktualizácie zabezpečenia existujú pre nasledujúce verzie systému Windows Server:
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2012
Táto funkcia bola spolu so zmenami v posilnení zabezpečenia spätne portovaná do nasledujúcich verzií:
- Windows Server 2008 R2
- Windows Server 2008
Tieto aktualizácie zabezpečenia vykonajú nasledujúce zmeny:
- Neobmedzené delegovanie protokolu Kerberos je po nainštalovaní aktualizácie zo 14. mája a neskorších aktualizácií predvolene vypnuté v novej doménovej štruktúre a nových externých dôveryhodných objektoch.
- Neobmedzené delegovanie protokolu Kerberos je po inštalácii aktualizácie z 9. júla 2019 a neskorších aktualizácií vypnuté pre štruktúry (nové aj existujúce) a externé dôveryhodnosti.
- Správcovia môžu povoliť neobmedzené delegovanie protokolu Kerberos pomocou májovej alebo novšej verzie programu NETDOM a modulu AD PowerShell.
Aktualizácie môžu spôsobiť konflikty kompatibility pre aplikácie, ktoré v súčasnosti vyžadujú neobmedzené delegovanie v rámci doménových štruktúr alebo externých vzťahov dôvery. Platí to najmä pre externú dôveryhodnosť, pre ktorú je predvolene povolený príznak karantény (známy aj ako filtrovanie SID). Konkrétne žiadosti o overenie služieb, ktoré používajú neobmedzené delegovanie v rámci uvedených typov dôvery, zlyhajú pri požadovaní nových ticketov.
Dátumy vydaní nájdete na stránke Časová os Aktualizácie.
Alternatívne riešenie
Ak chcete zabezpečiť zabezpečenie údajov a konta vo verzii systému Windows Server, ktorá má funkciu vynútenia obmedzenia doménovej štruktúry pre protokol Kerberos – úplné delegovanie, môžete delegovanie TGT zablokovať po inštalácii aktualizácií z marca 2019 v rámci prichádzajúcej dôveryhodnosti nastavením príznaku netdom EnableTGTDelegation na hodnotu Nie takto:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No
Delegovanie TGT je po nainštalovaní aktualizácií z mája a júla 2019 blokované v nových a existujúcich doménových štruktúrach dôveryhodných štruktúr.
Ak chcete znova povoliť delegovanie v rámci vzťahov dôveryhodnosti a vrátiť sa k pôvodnej nebezpečnej konfigurácii, kým sa nepovolí obmedzenie alebo delegovanie na základe prostriedkov, nastavte príznak EnableTGTDelegation na hodnotu Áno.
Príkazový riadok NETDOM na povolenie delegovania TGT je takýto:
netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes
Syntax NETDOM na povolenie delegovania TGT si môžete predstaviť takto:
netdom trust <domain that you are administering> /domain:<domain whose trust NETDOM is modifying> /EnableTgtDelegation:Yes
Syntax NETDOM na povolenie delegovania fabrakam.com používateľov TGT na contoso.com serveroch je nasledovná:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes
Poznámky
- Príznak EnableTGTDelegation by mal byť nastavený v dôveryhodnej doméne (fabrikam.com v tomto prípade) pre každú dôveryhodnú doménu (ako je napríklad contoso.com). Po nastavení príznaku už dôveryhodná doména nebude umožňovať delegovanie GTT na dôveryhodnú doménu.
- Bezpečný stav pre EnableTGTDelegation je No.
- Každá aplikácia alebo služba, ktorá závisí od neobmedzeného delegovania v rámci doménových štruktúr, zlyhá, keď sa funkcia EnableTGTDelegation manuálne alebo pomocou programovania nastaví na možnosť Áno. EnableTGTDelegation je po inštalácii aktualizácií z mája 2019 a júla 2019 predvolene nastavená na hodnotu NIE pre nové a existujúce trusty. Ďalšie informácie o rozpoznávaní tohto zlyhania nájdete v téme Vyhľadanie služieb, ktoré využívajú neobmedzené delegovanie. Pozrite si časovú os Aktualizácie, kde nájdete časovú os zmien, ktoré ovplyvnia použitie tohto alternatívneho riešenia.
- Ďalšie informácie o technológii NETDOM nájdete v dokumentáciiNetdom.exe.
- Ak je potrebné povoliť delegovanie TGT v rámci dôveryhodnosti, odporúčame zmierniť toto riziko povolením funkcie Windows Defender Credential Guard na klientskych počítačoch. Toto zabraňuje akémukoľvek neobmedzenému delegovaniu z počítača, ktorý má zapnutú a spustenú funkciu Windows Defender Credential Guard.
- Ak máte doménovú štruktúru alebo externý vzťah dôvery a jeden z nich je nakonfigurovaný ako v karanténe, delegovanie TGT nie je možné povoliť, pretože oba príznaky majú opačnú sémantiku. Karanténny bit posilňuje hranicu zabezpečenia medzi zúčastnenými doménami. Povolením delegovania TGT sa vymažú hranice zabezpečenia medzi doménami tým, že dôverujúcej doméne poskytnete prístup k povereniam používateľov z dôveryhodnej domény. Nemôžete mať oboje.
Pridajte príznak karanténa:no do syntaxe príkazového riadka NETDOM, ak je príznak karantény momentálne zapnutý. - Ak ste zmenili EnableTGTDelegation na Áno, podľa potreby odstráňte žiadosti modulu Kerberos pre pôvodných a sprostredkujúcich volajúcich. Relevantným lístokom na odstránenie je TGT odporúčania klienta v rámci príslušného trustu. V závislosti od počtu prechodov na úroveň delegovania v danom prostredí môže ísť o viacero zariadení.
Ďalšie informácie o tomto postupe nájdete v nasledujúcom článku Centra Windows IT Pro:
Ochrana poverení odvodených domén pomocou funkcie Windows Defender Credential Guard
Aktualizácie časovej osi
12. marca 2019
Presadzovanie úplného delegovania hranice lesov pre protokol Kerberos bude k dispozícii ako aktualizácia, ktorá umožní túto funkciu vo všetkých podporovaných verziách Windows Server, ktoré sú uvedené v časti Vzťahuje sa na začiatku tohto článku. Odporúčame, aby ste túto funkciu nastavili na prichádzajúce dôvery v doménovej štruktúre.
Aktualizáciou sa do nasledujúcich systémov pridá funkcia vynútenia hranice lesovej štruktúry pre protokol Kerberos :
- Windows Server 2008 R2
- Windows Server 2008
14. mája 2019
Bola vydaná aktualizácia, ktorou sa do novej doménovej štruktúry a externých vzťahov dôvery pridáva nová predvolená bezpečná konfigurácia. Ak vyžadujete delegovanie v rámci vzťahov dôvery, príznak EnableTGTDelegation by sa mal pred inštaláciou aktualizácie z 9. júla 2019 nastaviť na možnosť Áno . Ak nevyžadujete delegovanie v rámci vzťahov dôvery, nemali by ste nastavovať príznak EnableTGTDelegation . Príznak EnableTGTDelegation sa bude ignorovať, kým sa nenainštaluje aktualizácia z 9. júla 2019, aby mali správcovia čas na opätovné povolenie neobmedzeného delegovania protokolu Kerberos, keď sa to vyžaduje.
V rámci tejto aktualizácie bude príznak EnableTGTDelegation predvolene nastavený na Nie pre všetky novovytvorené trusty. Toto správanie je opakom predchádzajúceho správania. Správcom odporúčame, aby namiesto toho prekonfigurovali príslušné služby na používanie obmedzeného delegovania na báze prostriedkov.
Ďalšie informácie o zisťovaní problémov s kompatibilitou nájdete v téme Vyhľadanie služieb, ktoré využívajú neobmedzené delegovanie.
9. júla 2019
Bola vydaná aktualizácia, ktorá vynucuje nové predvolené správanie na strane vstupnej doménovej štruktúry a externých vzťahov dôvery. Žiadosti o overenie služieb, ktoré používajú neobmedzené delegovanie v rámci uvedených typov dôveryhodnosti, sa overia, ale bez delegovania. Služba zlyhá pri pokuse o spustenie delegovaných operácií.
Postup zmiernenia nájdete v časti Alternatívne riešenie.
Vyhľadanie služieb, ktoré závisia od neobmedzeného delegovania
Ak chcete vyhľadať doménové štruktúry s prichádzajúcimi dôveryhodnosťami, ktoré umožňujú delegovanie TGT, a vyhľadať všetky subjekty zabezpečenia, ktoré umožňujú neobmedzené delegovanie, spustite v súbore skriptu nasledujúce skripty prostredia PowerShell (napríklad Get-RiskyServiceAccountsByTrust.ps1 -Collect):
Poznámka
Môžete tiež použiť príznak -Skenovať všetky na vyhľadávanie naprieč dôveryhodnosťami, ktoré neumožňujú delegovanie TGT.
Skripty prostredia 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
}
Výstup skriptov prostredia PowerShell obsahuje zoznam subjektov zabezpečenia služby Active Directory v doménach, ktoré sú nakonfigurované pre prichádzajúcu dôveryhodnosť zo vykonávajúcej domény, ktorá má nakonfigurované neobmedzené delegovanie. Výstup bude vyzerať podobne ako v nasledujúcom príklade.
| doména | sAMAccountName | objectClass |
|---|---|---|
| partner.fabrikam.com | nebezpečné | používateľ |
| partner.fabrikam.com | labsrv$ | počítač |
Zisťovanie neobmedzeného delegovania prostredníctvom udalostí systému Windows
Po vydaní žiadosti modulu Kerberos radič domény služby Active Directory zaznamená nasledujúce udalosti zabezpečenia. Udalosti obsahujú informácie o cieľovej doméne. Udalosti môžete použiť na určenie, či sa neobmedzené delegovanie používa v rámci prichádzajúcich dôveryhodností.
Poznámka
Skontrolujte udalosti, ktoré obsahujú hodnotu TargetDomainName , ktorá sa zhoduje s názvom dôveryhodnej domény.
| Denník udalostí | Zdroj udalosti | Identifikačné číslo udalosti | Podrobnosti |
|---|---|---|---|
| Zabezpečenie | Kontrola zabezpečenia Microsoft-Windows-Security-Auditing | 4768 | Bol vydaný Kerberos TGT. |
| Zabezpečenie | Kontrola zabezpečenia Microsoft-Windows-Security-Auditing | 4769 | Bol vydaný žiadosť o službu protokolu Kerberos. |
| Zabezpečenie | Kontrola zabezpečenia Microsoft-Windows-Security-Auditing | 4770 | Žiadosť o službu protokolu Kerberos bola obnovená. |
Riešenie problémov so zlyhaním overovania
Keď je neobmedzené delegovanie vypnuté, aplikácie môžu mať problémy s kompatibilitou s týmito zmenami, ak aplikácie využívajú neobmedzené delegovanie. Tieto aplikácie by mali byť nakonfigurované tak, aby používali obmedzené delegovanie alebo obmedzené delegovanie, ktoré je založené na zdrojoch. Ďalšie informácie nájdete v téme Kerberos Constrained Delegation Overview.
Aplikácie, ktoré závisia od spiatočnej autentifikácie naprieč dôveryhodnosťami, nie sú podporované prostredníctvom použitia obmedzeného delegovania. Delegovanie zlyhá napríklad vtedy, ak sa používateľ v doménovej štruktúre A overí v aplikácii v doménovej štruktúre B a aplikácia v doménovej štruktúre B sa pokúša delegovať lístok späť do doménovej štruktúry A.