Аннотация
Доверия лесов предоставляют способ для ресурсов в лесу Active Directory доверие удостоверения из другого леса. Это доверие может быть настроен в обоих направлениях. Доверенный лес является источником удостоверения пользователя. Доверяющего леса содержит ресурс, к которому пользователи проходить проверку подлинности. Доверенного леса могут проходить проверку подлинности пользователей в доверяющем лесу не позволяет выполнить обратное.
Неограниченное делегирование Kerberos — это механизм, в котором пользователь отправляет свои учетные данные для службы, чтобы включить службу для доступа к ресурсам от имени пользователя. Чтобы включить неограниченное делегирование Kerberos, учетной записи службы в Active Directory должен быть помечен как доверенный для делегирования. Это создает проблему, если пользователь и службы принадлежат различных лесов. Лес службы отвечает за разрешение делегирования. Делегирование учетных данных пользователей из леса пользователя включает в себя.
Позволяя одного леса для принятия решений по безопасности, который влияет на учетные записи другого леса нарушает границы безопасности между лесами. Злоумышленник, которому принадлежит доверяющего леса может запросить делегирования TGT для удостоверения из доверенного леса, предоставление доступа к ресурсам в доверенном лесу. Это не относится к Kerberos ограниченное делегирование (функция KCD).
Windows Server 2012 появилась Применение для границы леса полное делегирование Kerberos. Эта функция добавил политику для отключения неограниченного делегирования на основе уровнем доверия в доверенный домен. По умолчанию эта функция позволяет неограниченного делегирования и не является безопасной.
Обновления, которые обеспечивают Усиление защиты существуют для следующих версий Windows Server:
-
Windows Server 2019
-
Windows Server 2016
-
Windows Server 2012 R2
-
Windows Server 2012
Эта функция вместе с изменениями в защищенности были backported до следующей версии:
-
Windows Server 2008 R2
-
Windows Server 2008
Эти обновления безопасности внести следующие изменения:
-
Делегирование Kerberos неограниченного отключено по умолчанию в новый лес и новых внешних доверийпосле установки14 мая обновления и более поздних обновлений.
-
Неограниченное делегирование Kerberos отключен, так и внешних доверий лесов (новые и существующие) после установки 9 июля, 2019 г, обновление и последующего обновления.
-
Администраторы могут включить неограниченное делегирование Kerberos с помощью мая или более поздней версии модуля AD PowerShell и NETDOM.
Обновления может вызвать конфликты совместимости для приложений, которые в настоящее время требует неограниченного делегирования через леса или внешних доверий. Это особенно верно для внешнее доверие, для которого установлен флаг карантина (также известный как фильтрация SID) по умолчанию. В частности запросы на проверку подлинности для служб, которые используют неограниченного делегирования через доверие перечисленных типов произойдет ошибка при запросе новых билетов.
Даты выпуска обновления шкалы временисм.
Обходное решение
Для обеспечения безопасности данных и учетной записи в версии Windows Server, которая обладает возможностью применения для границы леса полное делегирование Kerberos , можно заблокировать TGT делегирования после установки обновлений 2019 марта через входящее доверие путем установки Netdom флаг EnableTGTDelegationне следующим образом:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No
TGT делегирования блокируется для новых и существующих леса и внешние доверия после установки мая и соответственно обновляет июля 2019 г.
Чтобы повторно включить делегирование через доверие и вернуться к исходной конфигурации небезопасных пока основе ресурсов или ограниченное делегирование может быть включено, установите флаг EnableTGTDelegationДа.
Из командной строки NETDOM для делегирования TGT выглядит следующим образом:
netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes
Концептуально можно представить NETDOM синтаксис для включения делегирования TGT следующим образом:
netdom trust <domain that you are administering> /domain:<domain whose trust NETDOM is modifying> /EnableTgtDelegation:Yes
Синтаксис для делегирования TGT fabrakam.com пользователей на серверах contoso.com NETDOM выглядит следующим образом:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes
Примечания.
-
Флаг EnableTGTDelegation должен быть установлен в доверенном домене (fabrikam.com, в данном случае) для каждого домена-доверителя (например, contoso.com). После установки флага доверенного домена не позволит TGTs делегировать для домена-доверителя.
-
Режим безопасности для EnableTGTDelegation — Нет.
-
Любое приложение или служба, которая опирается на неограниченное делегирование между лесами не сможет EnableTGTDelegation вручную или программно установлено значение Да. EnableTGTDelegation по умолчанию используется значение Нет для новых и существующих доверий по окончании установки обновлений мая 2019 и июля 2019 г. Дополнительные сведения о том, как определить этот сбой службы, которые полагаются на неограниченное делегированиесм. Временная шкала изменений, влияющих на применение этого метода обхода содержатся обновления шкалы .
-
Дополнительные сведения о программе NETDOM см. в документации Netdom.exe.
-
Если необходимо включить делегирование TGT на доверие, рекомендуется уменьшить этот риск, позволяя Защитник Windows защиты учетных данных на клиентских компьютерах. Это предотвращает все неограниченного делегирования с компьютера, имеющего защиты учетных данных Защитник Windows включен и запущен.
-
Если лес или внешнее доверие, и либо настраиваются как на карантин, делегирование TGT нельзя включить два флага имеют семантику противоположной. Бит карантина повышает границы безопасности между участвующими доменов. Включение делегирования TGT Стирает границы безопасности между доменами, предоставляя доступ доверяющего домена учетные данные пользователей из доверенного домена. Вы не может использовать оба подхода.
Если в данный момент установлен флаг карантина добавьте флаг карантина: нет синтаксис командной строки NETDOM.
-
Если вы изменили EnableTGTDelegationДа, удалите билеты Kerberos на исходные и промежуточных вызывающих объектов при необходимости. Соответствующие билет для удаления является ссылок клиента TGT через соответствующие доверие. Это может включать в себя более одного устройства, в зависимости от числа прыжков делегирования в определенной среде.
Дополнительные сведения об этой процедуре см. в следующей статье Windows IT Pro центр:
Защита учетных данных домена производных с условием учетных данных Защитник Windows
Шкала времени обновления
12 марта 2019 г.
Применение для границы леса будут доступны как обновление, чтобы включить эту функцию для всех поддерживаемых версий Windows Server, перечисленных в разделе относится к верхней части этой статьи полное делегирование проверки подлинности Kerberos. Корпорация Майкрософт рекомендует установить функцию на входящие доверия лесов.
Обновление будет добавить возможность принудительного применения для границы леса полное делегирование Kerberos в следующих систем:
-
Windows Server 2008 R2
-
Windows Server 2008
14 мая 2019 г.
Дата выпуска: Добавление нового безопасного по умолчанию конфигурации для нового леса и внешних доверий. Если требуется делегирование через доверие, флаг EnableTGTDelegation должен быть установлен Да перед установкой обновления 9 июля 2019 г. Если не требуется делегирование через доверие, не следует устанавливать флаг EnableTGTDelegation . Флаг EnableTGTDelegation будет игнорироваться, пока не будет установлено обновление 9 июля 2019 г. Чтобы дать администраторам время для повторного включения неограниченное делегирование Kerberos, при необходимости.
В составе этого обновления флаг EnableTGTDelegation будет присвоено Нет по умолчанию для вновь созданного доверительные отношения. Это является противоположностью предыдущего поведения. Мы рекомендуем, что администраторы вместо перенастройки уязвимых служб для использования ограниченного делегирования на основе ресурсов.
Дополнительные сведения о том, как обнаружить проблемы совместимости Поиск служб, которые используют неограниченного делегированиясм.
9 июля 2019 г.
Обновление было выпущено, применяет новое поведение по умолчанию со стороны входящих и внешние доверия леса. Запросы проверки подлинности для служб, которые используют неограниченное делегирование по типам списка доверия будут проходить проверку подлинности, но без делегирования. Служба произойдет сбой при попытке выполнения делегированных операций.
Для устранения рисков в разделе «временное решение».
Поиск служб, использующих неограниченного делегирования
Сканирование для лесов, в которых работают вх. отношения доверия, позволяющие делегирования TGT и найти все параметры безопасности на участников, которые позволяют неограниченного делегирования выполняются следующие PowerShell сценарии в сценарии файла (например, Get-RiskyServiceAccountsByTrust.ps1 - Собрать):
Примечание
Можно также передать флаг - ScanAll для поиска через доверие, не позволяющие TGT делегирования.
[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 список участников безопасности Active Directory в доменах, настроенных для входящее доверие из домена выполнение, право на неограниченное делегирование настроено. Вывод будет иметь следующий вид.
домен |
sAMAccountName |
objectClass |
partner.fabrikam.com |
опасный |
пользователь |
partner.fabrikam.com |
labsrv$ |
компьютер |
Обнаружение неограниченного делегирования через события Windows
Если выданный билет Kerberos, контроллер домена Active Directory регистрирует следующие события безопасности. События содержат сведения о конечном домене. События можно использовать для определения, используется ли неограниченного делегирования через вх. отношения доверия.
Примечание
Проверьте наличие событий, которые содержат TargetDomainName значение, соответствующее имени доверенного домена.
Журнал событий |
Источник событий |
ИД события |
Подробные сведения |
Безопасность |
Microsoft-Windows--аудит безопасности |
4768 |
Kerberos TGT был выдан. |
Безопасность |
Microsoft-Windows--аудит безопасности |
4769 |
Выдан билет службы Kerberos. |
Безопасность |
Microsoft-Windows--аудит безопасности |
4770 |
Билет службы Kerberos был обновлен. |
Устранение ошибок проверки
При отключении неограниченного делегирования приложений могут возникать проблемы совместимости с этими изменениями, если приложения основаны на неограниченное делегирование. Эти приложения должны быть настроены для использования ограниченного делегирования или ограниченное делегирование, на базе ресурсов. FДополнительные данные или, see .Обзор ограниченного делегирования Kerberos
Приложения, зависящие от приема-передачи проверки подлинности через доверие с помощью ограниченного делегирования не поддерживаются. Например делегирование завершается неудачей, если выполняет проверку подлинности пользователя в лесу A к приложению в лесу Б, и приложение в лесу Б пытается делегировать билет обратно в лесу а.