Kopsavilkums
Meža trasti nodrošina veidu, kā Active Directory meža resursi var uzticēties cita meža identitātēm. Šo uzticēšanos var konfigurēt abos virzienos. Uzticamais mežs ir lietotāja identitātes avots. Uzticamajā mežā ir resurss, kuru autentificē lietotāji. Uzticamais mežs var autentificēt lietotājus uzticamā mežā, nepieļaujot pretējo notikumu.
Neierobežota Kerberos deleģēšana ir mehānisms, kurā lietotājs nosūta savus akreditācijas datus pakalpojumam, lai iespējotu pakalpojumam piekļuvi resursiem lietotāja vārdā. Lai iespējotu neierobežotu Kerberos deleģēšanu, pakalpojuma kontam pakalpojumā Active Directory jābūt atzīmētam kā uzticamam deleģēšanai. Tas rada problēmu, ja lietotājs un pakalpojums pieder dažādiem mežiem. Dienesta mežs ir atbildīgs par deleģēšanas atļaušanu. Deleģēšana ietver lietotāja meža lietotāju akreditācijas datus.
Atļaujot vienam mežam pieņemt drošības lēmumus, kas ietekmē cita meža kontus, tiek pārkāpta drošības robeža starp mežiem. Uzbrucējs, kuram pieder uzticamais mežs, var pieprasīt TGT deleģēšanu identitātei no uzticamā meža, piešķirot tam piekļuvi resursiem uzticamajā mežā. Tas neattiecas uz Kerberos ierobežotu deleģēšanu (KCD).
Windows Server 2012 ieviesa meža robežas ieviešanu Kerberos pilnai deleģēšanai. Šis līdzeklis pievienoja politiku uzticamajam domēnam, lai atspējotu neierobežotu deleģēšanu katram uzticamībai. Šī līdzekļa noklusējuma iestatījums atļauj neierobežotu deleģēšanu un ir nedrošs.
Atjauninājumi, kas nodrošina drošības rūdību, pastāv tālāk norādītajām Windows Server versijām.
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2012
Šis līdzeklis kopā ar drošības stiprināšanas izmaiņām tika iekļauts tālāk norādītajās versijās.
- Windows Server 2008 R2
- Windows Server 2008
Šie drošības atjauninājumi veic tālāk norādītās izmaiņas.
- Pēc 14. maija atjauninājuma un jaunāku atjauninājumu instalēšanas Kerberos neierobežotā deleģēšana pēc noklusējuma ir atspējota jaunos mežos un jaunos ārējos trestos.
- Pēc 2019. gada 9. jūlija atjauninājuma un jaunāku atjauninājumu instalēšanas Kerberos konsolidētā deleģēšana mežos (gan jaunos, gan esošos) un ārējos trestos ir atspējota.
- Administratori var iespējot neierobežotu Kerberos deleģēšanu, izmantojot NETDOM maija vai jaunākas versijas un AD PowerShell moduli.
Atjauninājumi var radīt saderības konfliktus programmām, kurām pašlaik ir nepieciešama neierobežota deleģēšana meža vai ārējos trestos. Tas jo īpaši attiecas uz ārējo uzticamību, kurai karantīnas karodziņš (tiek dēvēts arī par SID filtrēšanu) ir iespējots pēc noklusējuma. Precīzāk — autentifikācijas pieprasījumi pakalpojumiem, kas izmanto neierobežotu deleģēšanu pār uzskaitītajiem trestu veidiem, neizdosies, kad pieprasīsit jaunas biļetes.
Izlaišanas datumus skatiet sadaļā Atjauninājumi laika grafikā.
Risinājums
Lai nodrošinātu datu un konta drošību Windows Server versijā, kurā ir meža robežas ieviešana Kerberos pilnai deleģēšanai, varat bloķēt TGT deleģēšanu pēc 2019. gada marta atjauninājumu instalēšanas ienākošajā trestā, iestatot netdom karodziņu EnableTGTDelegation uz Nē, kā norādīts tālāk:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No
TGT deleģēšana tiek bloķēta jaunos un esošajos meža un ārējos trestos pēc attiecīgi 2019. gada maija un jūlija atjauninājumu instalēšanas.
Lai atkārtoti iespējotu deleģēšanu trastos un atgrieztos pie sākotnējās nedrošās konfigurācijas, līdz var iespējot ierobežotu vai uz resursiem balstītu deleģēšanu, iestatiet karodziņu EnableTGTDelegation uz Jā.
NETDOM komandrinda, lai iespējotu TGT deleģēšanu, ir šāda:
netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes
NETDOM sintaksi TGT deleģēšanas iespējošanai var konceptuāli izdomāt šādi:
netdom trust <domain that you are administering> /domain:<domain whose trust NETDOM is modifying> /EnableTgtDelegation:Yes
NETDOM sintakse, lai iespējotu fabrakam.com lietotāju TGT deleģēšanu contoso.com serveros, ir šāda:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes
Piezīmes
- EnableTGTDelegation karodziņš ir jāiestata uzticamajā domēnā (šajā gadījumā fabrikam.com) katram uzticamajam domēnam (piemēram, contoso.com). Pēc karodziņa iestatīšanas uzticamais domēns vairs neļaus deleģēt TGT uzticamajam domēnam.
- EnableTGTDelegation drošais stāvoklis ir Nē.
- Jebkura lietojumprogramma vai pakalpojums, kura izmanto neierobežotu deleģēšanu mežos, nedarbosies, ja EnableTGTDelegation tiek manuāli vai programmiski iestatīts uz Jā. Pēc 2019. gada maija un jūlija atjauninājumu instalēšanas EnableTGTDelegation jaunajos un esošajos trešanās līdzekļos pēc noklusējuma tiek iestatīts uz NĒ . Papildinformāciju par to, kā noteikt šo kļūmi, skatiet sadaļā Tādu pakalpojumu atrašana, kas balstās uz neierobežotu deleģēšanu. Skatiet Atjauninājumi laika grafiku, lai uzzinātu par izmaiņām, kas ietekmē, kā šo risinājumu var lietot.
- Papildinformāciju par NETDOM skatiet Netdom.exe dokumentācijā.
- Ja ir jāiespējo TGT deleģēšana trestā, ieteicams mazināt šo risku, klientu datoros iespējojot līdzekli Windows Defender Credential Guard. Tas novērš jebkādu neierobežotu deleģēšanu no datora, kurā ir iespējots un darbojas Windows Defender Credential Guard.
- Ja jums ir meža vai ārējais trestam un kāds no tiem ir konfigurēts kā karantīnā, TGT deleģēšanu nevar iespējot, jo abiem karodziņiem ir pretēja semantika. Karantīnas bits nostiprina drošības robežu starp iesaistītajiem domēniem. Iespējojot TGT deleģēšanu, tiek izdzēstas drošības robežas starp domēniem, piešķirot uzticamajam domēnam piekļuvi uzticamo domēnu lietotāju akreditācijas datiem. Nevar būt abējādi.
Pievienojiet karodziņu quarantine:no NETDOM komandrindas sintaksē, ja karantīnas karodziņš pašlaik ir iespējots. - Ja esat mainījis EnableTGTDelegation uz Jā, izdzēsiet Kerberos biļetes sākotnējiem un starpposma zvanītājiem, ja nepieciešams. Attiecīgā biļete, kas jādzēš, ir klienta ieteikums TGT attiecīgajā trastā. Tas var būt saistīts ar vairākām ierīcēm atkarībā no deleģēšanas lēkņu skaita konkrētā vidē.
Papildinformāciju par šo procedūru skatiet šajā Windows IT Pro Center rakstā:
Aizsargājiet atvasinātā domēna akreditācijas datus, izmantojot Windows Defender Credential Guard
Atjauninājumi laika grafiks
2019. gada 12. marts
Meža robežas ieviešana pakalpojumam Kerberos būs pieejama kā atjauninājums, lai iespējotu šo līdzekli visās atbalstītajās Windows Server versijās, kas norādītas sadaļā Attiecas uz šī raksta sākumā. Ieteicams iestatīt šo līdzekli ienākošajiem meža trestiem.
Atjauninājums pievienos meža robežas izpildes līdzekli Kerberos pilnai deleģēšanai tālāk norādītajās sistēmās.
- Windows Server 2008 R2
- Windows Server 2008
2019. gada 14. maijs
Tika izlaists atjauninājums, pievienojot jaunu drošu noklusējuma konfigurāciju jauniem meža un ārējiem trestiem. Ja nepieciešama deleģēšana starp trastiem, EnableTGTDelegācijas karodziņam ir jābūt iestatītam uz Jā pirms 2019. gada 9. jūlija atjauninājuma instalēšanas. Ja deleģēšana starp trastiem nav nepieciešama, karodziņu EnableTGTDelegation nenosaka. EnableTGTDelegācijas karodziņš tiks ignorēts līdz 2019. gada 9. jūlija atjauninājuma instalēšanai, lai administratoriem dotu laiku atkārtoti iespējot neierobežotu Kerberos deleģēšanu, kad tā būs nepieciešama.
Šī atjauninājuma ietvaros karodziņš EnableTGTDelegation pēc noklusējuma tiks iestatīts uz Nē visiem jaunizveidotajiem trestiem. Šī ir pretēja darbība iepriekšējai. Tā vietā administratoriem ieteicams pārkonfigurēt ietekmētos pakalpojumus, lai izmantotu ierobežotu uz resursiem balstītu deleģēšanu.
Papildinformāciju par saderības problēmu noteikšanu skatiet sadaļā Tādu pakalpojumu atrašana, kas balstās uz neierobežotu deleģēšanu.
2019. gada 9. jūlijā
Ir izlaists atjauninājums, kas ievieš jauno noklusējuma darbību meža un ārējo trestu ienākošajā pusē. Autentifikācijas pieprasījumi pakalpojumiem, kas izmanto neierobežotu deleģēšanu pār uzskaitītajiem trestu veidiem, tiks autentificēti, bet bez deleģēšanas. Pakalpojums neizdosies, kad tas mēģinās palaist deleģētās darbības.
Informāciju par risku novēršanu skatiet sadaļā "Risinājums".
Tādu pakalpojumu atrašana, kas balstās uz neierobežotu deleģēšanu
Lai meklētu mežus, kuros ir ienākošie uzticamības, kas atļauj TGT deleģēšanu, un atrastu drošības principus, kas atļauj neierobežotu deleģēšanu, skripta failā izpildiet šādus PowerShell skriptus (piemēram, Get-RiskyServiceAccountsByTrust.ps1 -Collect):
Piezīme
Varat arī nodot karodziņu -ScanAll , lai meklētu trestos, kas neļauj TGT deleģēšanu.
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
}
PowerShell skriptu izvade uzskaita Active Directory drošības principus domēnos, kas ir konfigurēti ienākošai uzticamībai no izpildes domēna, kurā ir konfigurēta neierobežota deleģēšana. Izvade būs līdzīga tālāk redzamajam piemēram.
| domēns | sAMAccountName | objectClass |
|---|---|---|
| partner.fabrikam.com | bīstami | lietotājs |
| partner.fabrikam.com | labsrv$ | dators |
Neierobežotas deleģēšanas noteikšana, izmantojot Windows notikumus
Kad tiek izsniegta Kerberos biļete, Active Directory domēna kontrolleris reģistrē tālāk norādītos drošības notikumus. Notikumi satur informāciju par mērķa domēnu. Varat izmantot notikumus, lai noteiktu, vai neierobežota deleģēšana tiek izmantota ienākošajos trestos.
Piezīme
Pārbaudiet, vai nav notikumu, kas satur TargetDomainName vērtību, kas atbilst uzticamajam domēna nosaukumam.
| Notikumu žurnāls | Notikuma avots | Notikuma ID | Detalizēta informācija |
|---|---|---|---|
| Drošība | Microsoft-Windows-Security-Auditing | 4768 | Tika izsniegts Kerberos TGT. |
| Drošība | Microsoft-Windows-Security-Auditing | 4769 | Tika izsniegta Kerberos servisa biļete. |
| Drošība | Microsoft-Windows-Security-Auditing | 4770 | Kerberos servisa biļete tika atjaunota. |
Autentifikācijas kļūmju problēmu novēršana
Ja neierobežotā deleģēšana ir atspējota, lietojumprogrammām var rasties saderības problēmas ar šīm izmaiņām, ja lietojumprogrammas paļaujas uz neierobežotu deleģēšanu. Šīs lietojumprogrammas ir jākonfigurē, lai izmantotu ierobežotu deleģēšanu vai ierobežotu deleģēšanu, kuras pamatā ir resursi. Papildinformāciju skatiet rakstā Kerberos ierobežotās deleģēšanas pārskats.
Programmas, kas ir atkarīgas no turp un atpakaļ autentifikācijas trestos, netiek atbalstītas, izmantojot ierobežotu deleģēšanu. Piemēram, deleģēšana neizdodas, ja lietotājs mežā A autentificējas programmai mežā B un programma mežā B mēģina deleģēt biļeti atpakaļ mežam A.