Как и когда ktpass устанавливает соль?

Пароль пользователя и соль определяют ключи Kerberos, сгенерированные ktpass, Я заметил что ktpass иногда меняет соль пользователя, а иногда нет. Я смог обнаружить соль, захватив след пакета kinit, Кажется, что соль создается на основе области Kerberos и userPrincipalName. Однако не все так просто. Если UPN позже обновляется вручную, соль не обновляется. (Я подозреваю, что ли /mapop указанная опция может сыграть свою роль.)

  1. При каких обстоятельствах ktpass установить соль пользователя?
  2. Как определяется соль?
  3. Соль хранится в AD или только в KDC?
  4. Есть ли простой способ узнать текущее значение соли?
  5. Есть ли способ вручную изменить соль?

2 ответа

Решение
  1. В Microsoft Windows Active Directory, которая использовала Kerberos v5 с момента ее появления в Windows 2000, команда ktpass устанавливает соль автоматически. Соль всегда используется в Kerberos v5. В Kerberos v4 соль никогда не использовалась.
  2. В качестве соли используется полное имя участника (включая область), например accountname/somedomain.com@SOMEDOMAIN.COM, которое затем соединяется с зашифрованным хешем пароля, чтобы обеспечить абсолютную уникальность результата в лесу AD.
  3. Как уже упоминалось, соль является полным основным именем (включая царство). Он хранится в файле ntds.dit, который является базой данных Active Directory. KDC запускается в процессе, порожденном kdcsvc.dll - и это относится к значениям, хранящимся в ntds.dit. Таким образом, хотя базы данных KDC и AD не являются одними и теми же в среде выполнения, они, так сказать, "объединены в одно целое". Я думаю, что когда контроллер домена отключается, все важные элементы в KDC сохраняются внутри ntds.dit. Microsoft не предоставляет точных сведений о том, как это делается. Я много смотрел, и мои частичные знания получены из тщательного изучения и выводов, сделанных из кусочков статей, найденных в Интернете. Обратите внимание, что база данных ntds.dit также является базой данных LDAP. Это также база данных DNS, если DNS интегрирован в AD. Все эти протоколы, работающие вместе, плюс еще несколько, образуют "Active Directory".
  4. Откройте Active Directory - пользователи и компьютеры, перейдите на вкладку "Учетная запись". "Имя входа пользователя" - это самый простой способ "прочитать" соль. Вы не видите имя области, соединенное с ним прямо здесь, но оно подразумевается. Имя участника-службы, если оно также определено, перечисляется простым способом, как вы ищете на вкладке "Редактор атрибутов" (ищите servicePrincipalName). Убедитесь, что вы выбрали Вид> Расширенные функции, чтобы открыть эту вкладку. Соответствующее имя участника-пользователя также будет указано внизу в этом же разделе, что выглядит примерно так: accountname/somedomain.com@SOMEDOMAIN.COM.
  5. Когда вы меняете имя учетной записи на вкладке "Учетная запись AD", вы только что изменили соль. Обратите внимание, что если есть какая-либо таблица ключей, связанная с этой учетной записью AD, вы просто аннулируете ее, поскольку ее секретный ключ внутри представляет собой хэш пароля и соль. Когда соль или пароль изменятся, ключи больше не будут совпадать между учетной записью AD и учетной записью в таблице ключей. Вы должны будете повторно сгенерировать это в этой точке.

Имеет смысл? Это действительно объяснение поля. Чтобы узнать больше о Kerberos применительно к AD, начните здесь: Руководство по выживанию Kerberos

Существует немного более простой способ прочитать текущее значение соли (это не совсем просто, но, по крайней мере, не требуется трассировка пакетов):

  1. Установите MITKerberos для Windows
  2. Откройте PowerShell и выполните:
            $env:KRB5_TRACE="kinit-trace.log"
    'C:\Program Files\MIT\Kerberos\bin\kinit.exe' -fV UPN-or-USER@REALM
    Get-Content $env:KRB5_TRACE | Select-String "salt"
    rm $env:KRB5_TRACE
    
    Я предполагаю, что MITKerberos установлен по умолчанию. Если нет, вам нужно настроить имя пути во второй команде.

Первоначально это решение было предложено здесь, в Stackoverflow для Linux, пользователем Spezieh.

Другие вопросы по тегам