Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


microsoft-windows:windows-server-2016:adds:change-password-for-krbtgt-account-in-active-directory

Смена пароля сервисной учетной записи krbtgt в Active Directory

Специальная сервисная учетная запись пользователя krbtgt в домене в Active Directory имеет RID 502 и создается в контейнере Users при развёртывании первого контроллера домена. Эта учетная запись отключена и состоит только в двух группах AD: Domain Users и Denied RODC Password Replication Group. Администраторам запрещено изменять имя этой учётной записи или включать её.

Хэш пароля учётной записи krbtgt не хранится на контроллерах домена RODC (Read-Only Domain Controller), у каждого RODC имеется собственный аккаунт вида krbtgt_*.

На каждом контроллере домена запущена служба KDC (Kerberos Distribution Center), которая обрабатывает все запросы на получение билетов Kerberos. Пароль учетной записи krbtgt используется для создания секретного ключа, с помощью которого выполняется шифрование билетов TGT (Ticket-Granting Ticket) на всех KDC в домене.


Вопрос безопасности

Захват хеша пароля krbtgt (например, с помощью утилиты mimikatz) позволяет злоумышленнику, минуя KDC, создать поддельный билет TGT - Golden Ticket, который, в свою очередь, позволяет аутентифицироваться от имени любой учётной записи на любом доменном сервисе, использующем аутентификацию Kerberos.

В качестве защиты от атаки Golden Ticket рекомендуется периодическая (раз в год и при увольнении любого администратора домена) смена пароля krbtgt, так как сброс пароля krbtgt делает недействительными ранее выпущенные билеты Golden Ticket.

Менять пароль нужно дважды (с задержкой, достаточной для выполнения репликации во всем домене), так как в домене хранится текущий и предыдущий пароль.

Информацию об учётной записи krbtgt и дате последней смены её пароля можно получить с помощью PowerShell:

Get-AdUser krbtgt -property created, passwordlastset, enabled


Первая смена пароля

Пароль пользователя krbtgt можно изменить через оснастку ADUC, как обычному пользователю.

Рекомендуется использовать стойкий к переборам сложный пароль, но, при этом есть информация, что указанный пароль не имеет значения, так как система автоматически создаёт надёжный пароль независимо от указанного пароля.

Через пару минут после первой смены пароля проверяем состояние репликации учётной записи krbtgt на каждый контроллер домена:

Get-ADDomainController -Filter * -Server $((Get-ADDomain).DNSRoot) | `
 Foreach-Object { Get-AdUser krbtgt -property passwordlastset -server $_ | `
 Select -Property Name,PasswordLastSet }

Следует убедиться в том, что на всех контроллерах домена дата последней смены пароля свежая, то есть репликация атрибутов учётной записи прошла успешно.

При смене пароля krbtgt в некоторых случаях при задержках репликации могут наблюдаться проблемы некоторых доменных служб, поэтому после смены пароля рекомендуется выполнить перезапуск службы KDC (Kerberos Key Distribution Center) на всех контроллерах домена:

Get-ADDomainController -Filter * -Server $((Get-ADDomain).DNSRoot) | `
 Foreach-Object { Write-Host $_.Name; Get-Service KDC -ComputerName $_ | `
 Restart-Service -Verbose  }

После этого проверяем статус службы KDC на всех контроллерах, чтобы убедиться, что она работает:

Get-ADDomainController -Filter * -Server $((Get-ADDomain).DNSRoot) | `
 Foreach-Object { Get-Service KDC -ComputerName $_ | Select Machinename,Name,Status }


Вторая смена пароля

Для выполнения второго сброса пароля учетной записи krbtgt требуется период ожидания в течение 10 часов после первого сброса.

Важно понимать, что если не выдержать между первой и второй сменой пароля указанный интервал времени, то у компьютеров, пользователей и служб, использующих аутентификацию Kerberos, могут начаться проблемы с аутентификацией.

10 часов - это значение по умолчанию для доменных политик Maximum lifetime for user ticket и Maximum lifetime for service ticket. В случае, если в домене эти политики менялись с бОльшую сторону, то минимальный период ожидания между сбросами должен быть больше настроенного в политиках значения.

Приведём простой пример запроса PowerShell к дефолтной групповой доменной политике «Default Domain Policy», чтобы выяснить значения для политик «Maximum lifetime for user ticket» (возвращаемое значение в часах) и «Maximum lifetime for service ticket» (возвращаемое значение в минутах). Следует иметь ввиду, что обозначенные параметры GPO могут быть изменены в домене не только в дефолтной политике, но и в других политиках и тогда подобный запрос следует делать для соответствующих политик.

# Default Domain Policy GUID : 31B2F340-016D-11D2-945F-00C04FB984F9

$domainName = (Get-ADDomain -ErrorAction Stop).DNSRoot
[xml]$gpo = Get-GPOReport -Guid '{31B2F340-016D-11D2-945F-00C04FB984F9}' `
 -ReportType Xml -ErrorAction Stop -Domain $domainName
(($gpo.gpo.Computer.ExtensionData | `
 Where-Object { $_.name -eq 'Security' }).Extension.ChildNodes | `
 Where-Object { $_.Name -eq 'MaxTicketAge' }).SettingNumber
(($gpo.gpo.Computer.ExtensionData | `
 Where-Object { $_.name -eq 'Security' }).Extension.ChildNodes | `
 Where-Object { $_.Name -eq 'MaxServiceAge' }).SettingNumber

Другой простой способ проверки того, на какой срок выдаются билеты TGT- выполнить команду klist tgt и посмотреть значения StartTime и EndTime для кешированного билета TGT текущего пользователя.

После второй смены пароля учетной записи krbtgt в Active Directory процедура может считаться законченной.



Проверено на следующих конфигурациях:

Версия ОС
Windows Server 2016 Standard EN (10.0.14393)

Автор первичной редакции:
Алексей Максимов
Время публикации: 16.03.2025 09:28

Обсуждение

Ваш комментарий:
 
microsoft-windows/windows-server-2016/adds/change-password-for-krbtgt-account-in-active-directory.txt · Последнее изменение: 16.03.2025 10:57 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki