0

A user's password and salt determine the Kerberos keys generated by ktpass. I have noticed that ktpass sometimes changes the user's salt, but other times it does not. I was able to discover the salt by capturing a packet trace of a kinit. The salt appears to be generated based on the Kerberos realm and the userPrincipalName. However, it's not this simple. If the UPN is later updated manually, the salt is not updated. (I suspect that whether the /mapop option is specified may play a role.)

  1. In what circumstances does ktpass set the user's salt?
  2. How is the salt determined?
  3. Is the salt stored in AD, or just in the KDCs?
  4. Is there a straightforward way to read the current value of the salt?
  5. Is there a way to manually change the salt?
4

1 回答 1

2
  1. 在自 Windows 2000 开始使用 Kerberos v5 的 Microsoft Windows Active Directory 中,ktpass 命令自动设置 salt。盐总是在 Kerberos v5 中使用。在 Kerberos v4 中,从未使用过盐。
  2. 完整的主体名称(包括领域)用作盐,例如 accountname/somedomain.com@SOMEDOMAIN.COM,然后将其与密码的加密哈希配对,以绝对确保结果在整个 AD 森林中是唯一的。
  3. 如前所述,salt 是完整的主体名称(包括领域)。它存储在 ntds.dit 文件中,该文件是 Active Directory 数据库。KDC 在由 kdcsvc.dll 生成的进程中启动 - 它与存储在 ntds.dit 中的值相关。因此,虽然 KDC 和 AD 数据库在运行时环境中不是一回事,但可以说,它们是“合二为一”的。我认为当域控制器关闭时,KDC 中的所有重要元素都保留在 ntds.dit 中。Microsoft 没有提供有关如何完成此操作的确切详细信息。我进行了广泛的研究,我的部分知识来自仔细研究和从网上找到的零碎文章中得出的推论。请注意,ntds.dit 数据库也是 LDAP 数据库。如果 DNS 是 AD 集成的,它也是 DNS 数据库。
  4. 打开 Active Directory 用户和计算机,转到“帐户”选项卡。“用户登录名”是“读取”salt 最直接的方式。您看不到与其连接的领域名称,但它是隐含的。SPN(如果也已定义)会以简单的方式列出,就像您在“属性编辑器”选项卡下查找的一样(查找 servicePrincipalName)。确保您选择了视图 > 高级功能以显示此选项卡。相应的 UPN 也将在同一部分的下方列出,其方式类似于:accountname/somedomain.com@SOMEDOMAIN.COM。
  5. 当您在 AD 帐户选项卡上更改帐户名称时,您刚刚更改了 salt。请注意,如果有一个与此 AD 帐户相关联的密钥表,您将只是将其无效,因为其内部密钥是密码哈希和盐的结合。当 salt 或密码更改时,AD 帐户和 keytab 内的密钥将不再匹配。此时您将不得不重新生成它。

说得通?这真的是一个领域的解释。要了解有关与 AD 相关的 Kerberos 的更多信息,请从此处开始: Kerberos 生存指南

于 2016-11-23T12:56:16.833 回答