Overzicht
Forestvertrouwensrelaties bieden resources in een Active Directory-forest een manier om identiteiten uit een ander forest te vertrouwen. Deze vertrouwensrelatie kan in beide richtingen worden geconfigureerd. Het vertrouwde forest is de bron van de gebruikersidentiteit. Het vertrouwende forest bevat de bron waarbij gebruikers zich moeten verifiëren. Het vertrouwde forest kan gebruikers verifiëren bij het vertrouwende forest zonder dat het omgekeerde gebeurt.
Unconstrained Kerberos-delegering is een mechanisme waarmee een gebruiker zijn referenties naar een service verzendt om de service in staat te stellen om namens de gebruiker toegang tot resources te krijgen. Als u onbeperkte Kerberos-delegering wilt inschakelen, moet het account van de service in Active Directory zijn gemarkeerd als vertrouwd voor delegatie. Dit vormt een probleem als de gebruiker en de service deel uitmaken van verschillende forests. De serviceforest is verantwoordelijk voor het toestaan van delegatie. Bij het delegeren worden de referenties van gebruikers uit het forest van de gebruiker meegenomen.
Als u een forest beveiligingsbeslissingen laat nemen die van invloed zijn op de accounts van een ander forest, is dit in strijd met de beveiligingsgrens tussen forests. Een aanvaller die eigenaar is van het vertrouwde forest kan delegatie aanvragen van een TGT voor een identiteit van het vertrouwde forest, waardoor het toegang krijgt tot bronnen in het vertrouwde forest. Dit geldt niet voor Kerberos Constrained delegation (KCD).
In Windows Server 2012 is het afdwingen van de bosgrens geïntroduceerd voor volledige Kerberos-delegering. Met deze functie is een beleid aan het vertrouwde domein toegevoegd om onbeperkte delegering per vertrouwensrelatie uit te schakelen. De standaardinstelling voor deze functie staat onbeperkte delegering toe en is onveilig.
Er bestaan Updates die de beveiliging versterken voor de volgende versies van Windows Server:
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2012
Deze functie is, samen met wijzigingen in de beveiligingsbeveiliging, teruggezet naar de volgende versies:
- Windows Server 2008 R2
- Windows Server 2008
Deze beveiligingsupdates brengen de volgende wijzigingen aan:
- Onbeperkte Kerberos-delegering is standaard uitgeschakeld voor nieuwe forest en nieuwe externe vertrouwensrelaties nadat u de update van 14 mei en latere updates hebt geïnstalleerd.
- Onbeperkte Kerberos-delegering is uitgeschakeld voor forests (zowel nieuwe als bestaande) en externe vertrouwensrelaties nadat u de update van 9 juli 2019 en latere updates hebt geïnstalleerd.
- Beheerders kunnen onbeperkte Kerberos-delegering inschakelen via de PowerShell-module van mei of later van NETDOM en AD PowerShell.
De updates kunnen compatibiliteitsconflicten veroorzaken voor toepassingen die momenteel onbeperkte delegering tussen forest of externe vertrouwensrelaties vereisen. Dit geldt met name voor externe vertrouwensrelaties, waarvoor de quarantainevlag (ook wel SID-filtering genoemd) standaard is ingeschakeld. In het bijzonder zullen verificatieaanvragen voor services die gebruikmaken van onbeperkte delegering via de vermelde vertrouwenstypen, mislukken wanneer u nieuwe tickets aanvraagt.
Zie Tijdlijn voor Updates voor de releasedatums.
Tijdelijke oplossing
Als u gegevens- en accountbeveiliging wilt bieden op een Windows Server-versie met de functie Afdwingen van de forestgrens voor volledige Kerberos-delegering, kunt u TGT-delegatie blokkeren nadat u de updates van maart 2019 hebt geïnstalleerd voor een binnenkomende vertrouwensrelatie door de netdom-vlag EnableTGTDelegatie als volgt in te stellen op Nee:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No
TGT-delegatie wordt geblokkeerd voor nieuwe en bestaande forest en externe vertrouwensrelaties nadat u respectievelijk de updates van mei en juli 2019 hebt geïnstalleerd.
Als u delegatie tussen trusts opnieuw wilt inschakelen en wilt terugkeren naar de oorspronkelijke onveilige configuratie totdat beperkte of resourcegebaseerde delegatie kan worden ingeschakeld, stelt u de vlag EnableTGTDelegatie in op Ja.
De NETDOM-opdrachtregel om TGT-delegatie in te schakelen is als volgt:
netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes
De syntaxis van NETDOM voor het inschakelen van TGT-delegatie kan conceptueel als volgt worden beschouwd:
netdom trust <domain that you are administering> /domain:<domain whose trust NETDOM is modifying> /EnableTgtDelegation:Yes
De syntaxis van NETDOM is als volgt om TGT-delegatie van fabrakam.com gebruikers op contoso.com servers mogelijk te maken:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes
Opmerkingen
- De vlag EnableTGTDelegatie moet worden ingesteld in het vertrouwde domein (fabrikam.com in dit geval) voor elk vertrouwend domein (zoals contoso.com). Nadat de vlag is ingesteld, staat het vertrouwde domein niet langer toe dat TGT's worden gedelegeerd aan het vertrouwde domein.
- De beveiligde status voor EnableTGTDelegation is No.
- Elke toepassing of service die afhankelijk is van onbeperkte delegering tussen forests mislukt wanneer EnableTGTDelegatie handmatig of programmatisch wordt ingesteld op Ja. EnableTGTDelegation wordt standaard ingesteld op NEE voor nieuwe en bestaande vertrouwensrelaties nadat u de updates van mei 2019 en juli 2019 hebt geïnstalleerd. Zie Services zoeken die vertrouwen op onbeperkte delegering voor meer informatie over het detecteren van deze fout. Zie de tijdlijn Updates voor een tijdlijn van wijzigingen die van invloed zijn op de manier waarop deze tijdelijke oplossing kan worden toegepast.
- Zie de documentatie van deNetdom.exe voor meer informatie over NETDOM.
- Als u TGT-delegatie moet inschakelen voor een vertrouwensrelatie, is het raadzaam om dat risico te beperken door Windows Defender Credential Guard op clientcomputers in te schakelen. Hiermee wordt elke vorm van onbeperkte delegering voorkomen vanaf een computer waarop Windows Defender Credential Guard is ingeschakeld.
- Als u een forest of externe vertrouwensrelatie hebt en beide zijn geconfigureerd als in quarantaine geplaatst, kan TGT-delegatie niet worden ingeschakeld omdat de twee vlaggen tegengestelde semantiek hebben. De quarantainebit versterkt de beveiligingsgrens tussen deelnemende domeinen. Als u TGT-delegering inschakelt, worden de beveiligingsgrenzen tussen domeinen gewist door het vertrouwde domein toegang te geven tot de referenties van gebruikers uit het vertrouwde domein. Je kunt het niet van twee kanten hebben.
Voeg de quarantine :no flag toe aan de opdrachtregelsyntaxis NETDOM als de quarantine flag momenteel is ingeschakeld. - Als u EnableTGTDelegatie hebt gewijzigd in Ja, verwijdert u Kerberos-tickets voor oorspronkelijke en gevorderde bellers, indien nodig. Het relevante ticket dat moet worden verwijderd, is de verwijzings-TGT van de klant in de relevante trust. Hierbij kan meer dan één apparaat betrokken zijn, afhankelijk van het aantal delegatiehops in een bepaalde omgeving.
Zie het volgende artikel van Windows IT Pro Center voor meer informatie over deze procedure:
Afgeleide domeinreferenties beveiligen met Windows Defender Credential Guard
tijdlijn voor Updates
12 maart 2019
Het afdwingen van de bosgrens voor volledige Kerberos-delegering is beschikbaar als een update om deze functie in te schakelen op alle ondersteunde versies van Windows Server die worden vermeld in de sectie Van toepassing op boven aan dit artikel. Het is raadzaam om de functie in te stellen op binnenkomende forest vertrouwensrelaties.
De update voegt de functie Afdwingen voor volledige delegering van bosgrenzen voor Kerberos toe aan de volgende systemen:
- Windows Server 2008 R2
- Windows Server 2008
14 mei 2019
Er is een update uitgebracht met een nieuwe veilige standaardconfiguratie voor nieuwe forest en externe vertrouwensrelaties. Als u delegatie tussen vertrouwensrelaties vereist, moet de vlag EnableTGTDelegatie worden ingesteld op Ja voordat de update van 9 juli 2019 is geïnstalleerd. Als u geen delegatie tussen vertrouwensrelaties vereist, moet u de vlag EnableTGTDelegatie niet instellen. De vlag EnableTGTDelegatie wordt genegeerd totdat de update van 9 juli 2019 is geïnstalleerd om beheerders de tijd te geven om onbeperkte Kerberos-delegatie opnieuw in te schakelen wanneer dat nodig is.
Als onderdeel van deze update wordt de vlag EnableTGTDelegatie standaard ingesteld op Nee voor alle nieuw gemaakte vertrouwensrelaties. Dit is het tegenovergestelde van het vorige gedrag. We raden beheerders aan om in plaats daarvan de betrokken services opnieuw te configureren zodat beperkte delegering op basis van bronnen wordt gebruikt.
Zie Services zoeken die afhankelijk zijn van onbeperkte delegering voor meer informatie over het detecteren van compatibiliteitsproblemen.
9 juli 2019
Er is een update uitgebracht die het nieuwe standaardgedrag aan de binnenkomende kant van forest en externe vertrouwensrelaties afdwingt. Verificatieaanvragen voor services die gebruikmaken van onbeperkte delegering via de vermelde vertrouwenstypen, worden geverifieerd, maar zonder delegatie. De service mislukt wanneer wordt geprobeerd gedelegeerde bewerkingen uit te voeren.
Zie de sectie 'Tijdelijke oplossing' voor meer informatie.
Services zoeken die vertrouwen op onbeperkte delegering
Als u wilt zoeken naar forests met binnenkomende vertrouwensrelaties die TGT-delegatie toestaan, en als u beveiligingsprincipals wilt zoeken die onbeperkte delegering toestaan, voert u de volgende PowerShell-scripts uit in een scriptbestand (bijvoorbeeld Get-RiskyServiceAccountsByTrust.ps1 -Collect):
Opmerking
U kunt ook de vlag -ScanAll doorgeven om te zoeken in vertrouwensrelaties die TGT-delegatie niet toestaan.
PowerShell-scripts
[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
}
De uitvoer van de PowerShell-scripts bevat Active Directory-beveiligingsprincipals in domeinen die zijn geconfigureerd voor een binnenkomende vertrouwensrelatie van het uitvoerende domein waarvoor onbeperkte delegering is geconfigureerd. De uitvoer ziet eruit zoals in het volgende voorbeeld.
| domein | sAMAccountName | objectClass |
|---|---|---|
| partner.fabrikam.com | gevaarlijk | gebruiker |
| partner.fabrikam.com | labsrv$ | computer |
Onbeperkte delegering detecteren via Windows-gebeurtenissen
Wanneer een Kerberos-ticket wordt uitgegeven, registreert een Active Directory-domeincontroller de volgende beveiligingsgebeurtenissen. De gebeurtenissen bevatten informatie over het doeldomein. U kunt de gebeurtenissen gebruiken om te bepalen of onbeperkte delegering wordt gebruikt in binnenkomende vertrouwensrelaties.
Opmerking
Controleer op gebeurtenissen die een TargetDomainName-waarde bevatten die overeenkomt met de vertrouwde domeinnaam.
| Gebeurtenislogboek | Gebeurtenisbron | Gebeurtenis-id | Details |
|---|---|---|---|
| Beveiliging | Microsoft-Windows-Security-Auditing | 4768 | Er werd een Kerberos TGT uitgegeven. |
| Beveiliging | Microsoft-Windows-Security-Auditing | 4769 | Er is een Kerberos-serviceticket uitgegeven. |
| Beveiliging | Microsoft-Windows-Security-Auditing | 4770 | Een Kerberos-serviceticket is verlengd. |
Verificatiefouten oplossen
Wanneer onbeperkte delegering is uitgeschakeld, kunnen toepassingen compatibiliteitsproblemen met deze wijzigingen hebben als de toepassingen vertrouwen op onbeperkte delegering. Deze toepassingen moeten worden geconfigureerd voor het gebruik van beperkte delegering of beperkte delegering op basis van resources. Zie Overzicht van Kerberos Constrained Delegation (Overzicht van Kerberos Constrained Delegation) voor meer informatie.
Toepassingen die afhankelijk zijn van verificatie heen en weer in verschillende vertrouwensrelaties, worden niet ondersteund door gebruik te maken van beperkte delegering. Een delegatie mislukt bijvoorbeeld als een gebruiker in forest A zich authenticeert bij een toepassing in forest B en de applicatie in forest B probeert een ticket terug te delegeren naar forest A.