Zusammenfassung
Gesamtstruktur-Vertrauensstellungen stellen eine Methode für Ressourcen in einer Active Directory-Gesamtstruktur dar, um Identitäten aus einer anderen Gesamtstruktur zu vertrauen. Diese Vertrauensstellung kann bidirektional konfiguriert werden. Die vertrauenswürdige Gesamtstruktur ist die Quelle der Benutzeridentität. Die vertrauende Gesamtstruktur enthält die Ressource, für die sich Benutzer authentifizieren. Die vertrauenswürdige Gesamtstruktur kann Benutzer für die vertrauende Gesamtstruktur authentifizieren, ohne dies in die andere Richtung zuzulassen.
Bei der uneingeschränkten Kerberos-Delegierung sendet ein Benutzer seine Anmeldeinformationen an einen Dienst, damit der Dienst im Auftrag des Benutzers auf Ressourcen zugreifen kann. Zum Aktivieren der uneingeschränkten Kerberos-Delegierung muss das Konto des Diensts in Active Directory als für Delegierungszwecke vertraut gekennzeichnet sein. Dadurch ergibt sich ein Problem, wenn der Benutzer und der Dienst unterschiedlichen Gesamtstrukturen angehören. Die Dienstgesamtstruktur ist dafür zuständig, die Delegierung zu erlauben. Die Delegierung beinhaltet die Anmeldeinformationen von Benutzern aus der Gesamtstruktur des Benutzers.
Wenn eine Gesamtstruktur Sicherheitsentscheidungen treffen darf, die die Konten einer anderen Gesamtstruktur beeinträchtigen, dann verstößt dies gegen die Sicherheitsbegrenzung zwischen Gesamtstrukturen. Ein Angreifer, der der Besitzer der vertrauenden Gesamtstruktur ist, kann die TGT-Delegierung für eine Identität von der vertrauenswürdigen Gesamtstruktur anfordern. Dadurch erhält er Zugriff auf Ressourcen in der vertrauenswürdigen Gesamtstruktur. Die eingeschränkte Kerberos-Delegierung (Kerberos Constrained Delegation, KCD) ist nicht davon betroffen.
In Windows Server 2012 wurde das Feature zum Erzwingen der Gesamtstrukturgrenzen für die vollständige Kerberos-Delegierung eingeführt. Mit diesem Feature wurde der vertrauenswürdigen Domäne eine Richtlinie hinzugefügt, um die uneingeschränkte Delegierung auf Vertrauenstellungsbasis zu deaktivieren. Mit der unsicheren Standardeinstellung für dieses Feature ist die uneingeschränkte Delegierung zulässig.
Updates zur Optimierung der Sicherheit gibt es für die folgenden Versionen von Windows Server:
-
Windows Server 2019
-
Windows Server 2016
-
Windows Server 2012 R2
-
Windows Server 2012
Dieses Feature und Änderungen bei der Optimierung der Sicherheit wurden für die folgenden Versionen portiert:
-
Windows Server 2008 R2
-
Windows Server 2008
Mit diesen Sicherheitsupdates werden die folgenden Änderungen vorgenommen:
-
Die uneingeschränkte Kerberos-Delegierung wird für neue Gesamtstruktur- und neue externe Vertrauensstellungen standardmäßig deaktiviert, nachdem Sie das Update vom 14. Mai und neuere Updates installiert haben.
-
Die uneingeschränkte Kerberos-Delegierung ist für (neue und bestehende ) Gesamtstruktur- und externe Vertrauensstellungen deaktiviert, nachdem Sie das Update vom 9. Juli 2019 und neuere Updates installiert haben.
-
Administratoren können die uneingeschränkte Kerberos-Delegierung mithilfe der Versionen ab Mai von NETDOM und des AD PowerShell-Moduls aktivieren.
Die Updates können Kompatibilitätskonflikte für Anwendungen verursachen, die aktuell die uneingeschränkte Delegierung in Gesamtstruktur- oder externen Vertrauensstellungen erfordern. Dies gilt insbesondere für externe Vertrauensstellungen, für die das Quarantäneflag (wird auch als SID-Filterung bezeichnet) standardmäßig aktiviert ist. Authentifizierungsanforderungen für Dienste, die die uneingeschränkte Delegierung in Kombination über die aufgeführten Vertrauensstellungstypen verwenden, schlagen fehl, wenn Sie neue Tickets anfordern.
Informationen zu den Veröffentlichungsterminen finden Sie unter Updatetermine.
Problemumgehung
Um die Sicherheit von Daten und Konten in einer Windows Server-Version sicherzustellen, die das Feature Erzwingen der Gesamtstrukturgrenzen für die vollständige Kerberos-Delegierung aufweist, können Sie die TGT-Delegierung nach der Installation der Updates vom März 2019 für eine eingehende Vertrauensstellung blockieren, indem Sie das netdom-Flag EnableTGTDelegation wie folgt auf No festlegen:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No
Die TGT-Delegierung ist für neue und bestehende Gesamtstruktur- und externe Vertrauensstellungen blockiert, nachdem Sie die Updates vom Mai und Juli 2019 installiert haben.
Um die Delegierung für Vertrauensstellungen erneut zu aktivieren und zur ursprünglichen unsicheren Konfiguration zurückzukehren, bis die eingeschränkte oder ressourcenbasierte Delegierung aktiviert werden kann, legen Sie das Flag EnableTGTDelegation auf Yes fest.
Die Befehlszeile für NETDOM zum Aktivieren der TGT-Delegierung sieht wie folgt aus:
netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes
Die NETDOM-Syntax zum Aktivieren der TGT-Delegierung können Sie sich im Prinzip wie folgt vorstellen:
netdom trust <domain that you are administering> /domain:<domain whose trust NETDOM is modifying> /EnableTgtDelegation:Yes
Die NETDOM-Syntax zum Aktivieren der TGT-Delegierung von fabrikam.com-Benutzern auf contoso.com-Servern sieht wie folgt aus:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes
Hinweise
-
Das Flag EnableTGTDelegation sollte in der vertrauenswürdigen Domäne (in diesem Fall fabrikam.com) für jede vertrauende Domäne (z. B. contoso.com) festgelegt werden. Nachdem das Flag festgelegt wurde, erlaubt die vertrauenswürdige Domäne keine Delegierung mehr von TGTs an die vertrauende Domäne.
-
Der sichere Zustand für „EnableTGTDelegation“ ist No.
-
Alle Anwendungen oder Dienste, die die uneingeschränkte Delegierung in Gesamtstrukturen verwenden, schlagen fehl, wenn „EnableTGTDelegation“ manuell oder programmgesteuert auf Yes festgelegt wird. „EnableTGTDelegation“ ist für neue und bestehende Gesamtstrukturen standardmäßig auf NO festgelegt, nachdem Sie die Updates vom Mai und Juli 2019 installiert haben. Weitere Informationen zum Erkennen dieses Fehlers finden Sie unter Suchen nach Diensten, die die uneingeschränkte Delegierung erfordern. Unter Updatetermine finden Sie eine Übersicht über die Termine für Änderungen, die sich darauf auswirken, wie diese Problemumgehung angewendet werden kann.
-
Weitere Informationen zu NETDOM finden Sie in der Dokumentation zu Netdom.exe.
-
Wenn Sie die TGT-Delegierung für eine Vertrauensstellung aktivieren müssen, wird empfohlen, zur Risikominderung Windows Defender Credential Guard auf Clientcomputern zu aktivieren. Dadurch wird jede uneingeschränkte Delegierung von einem Computer verhindert, auf dem Windows Defender Credential Guard aktiviert ist und ausgeführt wird.
-
Wenn Sie über eine Gesamtstruktur- oder externe Vertrauensstellung verfügen und eine davon als in Quarantäne befindlich konfiguriert ist, kann die TGT-Delegierung nicht aktiviert werden, da für die beiden Flags eine umgekehrte Semantik gilt. Das Quarantänebit stärkt die Sicherheitsbegrenzung zwischen beteiligten Domänen. Durch die Aktivierung der TGT-Delegierung werden die Sicherheitsbegrenzungen zwischen Domänen entfernt, indem die vertrauende Domäne Zugriff auf die Anmeldeinformationen von Benutzern aus der vertrauenswürdigen Domäne erhält. In beide Richtungen ist dies nicht möglich.
Fügen Sie das Flag quarantine:no zur NETDOM-Befehlszeilensyntax hinzu, wenn das Flag quarantine aktuell aktiviert ist.
-
Wenn Sie EnableTGTDelegation in Yes geändert haben, löschen Sie bei Bedarf Kerberos-Tickets für Ursprungs- und Zwischenaufrufe. Das zu löschende Ticket ist das Verweis-TGT des Clients für die relevante Vertrauensstellung. Hierbei können in Abhängigkeit von der Anzahl der Delegierungshops in einer Umgebung mehrere Geräte beteiligt sein.
Weitere Informationen hierzu finden Sie im folgenden Windows IT Pro Center-Artikel:
Schützen abgeleiteter Domänenanmeldeinformationen mit Windows Defender Credential Guard
Updatetermine
12. März 2019
Das Erzwingen der Gesamtstrukturgrenzen für die vollständige Kerberos-Delegierung wird als Update verfügbar sein, um dieses Feature unter allen unterstützten Windows Server-Versionen zu aktivieren, die am Anfang dieses Artikels im Abschnitt Gilt für aufgelistet sind. Es wird empfohlen, dieses Feature für eingehende Gesamtstruktur-Vertrauensstellungen festzulegen.
Das Update fügt den folgenden Systemen das Feature Erzwingen der Gesamtstrukturgrenzen für die vollständige Kerberos-Delegierung hinzu:
-
Windows Server 2008 R2
-
Windows Server 2008
14. Mai 2019
Ein Update wurde veröffentlicht, um eine neue sichere Standardkonfiguration zu neuen Gesamtstruktur- und externen Vertrauensstellungen hinzuzufügen. Wenn die Delegierung für Vertrauensstellungen erforderlich ist, sollte das Flag EnableTGTDelegation auf Yes festgelegt werden, bevor Sie das Update vom 9. Juli 2019 installieren. Wenn die Delegierung für Vertrauensstellungen nicht erforderlich ist, sollten Sie das Flag EnableTGTDelegation nicht festlegen. Das Flag EnableTGTDelegation wird ignoriert, bis das Update vom 9. Juli 2019 installiert wurde, um Administratoren bei Bedarf Zeit für die erneute Aktivierung der uneingeschränkten Kerberos-Delegierung zu geben.
Im Rahmen dieses Updates wird das Flag EnableTGTDelegation für alle neu erstellten Vertrauensstellungen standardmäßig auf No festgelegt. Dies entspricht dem Gegenteil des bisherigen Verhaltens. Wir empfehlen stattdessen, dass Administratoren die betroffenen Dienste für die Verwendung der ressourcenbasierten eingeschränkten Delegierung neu konfigurieren.
Weitere Informationen zum Erkennen von Kompatibilitätsproblemen finden Sie unter Suchen nach Diensten, die die uneingeschränkte Delegierung erfordern.
9. Juli 2019
Ein Update wurde veröffentlicht, das das neue Standardverhalten auf der eingehenden Seite von Gesamtstruktur- und externen Vertrauensstellungen erzwingt. Authentifizierungsanforderungen für Dienste, die die uneingeschränkte Delegierung über die aufgeführten Vertrauensstellungstypen verwenden, werden authentifiziert, jedoch ohne Delegierung. Der Dienst schlägt beim Versuch fehl, delegierte Vorgänge auszuführen.
Informationen zur Risikominderung finden Sie im Abschnitt „Problemumgehung“.
Suchen nach Diensten, die die uneingeschränkte Delegierung erfordern
Für die Suche nach Gesamtstrukturen, die eingehende Vertrauensstellungen aufweisen, welche die TGT-Delegierung erlauben, und für die Suche nach Sicherheitsprinzipalen, die die uneingeschränkte Delegierung erlauben, führen Sie die folgenden PowerShell-Skripts in einer Skriptdatei aus (z. B. Get-RiskyServiceAccountsByTrust.ps1 -Collect):
Hinweis
Sie können auch das Flag -ScanAll übergeben, um Vertrauensstellungen zu durchsuchen, die die TGT-Delegierung nicht erlauben.
[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
}
In der Ausgabe der PowerShell-Skripts werden Active Directory-Sicherheitsprinzipale in Domänen aufgelistet, die für eine eingehende Vertrauensstellung von der ausführenden Domäne konfiguriert sind, für die die uneingeschränkte Delegierung konfiguriert ist. Die Ausgabe sieht etwa wie im nachfolgenden Beispiel aus.
domain |
sAMAccountName |
objectClass |
partner.fabrikam.com |
dangerous |
user |
partner.fabrikam.com |
labsrv$ |
computer |
Erkennen der uneingeschränkten Delegierung mithilfe von Windows-Ereignissen
Wenn ein Kerberos-Ticket ausgestellt wird, protokolliert ein Active Directory-Domänencontroller die folgenden Sicherheitsereignisse. Die Ereignisse enthalten Informationen zur Zieldomäne. Mithilfe der Ereignisse können Sie feststellen, ob die uneingeschränkte Delegierung für eingehende Vertrauensstellungen verwendet wird.
Hinweis
Suchen Sie nach Ereignissen die einen TargetDomainName-Wert enthalten, der dem Namen der vertrauenswürdigen Domäne entspricht.
Ereignisprotokoll |
Ereignisquelle |
Ereigniskennung |
Details |
Sicherheit |
Microsoft-Windows-Security-Auditing |
4768 |
Ein Kerberos-TGT wurde ausgestellt. |
Sicherheit |
Microsoft-Windows-Security-Auditing |
4769 |
Ein Kerberos-Dienstticket wurde ausgestellt. |
Sicherheit |
Microsoft-Windows-Security-Auditing |
4770 |
Ein Kerberos-Dienstticket wurde erneuert. |
Problembehandlung bei Authentifizierungsfehlern
Wenn die uneingeschränkte Delegierung deaktiviert ist, können bei Anwendungen Kompatibilitätsprobleme mit diesen Änderungen auftreten, falls die Anwendungen die uneingeschränkte Delegierung erfordern. Für diese Anwendungen sollte die Verwendung der uneingeschränkten Delegierung oder der eingeschränkten Delegierung, die ressourcenbasiert ist, konfiguriert werden. Weitere Informationen finden Sie unter Eingeschränkte Kerberos-Delegierung (Übersicht).
Anwendungen, die die Roundtrip-Authentifizierung für Vertrauensstellungen erfordern, werden bei Verwendung der eingeschränkten Delegierung nicht unterstützt. Beispielsweise schlägt eine Delegierung fehl, wenn sich ein Benutzer in Gesamtstruktur A für eine Anwendung in Gesamtstruktur B authentifiziert und wenn die Anwendung in Gesamtstruktur B versucht, ein Ticket wieder zurück an Gesamtstruktur A zu delegieren.