Povzetek
Zaupanja gozda omogočajo virom v gozdu Active Directory, da zaupajo identitetam iz drugega gozda. To zaupanje je mogoče konfigurirati v obe smeri. Zaupanja vreden gozd je vir identitete uporabnika. Zaupanja vredni gozd vsebuje vir, s katerim uporabniki preverijo pristnost. Zaupanja vreden gozd lahko preveri pristnost uporabnikov v zaupanja vrednem gozdu, ne da bi dovolil obratno.
Neomejeno delegiranje 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 delegiranje protokola Kerberos, mora biti račun storitve v imeniku Active Directory označen kot zaupanja vreden za prenos. To ustvarja težavo, če uporabnik in storitev pripadata različnim gozdom. Storitveni gozd je odgovoren za omogočanje delegiranja. Prenos vključuje poverilnice uporabnikov iz uporabnikovega gozda.
Č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 delegiranje TGT za identiteto iz zaupanja vrednega gozda, kar mu omogoči dostop do virov v zaupanja vrednem gozdu. To ne velja za omejeno delegiranje protokola Kerberos (KCD).
Windows Server 2012 je uvedel uveljavljanje za mejo gozda za popolno delegiranje protokola Kerberos. Ta funkcija je zaupanja vredni domeni dodala pravilnik za onemogočanje neomejenega delegiranja na podlagi zaupanja. Privzeta nastavitev za to funkcijo omogoča neomejeno delegiranje in ni varna.
Posodobitve, ki zagotavljajo zaščito varnosti, so na voljo za te 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 v zaščiti varnosti prenesena na naslednje različice:
- Windows Server 2008 R2
- Windows Server 2008
Te varnostne posodobitve uvedejo te spremembe:
- Neomejeno delegiranje protokola Kerberos je privzeto onemogočeno v novem gozdu in novih zunanjih zaupanjih po namestitvi posodobitve 14. maja in novejših posodobitev.
- Neomejeno delegiranje protokola Kerberos je onemogočeno v gozdovih (novih in obstoječih) in zunanjih zaupanjih, ko namestite posodobitev 9. julija 2019 in novejše posodobitve.
- Skrbniki lahko omogočijo neomejeno delegiranje protokola Kerberos z uporabo majske ali novejše različice modula NETDOM in AD PowerShell.
Posodobitve lahko povzročijo spore združljivosti za programe, ki trenutno zahtevajo neomejeno delegiranje v gozdu ali zunanjih zaupanjih. To še posebej velja za zunanje zaupanje, za katerega je zastavica karantene (znana tudi kot filtriranje SID) privzeto omogočena. Natančneje, zahteve za preverjanje pristnosti za storitve, ki uporabljajo neomejeno delegiranje nad navedenimi vrstami zaupanja, ne bodo uspele, ko zahtevate nove vstopnice.
Za datume izdaje glejte Časovnica Posodobitve.
Rešitev
Če želite zagotoviti varnost podatkov in računa v različici sistema Windows Server, ki ima funkcijo Uveljavljanje za mejo gozda za popolno pooblastilo protokola Kerberos, lahko po namestitvi posodobitev iz marca 2019 v dohodnem zaupanju blokirate prenos TGT tako, da zastavico netdom EnableTGTDelegation nastavite na Ne, kot sledi:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No
Pooblastilo TGT je blokirano za nove in obstoječe gozdove in zunanje zaupanja, ko namestite posodobitve za maj oziroma julij 2019.
Če želite znova omogočiti delegiranje med zaupanji in se vrniti na prvotno nevarno konfiguracijo, dokler ni mogoče omogočiti omejenega prenosa ali pooblastila na podlagi virov, nastavite zastavico EnableTGTDelegation na Da.
Ukazna vrstica NETDOM za omogočanje prenosa TGT je naslednja:
netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes
Sintakso NETDOM za omogočanje delegiranja TGT si lahko konceptualno zamislite tako:
netdom trust <domain that you are administering> /domain:<domain whose trust NETDOM is modifying> /EnableTgtDelegation:Yes
Sintaksa NETDOM, ki omogoča prenos TGT fabrakam.com uporabnikov na contoso.com strežnikih, je naslednja:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes
Opombe
- Zastavica EnableTGTDelegation mora biti nastavljena v zaupanja vredni domeni (fabrikam.com v tem primeru) za vsako zaupanja vredno domeno (na primer contoso.com). Ko je zastavica nastavljena, zaupanja vredna domena ne bo več dovoljevala delegiranja TGT-jev na zaupanja vredno domeno.
- Varno stanje za EnableTGTDelegation je št.
- Vsaka aplikacija ali storitev, ki se zanaša na neomejeno delegiranje v gozdovih, ne bo uspela, če je možnost EnableTGTDelegation ročno ali programsko nastavljena na Da. EnableTGTDelegation privzeto nastavi NE za nove in obstoječe zaupanja po namestitvi posodobitev iz maja 2019 in julija 2019. Če želite več informacij o zaznavanju te napake, glejte Iskanje storitev, ki se zanašajo na neomejeno delegiranje. Glejte Časovnica Posodobitve za časovnico sprememb, ki vplivajo na uporabo te rešitve.
- Če želite več informacij o storitvi NETDOM, glejte dokumentacijoNetdom.exe.
- Če morate omogočiti prenos TGT za zaupanje, priporočamo, da to tveganje zmanjšate tako, da v odjemalskih računalnikih omogočite zaščito poverilnic za Windows Defender. S tem preprečite vse neomejene prenose iz računalnika, v katerem je omogočena in se izvaja funkcija Windows Defender Credential Guard.
- Če imate gozd ali zunanje zaupanje in sta konfigurirani kot v karanteni, pooblastila TGT ni mogoče omogočiti, ker imata obe zastavici nasprotno semantiko. Karantenski bit krepi varnostno mejo med sodelujočimi domenami. Če omogočite prenos 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 v Da, po potrebi izbrišite vstopnice Kerberos za izvorne in vmesne klicatelje. Ustrezna vozovnica za izbris je strankina napotitev TGT prek ustreznega zaupanja. To lahko vključuje več kot eno napravo, odvisno od števila skokov delegiranja v določenem okolju.
Če želite več informacij o tem postopku, glejte ta članek v središču Windows IT Pro Center:
Zaščita izpeljanih poverilnic domene s funkcijo Windows Defender Credential Guard
Posodobitve časovnice
12. marec 2019
Uveljavljanje meje gozda za popolno delegiranje protokola Kerberos bo na voljo kot posodobitev, ki omogoča to funkcijo v vseh podprtih različicah sistema Windows Server, ki so navedene v razdelku Velja za na vrhu tega članka. Priporočamo, da funkcijo nastavite za dohodna zaupanja gozda.
Posodobitev bo dodala funkcijo Uveljavljanje za mejo gozda za popolno delegiranje protokola Kerberos v te sisteme:
- Windows Server 2008 R2
- Windows Server 2008
14. maj 2019
Izdana je bila posodobitev, ki je dodala novo varno privzeto konfiguracijo v nove gozdove in zunanje zaupanja. Če zahtevate prenos med zaupanji, mora biti zastavica »EnableTGTDelegation « pred namestitvijo posodobitve 9. julija 2019 nastavljena na Da . Če ne zahtevate delegiranja med zaupanji, ne nastavite zastavice »EnableTGTDelegation «. Zastavica »EnableTGTDelegation « bo prezrta, dokler ne bo nameščena posodobitev 9. julija 2019, da bodo skrbniki imeli čas, da znova omogočijo neomejeno delegiranje protokola Kerberos, ko je to potrebno.
Kot del te posodobitve bo zastavica EnableTGTDelegation privzeto nastavljena na Ne za vse novo ustvarjene zaupanja. To je nasprotno od prejšnjega vedenja. Priporočamo, da skrbniki namesto tega znova konfigurirajo prizadete storitve, da bodo uporabljale omejeno delegiranje na podlagi virov.
Če želite več informacij o zaznavanju težav z združljivostjo, glejte Iskanje storitev, ki se zanašajo na neomejeno delegiranje.
9. julij 2019
Izdana je bila posodobitev, ki uveljavlja novo privzeto vedenje na vhodni strani gozda in zunanjih zaupanj. Zahteve za preverjanje pristnosti za storitve, ki uporabljajo neomejeno delegiranje nad navedenimi vrstami zaupanja, bodo preverjene, vendar brez prenosa. Storitev ne bo uspela, ko bo poskušala zagnati delegirane operacije.
Za ublažitev glejte razdelek »Rešitev »Rešitev«.
Iskanje storitev, ki se zanašajo na neomejeno delegiranje
Če želite poiskati gozdove, ki imajo dohodna zaupanja, ki omogočajo prenos TGT, in poiskati varnostne principe, ki omogočajo neomejeno delegiranje, zaženite te skripte PowerShell v datoteki skripta (na primer Get-RiskyServiceAccountsByTrust.ps1 -Collect):
Opomba
Prav tako lahko prenesete zastavico -ScanAll za iskanje po zaupanjih, ki ne dovoljujejo prenosa TGT.
PowerShell skripti
[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 PowerShell navaja varnostne principe imenika Active Directory v domenah, ki so konfigurirane za dohodno zaupanje iz izvajalne domene, ki ima konfigurirano neomejeno delegiranje. Izhod bo podoben temu primeru.
| domena | sAMAccountName | objectClass |
|---|---|---|
| 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.